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;
+  }
+
+}