annotate modules/taxonomy/taxonomy.tokens.inc @ 0:ff03f76ab3fe

initial version
author danieleb <danielebarchiesi@me.com>
date Wed, 21 Aug 2013 18:51:11 +0100
parents
children
rev   line source
danielebarchiesi@0 1 <?php
danielebarchiesi@0 2
danielebarchiesi@0 3 /**
danielebarchiesi@0 4 * @file
danielebarchiesi@0 5 * Builds placeholder replacement tokens for taxonomy terms and vocabularies.
danielebarchiesi@0 6 */
danielebarchiesi@0 7
danielebarchiesi@0 8 /**
danielebarchiesi@0 9 * Implements hook_token_info().
danielebarchiesi@0 10 */
danielebarchiesi@0 11 function taxonomy_token_info() {
danielebarchiesi@0 12 $types['term'] = array(
danielebarchiesi@0 13 'name' => t("Taxonomy terms"),
danielebarchiesi@0 14 'description' => t("Tokens related to taxonomy terms."),
danielebarchiesi@0 15 'needs-data' => 'term',
danielebarchiesi@0 16 );
danielebarchiesi@0 17 $types['vocabulary'] = array(
danielebarchiesi@0 18 'name' => t("Vocabularies"),
danielebarchiesi@0 19 'description' => t("Tokens related to taxonomy vocabularies."),
danielebarchiesi@0 20 'needs-data' => 'vocabulary',
danielebarchiesi@0 21 );
danielebarchiesi@0 22
danielebarchiesi@0 23 // Taxonomy term related variables.
danielebarchiesi@0 24 $term['tid'] = array(
danielebarchiesi@0 25 'name' => t("Term ID"),
danielebarchiesi@0 26 'description' => t("The unique ID of the taxonomy term."),
danielebarchiesi@0 27 );
danielebarchiesi@0 28 $term['name'] = array(
danielebarchiesi@0 29 'name' => t("Name"),
danielebarchiesi@0 30 'description' => t("The name of the taxonomy term."),
danielebarchiesi@0 31 );
danielebarchiesi@0 32 $term['description'] = array(
danielebarchiesi@0 33 'name' => t("Description"),
danielebarchiesi@0 34 'description' => t("The optional description of the taxonomy term."),
danielebarchiesi@0 35 );
danielebarchiesi@0 36 $term['node-count'] = array(
danielebarchiesi@0 37 'name' => t("Node count"),
danielebarchiesi@0 38 'description' => t("The number of nodes tagged with the taxonomy term."),
danielebarchiesi@0 39 );
danielebarchiesi@0 40 $term['url'] = array(
danielebarchiesi@0 41 'name' => t("URL"),
danielebarchiesi@0 42 'description' => t("The URL of the taxonomy term."),
danielebarchiesi@0 43 );
danielebarchiesi@0 44
danielebarchiesi@0 45 // Taxonomy vocabulary related variables.
danielebarchiesi@0 46 $vocabulary['vid'] = array(
danielebarchiesi@0 47 'name' => t("Vocabulary ID"),
danielebarchiesi@0 48 'description' => t("The unique ID of the taxonomy vocabulary."),
danielebarchiesi@0 49 );
danielebarchiesi@0 50 $vocabulary['name'] = array(
danielebarchiesi@0 51 'name' => t("Name"),
danielebarchiesi@0 52 'description' => t("The name of the taxonomy vocabulary."),
danielebarchiesi@0 53 );
danielebarchiesi@0 54 $vocabulary['description'] = array(
danielebarchiesi@0 55 'name' => t("Description"),
danielebarchiesi@0 56 'description' => t("The optional description of the taxonomy vocabulary."),
danielebarchiesi@0 57 );
danielebarchiesi@0 58 $vocabulary['node-count'] = array(
danielebarchiesi@0 59 'name' => t("Node count"),
danielebarchiesi@0 60 'description' => t("The number of nodes tagged with terms belonging to the taxonomy vocabulary."),
danielebarchiesi@0 61 );
danielebarchiesi@0 62 $vocabulary['term-count'] = array(
danielebarchiesi@0 63 'name' => t("Term count"),
danielebarchiesi@0 64 'description' => t("The number of terms belonging to the taxonomy vocabulary."),
danielebarchiesi@0 65 );
danielebarchiesi@0 66
danielebarchiesi@0 67 // Chained tokens for taxonomies
danielebarchiesi@0 68 $term['vocabulary'] = array(
danielebarchiesi@0 69 'name' => t("Vocabulary"),
danielebarchiesi@0 70 'description' => t("The vocabulary the taxonomy term belongs to."),
danielebarchiesi@0 71 'type' => 'vocabulary',
danielebarchiesi@0 72 );
danielebarchiesi@0 73 $term['parent'] = array(
danielebarchiesi@0 74 'name' => t("Parent term"),
danielebarchiesi@0 75 'description' => t("The parent term of the taxonomy term, if one exists."),
danielebarchiesi@0 76 'type' => 'term',
danielebarchiesi@0 77 );
danielebarchiesi@0 78
danielebarchiesi@0 79 return array(
danielebarchiesi@0 80 'types' => $types,
danielebarchiesi@0 81 'tokens' => array(
danielebarchiesi@0 82 'term' => $term,
danielebarchiesi@0 83 'vocabulary' => $vocabulary,
danielebarchiesi@0 84 ),
danielebarchiesi@0 85 );
danielebarchiesi@0 86 }
danielebarchiesi@0 87
danielebarchiesi@0 88 /**
danielebarchiesi@0 89 * Implements hook_tokens().
danielebarchiesi@0 90 */
danielebarchiesi@0 91 function taxonomy_tokens($type, $tokens, array $data = array(), array $options = array()) {
danielebarchiesi@0 92 $replacements = array();
danielebarchiesi@0 93 $sanitize = !empty($options['sanitize']);
danielebarchiesi@0 94
danielebarchiesi@0 95 if ($type == 'term' && !empty($data['term'])) {
danielebarchiesi@0 96 $term = $data['term'];
danielebarchiesi@0 97
danielebarchiesi@0 98 foreach ($tokens as $name => $original) {
danielebarchiesi@0 99 switch ($name) {
danielebarchiesi@0 100 case 'tid':
danielebarchiesi@0 101 $replacements[$original] = $term->tid;
danielebarchiesi@0 102 break;
danielebarchiesi@0 103
danielebarchiesi@0 104 case 'name':
danielebarchiesi@0 105 $replacements[$original] = $sanitize ? check_plain($term->name) : $term->name;
danielebarchiesi@0 106 break;
danielebarchiesi@0 107
danielebarchiesi@0 108 case 'description':
danielebarchiesi@0 109 $replacements[$original] = $sanitize ? check_markup($term->description, $term->format, '', TRUE) : $term->description;
danielebarchiesi@0 110 break;
danielebarchiesi@0 111
danielebarchiesi@0 112 case 'url':
danielebarchiesi@0 113 $uri = entity_uri('taxonomy_term', $term);
danielebarchiesi@0 114 $replacements[$original] = url($uri['path'], array_merge($uri['options'], array('absolute' => TRUE)));
danielebarchiesi@0 115 break;
danielebarchiesi@0 116
danielebarchiesi@0 117 case 'node-count':
danielebarchiesi@0 118 $query = db_select('taxonomy_index');
danielebarchiesi@0 119 $query->condition('tid', $term->tid);
danielebarchiesi@0 120 $query->addTag('term_node_count');
danielebarchiesi@0 121 $count = $query->countQuery()->execute()->fetchField();
danielebarchiesi@0 122 $replacements[$original] = $count;
danielebarchiesi@0 123 break;
danielebarchiesi@0 124
danielebarchiesi@0 125 case 'vocabulary':
danielebarchiesi@0 126 $vocabulary = taxonomy_vocabulary_load($term->vid);
danielebarchiesi@0 127 $replacements[$original] = check_plain($vocabulary->name);
danielebarchiesi@0 128 break;
danielebarchiesi@0 129
danielebarchiesi@0 130 case 'parent':
danielebarchiesi@0 131 if ($parents = taxonomy_get_parents($term->tid)) {
danielebarchiesi@0 132 $parent = array_pop($parents);
danielebarchiesi@0 133 $replacements[$original] = check_plain($parent->name);
danielebarchiesi@0 134 }
danielebarchiesi@0 135 break;
danielebarchiesi@0 136 }
danielebarchiesi@0 137 }
danielebarchiesi@0 138
danielebarchiesi@0 139 if ($vocabulary_tokens = token_find_with_prefix($tokens, 'vocabulary')) {
danielebarchiesi@0 140 $vocabulary = taxonomy_vocabulary_load($term->vid);
danielebarchiesi@0 141 $replacements += token_generate('vocabulary', $vocabulary_tokens, array('vocabulary' => $vocabulary), $options);
danielebarchiesi@0 142 }
danielebarchiesi@0 143
danielebarchiesi@0 144 if (($vocabulary_tokens = token_find_with_prefix($tokens, 'parent')) && $parents = taxonomy_get_parents($term->tid)) {
danielebarchiesi@0 145 $parent = array_pop($parents);
danielebarchiesi@0 146 $replacements += token_generate('term', $vocabulary_tokens, array('term' => $parent), $options);
danielebarchiesi@0 147 }
danielebarchiesi@0 148 }
danielebarchiesi@0 149
danielebarchiesi@0 150 elseif ($type == 'vocabulary' && !empty($data['vocabulary'])) {
danielebarchiesi@0 151 $vocabulary = $data['vocabulary'];
danielebarchiesi@0 152
danielebarchiesi@0 153 foreach ($tokens as $name => $original) {
danielebarchiesi@0 154 switch ($name) {
danielebarchiesi@0 155 case 'vid':
danielebarchiesi@0 156 $replacements[$original] = $vocabulary->vid;
danielebarchiesi@0 157 break;
danielebarchiesi@0 158
danielebarchiesi@0 159 case 'name':
danielebarchiesi@0 160 $replacements[$original] = $sanitize ? check_plain($vocabulary->name) : $vocabulary->name;
danielebarchiesi@0 161 break;
danielebarchiesi@0 162
danielebarchiesi@0 163 case 'description':
danielebarchiesi@0 164 $replacements[$original] = $sanitize ? filter_xss($vocabulary->description) : $vocabulary->description;
danielebarchiesi@0 165 break;
danielebarchiesi@0 166
danielebarchiesi@0 167 case 'term-count':
danielebarchiesi@0 168 $query = db_select('taxonomy_term_data');
danielebarchiesi@0 169 $query->condition('vid', $vocabulary->vid);
danielebarchiesi@0 170 $query->addTag('vocabulary_term_count');
danielebarchiesi@0 171 $count = $query->countQuery()->execute()->fetchField();
danielebarchiesi@0 172 $replacements[$original] = $count;
danielebarchiesi@0 173 break;
danielebarchiesi@0 174
danielebarchiesi@0 175 case 'node-count':
danielebarchiesi@0 176 $query = db_select('taxonomy_index', 'ti');
danielebarchiesi@0 177 $query->addExpression('COUNT(DISTINCT ti.nid)');
danielebarchiesi@0 178 $query->leftJoin('taxonomy_term_data', 'td', 'ti.tid = td.tid');
danielebarchiesi@0 179 $query->condition('td.vid', $vocabulary->vid);
danielebarchiesi@0 180 $query->addTag('vocabulary_node_count');
danielebarchiesi@0 181 $count = $query->execute()->fetchField();
danielebarchiesi@0 182 $replacements[$original] = $count;
danielebarchiesi@0 183 break;
danielebarchiesi@0 184 }
danielebarchiesi@0 185 }
danielebarchiesi@0 186 }
danielebarchiesi@0 187
danielebarchiesi@0 188 return $replacements;
danielebarchiesi@0 189 }