entityManager()->getStorage('aggregator_feed') ->create(array( 'refresh' => 3600, )); return $this->entityFormBuilder()->getForm($feed); } /** * Displays all the items captured from the particular feed. * * @param \Drupal\aggregator\FeedInterface $aggregator_feed * The feed for which to display all items. * * @return array * The rendered list of items for the feed. */ public function viewFeed(FeedInterface $aggregator_feed) { $entity_manager = $this->entityManager(); $feed_source = $entity_manager->getViewBuilder('aggregator_feed') ->view($aggregator_feed, 'default'); // Load aggregator feed item for the particular feed id. $items = $entity_manager->getStorage('aggregator_item')->loadByFeed($aggregator_feed->id(), 20); // Print the feed items. $build = $this->buildPageList($items, $feed_source); return $build; } /** * 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 = array( '#type' => 'container', '#attributes' => array('class' => array('aggregator-wrapper')), ); $build['feed_source'] = is_array($feed_source) ? $feed_source : array('#markup' => $feed_source); if ($items) { $build['items'] = $this->entityManager()->getViewBuilder('aggregator_item') ->viewMultiple($items, 'default'); $build['pager'] = array('#theme' => '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.', array('%site' => $aggregator_feed->label())) : $this->t('There is no new syndicated content from %site.', array('%site' => $aggregator_feed->label())); drupal_set_message($message); return $this->redirect('aggregator.admin_overview'); } /** * Displays the aggregator administration page. * * @return array * A render array as expected by drupal_render(). */ public function adminOverview() { $entity_manager = $this->entityManager(); $feeds = $entity_manager->getStorage('aggregator_feed') ->loadMultiple(); $header = array($this->t('Title'), $this->t('Items'), $this->t('Last update'), $this->t('Next update'), $this->t('Operations')); $rows = array(); foreach ($feeds as $feed) { $row = array(); $row[] = l($feed->label(), "aggregator/sources/" . $feed->id()); $row[] = format_plural($entity_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', array('@time' => format_interval(REQUEST_TIME - $last_checked))) : $this->t('never')); $row[] = ($last_checked && $refresh_rate ? $this->t('%time left', array('%time' => format_interval($last_checked + $refresh_rate - REQUEST_TIME))) : $this->t('never')); $links['edit'] = array( 'title' => $this->t('Edit'), 'route_name' => 'aggregator.feed_configure', 'route_parameters' => array('aggregator_feed' => $feed->id()), ); $links['delete'] = array( 'title' => $this->t('Delete'), 'route_name' => 'aggregator.feed_delete', 'route_parameters' => array('aggregator_feed' => $feed->id()), ); $links['delete_items'] = array( 'title' => $this->t('Delete items'), 'route_name' => 'aggregator.feed_items_delete', 'route_parameters' => array('aggregator_feed' => $feed->id()), ); $links['update'] = array( 'title' => $this->t('Update items'), 'route_name' => 'aggregator.feed_refresh', 'route_parameters' => array('aggregator_feed' => $feed->id()), ); $row[] = array( 'data' => array( '#type' => 'operations', '#links' => $links, ), ); $rows[] = $row; } $build['feeds'] = array( '#prefix' => '