Mercurial > hg > isophonics-drupal-site
diff core/modules/views/src/Plugin/Derivative/ViewsMenuLink.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/views/src/Plugin/Derivative/ViewsMenuLink.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,69 @@ +<?php + +namespace Drupal\views\Plugin\Derivative; + +use Drupal\Component\Plugin\Derivative\DeriverBase; +use Drupal\Core\Plugin\Discovery\ContainerDeriverInterface; +use Drupal\views\Plugin\views\display\DisplayMenuInterface; +use Drupal\views\Views; +use Drupal\Core\Entity\EntityStorageInterface; +use Symfony\Component\DependencyInjection\ContainerInterface; + +/** + * Provides menu links for Views. + * + * @see \Drupal\views\Plugin\Menu\ViewsMenuLink + */ +class ViewsMenuLink extends DeriverBase implements ContainerDeriverInterface { + + /** + * The view storage. + * + * @var \Drupal\Core\Entity\EntityStorageInterface + */ + protected $viewStorage; + + /** + * Constructs a \Drupal\views\Plugin\Derivative\ViewsLocalTask instance. + * + * @param \Drupal\Core\Entity\EntityStorageInterface $view_storage + * The view storage. + */ + public function __construct(EntityStorageInterface $view_storage) { + $this->viewStorage = $view_storage; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container, $base_plugin_id) { + return new static( + $container->get('entity.manager')->getStorage('view') + ); + } + + /** + * {@inheritdoc} + */ + public function getDerivativeDefinitions($base_plugin_definition) { + $links = []; + $views = Views::getApplicableViews('uses_menu_links'); + + foreach ($views as $data) { + list($view_id, $display_id) = $data; + /** @var \Drupal\views\ViewExecutable $executable */ + $executable = $this->viewStorage->load($view_id)->getExecutable(); + $executable->initDisplay(); + $display = $executable->displayHandlers->get($display_id); + + if (($display instanceof DisplayMenuInterface) && ($result = $display->getMenuLinks())) { + foreach ($result as $link_id => $link) { + $links[$link_id] = $link + $base_plugin_definition; + } + } + } + + return $links; + } + +}