summaryrefslogtreecommitdiff
path: root/modules/taxonomy
diff options
context:
space:
mode:
authorwebchick <webchick@24967.no-reply.drupal.org>2012-03-01 21:09:58 -0800
committerwebchick <webchick@24967.no-reply.drupal.org>2012-03-01 21:09:58 -0800
commit9749406ba02b277b8e30c21b640cbf17cf50b265 (patch)
tree72b8d56724981cd0b5762384d99682715304617b /modules/taxonomy
parent57c4d21ed396a68d671ce219aec59b72de99acbb (diff)
downloadbrdo-9749406ba02b277b8e30c21b640cbf17cf50b265.tar.gz
brdo-9749406ba02b277b8e30c21b640cbf17cf50b265.tar.bz2
Issue #336697 by oriol_e9g, xjm, jbomb, Davy Van Den Bremt, coltrane, lyricnz: Added Optional vocabulary argument for taxonomy_get_term_by_name().
Diffstat (limited to 'modules/taxonomy')
-rw-r--r--modules/taxonomy/taxonomy.module17
-rw-r--r--modules/taxonomy/taxonomy.test28
2 files changed, 43 insertions, 2 deletions
diff --git a/modules/taxonomy/taxonomy.module b/modules/taxonomy/taxonomy.module
index 3879efdb6..c920344c6 100644
--- a/modules/taxonomy/taxonomy.module
+++ b/modules/taxonomy/taxonomy.module
@@ -1095,12 +1095,25 @@ function taxonomy_get_tree($vid, $parent = 0, $max_depth = NULL, $load_entities
*
* @param $name
* Name of the term to search for.
+ * @param $vocabulary
+ * (optional) Vocabulary machine name to limit the search. Defaults to NULL.
*
* @return
* An array of matching term objects.
*/
-function taxonomy_get_term_by_name($name) {
- return taxonomy_term_load_multiple(array(), array('name' => trim($name)));
+function taxonomy_get_term_by_name($name, $vocabulary = NULL) {
+ $conditions = array('name' => trim($name));
+ if (isset($vocabulary)) {
+ $vocabularies = taxonomy_vocabulary_get_names();
+ if (isset($vocabularies[$vocabulary])) {
+ $conditions['vid'] = $vocabularies[$vocabulary]->vid;
+ }
+ else {
+ // Return an empty array when filtering by a non-existing vocabulary.
+ return array();
+ }
+ }
+ return taxonomy_term_load_multiple(array(), $conditions);
}
/**
diff --git a/modules/taxonomy/taxonomy.test b/modules/taxonomy/taxonomy.test
index 372982c9b..39164190b 100644
--- a/modules/taxonomy/taxonomy.test
+++ b/modules/taxonomy/taxonomy.test
@@ -895,6 +895,34 @@ class TaxonomyTermTestCase extends TaxonomyWebTestCase {
// Try to load the term using a substring of the name.
$terms = taxonomy_get_term_by_name(drupal_substr($term->name, 2));
$this->assertFalse($terms);
+
+ // Create a new term in a different vocabulary with the same name.
+ $new_vocabulary = $this->createVocabulary();
+ $new_term = new stdClass();
+ $new_term->name = $term->name;
+ $new_term->vid = $new_vocabulary->vid;
+ taxonomy_term_save($new_term);
+
+ // Load multiple terms with the same name.
+ $terms = taxonomy_get_term_by_name($term->name);
+ $this->assertEqual(count($terms), 2, t('Two terms loaded with the same name.'));
+
+ // Load single term when restricted to one vocabulary.
+ $terms = taxonomy_get_term_by_name($term->name, $this->vocabulary->machine_name);
+ $this->assertEqual(count($terms), 1, t('One term loaded when restricted by vocabulary.'));
+ $this->assertTrue(isset($terms[$term->tid]), t('Term loaded using exact name and vocabulary machine name.'));
+
+ // Create a new term with another name.
+ $term2 = $this->createTerm($this->vocabulary);
+
+ // Try to load a term by name that doesn't exist in this vocabulary but
+ // exists in another vocabulary.
+ $terms = taxonomy_get_term_by_name($term2->name, $new_vocabulary->machine_name);
+ $this->assertFalse($terms, t('Invalid term name restricted by vocabulary machine name not loaded.'));
+
+ // Try to load terms filtering by a non-existing vocabulary.
+ $terms = taxonomy_get_term_by_name($term2->name, 'non_existing_vocabulary');
+ $this->assertEqual(count($terms), 0, t('No terms loaded when restricted by a non-existing vocabulary.'));
}
}