annotate sites/all/modules/token/token.install @ 9:830c812b520f

added smtp module
author root <root@paio.local>
date Mon, 28 Oct 2013 15:34:27 +0000
parents ff03f76ab3fe
children
rev   line source
danielebarchiesi@0 1 <?php
danielebarchiesi@0 2
danielebarchiesi@0 3 /**
danielebarchiesi@0 4 * @file
danielebarchiesi@0 5 * Install, update and uninstall functions for the token module.
danielebarchiesi@0 6 */
danielebarchiesi@0 7
danielebarchiesi@0 8 /**
danielebarchiesi@0 9 * Implements hook_requirements().
danielebarchiesi@0 10 */
danielebarchiesi@0 11 function token_requirements($phase = 'runtime') {
danielebarchiesi@0 12 $requirements = array();
danielebarchiesi@0 13 $t = get_t();
danielebarchiesi@0 14
danielebarchiesi@0 15 if ($phase == 'runtime') {
danielebarchiesi@0 16 // Check for various token definition problems.
danielebarchiesi@0 17 $token_problems = token_get_token_problems();
danielebarchiesi@0 18 // Format and display each token problem.
danielebarchiesi@0 19 foreach ($token_problems as $problem_key => $problem) {
danielebarchiesi@0 20 if (!empty($problem['problems'])) {
danielebarchiesi@0 21 $problems = array_unique($problem['problems']);
danielebarchiesi@0 22 $problems = array_map('check_plain', $problems);
danielebarchiesi@0 23 $token_problems[$problem_key] = $problem['label'] . theme('item_list', array('items' => $problems));
danielebarchiesi@0 24 }
danielebarchiesi@0 25 else {
danielebarchiesi@0 26 unset($token_problems[$problem_key]);
danielebarchiesi@0 27 }
danielebarchiesi@0 28 }
danielebarchiesi@0 29 if (!empty($token_problems)) {
danielebarchiesi@0 30 $requirements['token_problems'] = array(
danielebarchiesi@0 31 'title' => $t('Tokens'),
danielebarchiesi@0 32 'value' => $t('Problems detected'),
danielebarchiesi@0 33 'severity' => REQUIREMENT_WARNING,
danielebarchiesi@0 34 'description' => '<p>' . implode('</p><p>', $token_problems) . '</p>', //theme('item_list', array('items' => $token_problems)),
danielebarchiesi@0 35 );
danielebarchiesi@0 36 }
danielebarchiesi@0 37 }
danielebarchiesi@0 38
danielebarchiesi@0 39 return $requirements;
danielebarchiesi@0 40 }
danielebarchiesi@0 41
danielebarchiesi@0 42 /**
danielebarchiesi@0 43 * Implements hook_schema().
danielebarchiesi@0 44 */
danielebarchiesi@0 45 function token_schema() {
danielebarchiesi@0 46 $schema['cache_token'] = drupal_get_schema_unprocessed('system', 'cache');
danielebarchiesi@0 47 $schema['cache_token']['description'] = 'Cache table for token information.';
danielebarchiesi@0 48 return $schema;
danielebarchiesi@0 49 }
danielebarchiesi@0 50
danielebarchiesi@0 51 /**
danielebarchiesi@0 52 * Add the cache_token table.
danielebarchiesi@0 53 */
danielebarchiesi@0 54 function token_update_7000() {
danielebarchiesi@0 55 if (!db_table_exists('cache_token')) {
danielebarchiesi@0 56 $schema = drupal_get_schema_unprocessed('system', 'cache');
danielebarchiesi@0 57 $schema['description'] = 'Cache table for token information.';
danielebarchiesi@0 58 db_create_table('cache_token', $schema);
danielebarchiesi@0 59 }
danielebarchiesi@0 60 }
danielebarchiesi@0 61
danielebarchiesi@0 62 /**
danielebarchiesi@0 63 * Deprecate and disable the token_actions module.
danielebarchiesi@0 64 */
danielebarchiesi@0 65 function token_update_7001() {
danielebarchiesi@0 66 module_disable(array('token_actions'));
danielebarchiesi@0 67 return 'The Token actions module has been deprecated by the updated system module actions that support tokens.';
danielebarchiesi@0 68 }
danielebarchiesi@0 69
danielebarchiesi@0 70 /**
danielebarchiesi@0 71 * Migrate old token_actions module actions to system actions.
danielebarchiesi@0 72 */
danielebarchiesi@0 73 //function token_update_700X() {
danielebarchiesi@0 74 // $actions = db_query("SELECT aid, type, callback, parameters, label FROM {actions} WHERE type = 'system' AND callback IN ('token_actions_message_action', 'token_actions_send_email_action', 'token_actions_goto_action')")->fetchAll();
danielebarchiesi@0 75 // foreach ($actions as $action) {
danielebarchiesi@0 76 // $action->parameters = unserialize($action->parameters);
danielebarchiesi@0 77 // foreach ($action->parameters as $key => $value) {
danielebarchiesi@0 78 // if (is_string($value)) {
danielebarchiesi@0 79 // $action->parameters[$key] = token_update_token_text($value);
danielebarchiesi@0 80 // }
danielebarchiesi@0 81 // }
danielebarchiesi@0 82 // $action->callback = str_replace('token_actions_', '', $action->callback);
danielebarchiesi@0 83 // actions_save($action->callback, $action->type, $action->parameters, $action->label, $action->aid);
danielebarchiesi@0 84 // }
danielebarchiesi@0 85 // return 'Token actions module actions migrated to system module actions. You may still want to verify that the actions were upgraded correctly.';
danielebarchiesi@0 86 //}
danielebarchiesi@0 87
danielebarchiesi@0 88 /**
danielebarchiesi@0 89 * Build a list of Drupal 6 tokens and their Drupal 7 token names.
danielebarchiesi@0 90 */
danielebarchiesi@0 91 function _token_upgrade_token_list() {
danielebarchiesi@0 92 $tokens = array(
danielebarchiesi@0 93 // Global tokens
danielebarchiesi@0 94 'user-name' => 'current-user:name',
danielebarchiesi@0 95 'user-id' => 'current-user:id',
danielebarchiesi@0 96 'user-mail' => 'current-user:mail',
danielebarchiesi@0 97 'site-url' => 'site:url',
danielebarchiesi@0 98 'site-name' => 'site:name',
danielebarchiesi@0 99 'site-slogan' => 'site:slogan',
danielebarchiesi@0 100 'site-mission' => 'site:mission',
danielebarchiesi@0 101 'site-mail' => 'site:mail',
danielebarchiesi@0 102 'site-date' => 'date:short',
danielebarchiesi@0 103 //'site-date-' => '', // Date tokens expanded below
danielebarchiesi@0 104 'current-page-path' => 'current-page:path',
danielebarchiesi@0 105 'current-page-url' => 'current-page:url',
danielebarchiesi@0 106 'page-number' => 'current-page:page-number',
danielebarchiesi@0 107
danielebarchiesi@0 108 // Comment tokens
danielebarchiesi@0 109 'comment-cid' => 'comment:cid',
danielebarchiesi@0 110 'comment-nid' => 'comment:node:nid',
danielebarchiesi@0 111 'comment-title' => 'comment:title',
danielebarchiesi@0 112 'comment-body' => 'comment:body',
danielebarchiesi@0 113 'comment-author-name' => 'comment:author:name',
danielebarchiesi@0 114 'comment-author-mail' => 'comment:author:mail',
danielebarchiesi@0 115 //'comment-body-format' => '',
danielebarchiesi@0 116 //'comment-' => '', // Date tokens expanded below
danielebarchiesi@0 117 'comment-node-title' => 'comment:node',
danielebarchiesi@0 118
danielebarchiesi@0 119 // Node tokens
danielebarchiesi@0 120 'nid' => 'node:nid',
danielebarchiesi@0 121 'type' => 'node:type',
danielebarchiesi@0 122 'type-name' => 'node:type-name',
danielebarchiesi@0 123 'language' => 'node:language',
danielebarchiesi@0 124 'title' => 'node:title',
danielebarchiesi@0 125 'author-uid' => 'node:author:uid',
danielebarchiesi@0 126 'author-name' => 'node:author:name',
danielebarchiesi@0 127 'author-mail' => 'node:author:mail',
danielebarchiesi@0 128 'node_comment_count' => 'node:comment-count',
danielebarchiesi@0 129 'unread_comment_count' => 'node:comment-count-new',
danielebarchiesi@0 130 'log' => 'node:log',
danielebarchiesi@0 131 //'' => '', // Date tokens expanded below
danielebarchiesi@0 132 //'mod-' => '', // Date tokens expanded below
danielebarchiesi@0 133 'menupath' => 'node:menu-link:parent:path][node:menu-link',
danielebarchiesi@0 134 'menu' => 'node:menu-link:menu-name',
danielebarchiesi@0 135 'menu-link-title' => 'node:menu-link',
danielebarchiesi@0 136 'menu-link-mlid' => 'node:menu-link:mlid',
danielebarchiesi@0 137 'menu-link-plid' => 'node:menu-link:parent:mlid',
danielebarchiesi@0 138 //'term' => 'node:term',
danielebarchiesi@0 139 //'term-id' => 'node:term:tid',
danielebarchiesi@0 140 //'vocab' => 'node:term:vocabulary',
danielebarchiesi@0 141 //'vocab-id' => 'node:term:vocabulary:vid',
danielebarchiesi@0 142
danielebarchiesi@0 143 // Book tokens
danielebarchiesi@0 144 //'book' => 'node:book',
danielebarchiesi@0 145 //'book_id' => 'node:book:bid',
danielebarchiesi@0 146 //'bookpath' => 'node:book:path',
danielebarchiesi@0 147
danielebarchiesi@0 148 // Taxonomy tokens
danielebarchiesi@0 149 'tid' => 'term:tid',
danielebarchiesi@0 150 'cat' => 'term:name',
danielebarchiesi@0 151 'cat-description' => 'term:description',
danielebarchiesi@0 152 'vid' => 'term:vocabulary:vid',
danielebarchiesi@0 153 'vocab' => 'term:vocabulary',
danielebarchiesi@0 154 'vocab-description' => 'term:vocabulary:description',
danielebarchiesi@0 155
danielebarchiesi@0 156 // User tokens
danielebarchiesi@0 157 'user' => 'user:name',
danielebarchiesi@0 158 'uid' => 'user:uid',
danielebarchiesi@0 159 'mail' => 'user:mail',
danielebarchiesi@0 160 'reg-date' => 'user:created',
danielebarchiesi@0 161 'reg-since' => 'user:created:since',
danielebarchiesi@0 162 //'user-created' => '', // Date tokens expanded below
danielebarchiesi@0 163 'log-date' => 'user:last-login',
danielebarchiesi@0 164 'log-since' => 'user:last-login:since',
danielebarchiesi@0 165 //'user-last-login' => '', // Date tokens expanded below
danielebarchiesi@0 166 //'date-in-tz' => '',
danielebarchiesi@0 167 'account-url' => 'user:url',
danielebarchiesi@0 168 'account-edit' => 'user:edit-url',
danielebarchiesi@0 169 );
danielebarchiesi@0 170
danielebarchiesi@0 171 // Account for date tokens which need to be expanded.
danielebarchiesi@0 172 $tokens += _token_upgrade_token_date_list('site-', 'site:date');
danielebarchiesi@0 173 $tokens += _token_upgrade_token_date_list('', 'node:created');
danielebarchiesi@0 174 $tokens += _token_upgrade_token_date_list('mod-', 'node:changed');
danielebarchiesi@0 175 //$tokens += _token_upgrade_token_date_list('node-revision-', 'node:changed');
danielebarchiesi@0 176 $tokens += _token_upgrade_token_date_list('comment-', 'comment:created');
danielebarchiesi@0 177 $tokens += _token_upgrade_token_date_list('user-register-', 'user:created');
danielebarchiesi@0 178 $tokens += _token_upgrade_token_date_list('user-last-login-', 'user:last-login');
danielebarchiesi@0 179
danielebarchiesi@0 180 return $tokens;
danielebarchiesi@0 181 }
danielebarchiesi@0 182
danielebarchiesi@0 183 /**
danielebarchiesi@0 184 * Build a list of Drupal 6 date tokens and their Drupal 7 token names.
danielebarchiesi@0 185 */
danielebarchiesi@0 186 function _token_upgrade_token_date_list($old_token, $new_token) {
danielebarchiesi@0 187 $tokens = array();
danielebarchiesi@0 188 $formats = array(
danielebarchiesi@0 189 'yyyy' => 'Y',
danielebarchiesi@0 190 'yy' => 'y',
danielebarchiesi@0 191 'month' => 'F',
danielebarchiesi@0 192 'mon' => 'M',
danielebarchiesi@0 193 'mm' => 'm',
danielebarchiesi@0 194 'm' => 'n',
danielebarchiesi@0 195 'ww' => 'W',
danielebarchiesi@0 196 'date' => 'N',
danielebarchiesi@0 197 'day' => 'l',
danielebarchiesi@0 198 'ddd' => 'D',
danielebarchiesi@0 199 'dd' => 'd',
danielebarchiesi@0 200 'd' => 'j',
danielebarchiesi@0 201 );
danielebarchiesi@0 202 foreach ($formats as $token_format => $date_format) {
danielebarchiesi@0 203 $tokens[$old_token . $token_format] = "$new_token:custom:$date_format";
danielebarchiesi@0 204 }
danielebarchiesi@0 205 $tokens[$old_token . 'raw'] = "$new_token:raw";
danielebarchiesi@0 206 $tokens[$old_token . 'since'] = "$new_token:since";
danielebarchiesi@0 207 return $tokens;
danielebarchiesi@0 208 }
danielebarchiesi@0 209
danielebarchiesi@0 210 /**
danielebarchiesi@0 211 * Update a string containing Drupal 6 style tokens to Drupal 7 style tokens.
danielebarchiesi@0 212 *
danielebarchiesi@0 213 * @param $text
danielebarchiesi@0 214 * A string containing tokens.
danielebarchiesi@0 215 * @param $updates
danielebarchiesi@0 216 * An optional array of Drupal 7 tokens keyed by their Drupal 6 token name.
danielebarchiesi@0 217 * The default tokens will be merged into this array. Note neither the old
danielebarchiesi@0 218 * or new token names should include the surrounding bracket ([ and ])
danielebarchiesi@0 219 * characters.
danielebarchiesi@0 220 * @return
danielebarchiesi@0 221 * A string with the tokens upgraded
danielebarchiesi@0 222 *
danielebarchiesi@0 223 * @see _token_upgrade_token_list()
danielebarchiesi@0 224 */
danielebarchiesi@0 225 function token_update_token_text($text, $updates = array(), $leading = '[', $trailing = ']') {
danielebarchiesi@0 226 $updates += _token_upgrade_token_list();
danielebarchiesi@0 227 $regex = '/' . preg_quote($leading, '/') . '([^\s]*)' . preg_quote($trailing, '/') . '/';
danielebarchiesi@0 228 preg_match_all($regex, $text, $matches);
danielebarchiesi@0 229
danielebarchiesi@0 230 foreach ($matches[1] as $index => $old_token) {
danielebarchiesi@0 231 if (isset($updates[$old_token])) {
danielebarchiesi@0 232 $new_token = $updates[$old_token];
danielebarchiesi@0 233 $text = str_replace("{$leading}{$old_token}{$trailing}", "[$new_token]", $text);
danielebarchiesi@0 234 // Also replace any tokens that have a -raw suffix.
danielebarchiesi@0 235 $text = str_replace("{$leading}{$old_token}-raw{$trailing}", "[$new_token]", $text);
danielebarchiesi@0 236 }
danielebarchiesi@0 237 }
danielebarchiesi@0 238
danielebarchiesi@0 239 return $text;
danielebarchiesi@0 240 }
danielebarchiesi@0 241
danielebarchiesi@0 242 /**
danielebarchiesi@0 243 * Get token problems.
danielebarchiesi@0 244 */
danielebarchiesi@0 245 function token_get_token_problems() {
danielebarchiesi@0 246 // @todo Improve the duplicate checking to report which modules are the offenders.
danielebarchiesi@0 247 //$token_info = array();
danielebarchiesi@0 248 //foreach (module_implements('token_info') as $module) {
danielebarchiesi@0 249 // $module_token_info = module_invoke($module, 'token_info');
danielebarchiesi@0 250 // if (in_array($module, _token_core_supported_modules())) {
danielebarchiesi@0 251 // $module .= '/token';
danielebarchiesi@0 252 // }
danielebarchiesi@0 253 // if (isset($module_token_info['types'])) {
danielebarchiesi@0 254 // if (is_array($module_token_info['types'])) {
danielebarchiesi@0 255 // foreach (array_keys($module_token_info['types']) as $type) {
danielebarchiesi@0 256 // if (is_array($module_token_info['types'][$type])) {
danielebarchiesi@0 257 // $module_token_info['types'][$type] += array('module' => $module);
danielebarchiesi@0 258 // }
danielebarchiesi@0 259 // }
danielebarchiesi@0 260 // }
danielebarchiesi@0 261 // }
danielebarchiesi@0 262 // if (isset($module_token_info['tokens'])) {
danielebarchiesi@0 263 // if (is_array($module_token_info['tokens'])) {
danielebarchiesi@0 264 //
danielebarchiesi@0 265 // }
danielebarchiesi@0 266 // }
danielebarchiesi@0 267 // if (is_array($module_token_info)) {
danielebarchiesi@0 268 // $token_info = array_merge_recursive($token_info, $module_token_info);
danielebarchiesi@0 269 // }
danielebarchiesi@0 270 //}
danielebarchiesi@0 271
danielebarchiesi@0 272 $token_info = token_info();
danielebarchiesi@0 273 $token_problems = array(
danielebarchiesi@0 274 'not-array' => array(
danielebarchiesi@0 275 'label' => t('The following tokens or token types are not defined as arrays:'),
danielebarchiesi@0 276 ),
danielebarchiesi@0 277 'missing-info' => array(
danielebarchiesi@0 278 'label' => t('The following tokens or token types are missing required name and/or description information:'),
danielebarchiesi@0 279 ),
danielebarchiesi@0 280 'type-no-tokens' => array(
danielebarchiesi@0 281 'label' => t('The following token types do not have any tokens defined:'),
danielebarchiesi@0 282 ),
danielebarchiesi@0 283 'tokens-no-type' => array(
danielebarchiesi@0 284 'label' => t('The following token types are not defined but have tokens:'),
danielebarchiesi@0 285 ),
danielebarchiesi@0 286 'duplicate' => array(
danielebarchiesi@0 287 'label' => t('The following token or token types are defined by multiple modules:')
danielebarchiesi@0 288 ),
danielebarchiesi@0 289 );
danielebarchiesi@0 290
danielebarchiesi@0 291 // Check token types for problems.
danielebarchiesi@0 292 foreach ($token_info['types'] as $type => $type_info) {
danielebarchiesi@0 293 $real_type = !empty($type_info['type']) ? $type_info['type'] : $type;
danielebarchiesi@0 294 if (!is_array($type_info)) {
danielebarchiesi@0 295 $token_problems['not-array']['problems'][] = "\$info['types']['$type']";
danielebarchiesi@0 296 continue;
danielebarchiesi@0 297 }
danielebarchiesi@0 298 elseif (!isset($type_info['name']) || !isset($type_info['description'])) {
danielebarchiesi@0 299 $token_problems['missing-info']['problems'][] = "\$info['types']['$type']";
danielebarchiesi@0 300 }
danielebarchiesi@0 301 elseif (empty($token_info['tokens'][$real_type])) {
danielebarchiesi@0 302 $token_problems['type-no-tokens']['problems'][] = "\$info['tokens']['$real_type']";
danielebarchiesi@0 303 }
danielebarchiesi@0 304 }
danielebarchiesi@0 305
danielebarchiesi@0 306 // Check tokens for problems.
danielebarchiesi@0 307 foreach ($token_info['tokens'] as $type => $tokens) {
danielebarchiesi@0 308 if (!is_array($tokens)) {
danielebarchiesi@0 309 $token_problems['not-array']['problems'][] = "\$info['tokens']['$type']";
danielebarchiesi@0 310 continue;
danielebarchiesi@0 311 }
danielebarchiesi@0 312 else {
danielebarchiesi@0 313 foreach (array_keys($tokens) as $token) {
danielebarchiesi@0 314 if (!is_array($tokens[$token])) {
danielebarchiesi@0 315 $token_problems['not-array']['problems'][] = "\$info['tokens']['$type']['$token']";
danielebarchiesi@0 316 continue;
danielebarchiesi@0 317 }
danielebarchiesi@0 318 elseif (!isset($tokens[$token]['name']) || !isset($tokens[$token]['description'])) {
danielebarchiesi@0 319 $token_problems['missing-info']['problems'][] = "\$info['tokens']['$type']['$token']";
danielebarchiesi@0 320 }
danielebarchiesi@0 321 elseif (is_array($tokens[$token]['name']) || is_array($tokens[$token]['description'])) {
danielebarchiesi@0 322 $token_problems['duplicate']['problems'][] = "\$info['tokens']['$type']['$token']";
danielebarchiesi@0 323 }
danielebarchiesi@0 324 }
danielebarchiesi@0 325 }
danielebarchiesi@0 326 if (!isset($token_info['types'][$type])) {
danielebarchiesi@0 327 $token_problems['tokens-no-type']['problems'][] = "\$info['types']['$type']";
danielebarchiesi@0 328 }
danielebarchiesi@0 329 }
danielebarchiesi@0 330
danielebarchiesi@0 331 return $token_problems;
danielebarchiesi@0 332 }