diff --git a/src/Backend/BackendPluginManager.php b/src/Backend/BackendPluginManager.php index c264a7e0..734b1f45 100644 --- a/src/Backend/BackendPluginManager.php +++ b/src/Backend/BackendPluginManager.php @@ -4,8 +4,10 @@ namespace Drupal\search_api\Backend; use Drupal\Core\Cache\CacheBackendInterface; use Drupal\Core\Extension\ModuleHandlerInterface; -use Drupal\search_api\Event\BackendsGathered; +use Drupal\search_api\Event\GatheringBackendsEventGathering; use Drupal\search_api\Annotation\SearchApiBackend; +use Drupal\search_api\Event\GatheringPluginInfoEvent; +use Drupal\search_api\Event\SearchApiEvents; use Drupal\search_api\SearchApiPluginManager; /** @@ -32,7 +34,7 @@ class BackendPluginManager extends SearchApiPluginManager { public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler) { parent::__construct('Plugin/search_api/backend', $namespaces, $module_handler, BackendInterface::class, SearchApiBackend::class); $this->alterInfo('search_api_backend_info'); - $this->alterEvent(BackendsGathered::class); + $this->alterEvent(SearchApiEvents::GATHERING_BACKENDS); $this->setCacheBackend($cache_backend, 'search_api_backends'); } diff --git a/src/DataType/DataTypePluginManager.php b/src/DataType/DataTypePluginManager.php index be5afee0..6cd3664b 100644 --- a/src/DataType/DataTypePluginManager.php +++ b/src/DataType/DataTypePluginManager.php @@ -4,7 +4,8 @@ namespace Drupal\search_api\DataType; use Drupal\Core\Cache\CacheBackendInterface; use Drupal\Core\Extension\ModuleHandlerInterface; -use Drupal\search_api\Event\DataTypesGathered; +use Drupal\search_api\Event\GatheringDataTypesEventGathering; +use Drupal\search_api\Event\SearchApiEvents; use Drupal\search_api\SearchApiPluginManager; /** @@ -52,7 +53,7 @@ class DataTypePluginManager extends SearchApiPluginManager { $this->setCacheBackend($cache_backend, 'search_api_data_type'); $this->alterInfo('search_api_data_type_info'); - $this->alterEvent(DataTypesGathered::class); + $this->alterEvent(SearchApiEvents::GATHERING_DATA_TYPES); } /** diff --git a/src/Datasource/DatasourcePluginManager.php b/src/Datasource/DatasourcePluginManager.php index cc552300..e821a29a 100644 --- a/src/Datasource/DatasourcePluginManager.php +++ b/src/Datasource/DatasourcePluginManager.php @@ -4,7 +4,8 @@ namespace Drupal\search_api\Datasource; use Drupal\Core\Cache\CacheBackendInterface; use Drupal\Core\Extension\ModuleHandlerInterface; -use Drupal\search_api\Event\DataSourcesGathered; +use Drupal\search_api\Event\GatheringDataSourcesEventGathering; +use Drupal\search_api\Event\SearchApiEvents; use Drupal\search_api\SearchApiPluginManager; /** @@ -32,7 +33,7 @@ class DatasourcePluginManager extends SearchApiPluginManager { parent::__construct('Plugin/search_api/datasource', $namespaces, $module_handler, 'Drupal\search_api\Datasource\DatasourceInterface', 'Drupal\search_api\Annotation\SearchApiDatasource'); $this->setCacheBackend($cache_backend, 'search_api_datasources'); $this->alterInfo('search_api_datasource_info'); - $this->alterEvent(DataSourcesGathered::class); + $this->alterEvent(SearchApiEvents::GATHERING_DATA_SOURCES); } } diff --git a/src/Display/DisplayPluginManager.php b/src/Display/DisplayPluginManager.php index d8483034..70442113 100644 --- a/src/Display/DisplayPluginManager.php +++ b/src/Display/DisplayPluginManager.php @@ -4,7 +4,8 @@ namespace Drupal\search_api\Display; use Drupal\Core\Cache\CacheBackendInterface; use Drupal\Core\Extension\ModuleHandlerInterface; -use Drupal\search_api\Event\DisplaysGathered; +use Drupal\search_api\Event\GatheringDisplaysEventGathering; +use Drupal\search_api\Event\SearchApiEvents; use Drupal\search_api\SearchApiPluginManager; /** @@ -33,7 +34,7 @@ class DisplayPluginManager extends SearchApiPluginManager { parent::__construct('Plugin/search_api/display', $namespaces, $module_handler, 'Drupal\search_api\Display\DisplayInterface', 'Drupal\search_api\Annotation\SearchApiDisplay'); $this->setCacheBackend($cache_backend, 'search_api_displays'); $this->alterInfo('search_api_displays'); - $this->alterEvent(DisplaysGathered::class); + $this->alterEvent(SearchApiEvents::GATHERING_DISPLAYS); } /** diff --git a/src/Entity/Index.php b/src/Entity/Index.php index 96e69288..be2bfdea 100644 --- a/src/Entity/Index.php +++ b/src/Entity/Index.php @@ -8,8 +8,9 @@ use Drupal\Core\Cache\Cache; use Drupal\Core\Config\Entity\ConfigEntityBase; use Drupal\Core\Entity\EntityStorageInterface; use Drupal\search_api\Datasource\DatasourceInterface; -use Drupal\search_api\Event\ItemsIndexed; -use Drupal\search_api\Event\ReindexScheduled; +use Drupal\search_api\Event\ItemsIndexedEvent; +use Drupal\search_api\Event\ReindexScheduledEvent; +use Drupal\search_api\Event\SearchApiEvents; use Drupal\search_api\IndexInterface; use Drupal\search_api\Item\FieldInterface; use Drupal\search_api\LoggerTrait; @@ -999,12 +1000,12 @@ class Index extends ConfigEntityBase implements IndexInterface { // effect again. Therefore, we reset the flag. $this->setHasReindexed(FALSE); - $description = sprintf('Use %s instead', ItemsIndexed::class); + $description = sprintf('Use %s instead', ItemsIndexedEvent::class); \Drupal::moduleHandler()->invokeAllDeprecated($description, 'search_api_items_indexed', [$this, $processed_ids]); /** @var \Symfony\Component\EventDispatcher\EventDispatcherInterface $dispatcher */ $dispatcher = \Drupal::getContainer()->get('event_dispatcher'); - $dispatcher->dispatch(ItemsIndexed::NAME, new ItemsIndexed($this, $processed_ids)); + $dispatcher->dispatch(SearchApiEvents::ITEMS_INDEXED, new ItemsIndexedEvent($this, $processed_ids)); // Clear search api list caches. Cache::invalidateTags(['search_api_list:' . $this->id]); @@ -1108,11 +1109,11 @@ class Index extends ConfigEntityBase implements IndexInterface { if ($this->status() && !$this->isReindexing()) { $this->setHasReindexed(); $this->getTrackerInstance()->trackAllItemsUpdated(); - $description = sprintf('Use %s instead.', ReindexScheduled::class); + $description = sprintf('Use %s instead.', ReindexScheduledEvent::class); \Drupal::moduleHandler()->invokeAllDeprecated($description, 'search_api_index_reindex', [$this, FALSE]); /** @var \Symfony\Component\EventDispatcher\EventDispatcherInterface $dispatcher */ $dispatcher = \Drupal::getContainer()->get('event_dispatcher'); - $dispatcher->dispatch(ReindexScheduled::NAME, new ReindexScheduled($this, FALSE)); + $dispatcher->dispatch(SearchApiEvents::REINDEX_SCHEDULED, new ReindexScheduledEvent($this, FALSE)); } } @@ -1136,12 +1137,12 @@ class Index extends ConfigEntityBase implements IndexInterface { $this->getServerInstance()->deleteAllIndexItems($this); } if ($invoke_hook) { - $description = sprintf('Use %s instead.', ReindexScheduled::class); + $description = sprintf('Use %s instead.', ReindexScheduledEvent::class); \Drupal::moduleHandler()->invokeAllDeprecated($description, 'search_api_index_reindex', [$this, !$this->isReadOnly()]); /** @var \Symfony\Component\EventDispatcher\EventDispatcherInterface $dispatcher */ $dispatcher = \Drupal::getContainer()->get('event_dispatcher'); - $dispatcher->dispatch(ReindexScheduled::NAME, new ReindexScheduled($this, !$this->isReadOnly())); + $dispatcher->dispatch(SearchApiEvents::REINDEX_SCHEDULED, new ReindexScheduledEvent($this, !$this->isReadOnly())); } } @@ -1158,12 +1159,12 @@ class Index extends ConfigEntityBase implements IndexInterface { $index_task_manager->stopTracking($this); $index_task_manager->startTracking($this); $this->setHasReindexed(); - $description = sprintf('Use %s instead.', ReindexScheduled::class); + $description = sprintf('Use %s instead.', ReindexScheduledEvent::class); \Drupal::moduleHandler() ->invokeAllDeprecated($description, 'search_api_index_reindex', [$this, FALSE]); /** @var \Symfony\Component\EventDispatcher\EventDispatcherInterface $dispatcher */ $dispatcher = \Drupal::getContainer()->get('event_dispatcher'); - $dispatcher->dispatch(ReindexScheduled::NAME, new ReindexScheduled($this, FALSE)); + $dispatcher->dispatch(SearchApiEvents::REINDEX_SCHEDULED, new ReindexScheduledEvent($this, FALSE)); $index_task_manager->addItemsBatch($this); } diff --git a/src/Entity/Server.php b/src/Entity/Server.php index fdad077b..ae82997b 100644 --- a/src/Entity/Server.php +++ b/src/Entity/Server.php @@ -5,7 +5,8 @@ namespace Drupal\search_api\Entity; use Drupal\Core\Cache\Cache; use Drupal\Core\Config\Entity\ConfigEntityBase; use Drupal\Core\Entity\EntityStorageInterface; -use Drupal\search_api\Event\ServerFeaturesInitialized; +use Drupal\search_api\Event\IntializingServerFeaturesEvent; +use Drupal\search_api\Event\SearchApiEvents; use Drupal\search_api\IndexInterface; use Drupal\search_api\LoggerTrait; use Drupal\search_api\Query\QueryInterface; @@ -208,12 +209,12 @@ class Server extends ConfigEntityBase implements ServerInterface { if ($this->hasValidBackend()) { $this->features = $this->getBackend()->getSupportedFeatures(); } - $description = sprintf('Use %s instead.', ServerFeaturesInitialized::class); + $description = sprintf('Use %s instead.', IntializingServerFeaturesEvent::class); \Drupal::moduleHandler() ->alterDeprecated($description, 'search_api_server_features', $this->features, $this); /** @var \Symfony\Component\EventDispatcher\EventDispatcherInterface $eventDispatcher */ $eventDispatcher = \Drupal::getContainer()->get('event_dispatcher'); - $eventDispatcher->dispatch(ServerFeaturesInitialized::NAME, new ServerFeaturesInitialized($this->features, $this)); + $eventDispatcher->dispatch(SearchApiEvents::INITIALIZING_SERVER_FEATURES, new IntializingServerFeaturesEvent($this->features, $this)); } return $this->features; diff --git a/src/Event/BackendsGathered.php b/src/Event/BackendsGathered.php deleted file mode 100644 index 252f1258..00000000 --- a/src/Event/BackendsGathered.php +++ /dev/null @@ -1,22 +0,0 @@ -getDefinitions(); - } - -} diff --git a/src/Event/DataSourcesGathered.php b/src/Event/DataSourcesGathered.php deleted file mode 100644 index 4b06a2f5..00000000 --- a/src/Event/DataSourcesGathered.php +++ /dev/null @@ -1,22 +0,0 @@ -getDefinitions(); - } - -} diff --git a/src/Event/DataTypesGathered.php b/src/Event/DataTypesGathered.php deleted file mode 100644 index 7fe73483..00000000 --- a/src/Event/DataTypesGathered.php +++ /dev/null @@ -1,22 +0,0 @@ -getDefinitions(); - } - -} diff --git a/src/Event/DisplaysGathered.php b/src/Event/DisplaysGathered.php deleted file mode 100644 index ec9e8844..00000000 --- a/src/Event/DisplaysGathered.php +++ /dev/null @@ -1,22 +0,0 @@ -getDefinitions(); - } - -} diff --git a/src/Event/GatheringPluginInfoEvent.php b/src/Event/GatheringPluginInfoEvent.php new file mode 100644 index 00000000..fdcfa604 --- /dev/null +++ b/src/Event/GatheringPluginInfoEvent.php @@ -0,0 +1,39 @@ +definitions = &$definitions; + } + + /** + * Retrieves the plugin definitions collected so far. + * + * @return array[] + * The plugin definitions collected so far, keyed by plugin ID. + */ + public function &getDefinitions() { + return $this->definitions; + } + +} diff --git a/src/Event/ServerFeaturesInitialized.php b/src/Event/IntializingServerFeaturesEvent.php similarity index 91% rename from src/Event/ServerFeaturesInitialized.php rename to src/Event/IntializingServerFeaturesEvent.php index 7f08f832..b948a1f3 100644 --- a/src/Event/ServerFeaturesInitialized.php +++ b/src/Event/IntializingServerFeaturesEvent.php @@ -8,9 +8,7 @@ use Symfony\Component\EventDispatcher\Event; /** * Implements the server features initialized event. */ -final class ServerFeaturesInitialized extends Event { - - const NAME = 'search_api.server_features_initialized'; +final class IntializingServerFeaturesEvent extends Event { /** * Reference to the features supported by the server's backend. diff --git a/src/Event/ItemsIndexed.php b/src/Event/ItemsIndexedEvent.php similarity index 93% rename from src/Event/ItemsIndexed.php rename to src/Event/ItemsIndexedEvent.php index ae14e0ef..8c0f9316 100644 --- a/src/Event/ItemsIndexed.php +++ b/src/Event/ItemsIndexedEvent.php @@ -8,9 +8,7 @@ use Symfony\Component\EventDispatcher\Event; /** * Implementation of the items indexed event. */ -final class ItemsIndexed extends Event { - - const NAME = 'search_api.items_indexed'; +final class ItemsIndexedEvent extends Event { /** * The index that indexed the items. diff --git a/src/Event/FieldTypesMapped.php b/src/Event/MappingFieldTypesEvent.php similarity index 90% rename from src/Event/FieldTypesMapped.php rename to src/Event/MappingFieldTypesEvent.php index 06afdc44..cce4600c 100644 --- a/src/Event/FieldTypesMapped.php +++ b/src/Event/MappingFieldTypesEvent.php @@ -7,9 +7,7 @@ use Symfony\Component\EventDispatcher\Event; /** * Implements the field types mapped event. */ -final class FieldTypesMapped extends Event { - - const NAME = 'search_api.field_types_mapped'; +final class MappingFieldTypesEvent extends Event { /** * Reference to the field type mapping. diff --git a/src/Event/ParseModesGathered.php b/src/Event/ParseModesGathered.php deleted file mode 100644 index e903b56b..00000000 --- a/src/Event/ParseModesGathered.php +++ /dev/null @@ -1,22 +0,0 @@ -getDefinitions(); - } - -} diff --git a/src/Event/PluginInfoGatheredEventBase.php b/src/Event/PluginInfoGatheredEventBase.php deleted file mode 100644 index 7b4abdad..00000000 --- a/src/Event/PluginInfoGatheredEventBase.php +++ /dev/null @@ -1,39 +0,0 @@ -definitions = &$definitions; - } - - /** - * Get a reference to the definitions. - * - * @return array - * Reference to the definitions. - */ - public function &getDefinitions() { - return $this->definitions; - } - -} diff --git a/src/Event/ResultsProcessed.php b/src/Event/ProcessingResultsEvent.php similarity index 89% rename from src/Event/ResultsProcessed.php rename to src/Event/ProcessingResultsEvent.php index c00ee8dd..cf8f8b02 100644 --- a/src/Event/ResultsProcessed.php +++ b/src/Event/ProcessingResultsEvent.php @@ -8,9 +8,7 @@ use Symfony\Component\EventDispatcher\Event; /** * Implements the results processed event. */ -final class ResultsProcessed extends Event { - - const NAME = 'search_api.results_processed'; +final class ProcessingResultsEvent extends Event { /** * The search results. diff --git a/src/Event/ProcessorsGathered.php b/src/Event/ProcessorsGathered.php deleted file mode 100644 index 7da24a68..00000000 --- a/src/Event/ProcessorsGathered.php +++ /dev/null @@ -1,22 +0,0 @@ -getDefinitions(); - } - -} diff --git a/src/Event/QueryCreated.php b/src/Event/QueryPreExecuteEvent.php similarity index 89% rename from src/Event/QueryCreated.php rename to src/Event/QueryPreExecuteEvent.php index e3b8b705..585f4f41 100644 --- a/src/Event/QueryCreated.php +++ b/src/Event/QueryPreExecuteEvent.php @@ -8,9 +8,7 @@ use Symfony\Component\EventDispatcher\Event; /** * Implements the query created event. */ -final class QueryCreated extends Event { - - const NAME = 'search_api.query_created'; +final class QueryPreExecuteEvent extends Event { /** * The created query. diff --git a/src/Event/ReindexScheduled.php b/src/Event/ReindexScheduledEvent.php similarity index 93% rename from src/Event/ReindexScheduled.php rename to src/Event/ReindexScheduledEvent.php index d1f07d24..510f322e 100644 --- a/src/Event/ReindexScheduled.php +++ b/src/Event/ReindexScheduledEvent.php @@ -8,9 +8,7 @@ use Symfony\Component\EventDispatcher\Event; /** * Implementation of the reindex scheduled event. */ -final class ReindexScheduled extends Event { - - const NAME = 'search_api.reindex'; +final class ReindexScheduledEvent extends Event { /** * The index scheduled for reindexing. diff --git a/src/Event/SearchApiEvents.php b/src/Event/SearchApiEvents.php new file mode 100644 index 00000000..ba50bc06 --- /dev/null +++ b/src/Event/SearchApiEvents.php @@ -0,0 +1,36 @@ +getDefinitions(); - } - -} diff --git a/src/ParseMode/ParseModePluginManager.php b/src/ParseMode/ParseModePluginManager.php index b22505a1..2667e91e 100644 --- a/src/ParseMode/ParseModePluginManager.php +++ b/src/ParseMode/ParseModePluginManager.php @@ -4,7 +4,8 @@ namespace Drupal\search_api\ParseMode; use Drupal\Core\Cache\CacheBackendInterface; use Drupal\Core\Extension\ModuleHandlerInterface; -use Drupal\search_api\Event\ParseModesGathered; +use Drupal\search_api\Event\GatheringParseModesEventGathering; +use Drupal\search_api\Event\SearchApiEvents; use Drupal\search_api\SearchApiPluginManager; /** @@ -33,7 +34,7 @@ class ParseModePluginManager extends SearchApiPluginManager { $this->setCacheBackend($cache_backend, 'search_api_parse_mode'); $this->alterInfo('search_api_parse_mode_info'); - $this->alterEvent(ParseModesGathered::class); + $this->alterEvent(SearchApiEvents::GATHERING_PARSE_MODES); } /** diff --git a/src/Processor/ProcessorPluginManager.php b/src/Processor/ProcessorPluginManager.php index 741af974..d97f1e5d 100644 --- a/src/Processor/ProcessorPluginManager.php +++ b/src/Processor/ProcessorPluginManager.php @@ -6,7 +6,8 @@ use Drupal\Core\Cache\CacheBackendInterface; use Drupal\Core\Extension\ModuleHandlerInterface; use Drupal\Core\StringTranslation\StringTranslationTrait; use Drupal\Core\StringTranslation\TranslationInterface; -use Drupal\search_api\Event\ProcessorsGathered; +use Drupal\search_api\Event\GatheringProcessorsEventGathering; +use Drupal\search_api\Event\SearchApiEvents; use Drupal\search_api\SearchApiPluginManager; /** @@ -38,7 +39,7 @@ class ProcessorPluginManager extends SearchApiPluginManager { parent::__construct('Plugin/search_api/processor', $namespaces, $module_handler, 'Drupal\search_api\Processor\ProcessorInterface', 'Drupal\search_api\Annotation\SearchApiProcessor'); $this->setCacheBackend($cache_backend, 'search_api_processors'); $this->alterInfo('search_api_processor_info'); - $this->alterEvent(ProcessorsGathered::class); + $this->alterEvent(SearchApiEvents::GATHERING_PROCESSORS); $this->setStringTranslation($translation); } diff --git a/src/Query/Query.php b/src/Query/Query.php index 2fc16f44..a0db63af 100644 --- a/src/Query/Query.php +++ b/src/Query/Query.php @@ -6,8 +6,9 @@ use Drupal\Core\DependencyInjection\DependencySerializationTrait; use Drupal\Core\Extension\ModuleHandlerInterface; use Drupal\Core\StringTranslation\StringTranslationTrait; use Drupal\search_api\Display\DisplayPluginManagerInterface; -use Drupal\search_api\Event\QueryCreated; -use Drupal\search_api\Event\ResultsProcessed; +use Drupal\search_api\Event\QueryPreExecuteEvent; +use Drupal\search_api\Event\ProcessingResultsEvent; +use Drupal\search_api\Event\SearchApiEvents; use Drupal\search_api\IndexInterface; use Drupal\search_api\ParseMode\ParseModeInterface; use Drupal\search_api\ParseMode\ParseModePluginManager; @@ -546,17 +547,36 @@ class Query implements QueryInterface { $this->index->preprocessSearchQuery($this); // Let modules alter the query. - /** @var \Symfony\Component\EventDispatcher\EventDispatcherInterface $eventDispatcher */ - $eventDispatcher = \Drupal::getContainer()->get('event_dispatcher'); - $eventDispatcher->dispatch(QueryCreated::NAME, new QueryCreated($this)); - $description = sprintf('Use %s instead', QueryCreated::class); - $this->getModuleHandler()->alterDeprecated($description, 'search_api_query', $this); - $hooks = []; - foreach ($this->tags as $tag) { - $hooks[] = "search_api_query_$tag"; - $eventDispatcher->dispatch(QueryCreated::NAME . '.' . $tag, new QueryCreated($this)); + /** @var \Symfony\Component\EventDispatcher\EventDispatcherInterface $dispatcher */ + $dispatcher = \Drupal::getContainer()->get('event_dispatcher'); + $processedHooks = $processedEvents = []; + // We have to do multiple passes because new tags could have been added by + // the modules altering the query. + do { + $hooks = ['search_api_query']; + $events = [SearchApiEvents::QUERY_PRE_EXECUTE]; + foreach ($this->tags as $tag) { + $hooks[] = "search_api_query_$tag"; + $events[] = SearchApiEvents::QUERY_PRE_EXECUTE . '.' . $tag; + } + $remainingHooks = array_diff($hooks, $processedHooks); + $remainingEvents = array_diff($events, $processedEvents); + $remaining = !empty($remainingHooks) && !empty($remainingEvents); + if (!$remaining) { + continue; + } + + $description = sprintf('Use %s instead', QueryPreExecuteEvent::class); + $this->getModuleHandler()->alterDeprecated($description, $remainingHooks, $this); + + foreach($events as $eventName) { + $dispatcher->dispatch($eventName, new QueryPreExecuteEvent($this)); + } + + $processedHooks = $hooks; + $processedEvents = $events; } - $this->getModuleHandler()->alterDeprecated($description, $hooks, $this); + while ($remaining); } } @@ -574,14 +594,14 @@ class Query implements QueryInterface { // Let modules alter the results. /** @var \Symfony\Component\EventDispatcher\EventDispatcherInterface $eventDispatcher */ $eventDispatcher = \Drupal::getContainer()->get('event_dispatcher'); - $eventDispatcher->dispatch(ResultsProcessed::NAME, new ResultsProcessed($this->results)); + $eventDispatcher->dispatch(SearchApiEvents::PROCESSING_RESULTS, new ProcessingResultsEvent($this->results)); $hooks = ['search_api_results']; foreach ($this->tags as $tag) { $hooks[] = "search_api_results_$tag"; - $eventName = sprintf('%s.%s', ResultsProcessed::NAME, $tag); - $eventDispatcher->dispatch($eventName, new ResultsProcessed($this->results)); + $eventName = sprintf('%s.%s', SearchApiEvents::PROCESSING_RESULTS, $tag); + $eventDispatcher->dispatch($eventName, new ProcessingResultsEvent($this->results)); } - $description = sprintf('Use %s instead', ResultsProcessed::class); + $description = sprintf('Use %s instead', ProcessingResultsEvent::class); $this->getModuleHandler()->alterDeprecated($description, $hooks, $this->results); // Store the results in the static cache. diff --git a/src/SearchApiPluginManager.php b/src/SearchApiPluginManager.php index 7da45527..b4bf0810 100644 --- a/src/SearchApiPluginManager.php +++ b/src/SearchApiPluginManager.php @@ -3,6 +3,8 @@ namespace Drupal\search_api; use Drupal\Core\Plugin\DefaultPluginManager; +use Drupal\search_api\Event\GatheringPluginInfoEvent; +use Drupal\search_api\Event\SearchApiEvents; /** * Overrides the default plugin manager to provide search api functionality. @@ -10,40 +12,39 @@ use Drupal\Core\Plugin\DefaultPluginManager; class SearchApiPluginManager extends DefaultPluginManager { /** - * Class name for the event to use. + * Event name for the event to use. * * @var string */ - private $alterEvent; + private $alterEventName; /** * Sets the alter event class name. * - * @param string $alterEvent - * Name of the event class to use for the alter event. + * @param string $eventName + * Name of the event to use for the alter event. */ - protected function alterEvent($alterEvent) { - $this->alterEvent = $alterEvent; + protected function alterEvent($eventName) { + $this->alterEventName = $eventName; } /** * {@inheritdoc} */ protected function alterDefinitions(&$definitions) { - if ($this->alterHook && !$this->alterEvent) { + if ($this->alterHook && !$this->alterEventName) { $this->moduleHandler->alter($this->alterHook, $definitions); return; } if ($this->alterHook) { - $alternative = sprintf('Use the %s event instead.', $this->alterEvent); - $this->moduleHandler->alterDeprecated($alternative, $this->alterHook, $definitions); + $description = sprintf('%s is deprecated in search_api 8.1.14. Please use the %s event instead. See %s', $this->alterHook, $this->alterEventName, SearchApiEvents::class); + $this->moduleHandler->alterDeprecated($description, $this->alterHook, $definitions); } /** @var \Symfony\Component\EventDispatcher\EventDispatcherInterface $dispatcher */ $dispatcher = \Drupal::getContainer()->get('event_dispatcher'); - $event = new $this->alterEvent($definitions); - $dispatcher->dispatch($event::NAME, $event); + $dispatcher->dispatch($this->alterEventName, new GatheringPluginInfoEvent($definitions)); } } diff --git a/src/Tracker/TrackerPluginManager.php b/src/Tracker/TrackerPluginManager.php index d734a626..66c3a1b4 100644 --- a/src/Tracker/TrackerPluginManager.php +++ b/src/Tracker/TrackerPluginManager.php @@ -4,7 +4,8 @@ namespace Drupal\search_api\Tracker; use Drupal\Core\Cache\CacheBackendInterface; use Drupal\Core\Extension\ModuleHandlerInterface; -use Drupal\search_api\Event\TrackersGathered; +use Drupal\search_api\Event\GatheringTrackersEventGathering; +use Drupal\search_api\Event\SearchApiEvents; use Drupal\search_api\SearchApiPluginManager; use Drupal\search_api\Utility\Utility; @@ -34,7 +35,7 @@ class TrackerPluginManager extends SearchApiPluginManager { parent::__construct('Plugin/search_api/tracker', $namespaces, $module_handler, 'Drupal\search_api\Tracker\TrackerInterface', 'Drupal\search_api\Annotation\SearchApiTracker'); $this->setCacheBackend($cache_backend, 'search_api_trackers'); $this->alterInfo('search_api_tracker_info'); - $this->alterEvent(TrackersGathered::class); + $this->alterEvent(SearchApiEvents::GATHERING_TRACKERS); } /** diff --git a/src/Utility/CommandHelper.php b/src/Utility/CommandHelper.php index 17b8f473..2cc1a44e 100644 --- a/src/Utility/CommandHelper.php +++ b/src/Utility/CommandHelper.php @@ -8,7 +8,8 @@ use Drupal\Core\Entity\EntityStorageException; use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Extension\ModuleHandlerInterface; use Drupal\search_api\ConsoleException; -use Drupal\search_api\Event\ReindexScheduled; +use Drupal\search_api\Event\ReindexScheduledEvent; +use Drupal\search_api\Event\SearchApiEvents; use Drupal\search_api\IndexBatchHelper; use Drupal\search_api\IndexInterface; use Drupal\search_api\SearchApiException; @@ -355,11 +356,11 @@ class CommandHelper implements LoggerAwareInterface { $reindexed_datasources[] = $datasource->label(); } } - $description = sprintf('Use %s instead.', ReindexScheduled::class); + $description = sprintf('Use %s instead.', ReindexScheduledEvent::class); $this->moduleHandler->invokeAllDeprecated($description, 'search_api_index_reindex', [$index, FALSE]); /** @var \Symfony\Component\EventDispatcher\EventDispatcherInterface $dispatcher */ $dispatcher = \Drupal::getContainer()->get('event_dispatcher'); - $dispatcher->dispatch(ReindexScheduled::NAME, new ReindexScheduled($index, FALSE)); + $dispatcher->dispatch(SearchApiEvents::REINDEX_SCHEDULED, new ReindexScheduledEvent($index, FALSE)); $arguments = [ '!index' => $index->label(), '!datasources' => implode(', ', $reindexed_datasources), diff --git a/src/Utility/DataTypeHelper.php b/src/Utility/DataTypeHelper.php index 962c31e3..47621e4c 100644 --- a/src/Utility/DataTypeHelper.php +++ b/src/Utility/DataTypeHelper.php @@ -4,7 +4,8 @@ namespace Drupal\search_api\Utility; use Drupal\Core\Extension\ModuleHandlerInterface; use Drupal\search_api\DataType\DataTypePluginManager; -use Drupal\search_api\Event\FieldTypesMapped; +use Drupal\search_api\Event\MappingFieldTypesEvent; +use Drupal\search_api\Event\SearchApiEvents; use Drupal\search_api\IndexInterface; use Drupal\search_api\SearchApiException; @@ -126,11 +127,11 @@ class DataTypeHelper implements DataTypeHelperInterface { // Allow other modules to intercept and define what default type they want // to use for their data type. - $description = sprintf('Use %s instead.', FieldTypesMapped::class); + $description = sprintf('Use %s instead.', MappingFieldTypesEvent::class); $this->moduleHandler->alterDeprecated($description, 'search_api_field_type_mapping', $mapping); /** @var \Symfony\Component\EventDispatcher\EventDispatcherInterface $eventDispatcher */ $eventDispatcher = \Drupal::getContainer()->get('event_dispatcher'); - $eventDispatcher->dispatch(FieldTypesMapped::NAME, new FieldTypesMapped($mapping)); + $eventDispatcher->dispatch(SearchApiEvents::MAPPING_FIELD_TYPES, new MappingFieldTypesEvent($mapping)); $this->fieldTypeMapping = $mapping; } diff --git a/tests/search_api_test_events/src/EventListener.php b/tests/search_api_test_events/src/EventListener.php index 76cc326b..f3db0468 100644 --- a/tests/search_api_test_events/src/EventListener.php +++ b/tests/search_api_test_events/src/EventListener.php @@ -3,19 +3,14 @@ namespace Drupal\search_api_test_events; use Drupal\Core\Messenger\MessengerInterface; -use Drupal\search_api\Event\BackendsGathered; -use Drupal\search_api\Event\DataSourcesGathered; -use Drupal\search_api\Event\DataTypesGathered; -use Drupal\search_api\Event\DisplaysGathered; -use Drupal\search_api\Event\FieldTypesMapped; -use Drupal\search_api\Event\ItemsIndexed; -use Drupal\search_api\Event\ParseModesGathered; -use Drupal\search_api\Event\ProcessorsGathered; -use Drupal\search_api\Event\QueryCreated; -use Drupal\search_api\Event\ReindexScheduled; -use Drupal\search_api\Event\ResultsProcessed; -use Drupal\search_api\Event\ServerFeaturesInitialized; -use Drupal\search_api\Event\TrackersGathered; +use Drupal\search_api\Event\GatheringPluginInfoEvent; +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\IntializingServerFeaturesEvent; +use Drupal\search_api\Event\SearchApiEvents; use Drupal\search_api\Utility\Utility; use Symfony\Component\EventDispatcher\EventSubscriberInterface; @@ -46,43 +41,43 @@ class EventListener implements EventSubscriberInterface { */ public static function getSubscribedEvents() { return [ - BackendsGathered::NAME => 'backendInfoAlter', - DataSourcesGathered::NAME => 'dataSourceInfoAlter', - DataTypesGathered::NAME => 'dataTypeInfoAlter', - DisplaysGathered::NAME => 'displaysAlter', - FieldTypesMapped::NAME => 'fieldTypeMappingAlter', - ItemsIndexed::NAME => 'itemsIndexed', - ParseModesGathered::NAME => 'parseModeInfoAlter', - ProcessorsGathered::NAME => 'processorInfoAlter', - QueryCreated::NAME => 'queryAlter', - QueryCreated::NAME . '.andrew_hill' => 'queryTagAlter', - ReindexScheduled::NAME => 'reindex', - ResultsProcessed::NAME => 'resultsAlter', - ResultsProcessed::NAME . '.andrew_hill' => 'resultsTagAlter', - ServerFeaturesInitialized::NAME => 'serverFeaturesAlter', - TrackersGathered::NAME => 'trackerInfoAlter', + SearchApiEvents::GATHERING_BACKENDS => 'backendInfoAlter', + SearchApiEvents::GATHERING_DATA_SOURCES => 'dataSourceInfoAlter', + SearchApiEvents::GATHERING_DATA_TYPES => 'dataTypeInfoAlter', + SearchApiEvents::GATHERING_DISPLAYS => 'displaysAlter', + SearchApiEvents::MAPPING_FIELD_TYPES => 'fieldTypeMappingAlter', + 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::INITIALIZING_SERVER_FEATURES => 'serverFeaturesAlter', + SearchApiEvents::GATHERING_TRACKERS => 'trackerInfoAlter', ]; } /** * Event handler for the backend info alter event. * - * @param \Drupal\search_api\Event\BackendsGathered $event + * @param \Drupal\search_api\Event\GatheringPluginInfoEvent $event * The backend info alter event. */ - public function backendInfoAlter(BackendsGathered $event) { - $backend_info = &$event->getBackendInfo(); + public function backendInfoAlter(GatheringPluginInfoEvent $event) { + $backend_info = &$event->getDefinitions(); $backend_info['search_api_test']['label'] = 'Slims return'; } /** * Event handler for the data type info alter event. * - * @param \Drupal\search_api\Event\DataTypesGathered $event + * @param \Drupal\search_api\Event\GatheringPluginInfoEvent $event * The data type info alter event. */ - public function dataTypeInfoAlter(DataTypesGathered $event) { - $dataTypePluginInfo = &$event->getDataTypePluginInfo(); + public function dataTypeInfoAlter(GatheringPluginInfoEvent $event) { + $dataTypePluginInfo = &$event->getDefinitions(); if (isset($dataTypePluginInfo['text'])) { $dataTypePluginInfo['text']['label'] = 'Peace/Dolphin dance'; } @@ -91,11 +86,11 @@ class EventListener implements EventSubscriberInterface { /** * Event handler for the data source info alter event. * - * @param \Drupal\search_api\Event\DataSourcesGathered $event + * @param \Drupal\search_api\Event\GatheringPluginInfoEvent $event * The data source info alter event. */ - public function dataSourceInfoAlter(DataSourcesGathered $event) { - $infos = &$event->getDataSourceInfo(); + public function dataSourceInfoAlter(GatheringPluginInfoEvent $event) { + $infos = &$event->getDefinitions(); if (isset($infos['entity:node'])) { $infos['entity:node']['label'] = 'Distant land'; } @@ -104,11 +99,11 @@ class EventListener implements EventSubscriberInterface { /** * Event handler for the displays alter event. * - * @param \Drupal\search_api\Event\DisplaysGathered $event + * @param \Drupal\search_api\Event\GatheringPluginInfoEvent $event * The displays alter event. */ - public function displaysAlter(DisplaysGathered $event) { - $displays = &$event->getDisplays(); + 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'; } @@ -117,10 +112,10 @@ class EventListener implements EventSubscriberInterface { /** * Event handler for the field type mapping alter event. * - * @param \Drupal\search_api\Event\FieldTypesMapped $event + * @param \Drupal\search_api\Event\MappingFieldTypesEvent $event * The field type mapping alter event. */ - public function fieldTypeMappingAlter(FieldTypesMapped $event) { + public function fieldTypeMappingAlter(MappingFieldTypesEvent $event) { $mapping = &$event->getFieldTypeMapping(); $mapping['datetime_iso8601'] = FALSE; $mapping['timestamp'] = FALSE; @@ -129,21 +124,21 @@ class EventListener implements EventSubscriberInterface { /** * Event handler for the items indexed event. * - * @param \Drupal\search_api\Event\ItemsIndexed $event + * @param \Drupal\search_api\Event\ItemsIndexedEvent $event * The items indexed event. */ - public function itemsIndexed(ItemsIndexed $event) { + public function itemsIndexed(ItemsIndexedEvent $event) { $this->messenger->addStatus('Please set me at ease'); } /** * Event handler for the parse mode info alter event. * - * @param \Drupal\search_api\Event\ParseModesGathered $event + * @param \Drupal\search_api\Event\GatheringPluginInfoEvent $event * The parse mode plugin info alter event. */ - public function parseModeInfoAlter(ParseModesGathered $event) { - $parseModeInfo = &$event->getParseModeInfo(); + public function parseModeInfoAlter(GatheringPluginInfoEvent $event) { + $parseModeInfo = &$event->getDefinitions(); if (isset($parseModeInfo['direct'])) { $parseModeInfo['direct']['label'] = 'Song for My Father'; } @@ -152,21 +147,21 @@ class EventListener implements EventSubscriberInterface { /** * Event handler for the processor info alter event. * - * @param \Drupal\search_api\Event\ProcessorsGathered $event + * @param \Drupal\search_api\Event\GatheringPluginInfoEvent $event * The processor plugin info alter event. */ - public function processorInfoAlter(ProcessorsGathered $event) { - $processorInfo = &$event->getProcessorInfo(); + public function processorInfoAlter(GatheringPluginInfoEvent $event) { + $processorInfo = &$event->getDefinitions(); $processorInfo['content_access']['label'] = 'Mystic bounce'; } /** * Event handler for the query alter event. * - * @param \Drupal\search_api\Event\QueryCreated $event + * @param \Drupal\search_api\Event\QueryPreExecuteEvent $event * The query alter event. */ - public function queryAlter(QueryCreated $event) { + public function queryAlter(QueryPreExecuteEvent $event) { $query = $event->getQuery(); $this->messenger->addStatus('Funky blue note'); $this->messenger->addStatus("Search id: {$query->getSearchId(FALSE)}"); @@ -176,10 +171,10 @@ class EventListener implements EventSubscriberInterface { /** * Event handler for the query TAG alter event. * - * @param \Drupal\search_api\Event\QueryCreated $event + * @param \Drupal\search_api\Event\QueryPreExecuteEvent $event * The query alter event. */ - public function queryTagAlter(QueryCreated $event) { + public function queryTagAlter(QueryPreExecuteEvent $event) { $this->messenger->addStatus("Freeland"); $query = $event->getQuery(); // Exclude the node with ID 2 from the search results. @@ -199,40 +194,40 @@ class EventListener implements EventSubscriberInterface { /** * Event handler for the reindex event. * - * @param \Drupal\search_api\Event\ReindexScheduled $event + * @param \Drupal\search_api\Event\ReindexScheduledEvent $event * The reindex index event. */ - public function reindex(ReindexScheduled $event) { + public function reindex(ReindexScheduledEvent $event) { $this->messenger->addStatus('Montara'); } /** * Event handler for the results alter event. * - * @param \Drupal\search_api\Event\ResultsProcessed $event + * @param \Drupal\search_api\Event\ProcessingResultsEvent $event * The results alter event. */ - public function resultsAlter(ResultsProcessed $event) { + public function resultsAlter(ProcessingResultsEvent $event) { $this->messenger->addStatus('Stepping into tomorrow'); } /** * Event handler for the results TAG alter event. * - * @param \Drupal\search_api\Event\ResultsProcessed $event + * @param \Drupal\search_api\Event\ProcessingResultsEvent $event * The results alter event. */ - public function resultsTagAlter(ResultsProcessed $event) { + public function resultsTagAlter(ProcessingResultsEvent $event) { $this->messenger->addStatus('Llama'); } /** * Event handler for the server features alter event. * - * @param \Drupal\search_api\Event\ServerFeaturesInitialized $event + * @param \Drupal\search_api\Event\IntializingServerFeaturesEvent $event * The server features alter event. */ - public function serverFeaturesAlter(ServerFeaturesInitialized $event) { + public function serverFeaturesAlter(IntializingServerFeaturesEvent $event) { $features = &$event->getFeatures(); $server = $event->getServer(); if ($server->id() === 'webtest_server') { @@ -243,11 +238,11 @@ class EventListener implements EventSubscriberInterface { /** * Event handler for the tracker info alter event. * - * @param \Drupal\search_api\Event\TrackersGathered $event + * @param \Drupal\search_api\Event\GatheringPluginInfoEvent $event * The tracker plugin info alter event. */ - public function trackerInfoAlter(TrackersGathered $event) { - $trackerInfo = &$event->getTrackerInfo(); + public function trackerInfoAlter(GatheringPluginInfoEvent $event) { + $trackerInfo = &$event->getDefinitions(); $trackerInfo['search_api_test']['label'] = 'Good luck'; }