search_api-8.x-1.15/src/Display/DisplayPluginBase.php
src/Display/DisplayPluginBase.php
<?php namespace Drupal\search_api\Display; use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Path\CurrentPathStack; use Drupal\Core\Url; use Drupal\search_api\Plugin\HideablePluginBase; use Symfony\Component\DependencyInjection\ContainerInterface; /** * Defines a base class from which other display classes may extend. * * Plugins extending this class need to define a plugin definition array through * annotation. The definition includes the following keys: * - id: The unique, system-wide identifier of the display class. * - label: Human-readable name of the display class, translated. * * A complete plugin definition should be written as in this example: * * @code * @SearchApiDisplay( * id = "my_display", * label = @Translation("My display"), * description = @Translation("A few words about this search display"), * index = "search_index", * path = "/my/custom/search", * ) * @endcode * * @see \Drupal\search_api\Annotation\SearchApiDisplay * @see \Drupal\search_api\Display\DisplayPluginManager * @see \Drupal\search_api\Display\DisplayInterface * @see plugin_api */ abstract class DisplayPluginBase extends HideablePluginBase implements DisplayInterface { /** * The current path service. * * @var \Drupal\Core\Path\CurrentPathStack|null */ protected $currentPath; /** * The entity type manager. * * @var \Drupal\Core\Entity\EntityTypeManagerInterface|null */ protected $entityTypeManager; /** * {@inheritdoc} */ public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { $display = new static($configuration, $plugin_id, $plugin_definition); $display->setCurrentPath($container->get('path.current')); $display->setEntityTypeManager($container->get('entity_type.manager')); return $display; } /** * Retrieves the current path service. * * @return \Drupal\Core\Path\CurrentPathStack * The current path service. */ public function getCurrentPath() { return $this->currentPath ?: \Drupal::service('path.current'); } /** * Sets the current path service. * * @param \Drupal\Core\Path\CurrentPathStack $current_path * The new current path service. * * @return $this */ public function setCurrentPath(CurrentPathStack $current_path) { $this->currentPath = $current_path; return $this; } /** * Retrieves the entity type manager. * * @return \Drupal\Core\Entity\EntityTypeManagerInterface * The entity type manager. */ public function getEntityTypeManager() { return $this->entityTypeManager ?: \Drupal::service('entity_type.manager'); } /** * Sets the entity type manager. * * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager * The new entity type manager. * * @return $this */ public function setEntityTypeManager(EntityTypeManagerInterface $entity_type_manager) { $this->entityTypeManager = $entity_type_manager; return $this; } /** * {@inheritdoc} */ public function label() { $plugin_definition = $this->getPluginDefinition(); return $plugin_definition['label']; } /** * {@inheritdoc} */ public function getDescription() { $plugin_definition = $this->getPluginDefinition(); return $plugin_definition['description']; } /** * {@inheritdoc} */ public function getIndex() { $plugin_definition = $this->getPluginDefinition(); return $this->getEntityTypeManager() ->getStorage('search_api_index') ->load($plugin_definition['index']); } /** * {@inheritdoc} */ public function getUrl() { @trigger_error('\Drupal\search_api\Display\DisplayInterface::getUrl() is deprecated in Search API 8.x-1.0 Beta 5. Use ::getPath() instead. See https://www.drupal.org/node/2856050', E_USER_DEPRECATED); if ($path = $this->getPath()) { return Url::fromUserInput($path); } return NULL; } /** * {@inheritdoc} */ public function getPath() { $plugin_definition = $this->getPluginDefinition(); if (!empty($plugin_definition['path'])) { return $plugin_definition['path']; } return NULL; } /** * {@inheritdoc} */ public function isRenderedInCurrentRequest() { if ($path = $this->getPath()) { $current_path = $this->getCurrentPath()->getPath(); return $current_path == $path; } return FALSE; } /** * {@inheritdoc} */ public function calculateDependencies() { $dependencies = []; // By default, add dependencies to the module providing this display and to // the index it is based on. $definition = $this->getPluginDefinition(); $dependencies['module'][] = $definition['provider']; $index = $this->getIndex(); $dependencies[$index->getConfigDependencyKey()][] = $index->getConfigDependencyName(); return $dependencies; } }