Controller class for taxonomy terms.
This extends the DrupalDefaultEntityController class. Only alteration is that we match the condition on term name case-independently.
Hierarchy
Properties
| Name | Description |
|---|---|
| DrupalDefaultEntityController::$cache | Whether this entity type should use the static cache. |
| DrupalDefaultEntityController::$entityCache | Static cache of entities. |
| DrupalDefaultEntityController::$entityInfo | Array of information about the entity. |
| DrupalDefaultEntityController::$entityType | Entity type for this controller instance. |
| DrupalDefaultEntityController::$hookLoadArguments | Additional arguments to pass to hook_TYPE_load(). |
| DrupalDefaultEntityController::$idKey | Name of the entity's ID field in the entity database table. |
| DrupalDefaultEntityController::$revisionKey | Name of entity's revision database table field, if it supports revisions. |
| DrupalDefaultEntityController::$revisionTable | The table that stores revisions, if the entity supports revisions. |
Functions & methods
File
- modules/
taxonomy/ taxonomy.module, line 1129 - Enables the organization of content into categories.
View source
class TaxonomyTermController extends DrupalDefaultEntityController {
protected function buildQuery($ids, $conditions = array(), $revision_id = FALSE) {
$query = parent::buildQuery($ids, $conditions, $revision_id);
$query->addTag('translatable');
$query->addTag('term_access');
// When name is passed as a condition use LIKE.
if (isset($conditions['name'])) {
$query_conditions = &$query->conditions();
foreach ($query_conditions as $key => $condition) {
if ($condition['field'] == 'base.name') {
$query_conditions[$key]['operator'] = 'LIKE';
$query_conditions[$key]['value'] = db_like($query_conditions[$key]['value']);
}
}
}
// Add the machine name field from the {taxonomy_vocabulary} table.
$query->innerJoin('taxonomy_vocabulary', 'v', 'base.vid = v.vid');
$query->addField('v', 'machine_name', 'vocabulary_machine_name');
return $query;
}
protected function cacheGet($ids, $conditions = array()) {
$terms = parent::cacheGet($ids, $conditions);
// Name matching is case insensitive, note that with some collations
// LOWER() and drupal_strtolower() may return different results.
foreach ($terms as $term) {
$term_values = (array) $term;
if (isset($conditions['name']) && drupal_strtolower($conditions['name'] != drupal_strtolower($term_values['name']))) {
unset($terms[$term->tid]);
}
}
return $terms;
}
}