You are here

public function AggregatorController::adminOverview in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/aggregator/src/Controller/AggregatorController.php \Drupal\aggregator\Controller\AggregatorController::adminOverview()

Displays the aggregator administration page.

Return value

array A render array as expected by \Drupal\Core\Render\RendererInterface::render().

1 string reference to 'AggregatorController::adminOverview'
aggregator.routing.yml in core/modules/aggregator/aggregator.routing.yml
core/modules/aggregator/aggregator.routing.yml

File

core/modules/aggregator/src/Controller/AggregatorController.php, line 108

Class

AggregatorController
Returns responses for aggregator module routes.

Namespace

Drupal\aggregator\Controller

Code

public function adminOverview() {
  $entity_type_manager = $this
    ->entityTypeManager();
  $feeds = $entity_type_manager
    ->getStorage('aggregator_feed')
    ->loadMultiple();
  $header = [
    $this
      ->t('Title'),
    $this
      ->t('Items'),
    $this
      ->t('Last update'),
    $this
      ->t('Next update'),
    $this
      ->t('Operations'),
  ];
  $rows = [];

  /** @var \Drupal\aggregator\FeedInterface[] $feeds */
  foreach ($feeds as $feed) {
    $row = [];
    $row[] = $feed
      ->toLink()
      ->toString();
    $row[] = $this
      ->formatPlural($entity_type_manager
      ->getStorage('aggregator_item')
      ->getItemCount($feed), '1 item', '@count items');
    $last_checked = $feed
      ->getLastCheckedTime();
    $refresh_rate = $feed
      ->getRefreshRate();
    $row[] = $last_checked ? $this
      ->t('@time ago', [
      '@time' => $this->dateFormatter
        ->formatInterval(REQUEST_TIME - $last_checked),
    ]) : $this
      ->t('never');
    if (!$last_checked && $refresh_rate) {
      $next_update = $this
        ->t('imminently');
    }
    elseif ($last_checked && $refresh_rate) {
      $next_update = $this
        ->t('%time left', [
        '%time' => $this->dateFormatter
          ->formatInterval($last_checked + $refresh_rate - REQUEST_TIME),
      ]);
    }
    else {
      $next_update = $this
        ->t('never');
    }
    $row[] = $next_update;
    $links['edit'] = [
      'title' => $this
        ->t('Edit'),
      'url' => Url::fromRoute('entity.aggregator_feed.edit_form', [
        'aggregator_feed' => $feed
          ->id(),
      ]),
    ];
    $links['delete'] = [
      'title' => $this
        ->t('Delete'),
      'url' => Url::fromRoute('entity.aggregator_feed.delete_form', [
        'aggregator_feed' => $feed
          ->id(),
      ]),
    ];
    $links['delete_items'] = [
      'title' => $this
        ->t('Delete items'),
      'url' => Url::fromRoute('aggregator.feed_items_delete', [
        'aggregator_feed' => $feed
          ->id(),
      ]),
    ];
    $links['update'] = [
      'title' => $this
        ->t('Update items'),
      'url' => Url::fromRoute('aggregator.feed_refresh', [
        'aggregator_feed' => $feed
          ->id(),
      ]),
    ];
    $row[] = [
      'data' => [
        '#type' => 'operations',
        '#links' => $links,
      ],
    ];
    $rows[] = $row;
  }
  $build['feeds'] = [
    '#prefix' => '<h3>' . $this
      ->t('Feed overview') . '</h3>',
    '#type' => 'table',
    '#header' => $header,
    '#rows' => $rows,
    '#empty' => $this
      ->t('No feeds available. <a href=":link">Add feed</a>.', [
      ':link' => Url::fromRoute('aggregator.feed_add')
        ->toString(),
    ]),
  ];
  return $build;
}