summaryrefslogtreecommitdiff
path: root/modules/search
diff options
context:
space:
mode:
authorDavid Rothstein <drothstein@gmail.com>2015-03-30 23:28:55 -0400
committerDavid Rothstein <drothstein@gmail.com>2015-03-30 23:28:55 -0400
commit668db719eb6938d828cc6f066bedfacf620182d6 (patch)
treec3b42b868a1ef84fe03ee037825fbfb3fa82fd97 /modules/search
parentfc31045bbeb1c7f6332c133315f038bf14f028d3 (diff)
downloadbrdo-668db719eb6938d828cc6f066bedfacf620182d6.tar.gz
brdo-668db719eb6938d828cc6f066bedfacf620182d6.tar.bz2
Issue #2364069 by damiankloip: Search specific tags are not available and hook_query_TAG_alter hooks are not invoked
Diffstat (limited to 'modules/search')
-rw-r--r--modules/search/search.extender.inc14
-rw-r--r--modules/search/search.test41
-rw-r--r--modules/search/tests/search_node_tags.info6
-rw-r--r--modules/search/tests/search_node_tags.module23
4 files changed, 82 insertions, 2 deletions
diff --git a/modules/search/search.extender.inc b/modules/search/search.extender.inc
index 67094666e..72cea6472 100644
--- a/modules/search/search.extender.inc
+++ b/modules/search/search.extender.inc
@@ -149,6 +149,17 @@ class SearchQuery extends SelectQueryExtender {
$this->searchExpression = $expression;
$this->type = $module;
+ // Add a search_* tag. This needs to be added before any preExecute methods
+ // for decorated queries are called, as $this->prepared will be set to TRUE
+ // and tags added in the execute method will never get used. For example,
+ // if $query is extended by 'SearchQuery' then 'PagerDefault', the
+ // search-specific tag will be added too late (when preExecute() has
+ // already been called from the PagerDefault extender), and as a
+ // consequence will not be available to hook_query_alter() implementations,
+ // nor will the correct hook_query_TAG_alter() implementations get invoked.
+ // See node_search_execute().
+ $this->addTag('search_' . $module);
+
return $this;
}
@@ -494,9 +505,8 @@ class SearchQuery extends SelectQueryExtender {
$this->orderBy('calculated_score', 'DESC');
}
- // Add tag and useful metadata.
+ // Add useful metadata.
$this
- ->addTag('search_' . $this->type)
->addMetaData('normalize', $this->normalize)
->fields('i', array('type', 'sid'));
diff --git a/modules/search/search.test b/modules/search/search.test
index 19f4e5510..5f16db3f8 100644
--- a/modules/search/search.test
+++ b/modules/search/search.test
@@ -2049,6 +2049,47 @@ class SearchNodeAccessTest extends DrupalWebTestCase {
}
/**
+ * Tests node search with query tags.
+ */
+class SearchNodeTagTest extends DrupalWebTestCase {
+ public $test_user;
+
+ public static function getInfo() {
+ return array(
+ 'name' => 'Node search query tags',
+ 'description' => 'Tests Node search tags functionality.',
+ 'group' => 'Search',
+ );
+ }
+
+ function setUp() {
+ parent::setUp('search', 'search_node_tags');
+ node_access_rebuild();
+
+ // Create a test user and log in.
+ $this->test_user = $this->drupalCreateUser(array('search content'));
+ $this->drupalLogin($this->test_user);
+ }
+
+ /**
+ * Tests that the correct tags are available and hooks invoked.
+ */
+ function testNodeSearchQueryTags() {
+ $this->drupalCreateNode(array('body' => array(LANGUAGE_NONE => array(array('value' => 'testing testing testing.')))));
+
+ // Update the search index.
+ module_invoke_all('update_index');
+ search_update_totals();
+
+ $edit = array('keys' => 'testing');
+ $this->drupalPost('search/node', $edit, t('Search'));
+
+ $this->assertTrue(variable_get('search_node_tags_test_query_tag', FALSE), 'hook_query_alter() was invoked and the query contained the "search_node" tag.');
+ $this->assertTrue(variable_get('search_node_tags_test_query_tag_hook', FALSE), 'hook_query_search_node_alter() was invoked.');
+ }
+}
+
+/**
* Tests searching with locale values set.
*/
class SearchSetLocaleTest extends DrupalWebTestCase {
diff --git a/modules/search/tests/search_node_tags.info b/modules/search/tests/search_node_tags.info
new file mode 100644
index 000000000..dfa7d5356
--- /dev/null
+++ b/modules/search/tests/search_node_tags.info
@@ -0,0 +1,6 @@
+name = "Test search node tags"
+description = "Support module for Node search tags testing."
+package = Testing
+version = VERSION
+core = 7.x
+hidden = TRUE
diff --git a/modules/search/tests/search_node_tags.module b/modules/search/tests/search_node_tags.module
new file mode 100644
index 000000000..b66dd9eaf
--- /dev/null
+++ b/modules/search/tests/search_node_tags.module
@@ -0,0 +1,23 @@
+<?php
+
+/**
+ * @file
+ * Dummy module implementing a node search hooks for search module testing.
+ */
+
+
+/**
+ * Implements hook_query_alter().
+ */
+function search_node_tags_query_alter(QueryAlterableInterface $query) {
+ if ($query->hasTag('search_node')) {
+ variable_set('search_node_tags_test_query_tag', TRUE);
+ }
+}
+
+/**
+ * Implements hook_query_TAG_alter().
+ */
+function search_node_tags_query_search_node_alter(QueryAlterableInterface $query) {
+ variable_set('search_node_tags_test_query_tag_hook', TRUE);
+}