Menu.php in Menu Entity Index 8
File
src/Plugin/views/filter/Menu.php
View source
<?php
namespace Drupal\menu_entity_index\Plugin\views\filter;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\menu_entity_index\TrackerInterface;
use Drupal\views\Plugin\views\filter\InOperator;
use Symfony\Component\DependencyInjection\ContainerInterface;
class Menu extends InOperator {
protected $entityTypeManager;
protected $trackedOnly;
protected $tracker;
public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, TrackerInterface $tracker) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->tracker = $tracker;
$this->entityTypeManager = $entity_type_manager;
$this->trackedOnly = isset($this->configuration['tracked_only']) ? $this->configuration['tracked_only'] : FALSE;
}
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($configuration, $plugin_id, $plugin_definition, $container
->get('entity_type.manager'), $container
->get('menu_entity_index.tracker'));
}
public function getValueOptions() {
if (!isset($this->valueOptions)) {
$options = $this->tracker
->getAvailableMenus();
if ($this->trackedOnly) {
$tracked_menus = $this->tracker
->getTrackedMenus();
$options = array_filter($options, function ($key) use ($tracked_menus) {
return in_array($key, $tracked_menus);
}, ARRAY_FILTER_USE_KEY);
}
$this->valueOptions = $options;
}
return $this->valueOptions;
}
public function calculateDependencies() {
$dependencies = parent::calculateDependencies();
if ($this->trackedOnly) {
$dependencies['config'][] = 'menu_entity_index.configuration';
}
$menus = $this->entityTypeManager
->getStorage('menu')
->loadMultiple($this->value);
foreach ($menus as $menu) {
$dependencies[$menu
->getConfigDependencyKey()][] = $menu
->getConfigDependencyName();
}
return $dependencies;
}
}
Classes
Name |
Description |
Menu |
Filter class which allows filtering by menu name. |