EventListener.php in Search API 8
File
tests/search_api_test_events/src/EventListener.php
View source
<?php
namespace Drupal\search_api_test_events;
use Drupal\Core\Messenger\MessengerInterface;
use Drupal\search_api\Event\GatheringPluginInfoEvent;
use Drupal\search_api\Event\IndexingItemsEvent;
use Drupal\search_api\Event\MappingFieldTypesEvent;
use Drupal\search_api\Event\ItemsIndexedEvent;
use Drupal\search_api\Event\QueryPreExecuteEvent;
use Drupal\search_api\Event\ReindexScheduledEvent;
use Drupal\search_api\Event\ProcessingResultsEvent;
use Drupal\search_api\Event\DeterminingServerFeaturesEvent;
use Drupal\search_api\Event\SearchApiEvents;
use Drupal\search_api\Utility\Utility;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class EventListener implements EventSubscriberInterface {
protected $messenger;
public function __construct(MessengerInterface $messenger) {
$this->messenger = $messenger;
}
public static function getSubscribedEvents() {
return [
SearchApiEvents::DETERMINING_SERVER_FEATURES => 'serverFeaturesAlter',
SearchApiEvents::GATHERING_BACKENDS => 'backendInfoAlter',
SearchApiEvents::GATHERING_DATA_SOURCES => 'dataSourceInfoAlter',
SearchApiEvents::GATHERING_DATA_TYPES => 'dataTypeInfoAlter',
SearchApiEvents::GATHERING_DISPLAYS => 'displaysAlter',
SearchApiEvents::MAPPING_FIELD_TYPES => 'fieldTypeMappingAlter',
SearchApiEvents::INDEXING_ITEMS => 'indexingItems',
SearchApiEvents::ITEMS_INDEXED => 'itemsIndexed',
SearchApiEvents::GATHERING_PARSE_MODES => 'parseModeInfoAlter',
SearchApiEvents::GATHERING_PROCESSORS => 'processorInfoAlter',
SearchApiEvents::QUERY_PRE_EXECUTE => 'queryAlter',
SearchApiEvents::QUERY_PRE_EXECUTE . '.andrew_hill' => 'queryTagAlter',
SearchApiEvents::REINDEX_SCHEDULED => 'reindex',
SearchApiEvents::PROCESSING_RESULTS => 'resultsAlter',
SearchApiEvents::PROCESSING_RESULTS . '.andrew_hill' => 'resultsTagAlter',
SearchApiEvents::GATHERING_TRACKERS => 'trackerInfoAlter',
];
}
public function backendInfoAlter(GatheringPluginInfoEvent $event) {
$backend_info =& $event
->getDefinitions();
$backend_info['search_api_test']['label'] = 'Slims return';
}
public function dataTypeInfoAlter(GatheringPluginInfoEvent $event) {
$dataTypePluginInfo =& $event
->getDefinitions();
if (isset($dataTypePluginInfo['text'])) {
$dataTypePluginInfo['text']['label'] = 'Peace/Dolphin dance';
}
}
public function dataSourceInfoAlter(GatheringPluginInfoEvent $event) {
$infos =& $event
->getDefinitions();
if (isset($infos['entity:node'])) {
$infos['entity:node']['label'] = 'Distant land';
}
}
public function displaysAlter(GatheringPluginInfoEvent $event) {
$displays =& $event
->getDefinitions();
if (isset($displays['views_page:search_api_test_view__page_1'])) {
$displays['views_page:search_api_test_view__page_1']['label'] = 'Some funny label for testing';
}
}
public function fieldTypeMappingAlter(MappingFieldTypesEvent $event) {
$mapping =& $event
->getFieldTypeMapping();
$mapping['datetime_iso8601'] = FALSE;
$mapping['timestamp'] = FALSE;
}
public function indexingItems(IndexingItemsEvent $event) {
$items = $event
->getItems();
unset($items['entity:node/1:en']);
$event
->setItems($items);
$this->messenger
->addStatus('Stormy');
}
public function itemsIndexed(ItemsIndexedEvent $event) {
$this->messenger
->addStatus('Please set me at ease');
}
public function parseModeInfoAlter(GatheringPluginInfoEvent $event) {
$parseModeInfo =& $event
->getDefinitions();
if (isset($parseModeInfo['direct'])) {
$parseModeInfo['direct']['label'] = 'Song for My Father';
}
}
public function processorInfoAlter(GatheringPluginInfoEvent $event) {
$processorInfo =& $event
->getDefinitions();
$processorInfo['content_access']['label'] = 'Mystic bounce';
}
public function queryAlter(QueryPreExecuteEvent $event) {
$query = $event
->getQuery();
$this->messenger
->addStatus('Funky blue note');
$this->messenger
->addStatus("Search id: {$query->getSearchId(FALSE)}");
$query
->addTag('andrew_hill');
}
public function queryTagAlter(QueryPreExecuteEvent $event) {
$this->messenger
->addStatus("Freeland");
$query = $event
->getQuery();
$query
->setOption('tag query alter hook', TRUE);
$index = $query
->getIndex();
$fields = $index
->getFields();
foreach ($index
->getDatasources() as $datasource_id => $datasource) {
if ($datasource
->getEntityTypeId() === 'node') {
$field = Utility::createCombinedId($datasource_id, 'nid');
if (isset($fields[$field])) {
$query
->addCondition($field, 2, '<>');
}
}
}
}
public function reindex(ReindexScheduledEvent $event) {
$this->messenger
->addStatus('Montara');
}
public function resultsAlter(ProcessingResultsEvent $event) {
$this->messenger
->addStatus('Stepping into tomorrow');
}
public function resultsTagAlter(ProcessingResultsEvent $event) {
$this->messenger
->addStatus('Llama');
}
public function serverFeaturesAlter(DeterminingServerFeaturesEvent $event) {
$features =& $event
->getFeatures();
$server = $event
->getServer();
if ($server
->id() === 'webtest_server') {
$features[] = 'welcome_to_the_jungle';
}
}
public function trackerInfoAlter(GatheringPluginInfoEvent $event) {
$trackerInfo =& $event
->getDefinitions();
$trackerInfo['search_api_test']['label'] = 'Good luck';
}
}