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