class AggregatorController

Same name in other branches
  1. 8.9.x core/modules/aggregator/src/Controller/AggregatorController.php \Drupal\aggregator\Controller\AggregatorController

Returns responses for aggregator module routes.

Hierarchy

Expanded class hierarchy of AggregatorController

File

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

Namespace

Drupal\aggregator\Controller
View source
class AggregatorController extends ControllerBase {
    
    /**
     * The date formatter service.
     *
     * @var \Drupal\Core\Datetime\DateFormatterInterface
     */
    protected $dateFormatter;
    
    /**
     * Constructs a \Drupal\aggregator\Controller\AggregatorController object.
     *
     * @param \Drupal\Core\Datetime\DateFormatterInterface $date_formatter
     *   The date formatter service.
     */
    public function __construct(DateFormatterInterface $date_formatter) {
        $this->dateFormatter = $date_formatter;
    }
    
    /**
     * {@inheritdoc}
     */
    public static function create(ContainerInterface $container) {
        return new static($container->get('date.formatter'));
    }
    
    /**
     * Presents the aggregator feed creation form.
     *
     * @return array
     *   A form array as expected by
     *   \Drupal\Core\Render\RendererInterface::render().
     */
    public function feedAdd() {
        $feed = $this->entityTypeManager()
            ->getStorage('aggregator_feed')
            ->create();
        return $this->entityFormBuilder()
            ->getForm($feed);
    }
    
    /**
     * Builds a listing of aggregator feed items.
     *
     * @param \Drupal\aggregator\ItemInterface[] $items
     *   The items to be listed.
     * @param array|string $feed_source
     *   The feed source URL.
     *
     * @return array
     *   The rendered list of items for the feed.
     */
    protected function buildPageList(array $items, $feed_source = '') {
        // Assemble output.
        $build = [
            '#type' => 'container',
            '#attributes' => [
                'class' => [
                    'aggregator-wrapper',
                ],
            ],
        ];
        $build['feed_source'] = is_array($feed_source) ? $feed_source : [
            '#markup' => $feed_source,
        ];
        if ($items) {
            $build['items'] = $this->entityTypeManager()
                ->getViewBuilder('aggregator_item')
                ->viewMultiple($items, 'default');
        }
        $build['pager'] = [
            '#type' => 'pager',
        ];
        return $build;
    }
    
    /**
     * Refreshes a feed, then redirects to the overview page.
     *
     * @param \Drupal\aggregator\FeedInterface $aggregator_feed
     *   An object describing the feed to be refreshed.
     *
     * @return \Symfony\Component\HttpFoundation\RedirectResponse
     *   A redirection to the admin overview page.
     *
     * @throws \Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException
     *   If the query token is missing or invalid.
     */
    public function feedRefresh(FeedInterface $aggregator_feed) {
        $message = $aggregator_feed->refreshItems() ? $this->t('There is new syndicated content from %site.', [
            '%site' => $aggregator_feed->label(),
        ]) : $this->t('There is no new syndicated content from %site.', [
            '%site' => $aggregator_feed->label(),
        ]);
        $this->messenger()
            ->addStatus($message);
        return $this->redirect('aggregator.admin_overview');
    }
    
    /**
     * Displays the aggregator administration page.
     *
     * @return array
     *   A render array as expected by
     *   \Drupal\Core\Render\RendererInterface::render().
     */
    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;
    }
    
    /**
     * Displays the most recent items gathered from any feed.
     *
     * @return string
     *   The rendered list of items for the feed.
     */
    public function pageLast() {
        $items = $this->entityTypeManager()
            ->getStorage('aggregator_item')
            ->loadAll(20);
        $build = $this->buildPageList($items);
        $build['#attached']['feed'][] = [
            'aggregator/rss',
            $this->config('system.site')
                ->get('name') . ' ' . $this->t('aggregator'),
        ];
        $build['#cache']['tags'] = $this->entityTypeManager()
            ->getDefinition('aggregator_item')
            ->getListCacheTags();
        return $build;
    }
    
    /**
     * Route title callback.
     *
     * @param \Drupal\aggregator\FeedInterface $aggregator_feed
     *   The aggregator feed.
     *
     * @return array
     *   The feed label as a render array.
     */
    public function feedTitle(FeedInterface $aggregator_feed) {
        return [
            '#markup' => $aggregator_feed->label(),
            '#allowed_tags' => Xss::getHtmlTagList(),
        ];
    }

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title Overrides
AggregatorController::$dateFormatter protected property The date formatter service.
AggregatorController::adminOverview public function Displays the aggregator administration page.
AggregatorController::buildPageList protected function Builds a listing of aggregator feed items.
AggregatorController::create public static function Instantiates a new instance of this class. Overrides ControllerBase::create
AggregatorController::feedAdd public function Presents the aggregator feed creation form.
AggregatorController::feedRefresh public function Refreshes a feed, then redirects to the overview page.
AggregatorController::feedTitle public function Route title callback.
AggregatorController::pageLast public function Displays the most recent items gathered from any feed.
AggregatorController::__construct public function Constructs a \Drupal\aggregator\Controller\AggregatorController object.
ControllerBase::$configFactory protected property The configuration factory.
ControllerBase::$currentUser protected property The current user service. 3
ControllerBase::$entityFormBuilder protected property The entity form builder.
ControllerBase::$entityTypeManager protected property The entity type manager.
ControllerBase::$formBuilder protected property The form builder. 1
ControllerBase::$keyValue protected property The key-value storage. 1
ControllerBase::$languageManager protected property The language manager. 1
ControllerBase::$moduleHandler protected property The module handler. 1
ControllerBase::$stateService protected property The state service.
ControllerBase::cache protected function Returns the requested cache bin.
ControllerBase::config protected function Retrieves a configuration object.
ControllerBase::container private function Returns the service container.
ControllerBase::currentUser protected function Returns the current user. 3
ControllerBase::entityFormBuilder protected function Retrieves the entity form builder.
ControllerBase::entityTypeManager protected function Retrieves the entity type manager.
ControllerBase::formBuilder protected function Returns the form builder service. 1
ControllerBase::keyValue protected function Returns a key/value storage collection. 1
ControllerBase::languageManager protected function Returns the language manager service. 1
ControllerBase::moduleHandler protected function Returns the module handler. 1
ControllerBase::redirect protected function Returns a redirect response object for the specified route.
ControllerBase::state protected function Returns the state storage service.
LoggerChannelTrait::$loggerFactory protected property The logger channel factory service.
LoggerChannelTrait::getLogger protected function Gets the logger for a specific channel.
LoggerChannelTrait::setLoggerFactory public function Injects the logger channel factory.
MessengerTrait::$messenger protected property The messenger. 17
MessengerTrait::messenger public function Gets the messenger. 17
MessengerTrait::setMessenger public function Sets the messenger.
RedirectDestinationTrait::$redirectDestination protected property The redirect destination service. 1
RedirectDestinationTrait::getDestinationArray protected function Prepares a &#039;destination&#039; URL query parameter for use with \Drupal\Core\Url.
RedirectDestinationTrait::getRedirectDestination protected function Returns the redirect destination service.
RedirectDestinationTrait::setRedirectDestination public function Sets the redirect destination service.
StringTranslationTrait::$stringTranslation protected property The string translation service. 3
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.