danielebarchiesi@0: $problem) { danielebarchiesi@0: if (!empty($problem['problems'])) { danielebarchiesi@0: $problems = array_unique($problem['problems']); danielebarchiesi@0: $problems = array_map('check_plain', $problems); danielebarchiesi@0: $token_problems[$problem_key] = $problem['label'] . theme('item_list', array('items' => $problems)); danielebarchiesi@0: } danielebarchiesi@0: else { danielebarchiesi@0: unset($token_problems[$problem_key]); danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: if (!empty($token_problems)) { danielebarchiesi@0: $requirements['token_problems'] = array( danielebarchiesi@0: 'title' => $t('Tokens'), danielebarchiesi@0: 'value' => $t('Problems detected'), danielebarchiesi@0: 'severity' => REQUIREMENT_WARNING, danielebarchiesi@0: 'description' => '

' . implode('

', $token_problems) . '

', //theme('item_list', array('items' => $token_problems)), danielebarchiesi@0: ); danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: return $requirements; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Implements hook_schema(). danielebarchiesi@0: */ danielebarchiesi@0: function token_schema() { danielebarchiesi@0: $schema['cache_token'] = drupal_get_schema_unprocessed('system', 'cache'); danielebarchiesi@0: $schema['cache_token']['description'] = 'Cache table for token information.'; danielebarchiesi@0: return $schema; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Add the cache_token table. danielebarchiesi@0: */ danielebarchiesi@0: function token_update_7000() { danielebarchiesi@0: if (!db_table_exists('cache_token')) { danielebarchiesi@0: $schema = drupal_get_schema_unprocessed('system', 'cache'); danielebarchiesi@0: $schema['description'] = 'Cache table for token information.'; danielebarchiesi@0: db_create_table('cache_token', $schema); danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Deprecate and disable the token_actions module. danielebarchiesi@0: */ danielebarchiesi@0: function token_update_7001() { danielebarchiesi@0: module_disable(array('token_actions')); danielebarchiesi@0: return 'The Token actions module has been deprecated by the updated system module actions that support tokens.'; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Migrate old token_actions module actions to system actions. danielebarchiesi@0: */ danielebarchiesi@0: //function token_update_700X() { danielebarchiesi@0: // $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: // foreach ($actions as $action) { danielebarchiesi@0: // $action->parameters = unserialize($action->parameters); danielebarchiesi@0: // foreach ($action->parameters as $key => $value) { danielebarchiesi@0: // if (is_string($value)) { danielebarchiesi@0: // $action->parameters[$key] = token_update_token_text($value); danielebarchiesi@0: // } danielebarchiesi@0: // } danielebarchiesi@0: // $action->callback = str_replace('token_actions_', '', $action->callback); danielebarchiesi@0: // actions_save($action->callback, $action->type, $action->parameters, $action->label, $action->aid); danielebarchiesi@0: // } danielebarchiesi@0: // return 'Token actions module actions migrated to system module actions. You may still want to verify that the actions were upgraded correctly.'; danielebarchiesi@0: //} danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Build a list of Drupal 6 tokens and their Drupal 7 token names. danielebarchiesi@0: */ danielebarchiesi@0: function _token_upgrade_token_list() { danielebarchiesi@0: $tokens = array( danielebarchiesi@0: // Global tokens danielebarchiesi@0: 'user-name' => 'current-user:name', danielebarchiesi@0: 'user-id' => 'current-user:id', danielebarchiesi@0: 'user-mail' => 'current-user:mail', danielebarchiesi@0: 'site-url' => 'site:url', danielebarchiesi@0: 'site-name' => 'site:name', danielebarchiesi@0: 'site-slogan' => 'site:slogan', danielebarchiesi@0: 'site-mission' => 'site:mission', danielebarchiesi@0: 'site-mail' => 'site:mail', danielebarchiesi@0: 'site-date' => 'date:short', danielebarchiesi@0: //'site-date-' => '', // Date tokens expanded below danielebarchiesi@0: 'current-page-path' => 'current-page:path', danielebarchiesi@0: 'current-page-url' => 'current-page:url', danielebarchiesi@0: 'page-number' => 'current-page:page-number', danielebarchiesi@0: danielebarchiesi@0: // Comment tokens danielebarchiesi@0: 'comment-cid' => 'comment:cid', danielebarchiesi@0: 'comment-nid' => 'comment:node:nid', danielebarchiesi@0: 'comment-title' => 'comment:title', danielebarchiesi@0: 'comment-body' => 'comment:body', danielebarchiesi@0: 'comment-author-name' => 'comment:author:name', danielebarchiesi@0: 'comment-author-mail' => 'comment:author:mail', danielebarchiesi@0: //'comment-body-format' => '', danielebarchiesi@0: //'comment-' => '', // Date tokens expanded below danielebarchiesi@0: 'comment-node-title' => 'comment:node', danielebarchiesi@0: danielebarchiesi@0: // Node tokens danielebarchiesi@0: 'nid' => 'node:nid', danielebarchiesi@0: 'type' => 'node:type', danielebarchiesi@0: 'type-name' => 'node:type-name', danielebarchiesi@0: 'language' => 'node:language', danielebarchiesi@0: 'title' => 'node:title', danielebarchiesi@0: 'author-uid' => 'node:author:uid', danielebarchiesi@0: 'author-name' => 'node:author:name', danielebarchiesi@0: 'author-mail' => 'node:author:mail', danielebarchiesi@0: 'node_comment_count' => 'node:comment-count', danielebarchiesi@0: 'unread_comment_count' => 'node:comment-count-new', danielebarchiesi@0: 'log' => 'node:log', danielebarchiesi@0: //'' => '', // Date tokens expanded below danielebarchiesi@0: //'mod-' => '', // Date tokens expanded below danielebarchiesi@0: 'menupath' => 'node:menu-link:parent:path][node:menu-link', danielebarchiesi@0: 'menu' => 'node:menu-link:menu-name', danielebarchiesi@0: 'menu-link-title' => 'node:menu-link', danielebarchiesi@0: 'menu-link-mlid' => 'node:menu-link:mlid', danielebarchiesi@0: 'menu-link-plid' => 'node:menu-link:parent:mlid', danielebarchiesi@0: //'term' => 'node:term', danielebarchiesi@0: //'term-id' => 'node:term:tid', danielebarchiesi@0: //'vocab' => 'node:term:vocabulary', danielebarchiesi@0: //'vocab-id' => 'node:term:vocabulary:vid', danielebarchiesi@0: danielebarchiesi@0: // Book tokens danielebarchiesi@0: //'book' => 'node:book', danielebarchiesi@0: //'book_id' => 'node:book:bid', danielebarchiesi@0: //'bookpath' => 'node:book:path', danielebarchiesi@0: danielebarchiesi@0: // Taxonomy tokens danielebarchiesi@0: 'tid' => 'term:tid', danielebarchiesi@0: 'cat' => 'term:name', danielebarchiesi@0: 'cat-description' => 'term:description', danielebarchiesi@0: 'vid' => 'term:vocabulary:vid', danielebarchiesi@0: 'vocab' => 'term:vocabulary', danielebarchiesi@0: 'vocab-description' => 'term:vocabulary:description', danielebarchiesi@0: danielebarchiesi@0: // User tokens danielebarchiesi@0: 'user' => 'user:name', danielebarchiesi@0: 'uid' => 'user:uid', danielebarchiesi@0: 'mail' => 'user:mail', danielebarchiesi@0: 'reg-date' => 'user:created', danielebarchiesi@0: 'reg-since' => 'user:created:since', danielebarchiesi@0: //'user-created' => '', // Date tokens expanded below danielebarchiesi@0: 'log-date' => 'user:last-login', danielebarchiesi@0: 'log-since' => 'user:last-login:since', danielebarchiesi@0: //'user-last-login' => '', // Date tokens expanded below danielebarchiesi@0: //'date-in-tz' => '', danielebarchiesi@0: 'account-url' => 'user:url', danielebarchiesi@0: 'account-edit' => 'user:edit-url', danielebarchiesi@0: ); danielebarchiesi@0: danielebarchiesi@0: // Account for date tokens which need to be expanded. danielebarchiesi@0: $tokens += _token_upgrade_token_date_list('site-', 'site:date'); danielebarchiesi@0: $tokens += _token_upgrade_token_date_list('', 'node:created'); danielebarchiesi@0: $tokens += _token_upgrade_token_date_list('mod-', 'node:changed'); danielebarchiesi@0: //$tokens += _token_upgrade_token_date_list('node-revision-', 'node:changed'); danielebarchiesi@0: $tokens += _token_upgrade_token_date_list('comment-', 'comment:created'); danielebarchiesi@0: $tokens += _token_upgrade_token_date_list('user-register-', 'user:created'); danielebarchiesi@0: $tokens += _token_upgrade_token_date_list('user-last-login-', 'user:last-login'); danielebarchiesi@0: danielebarchiesi@0: return $tokens; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Build a list of Drupal 6 date tokens and their Drupal 7 token names. danielebarchiesi@0: */ danielebarchiesi@0: function _token_upgrade_token_date_list($old_token, $new_token) { danielebarchiesi@0: $tokens = array(); danielebarchiesi@0: $formats = array( danielebarchiesi@0: 'yyyy' => 'Y', danielebarchiesi@0: 'yy' => 'y', danielebarchiesi@0: 'month' => 'F', danielebarchiesi@0: 'mon' => 'M', danielebarchiesi@0: 'mm' => 'm', danielebarchiesi@0: 'm' => 'n', danielebarchiesi@0: 'ww' => 'W', danielebarchiesi@0: 'date' => 'N', danielebarchiesi@0: 'day' => 'l', danielebarchiesi@0: 'ddd' => 'D', danielebarchiesi@0: 'dd' => 'd', danielebarchiesi@0: 'd' => 'j', danielebarchiesi@0: ); danielebarchiesi@0: foreach ($formats as $token_format => $date_format) { danielebarchiesi@0: $tokens[$old_token . $token_format] = "$new_token:custom:$date_format"; danielebarchiesi@0: } danielebarchiesi@0: $tokens[$old_token . 'raw'] = "$new_token:raw"; danielebarchiesi@0: $tokens[$old_token . 'since'] = "$new_token:since"; danielebarchiesi@0: return $tokens; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Update a string containing Drupal 6 style tokens to Drupal 7 style tokens. danielebarchiesi@0: * danielebarchiesi@0: * @param $text danielebarchiesi@0: * A string containing tokens. danielebarchiesi@0: * @param $updates danielebarchiesi@0: * An optional array of Drupal 7 tokens keyed by their Drupal 6 token name. danielebarchiesi@0: * The default tokens will be merged into this array. Note neither the old danielebarchiesi@0: * or new token names should include the surrounding bracket ([ and ]) danielebarchiesi@0: * characters. danielebarchiesi@0: * @return danielebarchiesi@0: * A string with the tokens upgraded danielebarchiesi@0: * danielebarchiesi@0: * @see _token_upgrade_token_list() danielebarchiesi@0: */ danielebarchiesi@0: function token_update_token_text($text, $updates = array(), $leading = '[', $trailing = ']') { danielebarchiesi@0: $updates += _token_upgrade_token_list(); danielebarchiesi@0: $regex = '/' . preg_quote($leading, '/') . '([^\s]*)' . preg_quote($trailing, '/') . '/'; danielebarchiesi@0: preg_match_all($regex, $text, $matches); danielebarchiesi@0: danielebarchiesi@0: foreach ($matches[1] as $index => $old_token) { danielebarchiesi@0: if (isset($updates[$old_token])) { danielebarchiesi@0: $new_token = $updates[$old_token]; danielebarchiesi@0: $text = str_replace("{$leading}{$old_token}{$trailing}", "[$new_token]", $text); danielebarchiesi@0: // Also replace any tokens that have a -raw suffix. danielebarchiesi@0: $text = str_replace("{$leading}{$old_token}-raw{$trailing}", "[$new_token]", $text); danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: return $text; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Get token problems. danielebarchiesi@0: */ danielebarchiesi@0: function token_get_token_problems() { danielebarchiesi@0: // @todo Improve the duplicate checking to report which modules are the offenders. danielebarchiesi@0: //$token_info = array(); danielebarchiesi@0: //foreach (module_implements('token_info') as $module) { danielebarchiesi@0: // $module_token_info = module_invoke($module, 'token_info'); danielebarchiesi@0: // if (in_array($module, _token_core_supported_modules())) { danielebarchiesi@0: // $module .= '/token'; danielebarchiesi@0: // } danielebarchiesi@0: // if (isset($module_token_info['types'])) { danielebarchiesi@0: // if (is_array($module_token_info['types'])) { danielebarchiesi@0: // foreach (array_keys($module_token_info['types']) as $type) { danielebarchiesi@0: // if (is_array($module_token_info['types'][$type])) { danielebarchiesi@0: // $module_token_info['types'][$type] += array('module' => $module); danielebarchiesi@0: // } danielebarchiesi@0: // } danielebarchiesi@0: // } danielebarchiesi@0: // } danielebarchiesi@0: // if (isset($module_token_info['tokens'])) { danielebarchiesi@0: // if (is_array($module_token_info['tokens'])) { danielebarchiesi@0: // danielebarchiesi@0: // } danielebarchiesi@0: // } danielebarchiesi@0: // if (is_array($module_token_info)) { danielebarchiesi@0: // $token_info = array_merge_recursive($token_info, $module_token_info); danielebarchiesi@0: // } danielebarchiesi@0: //} danielebarchiesi@0: danielebarchiesi@0: $token_info = token_info(); danielebarchiesi@0: $token_problems = array( danielebarchiesi@0: 'not-array' => array( danielebarchiesi@0: 'label' => t('The following tokens or token types are not defined as arrays:'), danielebarchiesi@0: ), danielebarchiesi@0: 'missing-info' => array( danielebarchiesi@0: 'label' => t('The following tokens or token types are missing required name and/or description information:'), danielebarchiesi@0: ), danielebarchiesi@0: 'type-no-tokens' => array( danielebarchiesi@0: 'label' => t('The following token types do not have any tokens defined:'), danielebarchiesi@0: ), danielebarchiesi@0: 'tokens-no-type' => array( danielebarchiesi@0: 'label' => t('The following token types are not defined but have tokens:'), danielebarchiesi@0: ), danielebarchiesi@0: 'duplicate' => array( danielebarchiesi@0: 'label' => t('The following token or token types are defined by multiple modules:') danielebarchiesi@0: ), danielebarchiesi@0: ); danielebarchiesi@0: danielebarchiesi@0: // Check token types for problems. danielebarchiesi@0: foreach ($token_info['types'] as $type => $type_info) { danielebarchiesi@0: $real_type = !empty($type_info['type']) ? $type_info['type'] : $type; danielebarchiesi@0: if (!is_array($type_info)) { danielebarchiesi@0: $token_problems['not-array']['problems'][] = "\$info['types']['$type']"; danielebarchiesi@0: continue; danielebarchiesi@0: } danielebarchiesi@0: elseif (!isset($type_info['name']) || !isset($type_info['description'])) { danielebarchiesi@0: $token_problems['missing-info']['problems'][] = "\$info['types']['$type']"; danielebarchiesi@0: } danielebarchiesi@0: elseif (empty($token_info['tokens'][$real_type])) { danielebarchiesi@0: $token_problems['type-no-tokens']['problems'][] = "\$info['tokens']['$real_type']"; danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: // Check tokens for problems. danielebarchiesi@0: foreach ($token_info['tokens'] as $type => $tokens) { danielebarchiesi@0: if (!is_array($tokens)) { danielebarchiesi@0: $token_problems['not-array']['problems'][] = "\$info['tokens']['$type']"; danielebarchiesi@0: continue; danielebarchiesi@0: } danielebarchiesi@0: else { danielebarchiesi@0: foreach (array_keys($tokens) as $token) { danielebarchiesi@0: if (!is_array($tokens[$token])) { danielebarchiesi@0: $token_problems['not-array']['problems'][] = "\$info['tokens']['$type']['$token']"; danielebarchiesi@0: continue; danielebarchiesi@0: } danielebarchiesi@0: elseif (!isset($tokens[$token]['name']) || !isset($tokens[$token]['description'])) { danielebarchiesi@0: $token_problems['missing-info']['problems'][] = "\$info['tokens']['$type']['$token']"; danielebarchiesi@0: } danielebarchiesi@0: elseif (is_array($tokens[$token]['name']) || is_array($tokens[$token]['description'])) { danielebarchiesi@0: $token_problems['duplicate']['problems'][] = "\$info['tokens']['$type']['$token']"; danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: if (!isset($token_info['types'][$type])) { danielebarchiesi@0: $token_problems['tokens-no-type']['problems'][] = "\$info['types']['$type']"; danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: return $token_problems; danielebarchiesi@0: }