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

}

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

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