Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 3 |
CRAP | |
0.00% |
0 / 80 |
| FeedViewBuilder | |
0.00% |
0 / 1 |
|
0.00% |
0 / 3 |
210 | |
0.00% |
0 / 80 |
| __construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
| createInstance | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 7 |
|||
| buildComponents | |
0.00% |
0 / 1 |
156 | |
0.00% |
0 / 70 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\aggregator\FeedViewBuilder. | |
| */ | |
| namespace Drupal\aggregator; | |
| use Drupal\Core\Entity\EntityManagerInterface; | |
| use Drupal\Core\Entity\EntityTypeInterface; | |
| use Drupal\Core\Entity\EntityViewBuilder; | |
| use Drupal\Core\Config\Config; | |
| use Drupal\Core\Language\LanguageManagerInterface; | |
| use Drupal\Core\Url; | |
| use Symfony\Component\DependencyInjection\ContainerInterface; | |
| /** | |
| * Render controller for aggregator feed items. | |
| */ | |
| class FeedViewBuilder extends EntityViewBuilder { | |
| /** | |
| * Constructs a new FeedViewBuilder. | |
| * | |
| * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type | |
| * The entity type definition. | |
| * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager | |
| * The entity manager service. | |
| * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager | |
| * The language manager. | |
| * @param \Drupal\Core\Config\Config $config | |
| * The 'aggregator.settings' config. | |
| */ | |
| public function __construct(EntityTypeInterface $entity_type, EntityManagerInterface $entity_manager, LanguageManagerInterface $language_manager, Config $config) { | |
| parent::__construct($entity_type, $entity_manager, $language_manager); | |
| $this->config = $config; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) { | |
| return new static( | |
| $entity_type, | |
| $container->get('entity.manager'), | |
| $container->get('language_manager'), | |
| $container->get('config.factory')->get('aggregator.settings') | |
| ); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function buildComponents(array &$build, array $entities, array $displays, $view_mode) { | |
| parent::buildComponents($build, $entities, $displays, $view_mode); | |
| foreach ($entities as $id => $entity) { | |
| $bundle = $entity->bundle(); | |
| $display = $displays[$bundle]; | |
| if ($display->getComponent('items')) { | |
| // When in summary view mode, respect the list_max setting. | |
| $limit = $view_mode == 'summary' ? $this->config->get('source.list_max') : 20; | |
| // Retrieve the items attached to this feed. | |
| $items = $this->entityManager | |
| ->getStorage('aggregator_item') | |
| ->loadByFeed($entity->id(), $limit); | |
| $build[$id]['items'] = $this->entityManager | |
| ->getViewBuilder('aggregator_item') | |
| ->viewMultiple($items, $view_mode, $entity->language()->getId()); | |
| if ($view_mode == 'full') { | |
| // Also add the pager. | |
| $build[$id]['pager'] = array('#type' => 'pager'); | |
| } | |
| } | |
| if ($display->getComponent('description')) { | |
| $build[$id]['description'] = array( | |
| '#markup' => $entity->getDescription(), | |
| '#allowed_tags' => _aggregator_allowed_tags(), | |
| '#prefix' => '<div class="feed-description">', | |
| '#suffix' => '</div>', | |
| ); | |
| } | |
| if ($display->getComponent('image')) { | |
| $image_link = array(); | |
| // Render the image as link if it is available. | |
| $image = $entity->getImage(); | |
| $label = $entity->label(); | |
| $link_href = $entity->getWebsiteUrl(); | |
| if ($image && $label && $link_href) { | |
| $link_title = array( | |
| '#theme' => 'image', | |
| '#uri' => $image, | |
| '#alt' => $label, | |
| ); | |
| $image_link = array( | |
| '#type' => 'link', | |
| '#title' => $link_title, | |
| '#url' => Url::fromUri($link_href), | |
| '#options' => array( | |
| 'attributes' => array('class' => array('feed-image')), | |
| ), | |
| ); | |
| } | |
| $build[$id]['image'] = $image_link; | |
| } | |
| if ($display->getComponent('feed_icon')) { | |
| $build[$id]['feed_icon'] = array( | |
| '#theme' => 'feed_icon', | |
| '#url' => $entity->getUrl(), | |
| '#title' => t('@title feed', array('@title' => $entity->label())), | |
| ); | |
| } | |
| if ($display->getComponent('more_link')) { | |
| $title_stripped = strip_tags($entity->label()); | |
| $build[$id]['more_link'] = array( | |
| '#type' => 'link', | |
| '#title' => t('More<span class="visually-hidden"> posts about @title</span>', array( | |
| '@title' => $title_stripped, | |
| )), | |
| '#url' => Url::fromRoute('entity.aggregator_feed.canonical', ['aggregator_feed' => $entity->id()]), | |
| '#options' => array( | |
| 'attributes' => array( | |
| 'title' => $title_stripped, | |
| ), | |
| ), | |
| ); | |
| } | |
| } | |
| } | |
| } |