Chris@0: 1, Chris@0: 'parent' => 1, Chris@0: 'weight' => 1, Chris@0: 'expanded' => 1, Chris@0: 'enabled' => 1, Chris@0: 'title' => 1, Chris@0: 'description' => 1, Chris@0: ]; Chris@0: Chris@0: /** Chris@0: * The entity manager. Chris@0: * Chris@0: * @var \Drupal\Core\Entity\EntityManagerInterface Chris@0: */ Chris@0: protected $entityManager; Chris@0: Chris@0: /** Chris@0: * The view executable factory. Chris@0: * Chris@0: * @var \Drupal\views\ViewExecutableFactory Chris@0: */ Chris@0: protected $viewExecutableFactory; Chris@0: Chris@0: /** Chris@0: * The view executable of the menu link. Chris@0: * Chris@0: * @var \Drupal\views\ViewExecutable Chris@0: */ Chris@0: protected $view; Chris@0: Chris@0: /** Chris@0: * Constructs a new ViewsMenuLink. Chris@0: * Chris@0: * @param array $configuration Chris@0: * A configuration array containing information about the plugin instance. Chris@0: * @param string $plugin_id Chris@0: * The plugin_id for the plugin instance. Chris@0: * @param mixed $plugin_definition Chris@0: * The plugin implementation definition. Chris@0: * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager Chris@0: * The entity manager Chris@0: * @param \Drupal\views\ViewExecutableFactory $view_executable_factory Chris@0: * The view executable factory Chris@0: */ Chris@0: public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityManagerInterface $entity_manager, ViewExecutableFactory $view_executable_factory) { Chris@0: parent::__construct($configuration, $plugin_id, $plugin_definition); Chris@0: Chris@0: $this->entityManager = $entity_manager; Chris@0: $this->viewExecutableFactory = $view_executable_factory; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { Chris@0: return new static( Chris@0: $configuration, Chris@0: $plugin_id, Chris@0: $plugin_definition, Chris@0: $container->get('entity.manager'), Chris@0: $container->get('views.executable') Chris@0: ); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Initializes the proper view. Chris@0: * Chris@0: * @return \Drupal\views\ViewExecutable Chris@0: * The view executable. Chris@0: */ Chris@0: public function loadView() { Chris@0: if (empty($this->view)) { Chris@0: $metadata = $this->getMetaData(); Chris@0: $view_id = $metadata['view_id']; Chris@0: $display_id = $metadata['display_id']; Chris@0: $view_entity = $this->entityManager->getStorage('view')->load($view_id); Chris@0: $view = $this->viewExecutableFactory->get($view_entity); Chris@0: $view->setDisplay($display_id); Chris@0: $view->initDisplay(); Chris@0: $this->view = $view; Chris@0: } Chris@0: return $this->view; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getTitle() { Chris@0: // @todo Get the translated value from the config without instantiating the Chris@0: // view. https://www.drupal.org/node/2310379 Chris@0: return $this->loadView()->display_handler->getOption('menu')['title']; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getDescription() { Chris@0: return $this->loadView()->display_handler->getOption('menu')['description']; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function isExpanded() { Chris@0: return (bool) $this->loadView()->display_handler->getOption('menu')['expanded']; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function updateLink(array $new_definition_values, $persist) { Chris@0: $overrides = array_intersect_key($new_definition_values, $this->overrideAllowed); Chris@0: // Update the definition. Chris@0: $this->pluginDefinition = $overrides + $this->pluginDefinition; Chris@0: if ($persist) { Chris@0: $view = $this->loadView(); Chris@0: $display = &$view->storage->getDisplay($view->current_display); Chris@0: // Just save the title to the original view. Chris@0: $changed = FALSE; Chris@0: foreach ($overrides as $key => $new_definition_value) { Chris@0: if (empty($display['display_options']['menu'][$key]) || $display['display_options']['menu'][$key] != $new_definition_value) { Chris@0: $display['display_options']['menu'][$key] = $new_definition_value; Chris@0: $changed = TRUE; Chris@0: } Chris@0: } Chris@0: if ($changed) { Chris@0: // @todo Improve this to not trigger a full rebuild of everything, if we Chris@0: // just changed some properties. https://www.drupal.org/node/2310389 Chris@0: $view->storage->save(); Chris@0: } Chris@0: } Chris@0: return $this->pluginDefinition; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function isDeletable() { Chris@0: return TRUE; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function deleteLink() { Chris@0: } Chris@0: Chris@0: }