Version 1
[yaffs-website] / web / core / modules / node / src / NodeListBuilder.php
diff --git a/web/core/modules/node/src/NodeListBuilder.php b/web/core/modules/node/src/NodeListBuilder.php
new file mode 100644 (file)
index 0000000..6266649
--- /dev/null
@@ -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_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;
+  }
+
+}