Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 5 |
CRAP | |
0.00% |
0 / 71 |
NodeListBuilder | |
0.00% |
0 / 1 |
|
0.00% |
0 / 5 |
132 | |
0.00% |
0 / 71 |
__construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
|||
createInstance | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 7 |
|||
buildHeader | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 24 |
|||
buildRow | |
0.00% |
0 / 1 |
30 | |
0.00% |
0 / 29 |
|||
getDefaultOperations | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 7 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\node\NodeListBuilder. | |
*/ | |
namespace Drupal\node; | |
use Drupal\Core\Datetime\DateFormatterInterface; | |
use Drupal\Core\Entity\EntityInterface; | |
use Drupal\Core\Entity\EntityListBuilder; | |
use Drupal\Core\Entity\EntityStorageInterface; | |
use Drupal\Core\Entity\EntityTypeInterface; | |
use Drupal\Core\Language\LanguageInterface; | |
use Drupal\Core\Routing\RedirectDestinationInterface; | |
use Symfony\Component\DependencyInjection\ContainerInterface; | |
/** | |
* Defines a class to build a listing of node entities. | |
* | |
* @see \Drupal\node\Entity\Node | |
*/ | |
class NodeListBuilder extends EntityListBuilder { | |
/** | |
* The date formatter service. | |
* | |
* @var \Drupal\Core\Datetime\DateFormatterInterface | |
*/ | |
protected $dateFormatter; | |
/** | |
* The redirect destination service. | |
* | |
* @var \Drupal\Core\Routing\RedirectDestinationInterface | |
*/ | |
protected $redirectDestination; | |
/** | |
* Constructs a new NodeListBuilder object. | |
* | |
* @param \Drupal\Core\Entity\EntityTypeInterface $entity_type | |
* The entity type definition. | |
* @param \Drupal\Core\Entity\EntityStorageInterface $storage | |
* The entity storage class. | |
* @param \Drupal\Core\Datetime\DateFormatterInterface $date_formatter | |
* The date formatter service. | |
* @param \Drupal\Core\Routing\RedirectDestinationInterface $redirect_destination | |
* The redirect destination service. | |
*/ | |
public function __construct(EntityTypeInterface $entity_type, EntityStorageInterface $storage, DateFormatterInterface $date_formatter, RedirectDestinationInterface $redirect_destination) { | |
parent::__construct($entity_type, $storage); | |
$this->dateFormatter = $date_formatter; | |
$this->redirectDestination = $redirect_destination; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) { | |
return new static( | |
$entity_type, | |
$container->get('entity.manager')->getStorage($entity_type->id()), | |
$container->get('date.formatter'), | |
$container->get('redirect.destination') | |
); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function buildHeader() { | |
// Enable language column and filter if multiple languages are added. | |
$header = array( | |
'title' => $this->t('Title'), | |
'type' => array( | |
'data' => $this->t('Content type'), | |
'class' => array(RESPONSIVE_PRIORITY_MEDIUM), | |
), | |
'author' => array( | |
'data' => $this->t('Author'), | |
'class' => array(RESPONSIVE_PRIORITY_LOW), | |
), | |
'status' => $this->t('Status'), | |
'changed' => array( | |
'data' => $this->t('Updated'), | |
'class' => array(RESPONSIVE_PRIORITY_LOW), | |
), | |
); | |
if (\Drupal::languageManager()->isMultilingual()) { | |
$header['language_name'] = array( | |
'data' => $this->t('Language'), | |
'class' => array(RESPONSIVE_PRIORITY_LOW), | |
); | |
} | |
return $header + parent::buildHeader(); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function buildRow(EntityInterface $entity) { | |
/** @var \Drupal\node\NodeInterface $entity */ | |
$mark = array( | |
'#theme' => 'mark', | |
'#mark_type' => node_mark($entity->id(), $entity->getChangedTime()), | |
); | |
$langcode = $entity->language()->getId(); | |
$uri = $entity->urlInfo(); | |
$options = $uri->getOptions(); | |
$options += ($langcode != LanguageInterface::LANGCODE_NOT_SPECIFIED && isset($languages[$langcode]) ? array('language' => $languages[$langcode]) : array()); | |
$uri->setOptions($options); | |
$row['title']['data'] = array( | |
'#type' => 'link', | |
'#title' => $entity->label(), | |
'#suffix' => ' ' . drupal_render($mark), | |
'#url' => $uri, | |
); | |
$row['type'] = node_get_type_label($entity); | |
$row['author']['data'] = array( | |
'#theme' => 'username', | |
'#account' => $entity->getOwner(), | |
); | |
$row['status'] = $entity->isPublished() ? $this->t('published') : $this->t('not published'); | |
$row['changed'] = $this->dateFormatter->format($entity->getChangedTime(), 'short'); | |
$language_manager = \Drupal::languageManager(); | |
if ($language_manager->isMultilingual()) { | |
$row['language_name'] = $language_manager->getLanguageName($langcode); | |
} | |
$row['operations']['data'] = $this->buildOperations($entity); | |
return $row + parent::buildRow($entity); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
protected function getDefaultOperations(EntityInterface $entity) { | |
$operations = parent::getDefaultOperations($entity); | |
$destination = $this->redirectDestination->getAsArray(); | |
foreach ($operations as $key => $operation) { | |
$operations[$key]['query'] = $destination; | |
} | |
return $operations; | |
} | |
} |