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