wse-1.0.x-dev/modules/wse_menu/src/WseViewsMenuLink.php

modules/wse_menu/src/WseViewsMenuLink.php
<?php

namespace Drupal\wse_menu;

use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Drupal\Core\State\StateInterface;
use Drupal\views\Plugin\Menu\ViewsMenuLink;
use Drupal\workspaces\WorkspaceManagerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * Provides support for workspace-specific updates to menu links from views.
 */
class WseViewsMenuLink extends ViewsMenuLink implements ContainerFactoryPluginInterface {

  /**
   * The key of the state entry where overrides are stored.
   */
  const STATE_KEY = 'wse_menu.views_menu_link_overrides';

  /**
   * The workspace manager.
   */
  protected WorkspaceManagerInterface $workspaceManager;

  /**
   * The state service.
   */
  protected StateInterface $state;

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
    $instance = parent::create($container, $configuration, $plugin_id, $plugin_definition);
    $instance->workspaceManager = $container->get('workspaces.manager');
    $instance->state = $container->get('state');
    return $instance;
  }

  /**
   * {@inheritdoc}
   */
  public function updateLink(array $new_definition_values, $persist) {
    if (!$this->workspaceManager->hasActiveWorkspace()) {
      return parent::updateLink($new_definition_values, $persist);
    }

    $overrides = array_intersect_key($new_definition_values, $this->overrideAllowed);

    // Update the definition.
    $this->pluginDefinition = $overrides + $this->pluginDefinition;

    // Store the overridden definition values in state.
    if ($persist) {
      $active_workspace_id = $this->workspaceManager->getActiveWorkspace()->id();
      $metadata = $this->getMetaData();
      $view_id = $metadata['view_id'];
      $display_id = $metadata['display_id'];

      $all_overrides = $this->state->get(static::STATE_KEY);
      $all_overrides[$active_workspace_id][$view_id][$display_id] = $overrides;
      $this->state->set(static::STATE_KEY, $all_overrides);
    }

    return $this->pluginDefinition;
  }

  /**
   * {@inheritdoc}
   */
  public function getTitle() {
    return (string) $this->pluginDefinition['title'];
  }

  /**
   * {@inheritdoc}
   */
  public function getDescription() {
    return (string) $this->pluginDefinition['description'];
  }

  /**
   * {@inheritdoc}
   */
  public function isExpanded() {
    return (bool) $this->pluginDefinition['expanded'];
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc