Skip to content

Commit

Permalink
Merge pull request #38 from rosiel/QueryEventHandler
Browse files Browse the repository at this point in the history
Query alter done via an event handler for Search API Solr 4.3 deprecations.
  • Loading branch information
aOelschlager authored Sep 26, 2023
2 parents 15703a1 + c07f090 commit 6aa6af2
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 13 deletions.
13 changes: 0 additions & 13 deletions advanced_search.module
Original file line number Diff line number Diff line change
Expand Up @@ -51,19 +51,6 @@ function advanced_search_library_info_alter(&$libraries, $extension) {
}
}

/**
* Implements hook_search_api_solr_converted_query_alter().
*/
function advanced_search_search_api_solr_converted_query_alter(SolariumQueryInterface $solarium_query, DrupalQueryInterface $search_api_query) {
// We must modify the query itself rather than the representation the
// search_api presents as it is not possible to use the 'OR' operator
// with it as it converts conditions into separate filter queries.
// Additionally filter queries do not affect the score so are not
// suitable for use in the advanced search queries.
$advanced_search_query = new AdvancedSearchQuery();
$advanced_search_query->alterQuery(\Drupal::request(), $solarium_query, $search_api_query);
}

/**
* Implements hook_form_form_id_alter().
*/
Expand Down
4 changes: 4 additions & 0 deletions advanced_search.services.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
services:
Drupal\advanced_search\EventSubscriber\PostConvertedQueryEventSubscriber:
tags:
- { name: 'event_subscriber' }
43 changes: 43 additions & 0 deletions src/EventSubscriber/PostConvertedQueryEventSubscriber.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<?php

namespace Drupal\advanced_search\EventSubscriber;

use Drupal\advanced_search\AdvancedSearchQuery;
use Drupal\search_api_solr\Event\PostConvertedQueryEvent;
use Drupal\search_api_solr\Event\SearchApiSolrEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

/**
* Subscribes to PostConvertedQueryEvents.
*
* @package Drupal\advanced_search\EventSubscriber
*/
class PostConvertedQueryEventSubscriber implements EventSubscriberInterface {

/**
* {@inheritdoc}
*/
public static function getSubscribedEvents() {
$events[SearchAPISolrEvents::POST_CONVERT_QUERY][] = ['alter'];

return $events;

}

/**
* Alter the query.
*/
public function alter(PostConvertedQueryEvent $event) {
$search_api_query = $event->getSearchApiQuery();
$solarium_query = $event->getSolariumQuery();

// We must modify the query itself rather than the representation the
// search_api presents as it is not possible to use the 'OR' operator
// with it as it converts conditions into separate filter queries.
// Additionally filter queries do not affect the score so are not
// suitable for use in the advanced search queries.
$advanced_search_query = new AdvancedSearchQuery();
$advanced_search_query->alterQuery(\Drupal::request(), $solarium_query, $search_api_query);
}

}

0 comments on commit 6aa6af2

Please sign in to comment.