From 27f859d78b1ce5a0e175c2dbe50fc2fa95058340 Mon Sep 17 00:00:00 2001 From: upchuk Date: Thu, 10 Mar 2022 15:41:57 +0100 Subject: [PATCH] EWPP-1843: Query subscriber only kicks in for list pages source. --- oe_list_pages.services.yml | 2 +- src/EventSubscriber/QuerySubscriber.php | 25 +++++++++++++++++++++++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/oe_list_pages.services.yml b/oe_list_pages.services.yml index 1e637209..b20722ba 100644 --- a/oe_list_pages.services.yml +++ b/oe_list_pages.services.yml @@ -4,7 +4,7 @@ services: arguments: ['@facets.manager', '@entity_type.manager'] oe_list_pages.query_event_subscriber: class: Drupal\oe_list_pages\EventSubscriber\QuerySubscriber - arguments: ['@facets.manager', '@plugin.manager.facets.query_type'] + arguments: ['@facets.manager', '@plugin.manager.facets.query_type', '@plugin.manager.facets.facet_source'] tags: - { name: event_subscriber } oe_list_pages.execution_manager: diff --git a/src/EventSubscriber/QuerySubscriber.php b/src/EventSubscriber/QuerySubscriber.php index ef7dc140..4b8e5d6d 100644 --- a/src/EventSubscriber/QuerySubscriber.php +++ b/src/EventSubscriber/QuerySubscriber.php @@ -6,6 +6,7 @@ use Drupal\facets\FacetInterface; use Drupal\facets\FacetManager\DefaultFacetManager; +use Drupal\facets\FacetSource\FacetSourcePluginManager; use Drupal\facets\QueryType\QueryTypePluginManager; use Drupal\oe_list_pages\ListPresetFilter; use Drupal\oe_list_pages\DefaultFilterConfigurationBuilder; @@ -34,6 +35,13 @@ class QuerySubscriber implements EventSubscriberInterface { */ protected $queryTypePluginManager; + /** + * The facet source plugin manager. + * + * @var \Drupal\facets\FacetSource\FacetSourcePluginManager + */ + protected $facetSourcePluginManager; + /** * QuerySubscriber Constructor. * @@ -41,10 +49,13 @@ class QuerySubscriber implements EventSubscriberInterface { * The facets manager. * @param \Drupal\facets\QueryType\QueryTypePluginManager $queryTypePluginManager * The query type plugin manager. + * @param \Drupal\facets\FacetSource\FacetSourcePluginManager $facetSourcePluginManager + * The facet source plugin manager. */ - public function __construct(DefaultFacetManager $facetManager, QueryTypePluginManager $queryTypePluginManager) { + public function __construct(DefaultFacetManager $facetManager, QueryTypePluginManager $queryTypePluginManager, FacetSourcePluginManager $facetSourcePluginManager) { $this->facetManager = $facetManager; $this->queryTypePluginManager = $queryTypePluginManager; + $this->facetSourcePluginManager = $facetSourcePluginManager; } /** @@ -63,16 +74,26 @@ public static function getSubscribedEvents() { * The query alter event. * * @SuppressWarnings(PHPMD.CyclomaticComplexity) + * @SuppressWarnings(PHPMD.NPathComplexity) */ public function queryAlter(QueryPreExecuteEvent $event) { $query = $event->getQuery(); $ignored_filters = $preset_filter_values = []; + $source_id = $query->getSearchId(); + if (!$this->facetSourcePluginManager->hasDefinition($source_id)) { + return; + } + + $definition = $this->facetSourcePluginManager->getDefinition($source_id); + if ($definition['provider'] !== 'oe_list_pages') { + return; + } + if (!$query->getIndex()->getServerInstance()->supportsFeature('search_api_facets')) { return; } - $source_id = $query->getSearchId(); /** @var \Drupal\oe_list_pages\ListQueryOptionsInterface $query_options */ $query_options = $query->getOption('oe_list_page_query_options');