diff options
Diffstat (limited to 'modules/taxonomy/taxonomy.module')
-rw-r--r-- | modules/taxonomy/taxonomy.module | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/modules/taxonomy/taxonomy.module b/modules/taxonomy/taxonomy.module index ca77907ae..ee12be718 100644 --- a/modules/taxonomy/taxonomy.module +++ b/modules/taxonomy/taxonomy.module @@ -1906,3 +1906,35 @@ function taxonomy_taxonomy_term_delete($term) { /** * @} End of "defgroup taxonomy_index". */ + +/** + * Implements hook_entity_query_alter(). + * + * Converts EntityFieldQuery instances on taxonomy terms that have an entity + * condition on term bundles (vocabulary machine names). Since the vocabulary + * machine name is not present in the {taxonomy_term_data} table itself, we have + * to convert the bundle condition into a proprety condition of vocabulary IDs + * to match against {taxonomy_term_data}.vid. + */ +function taxonomy_entity_query_alter($query) { + $conditions = &$query->entityConditions; + + // Alter only taxonomy term queries with bundle conditions. + if (isset($conditions['entity_type']) && $conditions['entity_type']['value'] == 'taxonomy_term' && isset($conditions['bundle'])) { + // Convert vocabulary machine names to vocabulary IDs. + $vocabulary_data = taxonomy_vocabulary_get_names(); + $vids = array(); + if (is_array($conditions['bundle']['value'])) { + foreach ($conditions['bundle']['value'] as $vocabulary_machine_name) { + $vids[] = $vocabulary_data[$vocabulary_machine_name]->vid; + } + } + else { + $vocabulary_machine_name = $conditions['bundle']['value']; + $vids = $vocabulary_data[$vocabulary_machine_name]->vid; + } + + $query->propertyCondition('vid', $vids, $conditions['bundle']['operator']); + unset($conditions['bundle']); + } +} |