Mercurial > hg > rr-repo
comparison sites/all/modules/token/token.install @ 0:ff03f76ab3fe
initial version
author | danieleb <danielebarchiesi@me.com> |
---|---|
date | Wed, 21 Aug 2013 18:51:11 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:ff03f76ab3fe |
---|---|
1 <?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 } |