search_api-8.x-1.15/src/Plugin/views/argument/SearchApiTerm.php
src/Plugin/views/argument/SearchApiTerm.php
<?php
namespace Drupal\search_api\Plugin\views\argument;
use Drupal\Core\Entity\EntityRepositoryInterface;
use Drupal\taxonomy\Entity\Term;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Defines a contextual filter searching through all indexed taxonomy fields.
*
* Note: The plugin annotation below is not misspelled. Due to dependency
* problems, the plugin is not defined here but in
* search_api_views_plugins_argument_alter().
*
* @ingroup views_argument_handlers
*
* ViewsArgument("search_api_term")
*
* @see search_api_views_plugins_argument_alter()
*/
class SearchApiTerm extends SearchApiStandard {
/**
* The entity repository.
*
* @var \Drupal\Core\Entity\EntityRepositoryInterface
*/
protected $entityRepository;
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
/** @var static $plugin */
$plugin = parent::create($container, $configuration, $plugin_id, $plugin_definition);
$plugin->setEntityRepository($container->get('entity.repository'));
return $plugin;
}
/**
* Retrieves the entity repository.
*
* @return \Drupal\Core\Entity\EntityRepositoryInterface
* The entity repository.
*/
public function getEntityRepository() {
return $this->entityRepository ?: \Drupal::service('entity.repository');
}
/**
* Sets the entity repository.
*
* @param \Drupal\Core\Entity\EntityRepositoryInterface $entity_repository
* The entity repository.
*
* @return $this
*/
public function setEntityRepository(EntityRepositoryInterface $entity_repository) {
$this->entityRepository = $entity_repository;
return $this;
}
/**
* {@inheritdoc}
*/
public function title() {
if (!empty($this->argument)) {
$this->fillValue();
$terms = [];
foreach ($this->value as $tid) {
$taxonomy_term = Term::load($tid);
if ($taxonomy_term) {
$terms[] = $this->getEntityRepository()
->getTranslationFromContext($taxonomy_term)
->label();
}
}
return $terms ? implode(', ', $terms) : $this->argument;
}
else {
return $this->argument;
}
}
}
