search_api-8.x-1.15/src/Plugin/search_api/processor/Transliteration.php
src/Plugin/search_api/processor/Transliteration.php
<?php namespace Drupal\search_api\Plugin\search_api\processor; use Drupal\Component\Transliteration\TransliterationInterface; use Drupal\Core\Language\LanguageManagerInterface; use Drupal\search_api\Processor\FieldsProcessorPluginBase; use Symfony\Component\DependencyInjection\ContainerInterface; /** * Makes searches insensitive to accents and other non-ASCII characters. * * @SearchApiProcessor( * id = "transliteration", * label = @Translation("Transliteration"), * description = @Translation("Makes searches insensitive to accents and other non-ASCII characters."), * stages = { * "pre_index_save" = 0, * "preprocess_index" = -20, * "preprocess_query" = -20 * } * ) */ class Transliteration extends FieldsProcessorPluginBase { /** * The transliteration service to use. * * @var \Drupal\Component\Transliteration\TransliterationInterface */ protected $transliterator; /** * The language manager. * * @var \Drupal\Core\Language\LanguageManagerInterface|null */ protected $languageManager; /** * The language to use for transliterating. * * @var string */ protected $langcode; /** * {@inheritdoc} */ public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { /** @var static $processor */ $processor = parent::create($container, $configuration, $plugin_id, $plugin_definition); $processor->setTransliterator($container->get('transliteration')); $processor->setLanguageManager($container->get('language_manager')); $langcode = $processor->getLanguageManager()->getDefaultLanguage()->getId(); $processor->setLangcode($langcode); return $processor; } /** * Retrieves the transliterator. * * @return \Drupal\Component\Transliteration\TransliterationInterface * The transliterator. */ public function getTransliterator() { return $this->transliterator ?: \Drupal::service('transliteration'); } /** * Sets the transliterator. * * @param \Drupal\Component\Transliteration\TransliterationInterface $transliterator * The new transliterator. * * @return $this */ public function setTransliterator(TransliterationInterface $transliterator) { $this->transliterator = $transliterator; return $this; } /** * Retrieves the language manager. * * @return \Drupal\Core\Language\LanguageManagerInterface * The language manager. */ public function getLanguageManager() { return $this->languageManager ?: \Drupal::languageManager(); } /** * Sets the language manager. * * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager * The new language manager. * * @return $this */ public function setLanguageManager(LanguageManagerInterface $language_manager) { $this->languageManager = $language_manager; return $this; } /** * Retrieves the langcode. * * @return string * The langcode. */ public function getLangcode() { return $this->langcode ?: $this->getLanguageManager() ->getDefaultLanguage() ->getId(); } /** * Sets the langcode. * * @param string $langcode * The new langcode. * * @return $this */ public function setLangcode($langcode) { $this->langcode = $langcode; return $this; } /** * {@inheritdoc} */ protected function process(&$value) { // We don't touch integers, NULL values or the like. if (is_string($value)) { $value = $this->getTransliterator()->transliterate($value, $this->getLangcode()); } } }