Mercurial > hg > isophonics-drupal-site
diff core/modules/node/src/NodeListBuilder.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 1fec387a4317 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/node/src/NodeListBuilder.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,144 @@ +<?php + +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 = [ + 'title' => $this->t('Title'), + 'type' => [ + 'data' => $this->t('Content type'), + 'class' => [RESPONSIVE_PRIORITY_MEDIUM], + ], + 'author' => [ + 'data' => $this->t('Author'), + 'class' => [RESPONSIVE_PRIORITY_LOW], + ], + 'status' => $this->t('Status'), + 'changed' => [ + 'data' => $this->t('Updated'), + 'class' => [RESPONSIVE_PRIORITY_LOW], + ], + ]; + if (\Drupal::languageManager()->isMultilingual()) { + $header['language_name'] = [ + 'data' => $this->t('Language'), + 'class' => [RESPONSIVE_PRIORITY_LOW], + ]; + } + return $header + parent::buildHeader(); + } + + /** + * {@inheritdoc} + */ + public function buildRow(EntityInterface $entity) { + /** @var \Drupal\node\NodeInterface $entity */ + $mark = [ + '#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]) ? ['language' => $languages[$langcode]] : []); + $uri->setOptions($options); + $row['title']['data'] = [ + '#type' => 'link', + '#title' => $entity->label(), + '#suffix' => ' ' . \Drupal::service('renderer')->render($mark), + '#url' => $uri, + ]; + $row['type'] = node_get_type_label($entity); + $row['author']['data'] = [ + '#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; + } + +}