You are here

public function ItemListController::listItems in Feeds 8.3

Lists the feed items belonging to a feed.

File

src/Controller/ItemListController.php, line 61

Class

ItemListController
Lists the feed items belonging to a feed.

Namespace

Drupal\feeds\Controller

Code

public function listItems(FeedInterface $feeds_feed, Request $request) {
  $processor = $feeds_feed
    ->getType()
    ->getProcessor();
  $header = [
    'id' => $this
      ->t('ID'),
    'title' => $this
      ->t('Label'),
    'imported' => $this
      ->t('Imported'),
    'guid' => [
      'data' => $this
        ->t('GUID'),
      'class' => [
        RESPONSIVE_PRIORITY_LOW,
      ],
    ],
    'url' => [
      'data' => $this
        ->t('URL'),
      'class' => [
        RESPONSIVE_PRIORITY_LOW,
      ],
    ],
  ];
  $build = [];
  $build['table'] = [
    '#type' => 'table',
    '#header' => $header,
    '#rows' => [],
    '#empty' => $this
      ->t('There are no items yet.'),
  ];

  // @todo Allow processors to create their own entity listings.
  if (!$processor instanceof EntityProcessorInterface) {
    return $build;
  }
  $entity_ids = $this
    ->entityTypeManager()
    ->getStorage($processor
    ->entityType())
    ->getQuery()
    ->condition('feeds_item.target_id', $feeds_feed
    ->id())
    ->pager(50)
    ->sort('feeds_item.imported', 'DESC')
    ->execute();
  $storage = $this
    ->entityTypeManager()
    ->getStorage($processor
    ->entityType());
  foreach ($storage
    ->loadMultiple($entity_ids) as $entity) {
    $ago = $this->dateFormatter
      ->formatInterval($this->time
      ->getRequestTime() - $entity
      ->get('feeds_item')->imported);
    $row = [];

    // Entity ID.
    $row[] = $entity
      ->id();

    // Entity link.
    try {
      $row[] = [
        'data' => $entity
          ->toLink(Unicode::truncate($entity
          ->label(), 75, TRUE, TRUE)),
        'title' => $entity
          ->label(),
      ];
    } catch (UndefinedLinkTemplateException $e) {
      $row[] = $entity
        ->label();
    }

    // Imported ago.
    $row[] = $this
      ->t('@time ago', [
      '@time' => $ago,
    ]);

    // Item GUID.
    $row[] = [
      'data' => Html::escape(Unicode::truncate($entity
        ->get('feeds_item')->guid, 30, FALSE, TRUE)),
      'title' => $entity
        ->get('feeds_item')->guid,
    ];

    // Item URL.
    $row[] = [
      'data' => Html::escape(Unicode::truncate($entity
        ->get('feeds_item')->url, 30, FALSE, TRUE)),
      'title' => $entity
        ->get('feeds_item')->url,
    ];
    $build['table']['#rows'][] = $row;
  }
  $build['pager'] = [
    '#type' => 'pager',
  ];
  $build['#title'] = $this
    ->t('%title items', [
    '%title' => $feeds_feed
      ->label(),
  ]);
  return $build;
}