summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAngie Byron <webchick@24967.no-reply.drupal.org>2010-01-08 07:05:52 +0000
committerAngie Byron <webchick@24967.no-reply.drupal.org>2010-01-08 07:05:52 +0000
commitfdd39823ba9560dd23e17aa7a42513ed3de0f13c (patch)
tree6afc9fbb91beedd1d8d8aed7dbaae7b665764faa
parent326e6273980ccf4ebae9ae9aab9633544c345a8c (diff)
downloadbrdo-fdd39823ba9560dd23e17aa7a42513ed3de0f13c.tar.gz
brdo-fdd39823ba9560dd23e17aa7a42513ed3de0f13c.tar.bz2
#609140 by mcarbone: Rewrite outdated references to taxonomy_term_node().
-rw-r--r--modules/node/node.admin.inc4
-rw-r--r--modules/node/node.module8
-rw-r--r--modules/node/node.test3
-rw-r--r--modules/search/search.api.php4
-rw-r--r--modules/taxonomy/taxonomy.test128
5 files changed, 139 insertions, 8 deletions
diff --git a/modules/node/node.admin.inc b/modules/node/node.admin.inc
index 9669b8972..7cbad1dcc 100644
--- a/modules/node/node.admin.inc
+++ b/modules/node/node.admin.inc
@@ -133,8 +133,8 @@ function node_build_filter_query(SelectQueryInterface $query) {
list($key, $value) = $filter;
switch ($key) {
case 'term':
- $index = 'tn' . $counter++;
- $query->join('taxonomy_term_node', $index, "n.nid = $index.nid");
+ $index = 'ti' . $counter++;
+ $query->join('taxonomy_index', $index, "n.nid = $index.nid");
$query->condition($index . '.tid', $value);
break;
case 'status':
diff --git a/modules/node/node.module b/modules/node/node.module
index a5f72abcc..3e95d5272 100644
--- a/modules/node/node.module
+++ b/modules/node/node.module
@@ -1576,8 +1576,8 @@ function node_search_execute($keys = NULL) {
// Insert special keywords.
$query->setOption('type', 'n.type');
$query->setOption('language', 'n.language');
- if ($query->setOption('term', 'tn.nid')) {
- $query->join('taxonomy_term_node', 'tn', 'n.vid = tn.vid');
+ if ($query->setOption('term', 'ti.tid')) {
+ $query->join('taxonomy_index', 'ti', 'n.nid = ti.nid');
}
// Only continue if the first pass query matches.
if (!$query->executeFirstPass()) {
@@ -2383,10 +2383,10 @@ function node_search_validate($form, &$form_state) {
}
}
- if (isset($form_state['values']['term']) && is_array($form_state['values']['term'])) {
+ if (isset($form_state['values']['term']) && is_array($form_state['values']['term']) && count($form_state['values']['term'])) {
$keys = search_expression_insert($keys, 'term', implode(',', $form_state['values']['term']));
}
- if (isset($form_state['values']['language']) && is_array($form_state['values']['language'])) {
+ if (isset($form_state['values']['language']) && is_array($form_state['values']['language']) && count($form_state['values']['language'])) {
$keys = search_expression_insert($keys, 'language', implode(',', array_filter($form_state['values']['language'])));
}
if ($form_state['values']['or'] != '') {
diff --git a/modules/node/node.test b/modules/node/node.test
index 6eeda5c25..f697f468d 100644
--- a/modules/node/node.test
+++ b/modules/node/node.test
@@ -1010,6 +1010,9 @@ class NodeAdminTestCase extends DrupalWebTestCase {
/**
* Tests content overview with different user permissions.
+ *
+ * Taxonomy filters are tested separately.
+ * @see TaxonomyNodeFilterTestCase
*/
function testContentAdminPages() {
$this->drupalLogin($this->admin_user);
diff --git a/modules/search/search.api.php b/modules/search/search.api.php
index 2912b30f7..5908c74cb 100644
--- a/modules/search/search.api.php
+++ b/modules/search/search.api.php
@@ -156,8 +156,8 @@ function hook_search_execute($keys = NULL) {
// Insert special keywords.
$query->setOption('type', 'n.type');
$query->setOption('language', 'n.language');
- if ($query->setOption('term', 'tn.nid')) {
- $query->join('taxonomy_term_node', 'tn', 'n.vid = tn.vid');
+ if ($query->setOption('term', 'ti.tid')) {
+ $query->join('taxonomy_index', 'ti', 'n.nid = ti.nid');
}
// Only continue if the first pass query matches.
if (!$query->executeFirstPass()) {
diff --git a/modules/taxonomy/taxonomy.test b/modules/taxonomy/taxonomy.test
index f44db545d..101530350 100644
--- a/modules/taxonomy/taxonomy.test
+++ b/modules/taxonomy/taxonomy.test
@@ -834,3 +834,131 @@ class TaxonomyTermFieldTestCase extends TaxonomyWebTestCase {
$this->assertText($term->name, t('Term name is displayed'));
}
}
+
+/**
+ * Test taxonomy filters in node forms.
+ */
+class TaxonomyNodeFilterTestCase extends TaxonomyWebTestCase {
+
+ public static function getInfo() {
+ return array(
+ 'name' => 'Taxonomy term filters in node forms',
+ 'description' => 'Test node form filtering by taxonomy terms.',
+ 'group' => 'Taxonomy',
+ );
+ }
+
+ function setUp() {
+ parent::setUp();
+ $this->admin_user = $this->drupalCreateUser(array('access administration pages', 'access content overview', 'bypass node access', 'search content', 'use advanced search'));
+ $this->drupalLogin($this->admin_user);
+ $this->vocabulary = $this->createVocabulary();
+
+ $this->langcode = LANGUAGE_NONE;
+ $this->instance = array(
+ 'field_name' => 'taxonomy_' . $this->vocabulary->machine_name,
+ 'bundle' => 'article',
+ 'object_type' => 'node',
+ 'widget' => array(
+ 'type' => 'options_select',
+ ),
+ 'display' => array(
+ 'full' => array(
+ 'type' => 'taxonomy_term_reference_link',
+ ),
+ ),
+ );
+ field_create_instance($this->instance);
+ }
+
+ /**
+ * Test node administration page filtering by taxonomy terms.
+ */
+ function testContentAdminPage() {
+ // Create two taxonomy terms.
+ $term1 = $this->createTerm($this->vocabulary);
+ $term2 = $this->createTerm($this->vocabulary);
+
+ // Create nodes with various terms.
+ $nodes['article1'] = $this->drupalCreateNode(array('type' => 'article'));
+ $edit[$this->instance['field_name'] . '[' . $this->langcode . '][]'] = $term1->tid;
+ $this->drupalPost('node/' . $nodes['article1']->nid . '/edit', $edit, t('Save'));
+
+ $nodes['article2'] = $this->drupalCreateNode(array('type' => 'article'));
+ $edit[$this->instance['field_name'] . '[' . $this->langcode . '][]'] = $term2->tid;
+ $this->drupalPost('node/' . $nodes['article2']->nid . '/edit', $edit, t('Save'));
+
+ $nodes['article1_2'] = $this->drupalCreateNode(array('type' => 'article'));
+ $edit[$this->instance['field_name'] . '[' . $this->langcode . '][]'] = array($term1->tid, $term2->tid);
+ $this->drupalPost('node/' . $nodes['article1_2']->nid . '/edit', $edit, t('Save'));
+
+ // Verify that nodes appear on content admin page.
+ $this->drupalGet('admin/content');
+ $this->assertResponse(200);
+ foreach ($nodes as $node) {
+ $this->assertLinkByHref('node/' . $node->nid);
+ }
+
+ // Verify filtering by term 1.
+ $edit = array(
+ 'term' => $term1->tid,
+ );
+ $this->drupalPost(NULL, $edit, t('Filter'));
+ $this->assertRaw(t('<strong>%type</strong> is <strong>%name</strong>', array('%type' => 'term', '%name' => $term1->name)), t('Content list is filtered by term 1.'));
+ $this->assertLinkByHref('node/' . $nodes['article1']->nid . '/edit');
+ $this->assertLinkByHref('node/' . $nodes['article1_2']->nid . '/edit');
+ $this->assertNoLinkByHref('node/' . $nodes['article2']->nid . '/edit');
+
+ // Verify filtering by term 1 and term 2.
+ $edit = array(
+ 'term' => $term2->tid,
+ );
+ $this->drupalPost(NULL, $edit, t('Refine'));
+ $this->assertRaw(t('<strong>%type</strong> is <strong>%name</strong>', array('%type' => 'term', '%name' => $term1->name)), t('Content list is filtered by term 1.'));
+ $this->assertRaw(t('<strong>%type</strong> is <strong>%name</strong>', array('%type' => 'term', '%name' => $term2->name)), t('Content list is filtered by term 2.'));
+ $this->assertLinkByHref('node/' . $nodes['article1_2']->nid . '/edit');
+ $this->assertNoLinkByHref('node/' . $nodes['article1']->nid . '/edit');
+ $this->assertNoLinkByHref('node/' . $nodes['article2']->nid . '/edit');
+
+ // Verify filtering by term 2.
+ $this->drupalPost(NULL, $edit, t('Reset'));
+ $edit = array(
+ 'term' => $term2->tid,
+ );
+ $this->drupalPost(NULL, $edit, t('Filter'));
+ $this->assertRaw(t('<strong>%type</strong> is <strong>%name</strong>', array('%type' => 'term', '%name' => $term2->name)), t('Content list is filtered by term 2.'));
+ $this->assertLinkByHref('node/' . $nodes['article2']->nid . '/edit');
+ $this->assertLinkByHref('node/' . $nodes['article1_2']->nid . '/edit');
+ $this->assertNoLinkByHref('node/' . $nodes['article1']->nid . '/edit');
+ }
+
+ /**
+ * Test advanced search filtering by taxonomy terms.
+ */
+ function testAdvancedSearch() {
+ // Create two taxonomy terms.
+ $term1 = $this->createTerm($this->vocabulary);
+ $term2 = $this->createTerm($this->vocabulary);
+
+ // Create a node with the term.
+ $node = $this->drupalCreateNode(array('type' => 'article'));
+ $edit[$this->instance['field_name'] . '[' . $this->langcode . '][]'] = $term1->tid;
+ $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
+
+ // Update the search index.
+ node_update_index();
+ search_update_totals();
+
+ // Search for the node title.
+ $this->drupalGet('search/node/' . $node->title[$this->langcode][0]['value']);
+ $this->assertText($node->title[$this->langcode][0]['value'], t('Article node found with search.'));
+
+ // Search for the node title, filtering by term 1.
+ $this->drupalGet('search/node/' . $node->title[$this->langcode][0]['value'] . ' term:' . $term1->tid);
+ $this->assertText($node->title[$this->langcode][0]['value'], t('Article node found with search filtering by term 1.'));
+
+ // Search for the node title, filtering by term 2.
+ $this->drupalGet('search/node/' . $node->title[$this->langcode][0]['value'] . ' term:' . $term2->tid);
+ $this->assertNoText($node->title[$this->langcode][0]['value'], t('Article node not found with search filtering by term 2.'));
+ }
+}