danielebarchiesi@0
|
1 <?php
|
danielebarchiesi@0
|
2
|
danielebarchiesi@0
|
3 /**
|
danielebarchiesi@0
|
4 * @file
|
danielebarchiesi@0
|
5 * Token callbacks for the token module.
|
danielebarchiesi@0
|
6 */
|
danielebarchiesi@0
|
7
|
danielebarchiesi@0
|
8 /**
|
danielebarchiesi@0
|
9 * Implements hook_token_info_alter().
|
danielebarchiesi@0
|
10 */
|
danielebarchiesi@0
|
11 function token_token_info_alter(&$info) {
|
danielebarchiesi@0
|
12 // Force 'date' type tokens to require input and add a 'current-date' type.
|
danielebarchiesi@0
|
13 // @todo Remove when http://drupal.org/node/943028 is fixed.
|
danielebarchiesi@0
|
14 $info['types']['date']['needs-data'] = 'date';
|
danielebarchiesi@0
|
15 $info['types']['current-date'] = array(
|
danielebarchiesi@0
|
16 'name' => t('Current date'),
|
danielebarchiesi@0
|
17 'description' => t('Tokens related to the current date and time.'),
|
danielebarchiesi@0
|
18 'type' => 'date',
|
danielebarchiesi@0
|
19 );
|
danielebarchiesi@0
|
20
|
danielebarchiesi@0
|
21 // Add a 'dynamic' key to any tokens that have chained but dynamic tokens.
|
danielebarchiesi@0
|
22 $info['tokens']['date']['custom']['dynamic'] = TRUE;
|
danielebarchiesi@0
|
23
|
danielebarchiesi@0
|
24 // The [file:size] may not always return in kilobytes.
|
danielebarchiesi@0
|
25 // @todo Remove when http://drupal.org/node/1193044 is fixed.
|
danielebarchiesi@0
|
26 $info['tokens']['file']['size']['description'] = t('The size of the file.');
|
danielebarchiesi@0
|
27
|
danielebarchiesi@0
|
28 // Remove deprecated tokens from being listed.
|
danielebarchiesi@0
|
29 unset($info['tokens']['node']['tnid']);
|
danielebarchiesi@0
|
30 unset($info['tokens']['node']['type']);
|
danielebarchiesi@0
|
31 unset($info['tokens']['node']['type-name']);
|
danielebarchiesi@0
|
32
|
danielebarchiesi@0
|
33 // Support 'url' type tokens for core tokens.
|
danielebarchiesi@0
|
34 if (isset($info['tokens']['comment']['url']) && module_exists('comment')) {
|
danielebarchiesi@0
|
35 $info['tokens']['comment']['url']['type'] = 'url';
|
danielebarchiesi@0
|
36 }
|
danielebarchiesi@0
|
37 $info['tokens']['node']['url']['type'] = 'url';
|
danielebarchiesi@0
|
38 if (isset($info['tokens']['term']['url']) && module_exists('taxonomy')) {
|
danielebarchiesi@0
|
39 $info['tokens']['term']['url']['type'] = 'url';
|
danielebarchiesi@0
|
40 }
|
danielebarchiesi@0
|
41 $info['tokens']['user']['url']['type'] = 'url';
|
danielebarchiesi@0
|
42
|
danielebarchiesi@0
|
43 // Add [token:url] tokens for any URI-able entities.
|
danielebarchiesi@0
|
44 $entities = entity_get_info();
|
danielebarchiesi@0
|
45 foreach ($entities as $entity => $entity_info) {
|
danielebarchiesi@0
|
46 if (!isset($entity_info['token type'])) {
|
danielebarchiesi@0
|
47 continue;
|
danielebarchiesi@0
|
48 }
|
danielebarchiesi@0
|
49
|
danielebarchiesi@0
|
50 $token_type = $entity_info['token type'];
|
danielebarchiesi@0
|
51 if (!isset($info['types'][$token_type]) || !isset($info['tokens'][$token_type])) {
|
danielebarchiesi@0
|
52 continue;
|
danielebarchiesi@0
|
53 }
|
danielebarchiesi@0
|
54
|
danielebarchiesi@0
|
55 // Add [entity:url] tokens if they do not already exist.
|
danielebarchiesi@0
|
56 // @todo Support entity:label
|
danielebarchiesi@0
|
57 if (!isset($info['tokens'][$token_type]['url']) && !empty($entity_info['uri callback'])) {
|
danielebarchiesi@0
|
58 $info['tokens'][$token_type]['url'] = array(
|
danielebarchiesi@0
|
59 'name' => t('URL'),
|
danielebarchiesi@0
|
60 'description' => t('The URL of the @entity.', array('@entity' => drupal_strtolower($entity_info['label']))),
|
danielebarchiesi@0
|
61 'module' => 'token',
|
danielebarchiesi@0
|
62 'type' => 'url',
|
danielebarchiesi@0
|
63 );
|
danielebarchiesi@0
|
64 }
|
danielebarchiesi@0
|
65
|
danielebarchiesi@0
|
66 // Add [entity:original] tokens if they do not already exist.
|
danielebarchiesi@0
|
67 if (!isset($info['tokens'][$token_type]['original'])) {
|
danielebarchiesi@0
|
68 $info['tokens'][$token_type]['original'] = array(
|
danielebarchiesi@0
|
69 'name' => t('Original @entity', array('@entity' => drupal_strtolower($entity_info['label']))),
|
danielebarchiesi@0
|
70 'description' => t('The original @entity data if the @entity is being updated or saved.', array('@entity' => drupal_strtolower($entity_info['label']))),
|
danielebarchiesi@0
|
71 'module' => 'token',
|
danielebarchiesi@0
|
72 'type' => $token_type,
|
danielebarchiesi@0
|
73 );
|
danielebarchiesi@0
|
74 }
|
danielebarchiesi@0
|
75 }
|
danielebarchiesi@0
|
76
|
danielebarchiesi@0
|
77 // Add support for custom date formats.
|
danielebarchiesi@0
|
78 // @todo Remove when http://drupal.org/node/1173706 is fixed.
|
danielebarchiesi@0
|
79 $date_format_types = system_get_date_types();
|
danielebarchiesi@0
|
80 foreach ($date_format_types as $date_format_type => $date_format_type_info) {
|
danielebarchiesi@0
|
81 if (!isset($info['tokens']['date'][$date_format_type])) {
|
danielebarchiesi@0
|
82 $info['tokens']['date'][$date_format_type] = array(
|
danielebarchiesi@0
|
83 'name' => check_plain($date_format_type_info['title']),
|
danielebarchiesi@0
|
84 'description' => t("A date in '@type' format. (%date)", array('@type' => $date_format_type, '%date' => format_date(REQUEST_TIME, $date_format_type))),
|
danielebarchiesi@0
|
85 'module' => 'token',
|
danielebarchiesi@0
|
86 );
|
danielebarchiesi@0
|
87 }
|
danielebarchiesi@0
|
88 }
|
danielebarchiesi@0
|
89 }
|
danielebarchiesi@0
|
90
|
danielebarchiesi@0
|
91 /**
|
danielebarchiesi@0
|
92 * Implements hook_token_info().
|
danielebarchiesi@0
|
93 */
|
danielebarchiesi@0
|
94 function token_token_info() {
|
danielebarchiesi@0
|
95 // Node tokens.
|
danielebarchiesi@0
|
96 $info['tokens']['node']['source'] = array(
|
danielebarchiesi@0
|
97 'name' => t('Translation source node'),
|
danielebarchiesi@0
|
98 'description' => t("The source node for this current node's translation set."),
|
danielebarchiesi@0
|
99 'type' => 'node',
|
danielebarchiesi@0
|
100 );
|
danielebarchiesi@0
|
101 $info['tokens']['node']['log'] = array(
|
danielebarchiesi@0
|
102 'name' => t('Revision log message'),
|
danielebarchiesi@0
|
103 'description' => t('The explanation of the most recent changes made to the node.'),
|
danielebarchiesi@0
|
104 );
|
danielebarchiesi@0
|
105 $info['tokens']['node']['content-type'] = array(
|
danielebarchiesi@0
|
106 'name' => t('Content type'),
|
danielebarchiesi@0
|
107 'description' => t('The content type of the node.'),
|
danielebarchiesi@0
|
108 'type' => 'content-type',
|
danielebarchiesi@0
|
109 );
|
danielebarchiesi@0
|
110
|
danielebarchiesi@0
|
111 // Content type tokens.
|
danielebarchiesi@0
|
112 $info['types']['content-type'] = array(
|
danielebarchiesi@0
|
113 'name' => t('Content types'),
|
danielebarchiesi@0
|
114 'description' => t('Tokens related to content types.'),
|
danielebarchiesi@0
|
115 'needs-data' => 'node_type',
|
danielebarchiesi@0
|
116 );
|
danielebarchiesi@0
|
117 $info['tokens']['content-type']['name'] = array(
|
danielebarchiesi@0
|
118 'name' => t('Name'),
|
danielebarchiesi@0
|
119 'description' => t('The name of the content type.'),
|
danielebarchiesi@0
|
120 );
|
danielebarchiesi@0
|
121 $info['tokens']['content-type']['machine-name'] = array(
|
danielebarchiesi@0
|
122 'name' => t('Machine-readable name'),
|
danielebarchiesi@0
|
123 'description' => t('The unique machine-readable name of the content type.'),
|
danielebarchiesi@0
|
124 );
|
danielebarchiesi@0
|
125 $info['tokens']['content-type']['description'] = array(
|
danielebarchiesi@0
|
126 'name' => t('Description'),
|
danielebarchiesi@0
|
127 'description' => t('The optional description of the content type.'),
|
danielebarchiesi@0
|
128 );
|
danielebarchiesi@0
|
129 $info['tokens']['content-type']['node-count'] = array(
|
danielebarchiesi@0
|
130 'name' => t('Node count'),
|
danielebarchiesi@0
|
131 'description' => t('The number of nodes belonging to the content type.'),
|
danielebarchiesi@0
|
132 );
|
danielebarchiesi@0
|
133 $info['tokens']['content-type']['edit-url'] = array(
|
danielebarchiesi@0
|
134 'name' => t('Edit URL'),
|
danielebarchiesi@0
|
135 'description' => t("The URL of the content type's edit page."),
|
danielebarchiesi@0
|
136 // 'type' => 'url',
|
danielebarchiesi@0
|
137 );
|
danielebarchiesi@0
|
138
|
danielebarchiesi@0
|
139 // Taxonomy term and vocabulary tokens.
|
danielebarchiesi@0
|
140 if (module_exists('taxonomy')) {
|
danielebarchiesi@0
|
141 $info['tokens']['term']['edit-url'] = array(
|
danielebarchiesi@0
|
142 'name' => t('Edit URL'),
|
danielebarchiesi@0
|
143 'description' => t("The URL of the taxonomy term's edit page."),
|
danielebarchiesi@0
|
144 // 'type' => 'url',
|
danielebarchiesi@0
|
145 );
|
danielebarchiesi@0
|
146 $info['tokens']['term']['parents'] = array(
|
danielebarchiesi@0
|
147 'name' => t('Parents'),
|
danielebarchiesi@0
|
148 'description' => t("An array of all the term's parents, starting with the root."),
|
danielebarchiesi@0
|
149 'type' => 'array',
|
danielebarchiesi@0
|
150 );
|
danielebarchiesi@0
|
151 $info['tokens']['term']['root'] = array(
|
danielebarchiesi@0
|
152 'name' => t('Root term'),
|
danielebarchiesi@0
|
153 'description' => t("The root term of the taxonomy term."),
|
danielebarchiesi@0
|
154 'type' => 'term',
|
danielebarchiesi@0
|
155 );
|
danielebarchiesi@0
|
156
|
danielebarchiesi@0
|
157 $info['tokens']['vocabulary']['machine-name'] = array(
|
danielebarchiesi@0
|
158 'name' => t('Machine-readable name'),
|
danielebarchiesi@0
|
159 'description' => t('The unique machine-readable name of the vocabulary.'),
|
danielebarchiesi@0
|
160 );
|
danielebarchiesi@0
|
161 $info['tokens']['vocabulary']['edit-url'] = array(
|
danielebarchiesi@0
|
162 'name' => t('Edit URL'),
|
danielebarchiesi@0
|
163 'description' => t("The URL of the vocabulary's edit page."),
|
danielebarchiesi@0
|
164 // 'type' => 'url',
|
danielebarchiesi@0
|
165 );
|
danielebarchiesi@0
|
166 }
|
danielebarchiesi@0
|
167
|
danielebarchiesi@0
|
168 // File tokens.
|
danielebarchiesi@0
|
169 $info['tokens']['file']['basename'] = array(
|
danielebarchiesi@0
|
170 'name' => t('Base name'),
|
danielebarchiesi@0
|
171 'description' => t('The base name of the file.'),
|
danielebarchiesi@0
|
172 );
|
danielebarchiesi@0
|
173 $info['tokens']['file']['extension'] = array(
|
danielebarchiesi@0
|
174 'name' => t('Extension'),
|
danielebarchiesi@0
|
175 'description' => t('The extension of the file.'),
|
danielebarchiesi@0
|
176 );
|
danielebarchiesi@0
|
177 $info['tokens']['file']['size-raw'] = array(
|
danielebarchiesi@0
|
178 'name' => t('File byte size'),
|
danielebarchiesi@0
|
179 'description' => t('The size of the file, in bytes.'),
|
danielebarchiesi@0
|
180 );
|
danielebarchiesi@0
|
181
|
danielebarchiesi@0
|
182 // User tokens.
|
danielebarchiesi@0
|
183 // Add information on the restricted user tokens.
|
danielebarchiesi@0
|
184 $info['tokens']['user']['cancel-url'] = array(
|
danielebarchiesi@0
|
185 'name' => t('Account cancellation URL'),
|
danielebarchiesi@0
|
186 'description' => t('The URL of the confirm delete page for the user account.'),
|
danielebarchiesi@0
|
187 'restricted' => TRUE,
|
danielebarchiesi@0
|
188 // 'type' => 'url',
|
danielebarchiesi@0
|
189 );
|
danielebarchiesi@0
|
190 $info['tokens']['user']['one-time-login-url'] = array(
|
danielebarchiesi@0
|
191 'name' => t('One-time login URL'),
|
danielebarchiesi@0
|
192 'description' => t('The URL of the one-time login page for the user account.'),
|
danielebarchiesi@0
|
193 'restricted' => TRUE,
|
danielebarchiesi@0
|
194 // 'type' => 'url',
|
danielebarchiesi@0
|
195 );
|
danielebarchiesi@0
|
196 if (variable_get('user_pictures', 0)) {
|
danielebarchiesi@0
|
197 $info['tokens']['user']['picture'] = array(
|
danielebarchiesi@0
|
198 'name' => t('Picture'),
|
danielebarchiesi@0
|
199 'description' => t('The picture of the user.'),
|
danielebarchiesi@0
|
200 'type' => 'file',
|
danielebarchiesi@0
|
201 );
|
danielebarchiesi@0
|
202 }
|
danielebarchiesi@0
|
203 $info['tokens']['user']['roles'] = array(
|
danielebarchiesi@0
|
204 'name' => t('Roles'),
|
danielebarchiesi@0
|
205 'description' => t('The user roles associated with the user account.'),
|
danielebarchiesi@0
|
206 'type' => 'array',
|
danielebarchiesi@0
|
207 );
|
danielebarchiesi@0
|
208
|
danielebarchiesi@0
|
209 // Current user tokens.
|
danielebarchiesi@0
|
210 $info['tokens']['current-user']['ip-address'] = array(
|
danielebarchiesi@0
|
211 'name' => t('IP address'),
|
danielebarchiesi@0
|
212 'description' => 'The IP address of the current user.',
|
danielebarchiesi@0
|
213 );
|
danielebarchiesi@0
|
214
|
danielebarchiesi@0
|
215 // Menu link tokens (work regardless if menu module is enabled or not).
|
danielebarchiesi@0
|
216 $info['types']['menu-link'] = array(
|
danielebarchiesi@0
|
217 'name' => t('Menu links'),
|
danielebarchiesi@0
|
218 'description' => t('Tokens related to menu links.'),
|
danielebarchiesi@0
|
219 'needs-data' => 'menu-link',
|
danielebarchiesi@0
|
220 );
|
danielebarchiesi@0
|
221 $info['tokens']['menu-link']['mlid'] = array(
|
danielebarchiesi@0
|
222 'name' => t('Link ID'),
|
danielebarchiesi@0
|
223 'description' => t('The unique ID of the menu link.'),
|
danielebarchiesi@0
|
224 );
|
danielebarchiesi@0
|
225 $info['tokens']['menu-link']['title'] = array(
|
danielebarchiesi@0
|
226 'name' => t('Title'),
|
danielebarchiesi@0
|
227 'description' => t('The title of the menu link.'),
|
danielebarchiesi@0
|
228 );
|
danielebarchiesi@0
|
229 $info['tokens']['menu-link']['url'] = array(
|
danielebarchiesi@0
|
230 'name' => t('URL'),
|
danielebarchiesi@0
|
231 'description' => t('The URL of the menu link.'),
|
danielebarchiesi@0
|
232 'type' => 'url',
|
danielebarchiesi@0
|
233 );
|
danielebarchiesi@0
|
234 $info['tokens']['menu-link']['parent'] = array(
|
danielebarchiesi@0
|
235 'name' => t('Parent'),
|
danielebarchiesi@0
|
236 'description' => t("The menu link's parent."),
|
danielebarchiesi@0
|
237 'type' => 'menu-link',
|
danielebarchiesi@0
|
238 );
|
danielebarchiesi@0
|
239 $info['tokens']['menu-link']['parents'] = array(
|
danielebarchiesi@0
|
240 'name' => t('Parents'),
|
danielebarchiesi@0
|
241 'description' => t("An array of all the menu link's parents, starting with the root."),
|
danielebarchiesi@0
|
242 'type' => 'array',
|
danielebarchiesi@0
|
243 );
|
danielebarchiesi@0
|
244 $info['tokens']['menu-link']['root'] = array(
|
danielebarchiesi@0
|
245 'name' => t('Root'),
|
danielebarchiesi@0
|
246 'description' => t("The menu link's root."),
|
danielebarchiesi@0
|
247 'type' => 'menu-link',
|
danielebarchiesi@0
|
248 );
|
danielebarchiesi@0
|
249
|
danielebarchiesi@0
|
250 // Current page tokens.
|
danielebarchiesi@0
|
251 $info['types']['current-page'] = array(
|
danielebarchiesi@0
|
252 'name' => t('Current page'),
|
danielebarchiesi@0
|
253 'description' => t('Tokens related to the current page request.'),
|
danielebarchiesi@0
|
254 );
|
danielebarchiesi@0
|
255 $info['tokens']['current-page']['title'] = array(
|
danielebarchiesi@0
|
256 'name' => t('Title'),
|
danielebarchiesi@0
|
257 'description' => t('The title of the current page.'),
|
danielebarchiesi@0
|
258 );
|
danielebarchiesi@0
|
259 $info['tokens']['current-page']['url'] = array(
|
danielebarchiesi@0
|
260 'name' => t('URL'),
|
danielebarchiesi@0
|
261 'description' => t('The URL of the current page.'),
|
danielebarchiesi@0
|
262 'type' => 'url',
|
danielebarchiesi@0
|
263 );
|
danielebarchiesi@0
|
264 $info['tokens']['current-page']['page-number'] = array(
|
danielebarchiesi@0
|
265 'name' => t('Page number'),
|
danielebarchiesi@0
|
266 'description' => t('The page number of the current page when viewing paged lists.'),
|
danielebarchiesi@0
|
267 );
|
danielebarchiesi@0
|
268 $info['tokens']['current-page']['query'] = array(
|
danielebarchiesi@0
|
269 'name' => t('Query string value'),
|
danielebarchiesi@0
|
270 'description' => t('The value of a specific query string field of the current page.'),
|
danielebarchiesi@0
|
271 'dynamic' => TRUE,
|
danielebarchiesi@0
|
272 );
|
danielebarchiesi@0
|
273
|
danielebarchiesi@0
|
274 // URL tokens.
|
danielebarchiesi@0
|
275 $info['types']['url'] = array(
|
danielebarchiesi@0
|
276 'name' => t('URL'),
|
danielebarchiesi@0
|
277 'description' => t('Tokens related to URLs.'),
|
danielebarchiesi@0
|
278 'needs-data' => 'path',
|
danielebarchiesi@0
|
279 );
|
danielebarchiesi@0
|
280 $info['tokens']['url']['path'] = array(
|
danielebarchiesi@0
|
281 'name' => t('Path'),
|
danielebarchiesi@0
|
282 'description' => t('The path component of the URL.'),
|
danielebarchiesi@0
|
283 );
|
danielebarchiesi@0
|
284 $info['tokens']['url']['relative'] = array(
|
danielebarchiesi@0
|
285 'name' => t('Relative URL'),
|
danielebarchiesi@0
|
286 'description' => t('The relative URL.'),
|
danielebarchiesi@0
|
287 );
|
danielebarchiesi@0
|
288 $info['tokens']['url']['absolute'] = array(
|
danielebarchiesi@0
|
289 'name' => t('Absolute URL'),
|
danielebarchiesi@0
|
290 'description' => t('The absolute URL.'),
|
danielebarchiesi@0
|
291 );
|
danielebarchiesi@0
|
292 $info['tokens']['url']['brief'] = array(
|
danielebarchiesi@0
|
293 'name' => t('Brief URL'),
|
danielebarchiesi@0
|
294 'description' => t('The URL without the protocol and trailing backslash.'),
|
danielebarchiesi@0
|
295 );
|
danielebarchiesi@0
|
296 $info['tokens']['url']['unaliased'] = array(
|
danielebarchiesi@0
|
297 'name' => t('Unaliased URL'),
|
danielebarchiesi@0
|
298 'description' => t('The unaliased URL.'),
|
danielebarchiesi@0
|
299 'type' => 'url',
|
danielebarchiesi@0
|
300 );
|
danielebarchiesi@0
|
301 $info['tokens']['url']['args'] = array(
|
danielebarchiesi@0
|
302 'name' => t('Arguments'),
|
danielebarchiesi@0
|
303 'description' => t("The specific argument of the current page (e.g. 'arg:1' on the page 'node/1' returns '1')."),
|
danielebarchiesi@0
|
304 'type' => 'array',
|
danielebarchiesi@0
|
305 );
|
danielebarchiesi@0
|
306
|
danielebarchiesi@0
|
307 // Array tokens.
|
danielebarchiesi@0
|
308 $info['types']['array'] = array(
|
danielebarchiesi@0
|
309 'name' => t('Array'),
|
danielebarchiesi@0
|
310 'description' => t('Tokens related to arrays of strings.'),
|
danielebarchiesi@0
|
311 'needs-data' => 'array',
|
danielebarchiesi@0
|
312 );
|
danielebarchiesi@0
|
313 $info['tokens']['array']['first'] = array(
|
danielebarchiesi@0
|
314 'name' => t('First'),
|
danielebarchiesi@0
|
315 'description' => t('The first element of the array.'),
|
danielebarchiesi@0
|
316 );
|
danielebarchiesi@0
|
317 $info['tokens']['array']['last'] = array(
|
danielebarchiesi@0
|
318 'name' => t('Last'),
|
danielebarchiesi@0
|
319 'description' => t('The last element of the array.'),
|
danielebarchiesi@0
|
320 );
|
danielebarchiesi@0
|
321 $info['tokens']['array']['count'] = array(
|
danielebarchiesi@0
|
322 'name' => t('Count'),
|
danielebarchiesi@0
|
323 'description' => t('The number of elements in the array.'),
|
danielebarchiesi@0
|
324 );
|
danielebarchiesi@0
|
325 $info['tokens']['array']['reversed'] = array(
|
danielebarchiesi@0
|
326 'name' => t('Reversed'),
|
danielebarchiesi@0
|
327 'description' => t('The array reversed.'),
|
danielebarchiesi@0
|
328 'type' => 'array',
|
danielebarchiesi@0
|
329 );
|
danielebarchiesi@0
|
330 $info['tokens']['array']['keys'] = array(
|
danielebarchiesi@0
|
331 'name' => t('Keys'),
|
danielebarchiesi@0
|
332 'description' => t('The array of keys of the array.'),
|
danielebarchiesi@0
|
333 'type' => 'array',
|
danielebarchiesi@0
|
334 );
|
danielebarchiesi@0
|
335 $info['tokens']['array']['join'] = array(
|
danielebarchiesi@0
|
336 'name' => t('Imploded'),
|
danielebarchiesi@0
|
337 'description' => t('The values of the array joined together with a custom string in-between each value.'),
|
danielebarchiesi@0
|
338 'dynamic' => TRUE,
|
danielebarchiesi@0
|
339 );
|
danielebarchiesi@0
|
340 $info['tokens']['array']['value'] = array(
|
danielebarchiesi@0
|
341 'name' => t('Value'),
|
danielebarchiesi@0
|
342 'description' => t('The specific value of the array.'),
|
danielebarchiesi@0
|
343 'dynamic' => TRUE,
|
danielebarchiesi@0
|
344 );
|
danielebarchiesi@0
|
345
|
danielebarchiesi@0
|
346 // Random tokens.
|
danielebarchiesi@0
|
347 $info['types']['random'] = array(
|
danielebarchiesi@0
|
348 'name' => t('Random'),
|
danielebarchiesi@0
|
349 'description' => ('Tokens related to random data.'),
|
danielebarchiesi@0
|
350 );
|
danielebarchiesi@0
|
351 $info['tokens']['random']['number'] = array(
|
danielebarchiesi@0
|
352 'name' => t('Number'),
|
danielebarchiesi@0
|
353 'description' => t('A random number from 0 to @max.', array('@max' => mt_getrandmax())),
|
danielebarchiesi@0
|
354 );
|
danielebarchiesi@0
|
355 $info['tokens']['random']['hash'] = array(
|
danielebarchiesi@0
|
356 'name' => t('Hash'),
|
danielebarchiesi@0
|
357 'description' => t('A random hash. The possible hashing algorithms are: @hash-algos.', array('@hash-algos' => implode(', ', hash_algos()))),
|
danielebarchiesi@0
|
358 'dynamic' => TRUE,
|
danielebarchiesi@0
|
359 );
|
danielebarchiesi@0
|
360
|
danielebarchiesi@0
|
361 return $info;
|
danielebarchiesi@0
|
362 }
|
danielebarchiesi@0
|
363
|
danielebarchiesi@0
|
364 /**
|
danielebarchiesi@0
|
365 * Implements hook_tokens().
|
danielebarchiesi@0
|
366 */
|
danielebarchiesi@0
|
367 function token_tokens($type, $tokens, array $data = array(), array $options = array()) {
|
danielebarchiesi@0
|
368 $replacements = array();
|
danielebarchiesi@0
|
369
|
danielebarchiesi@0
|
370 $url_options = array('absolute' => TRUE);
|
danielebarchiesi@0
|
371 if (isset($options['language'])) {
|
danielebarchiesi@0
|
372 $url_options['language'] = $options['language'];
|
danielebarchiesi@0
|
373 $language_code = $options['language']->language;
|
danielebarchiesi@0
|
374 }
|
danielebarchiesi@0
|
375 else {
|
danielebarchiesi@0
|
376 $language_code = NULL;
|
danielebarchiesi@0
|
377 }
|
danielebarchiesi@0
|
378
|
danielebarchiesi@0
|
379 $sanitize = !empty($options['sanitize']);
|
danielebarchiesi@0
|
380
|
danielebarchiesi@0
|
381 // Date tokens.
|
danielebarchiesi@0
|
382 if ($type == 'date') {
|
danielebarchiesi@0
|
383 $date = !empty($data['date']) ? $data['date'] : REQUEST_TIME;
|
danielebarchiesi@0
|
384
|
danielebarchiesi@0
|
385 // @todo Remove when http://drupal.org/node/1173706 is fixed.
|
danielebarchiesi@0
|
386 $date_format_types = system_get_date_types();
|
danielebarchiesi@0
|
387 foreach ($tokens as $name => $original) {
|
danielebarchiesi@0
|
388 if (isset($date_format_types[$name]) && _token_module('date', $name) == 'token') {
|
danielebarchiesi@0
|
389 $replacements[$original] = format_date($date, $name, '', NULL, $language_code);
|
danielebarchiesi@0
|
390 }
|
danielebarchiesi@0
|
391 }
|
danielebarchiesi@0
|
392 }
|
danielebarchiesi@0
|
393
|
danielebarchiesi@0
|
394 // Current date tokens.
|
danielebarchiesi@0
|
395 // @todo Remove when http://drupal.org/node/943028 is fixed.
|
danielebarchiesi@0
|
396 if ($type == 'current-date') {
|
danielebarchiesi@0
|
397 $replacements += token_generate('date', $tokens, array('date' => REQUEST_TIME), $options);
|
danielebarchiesi@0
|
398 }
|
danielebarchiesi@0
|
399
|
danielebarchiesi@0
|
400 // Comment tokens.
|
danielebarchiesi@0
|
401 if ($type == 'comment' && !empty($data['comment'])) {
|
danielebarchiesi@0
|
402 $comment = $data['comment'];
|
danielebarchiesi@0
|
403
|
danielebarchiesi@0
|
404 // Chained token relationships.
|
danielebarchiesi@0
|
405 if (($url_tokens = token_find_with_prefix($tokens, 'url'))) {
|
danielebarchiesi@0
|
406 $replacements += token_generate('url', $url_tokens, entity_uri('comment', $comment), $options);
|
danielebarchiesi@0
|
407 }
|
danielebarchiesi@0
|
408 }
|
danielebarchiesi@0
|
409
|
danielebarchiesi@0
|
410 // Node tokens.
|
danielebarchiesi@0
|
411 if ($type == 'node' && !empty($data['node'])) {
|
danielebarchiesi@0
|
412 $node = $data['node'];
|
danielebarchiesi@0
|
413
|
danielebarchiesi@0
|
414 foreach ($tokens as $name => $original) {
|
danielebarchiesi@0
|
415 switch ($name) {
|
danielebarchiesi@0
|
416 case 'source':
|
danielebarchiesi@0
|
417 if (!empty($node->tnid) && $source_node = node_load($node->tnid)) {
|
danielebarchiesi@0
|
418 $title = $source_node->title;
|
danielebarchiesi@0
|
419 $replacements[$original] = $sanitize ? filter_xss($title) : $title;
|
danielebarchiesi@0
|
420 }
|
danielebarchiesi@0
|
421 break;
|
danielebarchiesi@0
|
422 case 'log':
|
danielebarchiesi@0
|
423 $replacements[$original] = $sanitize ? filter_xss($node->log) : $node->log;
|
danielebarchiesi@0
|
424 break;
|
danielebarchiesi@0
|
425 case 'content-type':
|
danielebarchiesi@0
|
426 $type_name = node_type_get_name($node);
|
danielebarchiesi@0
|
427 $replacements[$original] = $sanitize ? check_plain($type_name) : $type_name;
|
danielebarchiesi@0
|
428 break;
|
danielebarchiesi@0
|
429 }
|
danielebarchiesi@0
|
430 }
|
danielebarchiesi@0
|
431
|
danielebarchiesi@0
|
432 // Chained token relationships.
|
danielebarchiesi@0
|
433 if (!empty($node->tnid) && ($source_tokens = token_find_with_prefix($tokens, 'source')) && $source_node = node_load($node->tnid)) {
|
danielebarchiesi@0
|
434 $replacements += token_generate('node', $source_tokens, array('node' => $source_node), $options);
|
danielebarchiesi@0
|
435 }
|
danielebarchiesi@0
|
436 if (($node_type_tokens = token_find_with_prefix($tokens, 'content-type')) && $node_type = node_type_load($node->type)) {
|
danielebarchiesi@0
|
437 $replacements += token_generate('content-type', $node_type_tokens, array('node_type' => $node_type), $options);
|
danielebarchiesi@0
|
438 }
|
danielebarchiesi@0
|
439 if (($url_tokens = token_find_with_prefix($tokens, 'url'))) {
|
danielebarchiesi@0
|
440 $replacements += token_generate('url', $url_tokens, entity_uri('node', $node), $options);
|
danielebarchiesi@0
|
441 }
|
danielebarchiesi@0
|
442 }
|
danielebarchiesi@0
|
443
|
danielebarchiesi@0
|
444 // Content type tokens.
|
danielebarchiesi@0
|
445 if ($type == 'content-type' && !empty($data['node_type'])) {
|
danielebarchiesi@0
|
446 $node_type = $data['node_type'];
|
danielebarchiesi@0
|
447
|
danielebarchiesi@0
|
448 foreach ($tokens as $name => $original) {
|
danielebarchiesi@0
|
449 switch ($name) {
|
danielebarchiesi@0
|
450 case 'name':
|
danielebarchiesi@0
|
451 $replacements[$original] = $sanitize ? check_plain($node_type->name) : $node_type->name;
|
danielebarchiesi@0
|
452 break;
|
danielebarchiesi@0
|
453 case 'machine-name':
|
danielebarchiesi@0
|
454 // This is a machine name so does not ever need to be sanitized.
|
danielebarchiesi@0
|
455 $replacements[$original] = $node_type->type;
|
danielebarchiesi@0
|
456 break;
|
danielebarchiesi@0
|
457 case 'description':
|
danielebarchiesi@0
|
458 $replacements[$original] = $sanitize ? filter_xss($node_type->description) : $node_type->description;
|
danielebarchiesi@0
|
459 break;
|
danielebarchiesi@0
|
460 case 'node-count':
|
danielebarchiesi@0
|
461 $query = db_select('node');
|
danielebarchiesi@0
|
462 $query->condition('type', $node_type->type);
|
danielebarchiesi@0
|
463 $query->addTag('node_type_node_count');
|
danielebarchiesi@0
|
464 $count = $query->countQuery()->execute()->fetchField();
|
danielebarchiesi@0
|
465 $replacements[$original] = (int) $count;
|
danielebarchiesi@0
|
466 break;
|
danielebarchiesi@0
|
467 case 'edit-url':
|
danielebarchiesi@0
|
468 $replacements[$original] = url("admin/structure/types/manage/{$node_type->type}", $url_options);
|
danielebarchiesi@0
|
469 break;
|
danielebarchiesi@0
|
470 }
|
danielebarchiesi@0
|
471 }
|
danielebarchiesi@0
|
472 }
|
danielebarchiesi@0
|
473
|
danielebarchiesi@0
|
474 // Taxonomy term tokens.
|
danielebarchiesi@0
|
475 if ($type == 'term' && !empty($data['term'])) {
|
danielebarchiesi@0
|
476 $term = $data['term'];
|
danielebarchiesi@0
|
477
|
danielebarchiesi@0
|
478 foreach ($tokens as $name => $original) {
|
danielebarchiesi@0
|
479 switch ($name) {
|
danielebarchiesi@0
|
480 case 'edit-url':
|
danielebarchiesi@0
|
481 $replacements[$original] = url("taxonomy/term/{$term->tid}/edit", $url_options);
|
danielebarchiesi@0
|
482 break;
|
danielebarchiesi@0
|
483
|
danielebarchiesi@0
|
484 case 'parents':
|
danielebarchiesi@0
|
485 if ($parents = token_taxonomy_term_load_all_parents($term->tid)) {
|
danielebarchiesi@0
|
486 $replacements[$original] = token_render_array($parents, $options);
|
danielebarchiesi@0
|
487 }
|
danielebarchiesi@0
|
488 break;
|
danielebarchiesi@0
|
489
|
danielebarchiesi@0
|
490 case 'root':
|
danielebarchiesi@0
|
491 $parents = taxonomy_get_parents_all($term->tid);
|
danielebarchiesi@0
|
492 $root_term = end($parents);
|
danielebarchiesi@0
|
493 if ($root_term->tid != $term->tid) {
|
danielebarchiesi@0
|
494 $replacements[$original] = $sanitize ? check_plain($root_term->name) : $root_term->name;
|
danielebarchiesi@0
|
495 }
|
danielebarchiesi@0
|
496 break;
|
danielebarchiesi@0
|
497 }
|
danielebarchiesi@0
|
498 }
|
danielebarchiesi@0
|
499
|
danielebarchiesi@0
|
500 // Chained token relationships.
|
danielebarchiesi@0
|
501 if (($url_tokens = token_find_with_prefix($tokens, 'url'))) {
|
danielebarchiesi@0
|
502 $replacements += token_generate('url', $url_tokens, entity_uri('taxonomy_term', $term), $options);
|
danielebarchiesi@0
|
503 }
|
danielebarchiesi@0
|
504 // [term:parents:*] chained tokens.
|
danielebarchiesi@0
|
505 if ($parents_tokens = token_find_with_prefix($tokens, 'parents')) {
|
danielebarchiesi@0
|
506 if ($parents = token_taxonomy_term_load_all_parents($term->tid)) {
|
danielebarchiesi@0
|
507 $replacements += token_generate('array', $parents_tokens, array('array' => $parents), $options);
|
danielebarchiesi@0
|
508 }
|
danielebarchiesi@0
|
509 }
|
danielebarchiesi@0
|
510 if ($root_tokens = token_find_with_prefix($tokens, 'root')) {
|
danielebarchiesi@0
|
511 $parents = taxonomy_get_parents_all($term->tid);
|
danielebarchiesi@0
|
512 $root_term = end($parents);
|
danielebarchiesi@0
|
513 if ($root_term->tid != $term->tid) {
|
danielebarchiesi@0
|
514 $replacements += token_generate('term', $root_tokens, array('term' => $root_term), $options);
|
danielebarchiesi@0
|
515 }
|
danielebarchiesi@0
|
516 }
|
danielebarchiesi@0
|
517 }
|
danielebarchiesi@0
|
518
|
danielebarchiesi@0
|
519 // Vocabulary tokens.
|
danielebarchiesi@0
|
520 if ($type == 'vocabulary' && !empty($data['vocabulary'])) {
|
danielebarchiesi@0
|
521 $vocabulary = $data['vocabulary'];
|
danielebarchiesi@0
|
522
|
danielebarchiesi@0
|
523 foreach ($tokens as $name => $original) {
|
danielebarchiesi@0
|
524 switch ($name) {
|
danielebarchiesi@0
|
525 case 'machine-name':
|
danielebarchiesi@0
|
526 // This is a machine name so does not ever need to be sanitized.
|
danielebarchiesi@0
|
527 $replacements[$original] = $vocabulary->machine_name;
|
danielebarchiesi@0
|
528 break;
|
danielebarchiesi@0
|
529 case 'edit-url':
|
danielebarchiesi@0
|
530 $replacements[$original] = url("admin/structure/taxonomy/{$vocabulary->machine_name}/edit", $url_options);
|
danielebarchiesi@0
|
531 break;
|
danielebarchiesi@0
|
532 }
|
danielebarchiesi@0
|
533 }
|
danielebarchiesi@0
|
534 }
|
danielebarchiesi@0
|
535
|
danielebarchiesi@0
|
536 // File tokens.
|
danielebarchiesi@0
|
537 if ($type == 'file' && !empty($data['file'])) {
|
danielebarchiesi@0
|
538 $file = $data['file'];
|
danielebarchiesi@0
|
539
|
danielebarchiesi@0
|
540 foreach ($tokens as $name => $original) {
|
danielebarchiesi@0
|
541 switch ($name) {
|
danielebarchiesi@0
|
542 case 'basename':
|
danielebarchiesi@0
|
543 $basename = pathinfo($file->uri, PATHINFO_BASENAME);
|
danielebarchiesi@0
|
544 $replacements[$original] = $sanitize ? check_plain($basename) : $basename;
|
danielebarchiesi@0
|
545 break;
|
danielebarchiesi@0
|
546 case 'extension':
|
danielebarchiesi@0
|
547 $extension = pathinfo($file->uri, PATHINFO_EXTENSION);
|
danielebarchiesi@0
|
548 $replacements[$original] = $sanitize ? check_plain($extension) : $extension;
|
danielebarchiesi@0
|
549 break;
|
danielebarchiesi@0
|
550 case 'size-raw':
|
danielebarchiesi@0
|
551 $replacements[$original] = (int) $file->filesize;
|
danielebarchiesi@0
|
552 break;
|
danielebarchiesi@0
|
553 }
|
danielebarchiesi@0
|
554 }
|
danielebarchiesi@0
|
555 }
|
danielebarchiesi@0
|
556
|
danielebarchiesi@0
|
557 // User tokens.
|
danielebarchiesi@0
|
558 if ($type == 'user' && !empty($data['user'])) {
|
danielebarchiesi@0
|
559 $account = $data['user'];
|
danielebarchiesi@0
|
560
|
danielebarchiesi@0
|
561 foreach ($tokens as $name => $original) {
|
danielebarchiesi@0
|
562 switch ($name) {
|
danielebarchiesi@0
|
563 case 'picture':
|
danielebarchiesi@0
|
564 if (variable_get('user_pictures', 0)) {
|
danielebarchiesi@0
|
565 $replacements[$original] = theme('user_picture', array('account' => $account));
|
danielebarchiesi@0
|
566 }
|
danielebarchiesi@0
|
567 break;
|
danielebarchiesi@0
|
568 case 'roles':
|
danielebarchiesi@0
|
569 // The roles array may be set from checkbox values so ensure it always
|
danielebarchiesi@0
|
570 // has 'proper' data with the role names.
|
danielebarchiesi@0
|
571 $roles = array_intersect_key(user_roles(), $account->roles);
|
danielebarchiesi@0
|
572 $replacements[$original] = token_render_array($roles, $options);
|
danielebarchiesi@0
|
573 break;
|
danielebarchiesi@0
|
574 }
|
danielebarchiesi@0
|
575 }
|
danielebarchiesi@0
|
576
|
danielebarchiesi@0
|
577 // Chained token relationships.
|
danielebarchiesi@0
|
578 if (variable_get('user_pictures', 0) && !empty($account->picture) && ($picture_tokens = token_find_with_prefix($tokens, 'picture'))) {
|
danielebarchiesi@0
|
579 // @todo Remove when core bug http://drupal.org/node/978028 is fixed.
|
danielebarchiesi@0
|
580 $account->picture->description = '';
|
danielebarchiesi@0
|
581 $replacements += token_generate('file', $picture_tokens, array('file' => $account->picture), $options);
|
danielebarchiesi@0
|
582 }
|
danielebarchiesi@0
|
583 if ($url_tokens = token_find_with_prefix($tokens, 'url')) {
|
danielebarchiesi@0
|
584 $replacements += token_generate('url', $url_tokens, entity_uri('user', $account), $options);
|
danielebarchiesi@0
|
585 }
|
danielebarchiesi@0
|
586 if ($role_tokens = token_find_with_prefix($tokens, 'roles')) {
|
danielebarchiesi@0
|
587 // The roles array may be set from checkbox values so ensure it always
|
danielebarchiesi@0
|
588 // has 'proper' data with the role names.
|
danielebarchiesi@0
|
589 $roles = array_intersect_key(user_roles(), $account->roles);
|
danielebarchiesi@0
|
590 $replacements += token_generate('array', $role_tokens, array('array' => $roles), $options);
|
danielebarchiesi@0
|
591 }
|
danielebarchiesi@0
|
592 }
|
danielebarchiesi@0
|
593
|
danielebarchiesi@0
|
594 // Current user tokens.
|
danielebarchiesi@0
|
595 if ($type == 'current-user') {
|
danielebarchiesi@0
|
596 foreach ($tokens as $name => $original) {
|
danielebarchiesi@0
|
597 switch ($name) {
|
danielebarchiesi@0
|
598 case 'ip-address':
|
danielebarchiesi@0
|
599 $ip = ip_address();
|
danielebarchiesi@0
|
600 $replacements[$original] = $sanitize ? check_plain($ip) : $ip;
|
danielebarchiesi@0
|
601 break;
|
danielebarchiesi@0
|
602 }
|
danielebarchiesi@0
|
603 }
|
danielebarchiesi@0
|
604 }
|
danielebarchiesi@0
|
605
|
danielebarchiesi@0
|
606 // Menu link tokens.
|
danielebarchiesi@0
|
607 if ($type == 'menu-link' && !empty($data['menu-link'])) {
|
danielebarchiesi@0
|
608 $link = (array) $data['menu-link'];
|
danielebarchiesi@0
|
609
|
danielebarchiesi@0
|
610 if (!isset($link['title'])) {
|
danielebarchiesi@0
|
611 // Re-load the link if it was not loaded via token_menu_link_load().
|
danielebarchiesi@0
|
612 $link = token_menu_link_load($link['mlid']);
|
danielebarchiesi@0
|
613 }
|
danielebarchiesi@0
|
614
|
danielebarchiesi@0
|
615 foreach ($tokens as $name => $original) {
|
danielebarchiesi@0
|
616 switch ($name) {
|
danielebarchiesi@0
|
617 case 'mlid':
|
danielebarchiesi@0
|
618 $replacements[$original] = $link['mlid'];
|
danielebarchiesi@0
|
619 break;
|
danielebarchiesi@0
|
620 case 'title':
|
danielebarchiesi@0
|
621 $replacements[$original] = $sanitize ? check_plain($link['title']) : $link['title'];
|
danielebarchiesi@0
|
622 break;
|
danielebarchiesi@0
|
623 case 'url':
|
danielebarchiesi@0
|
624 $replacements[$original] = url($link['href'], $url_options);
|
danielebarchiesi@0
|
625 break;
|
danielebarchiesi@0
|
626 case 'parent':
|
danielebarchiesi@0
|
627 if (!empty($link['plid']) && $parent = token_menu_link_load($link['plid'])) {
|
danielebarchiesi@0
|
628 $replacements[$original] = $sanitize ? check_plain($parent['title']) : $parent['title'];
|
danielebarchiesi@0
|
629 }
|
danielebarchiesi@0
|
630 break;
|
danielebarchiesi@0
|
631 case 'parents':
|
danielebarchiesi@0
|
632 if ($parents = token_menu_link_load_all_parents($link['mlid'])) {
|
danielebarchiesi@0
|
633 $replacements[$original] = token_render_array($parents, $options);
|
danielebarchiesi@0
|
634 }
|
danielebarchiesi@0
|
635 break;
|
danielebarchiesi@0
|
636 case 'root';
|
danielebarchiesi@0
|
637 if (!empty($link['p1']) && $link['p1'] != $link['mlid'] && $root = token_menu_link_load($link['p1'])) {
|
danielebarchiesi@0
|
638 $replacements[$original] = $sanitize ? check_plain($root['title']) : $root['title'];
|
danielebarchiesi@0
|
639 }
|
danielebarchiesi@0
|
640 break;
|
danielebarchiesi@0
|
641 }
|
danielebarchiesi@0
|
642 }
|
danielebarchiesi@0
|
643
|
danielebarchiesi@0
|
644 // Chained token relationships.
|
danielebarchiesi@0
|
645 if (!empty($link['plid']) && ($source_tokens = token_find_with_prefix($tokens, 'parent')) && $parent = token_menu_link_load($link['plid'])) {
|
danielebarchiesi@0
|
646 $replacements += token_generate('menu-link', $source_tokens, array('menu-link' => $parent), $options);
|
danielebarchiesi@0
|
647 }
|
danielebarchiesi@0
|
648 // [menu-link:parents:*] chained tokens.
|
danielebarchiesi@0
|
649 if ($parents_tokens = token_find_with_prefix($tokens, 'parents')) {
|
danielebarchiesi@0
|
650 if ($parents = token_menu_link_load_all_parents($link['mlid'])) {
|
danielebarchiesi@0
|
651 $replacements += token_generate('array', $parents_tokens, array('array' => $parents), $options);
|
danielebarchiesi@0
|
652 }
|
danielebarchiesi@0
|
653 }
|
danielebarchiesi@0
|
654 if (!empty($link['p1']) && $link['p1'] != $link['mlid'] && ($root_tokens = token_find_with_prefix($tokens, 'root')) && $root = token_menu_link_load($link['p1'])) {
|
danielebarchiesi@0
|
655 $replacements += token_generate('menu-link', $root_tokens, array('menu-link' => $root), $options);
|
danielebarchiesi@0
|
656 }
|
danielebarchiesi@0
|
657 if ($url_tokens = token_find_with_prefix($tokens, 'url')) {
|
danielebarchiesi@0
|
658 $replacements += token_generate('url', $url_tokens, array('path' => $link['href']), $options);
|
danielebarchiesi@0
|
659 }
|
danielebarchiesi@0
|
660 }
|
danielebarchiesi@0
|
661
|
danielebarchiesi@0
|
662 // Current page tokens.
|
danielebarchiesi@0
|
663 if ($type == 'current-page') {
|
danielebarchiesi@0
|
664 $current_path = current_path();
|
danielebarchiesi@0
|
665
|
danielebarchiesi@0
|
666 foreach ($tokens as $name => $original) {
|
danielebarchiesi@0
|
667 switch ($name) {
|
danielebarchiesi@0
|
668 case 'title':
|
danielebarchiesi@0
|
669 $title = drupal_get_title();
|
danielebarchiesi@0
|
670 $replacements[$original] = $sanitize ? $title : decode_entities($title);
|
danielebarchiesi@0
|
671 break;
|
danielebarchiesi@0
|
672 case 'url':
|
danielebarchiesi@0
|
673 $replacements[$original] = url($current_path, $url_options);
|
danielebarchiesi@0
|
674 break;
|
danielebarchiesi@0
|
675 case 'page-number':
|
danielebarchiesi@0
|
676 if ($page = filter_input(INPUT_GET, 'page')) {
|
danielebarchiesi@0
|
677 // @see PagerDefault::execute()
|
danielebarchiesi@0
|
678 $pager_page_array = explode(',', $page);
|
danielebarchiesi@0
|
679 $page = $pager_page_array[0];
|
danielebarchiesi@0
|
680 }
|
danielebarchiesi@0
|
681 $replacements[$original] = (int) $page + 1;
|
danielebarchiesi@0
|
682 break;
|
danielebarchiesi@0
|
683 }
|
danielebarchiesi@0
|
684 }
|
danielebarchiesi@0
|
685
|
danielebarchiesi@0
|
686 // @deprecated
|
danielebarchiesi@0
|
687 // [current-page:arg] dynamic tokens.
|
danielebarchiesi@0
|
688 if ($arg_tokens = token_find_with_prefix($tokens, 'arg')) {
|
danielebarchiesi@0
|
689 foreach ($arg_tokens as $name => $original) {
|
danielebarchiesi@0
|
690 if (is_numeric($name) && ($arg = arg($name)) && isset($arg)) {
|
danielebarchiesi@0
|
691 $replacements[$original] = $sanitize ? check_plain($arg) : $arg;
|
danielebarchiesi@0
|
692 }
|
danielebarchiesi@0
|
693 }
|
danielebarchiesi@0
|
694 }
|
danielebarchiesi@0
|
695
|
danielebarchiesi@0
|
696 // [current-page:query] dynamic tokens.
|
danielebarchiesi@0
|
697 if ($query_tokens = token_find_with_prefix($tokens, 'query')) {
|
danielebarchiesi@0
|
698 foreach ($query_tokens as $name => $original) {
|
danielebarchiesi@0
|
699 // @todo Should this use filter_input()?
|
danielebarchiesi@0
|
700 if (isset($_GET[$name])) {
|
danielebarchiesi@0
|
701 $replacements[$original] = $sanitize ? check_plain($_GET[$name]) : $_GET[$name];
|
danielebarchiesi@0
|
702 }
|
danielebarchiesi@0
|
703 }
|
danielebarchiesi@0
|
704 }
|
danielebarchiesi@0
|
705
|
danielebarchiesi@0
|
706 // Chained token relationships.
|
danielebarchiesi@0
|
707 if ($url_tokens = token_find_with_prefix($tokens, 'url')) {
|
danielebarchiesi@0
|
708 $replacements += token_generate('url', $url_tokens, array('path' => $current_path), $options);
|
danielebarchiesi@0
|
709 }
|
danielebarchiesi@0
|
710 }
|
danielebarchiesi@0
|
711
|
danielebarchiesi@0
|
712 // URL tokens.
|
danielebarchiesi@0
|
713 if ($type == 'url' && !empty($data['path'])) {
|
danielebarchiesi@0
|
714 $path = $data['path'];
|
danielebarchiesi@0
|
715
|
danielebarchiesi@0
|
716 if (isset($data['options'])) {
|
danielebarchiesi@0
|
717 // Merge in the URL options if available.
|
danielebarchiesi@0
|
718 $url_options = $data['options'] + $url_options;
|
danielebarchiesi@0
|
719 }
|
danielebarchiesi@0
|
720
|
danielebarchiesi@0
|
721 foreach ($tokens as $name => $original) {
|
danielebarchiesi@0
|
722 switch ($name) {
|
danielebarchiesi@0
|
723 case 'path':
|
danielebarchiesi@0
|
724 $value = empty($url_options['alias']) ? drupal_get_path_alias($path, $language_code) : $path;
|
danielebarchiesi@0
|
725 $replacements[$original] = $sanitize ? check_plain($value) : $value;
|
danielebarchiesi@0
|
726 break;
|
danielebarchiesi@0
|
727 case 'alias':
|
danielebarchiesi@0
|
728 // @deprecated
|
danielebarchiesi@0
|
729 $alias = drupal_get_path_alias($path, $language_code);
|
danielebarchiesi@0
|
730 $replacements[$original] = $sanitize ? check_plain($alias) : $alias;
|
danielebarchiesi@0
|
731 break;
|
danielebarchiesi@0
|
732 case 'absolute':
|
danielebarchiesi@0
|
733 $replacements[$original] = url($path, $url_options);
|
danielebarchiesi@0
|
734 break;
|
danielebarchiesi@0
|
735 case 'relative':
|
danielebarchiesi@0
|
736 $replacements[$original] = url($path, array('absolute' => FALSE) + $url_options);
|
danielebarchiesi@0
|
737 break;
|
danielebarchiesi@0
|
738 case 'brief':
|
danielebarchiesi@0
|
739 $replacements[$original] = preg_replace(array('!^https?://!', '!/$!'), '', url($path, $url_options));
|
danielebarchiesi@0
|
740 break;
|
danielebarchiesi@0
|
741 case 'unaliased':
|
danielebarchiesi@0
|
742 $replacements[$original] = url($path, array('alias' => TRUE) + $url_options);
|
danielebarchiesi@0
|
743 break;
|
danielebarchiesi@0
|
744 case 'args':
|
danielebarchiesi@0
|
745 $value = empty($url_options['alias']) ? drupal_get_path_alias($path, $language_code) : $path;
|
danielebarchiesi@0
|
746 $replacements[$original] = token_render_array(arg(NULL, $value), $options);
|
danielebarchiesi@0
|
747 break;
|
danielebarchiesi@0
|
748 }
|
danielebarchiesi@0
|
749 }
|
danielebarchiesi@0
|
750
|
danielebarchiesi@0
|
751 // [url:arg:*] chained tokens.
|
danielebarchiesi@0
|
752 if ($arg_tokens = token_find_with_prefix($tokens, 'args')) {
|
danielebarchiesi@0
|
753 $value = empty($url_options['alias']) ? drupal_get_path_alias($path, $language_code) : $path;
|
danielebarchiesi@0
|
754 $replacements += token_generate('array', $arg_tokens, array('array' => arg(NULL, $value)), $options);
|
danielebarchiesi@0
|
755 }
|
danielebarchiesi@0
|
756
|
danielebarchiesi@0
|
757 // [url:unaliased:*] chained tokens.
|
danielebarchiesi@0
|
758 if ($unaliased_tokens = token_find_with_prefix($tokens, 'unaliased')) {
|
danielebarchiesi@0
|
759 $unaliased_token_data['path'] = $path;
|
danielebarchiesi@0
|
760 $unaliased_token_data['options'] = isset($data['options']) ? $data['options'] : array();
|
danielebarchiesi@0
|
761 $unaliased_token_data['options']['alias'] = TRUE;
|
danielebarchiesi@0
|
762 $replacements += token_generate('url', $unaliased_tokens, $unaliased_token_data, $options);
|
danielebarchiesi@0
|
763 }
|
danielebarchiesi@0
|
764 }
|
danielebarchiesi@0
|
765
|
danielebarchiesi@0
|
766 // Entity tokens.
|
danielebarchiesi@0
|
767 if (!empty($data[$type]) && $entity_type = token_get_entity_mapping('token', $type)) {
|
danielebarchiesi@0
|
768 $entity = $data[$type];
|
danielebarchiesi@0
|
769
|
danielebarchiesi@0
|
770 // Sometimes taxonomy terms are not properly loaded.
|
danielebarchiesi@0
|
771 // @see http://drupal.org/node/870528
|
danielebarchiesi@0
|
772 if ($entity_type == 'taxonomy_term' && !isset($entity->vocabulary_machine_name)) {
|
danielebarchiesi@0
|
773 $entity->vocabulary_machine_name = db_query("SELECT machine_name FROM {taxonomy_vocabulary} WHERE vid = :vid", array(':vid' => $entity->vid))->fetchField();
|
danielebarchiesi@0
|
774 }
|
danielebarchiesi@0
|
775
|
danielebarchiesi@0
|
776 foreach ($tokens as $name => $original) {
|
danielebarchiesi@0
|
777 switch ($name) {
|
danielebarchiesi@0
|
778 case 'url':
|
danielebarchiesi@0
|
779 if (_token_module($type, 'url') == 'token' && $uri = entity_uri($entity_type, $entity)) {
|
danielebarchiesi@0
|
780 $replacements[$original] = url($uri['path'], $uri['options']);
|
danielebarchiesi@0
|
781 }
|
danielebarchiesi@0
|
782 break;
|
danielebarchiesi@0
|
783
|
danielebarchiesi@0
|
784 case 'original':
|
danielebarchiesi@0
|
785 if (_token_module($type, 'original') == 'token' && !empty($entity->original)) {
|
danielebarchiesi@0
|
786 $label = entity_label($entity_type, $entity->original);
|
danielebarchiesi@0
|
787 $replacements[$original] = $sanitize ? check_plain($label) : $label;
|
danielebarchiesi@0
|
788 }
|
danielebarchiesi@0
|
789 break;
|
danielebarchiesi@0
|
790 }
|
danielebarchiesi@0
|
791 }
|
danielebarchiesi@0
|
792
|
danielebarchiesi@0
|
793 // [entity:url:*] chained tokens.
|
danielebarchiesi@0
|
794 if (($url_tokens = token_find_with_prefix($tokens, 'url')) && _token_module($type, 'url') == 'token') {
|
danielebarchiesi@0
|
795 $replacements += token_generate('url', $url_tokens, entity_uri($entity_type, $entity), $options);
|
danielebarchiesi@0
|
796 }
|
danielebarchiesi@0
|
797
|
danielebarchiesi@0
|
798 // [entity:original:*] chained tokens.
|
danielebarchiesi@0
|
799 if (($original_tokens = token_find_with_prefix($tokens, 'original')) && _token_module($type, 'original') == 'token' && !empty($entity->original)) {
|
danielebarchiesi@0
|
800 $replacements += token_generate($type, $original_tokens, array($type => $entity->original), $options);
|
danielebarchiesi@0
|
801 }
|
danielebarchiesi@0
|
802
|
danielebarchiesi@0
|
803 // Pass through to an generic 'entity' token type generation.
|
danielebarchiesi@0
|
804 $entity_data = array(
|
danielebarchiesi@0
|
805 'entity_type' => $entity_type,
|
danielebarchiesi@0
|
806 'entity' => $entity,
|
danielebarchiesi@0
|
807 'token_type' => $type,
|
danielebarchiesi@0
|
808 );
|
danielebarchiesi@0
|
809 // @todo Investigate passing through more data like everything from entity_extract_ids().
|
danielebarchiesi@0
|
810 $replacements += token_generate('entity', $tokens, $entity_data, $options);
|
danielebarchiesi@0
|
811 }
|
danielebarchiesi@0
|
812
|
danielebarchiesi@0
|
813 // Array tokens.
|
danielebarchiesi@0
|
814 if ($type == 'array' && !empty($data['array']) && is_array($data['array'])) {
|
danielebarchiesi@0
|
815 $array = $data['array'];
|
danielebarchiesi@0
|
816
|
danielebarchiesi@0
|
817 $sort = isset($options['array sort']) ? $options['array sort'] : TRUE;
|
danielebarchiesi@0
|
818 $keys = element_children($array, $sort);
|
danielebarchiesi@0
|
819
|
danielebarchiesi@0
|
820 foreach ($tokens as $name => $original) {
|
danielebarchiesi@0
|
821 switch ($name) {
|
danielebarchiesi@0
|
822 case 'first':
|
danielebarchiesi@0
|
823 $value = $array[$keys[0]];
|
danielebarchiesi@0
|
824 $value = is_array($value) ? render($value) : (string) $value;
|
danielebarchiesi@0
|
825 $replacements[$original] = $sanitize ? check_plain($value) : $value;
|
danielebarchiesi@0
|
826 break;
|
danielebarchiesi@0
|
827 case 'last':
|
danielebarchiesi@0
|
828 $value = $array[$keys[count($keys) - 1]];
|
danielebarchiesi@0
|
829 $value = is_array($value) ? render($value) : (string) $value;
|
danielebarchiesi@0
|
830 $replacements[$original] = $sanitize ? check_plain($value) : $value;
|
danielebarchiesi@0
|
831 break;
|
danielebarchiesi@0
|
832 case 'count':
|
danielebarchiesi@0
|
833 $replacements[$original] = count($keys);
|
danielebarchiesi@0
|
834 break;
|
danielebarchiesi@0
|
835 case 'keys':
|
danielebarchiesi@0
|
836 $replacements[$original] = token_render_array($keys, $options);
|
danielebarchiesi@0
|
837 break;
|
danielebarchiesi@0
|
838 case 'reversed':
|
danielebarchiesi@0
|
839 $reversed = array_reverse($array, TRUE);
|
danielebarchiesi@0
|
840 $replacements[$original] = token_render_array($reversed, $options);
|
danielebarchiesi@0
|
841 break;
|
danielebarchiesi@0
|
842 case 'join':
|
danielebarchiesi@0
|
843 $replacements[$original] = token_render_array($array, array('join' => '') + $options);
|
danielebarchiesi@0
|
844 break;
|
danielebarchiesi@0
|
845 }
|
danielebarchiesi@0
|
846 }
|
danielebarchiesi@0
|
847
|
danielebarchiesi@0
|
848 // [array:value:*] dynamic tokens.
|
danielebarchiesi@0
|
849 if ($value_tokens = token_find_with_prefix($tokens, 'value')) {
|
danielebarchiesi@0
|
850 foreach ($value_tokens as $key => $original) {
|
danielebarchiesi@0
|
851 if ($key[0] !== '#' && isset($array[$key])) {
|
danielebarchiesi@0
|
852 $replacements[$original] = token_render_array_value($array[$key], $options);
|
danielebarchiesi@0
|
853 }
|
danielebarchiesi@0
|
854 }
|
danielebarchiesi@0
|
855 }
|
danielebarchiesi@0
|
856
|
danielebarchiesi@0
|
857 // [array:join:*] dynamic tokens.
|
danielebarchiesi@0
|
858 if ($join_tokens = token_find_with_prefix($tokens, 'join')) {
|
danielebarchiesi@0
|
859 foreach ($join_tokens as $join => $original) {
|
danielebarchiesi@0
|
860 $replacements[$original] = token_render_array($array, array('join' => $join) + $options);
|
danielebarchiesi@0
|
861 }
|
danielebarchiesi@0
|
862 }
|
danielebarchiesi@0
|
863
|
danielebarchiesi@0
|
864 // [array:keys:*] chained tokens.
|
danielebarchiesi@0
|
865 if ($key_tokens = token_find_with_prefix($tokens, 'keys')) {
|
danielebarchiesi@0
|
866 $replacements += token_generate('array', $key_tokens, array('array' => $keys), $options);
|
danielebarchiesi@0
|
867 }
|
danielebarchiesi@0
|
868
|
danielebarchiesi@0
|
869 // [array:reversed:*] chained tokens.
|
danielebarchiesi@0
|
870 if ($reversed_tokens = token_find_with_prefix($tokens, 'reversed')) {
|
danielebarchiesi@0
|
871 $replacements += token_generate('array', $reversed_tokens, array('array' => array_reverse($array, TRUE)), array('array sort' => FALSE) + $options);
|
danielebarchiesi@0
|
872 }
|
danielebarchiesi@0
|
873
|
danielebarchiesi@0
|
874 // @todo Handle if the array values are not strings and could be chained.
|
danielebarchiesi@0
|
875 }
|
danielebarchiesi@0
|
876
|
danielebarchiesi@0
|
877 // Random tokens.
|
danielebarchiesi@0
|
878 if ($type == 'random') {
|
danielebarchiesi@0
|
879 foreach ($tokens as $name => $original) {
|
danielebarchiesi@0
|
880 switch ($name) {
|
danielebarchiesi@0
|
881 case 'number':
|
danielebarchiesi@0
|
882 $replacements[$original] = mt_rand();
|
danielebarchiesi@0
|
883 break;
|
danielebarchiesi@0
|
884 }
|
danielebarchiesi@0
|
885 }
|
danielebarchiesi@0
|
886
|
danielebarchiesi@0
|
887 // [custom:hash:*] dynamic token.
|
danielebarchiesi@0
|
888 if ($hash_tokens = token_find_with_prefix($tokens, 'hash')) {
|
danielebarchiesi@0
|
889 $algos = hash_algos();
|
danielebarchiesi@0
|
890 foreach ($hash_tokens as $name => $original) {
|
danielebarchiesi@0
|
891 if (in_array($name, $algos)) {
|
danielebarchiesi@0
|
892 $replacements[$original] = hash($name, drupal_random_bytes(55));
|
danielebarchiesi@0
|
893 }
|
danielebarchiesi@0
|
894 }
|
danielebarchiesi@0
|
895 }
|
danielebarchiesi@0
|
896 }
|
danielebarchiesi@0
|
897
|
danielebarchiesi@0
|
898 // If $type is a token type, $data[$type] is empty but $data[$entity_type] is
|
danielebarchiesi@0
|
899 // not, re-run token replacements.
|
danielebarchiesi@0
|
900 if (empty($data[$type]) && ($entity_type = token_get_entity_mapping('token', $type)) && $entity_type != $type && !empty($data[$entity_type]) && empty($options['recursive'])) {
|
danielebarchiesi@0
|
901 $data[$type] = $data[$entity_type];
|
danielebarchiesi@0
|
902 $options['recursive'] = TRUE;
|
danielebarchiesi@0
|
903 $replacements += module_invoke_all('tokens', $type, $tokens, $data, $options);
|
danielebarchiesi@0
|
904 }
|
danielebarchiesi@0
|
905
|
danielebarchiesi@0
|
906 // If the token type specifics a 'needs-data' value, and the value is not
|
danielebarchiesi@0
|
907 // present in $data, then throw an error.
|
danielebarchiesi@0
|
908 if (!empty($GLOBALS['drupal_test_info']['test_run_id'])) {
|
danielebarchiesi@0
|
909 // Only check when tests are running.
|
danielebarchiesi@0
|
910 $type_info = token_get_info($type);
|
danielebarchiesi@0
|
911 if (!empty($type_info['needs-data']) && !isset($data[$type_info['needs-data']])) {
|
danielebarchiesi@0
|
912 trigger_error(t('Attempting to perform token replacement for token type %type without required data', array('%type' => $type)), E_USER_WARNING);
|
danielebarchiesi@0
|
913 }
|
danielebarchiesi@0
|
914 }
|
danielebarchiesi@0
|
915
|
danielebarchiesi@0
|
916 return $replacements;
|
danielebarchiesi@0
|
917 }
|
danielebarchiesi@0
|
918
|
danielebarchiesi@0
|
919 /**
|
danielebarchiesi@0
|
920 * Implements hook_tokens_alter().
|
danielebarchiesi@0
|
921 *
|
danielebarchiesi@0
|
922 * Fix existing core tokens that do not work correctly.
|
danielebarchiesi@0
|
923 */
|
danielebarchiesi@0
|
924 function token_tokens_alter(array &$replacements, array $context) {
|
danielebarchiesi@0
|
925 $options = $context['options'];
|
danielebarchiesi@0
|
926
|
danielebarchiesi@0
|
927 $sanitize = !empty($options['sanitize']);
|
danielebarchiesi@0
|
928 $langcode = !empty($options['language']->language) ? $options['language']->language : NULL;
|
danielebarchiesi@0
|
929
|
danielebarchiesi@0
|
930 // Comment token fixes.
|
danielebarchiesi@0
|
931 if ($context['type'] == 'comment' && !empty($context['data']['comment'])) {
|
danielebarchiesi@0
|
932 $comment = $context['data']['comment'];
|
danielebarchiesi@0
|
933
|
danielebarchiesi@0
|
934 foreach ($context['tokens'] as $name => $original) {
|
danielebarchiesi@0
|
935 switch ($name) {
|
danielebarchiesi@0
|
936 case 'name':
|
danielebarchiesi@0
|
937 case 'author':
|
danielebarchiesi@0
|
938 // @todo Remove when http://drupal.org/node/920056 is fixed.
|
danielebarchiesi@0
|
939 if (!empty($comment->uid)) {
|
danielebarchiesi@0
|
940 $account = user_load($comment->uid);
|
danielebarchiesi@0
|
941 }
|
danielebarchiesi@0
|
942 else {
|
danielebarchiesi@0
|
943 $account = drupal_anonymous_user();
|
danielebarchiesi@0
|
944 $account->name = $comment->name;
|
danielebarchiesi@0
|
945 }
|
danielebarchiesi@0
|
946 $name = format_username($account);
|
danielebarchiesi@0
|
947 $replacements[$original] = $sanitize ? check_plain($name) : $name;
|
danielebarchiesi@0
|
948 break;
|
danielebarchiesi@0
|
949 }
|
danielebarchiesi@0
|
950 }
|
danielebarchiesi@0
|
951 }
|
danielebarchiesi@0
|
952
|
danielebarchiesi@0
|
953 // Node token fixes.
|
danielebarchiesi@0
|
954 if ($context['type'] == 'node' && !empty($context['data']['node'])) {
|
danielebarchiesi@0
|
955 $node = $context['data']['node'];
|
danielebarchiesi@0
|
956
|
danielebarchiesi@0
|
957 foreach ($context['tokens'] as $name => $original) {
|
danielebarchiesi@0
|
958 switch ($name) {
|
danielebarchiesi@0
|
959 case 'author':
|
danielebarchiesi@0
|
960 // http://drupal.org/node/1185842 was fixed in core release 7.9.
|
danielebarchiesi@0
|
961 if (version_compare(VERSION, '7.9', '<')) {
|
danielebarchiesi@0
|
962 $account = user_load($node->uid);
|
danielebarchiesi@0
|
963 $name = format_username($account);
|
danielebarchiesi@0
|
964 $replacements[$original] = $sanitize ? check_plain($name) : $name;
|
danielebarchiesi@0
|
965 }
|
danielebarchiesi@0
|
966 break;
|
danielebarchiesi@0
|
967 }
|
danielebarchiesi@0
|
968 }
|
danielebarchiesi@0
|
969 }
|
danielebarchiesi@0
|
970
|
danielebarchiesi@0
|
971 // File token fixes.
|
danielebarchiesi@0
|
972 if ($context['type'] == 'file' && !empty($context['data']['file'])) {
|
danielebarchiesi@0
|
973 $file = $context['data']['file'];
|
danielebarchiesi@0
|
974
|
danielebarchiesi@0
|
975 foreach ($context['tokens'] as $name => $original) {
|
danielebarchiesi@0
|
976 switch ($name) {
|
danielebarchiesi@0
|
977 case 'owner':
|
danielebarchiesi@0
|
978 // http://drupal.org/node/978028 was fixed in core release 7.7.
|
danielebarchiesi@0
|
979 if (version_compare(VERSION, '7.7', '<')) {
|
danielebarchiesi@0
|
980 $account = user_load($file->uid);
|
danielebarchiesi@0
|
981 $name = format_username($account);
|
danielebarchiesi@0
|
982 $replacements[$original] = $sanitize ? check_plain($name) : $name;
|
danielebarchiesi@0
|
983 }
|
danielebarchiesi@0
|
984 break;
|
danielebarchiesi@0
|
985 }
|
danielebarchiesi@0
|
986 }
|
danielebarchiesi@0
|
987 }
|
danielebarchiesi@0
|
988 }
|
danielebarchiesi@0
|
989
|
danielebarchiesi@0
|
990 /**
|
danielebarchiesi@0
|
991 * Implements hook_token_info() on behalf of book.module.
|
danielebarchiesi@0
|
992 */
|
danielebarchiesi@0
|
993 function book_token_info() {
|
danielebarchiesi@0
|
994 $info['tokens']['node']['book'] = array(
|
danielebarchiesi@0
|
995 'name' => t('Book'),
|
danielebarchiesi@0
|
996 'description' => t('The book page associated with the node.'),
|
danielebarchiesi@0
|
997 'type' => 'menu-link',
|
danielebarchiesi@0
|
998 );
|
danielebarchiesi@0
|
999 return $info;
|
danielebarchiesi@0
|
1000 }
|
danielebarchiesi@0
|
1001
|
danielebarchiesi@0
|
1002 /**
|
danielebarchiesi@0
|
1003 * Implements hook_tokens() on behalf of book.module.
|
danielebarchiesi@0
|
1004 */
|
danielebarchiesi@0
|
1005 function book_tokens($type, $tokens, array $data = array(), array $options = array()) {
|
danielebarchiesi@0
|
1006 $replacements = array();
|
danielebarchiesi@0
|
1007 $sanitize = !empty($options['sanitize']);
|
danielebarchiesi@0
|
1008
|
danielebarchiesi@0
|
1009 // Node tokens.
|
danielebarchiesi@0
|
1010 if ($type == 'node' && !empty($data['node'])) {
|
danielebarchiesi@0
|
1011 $node = $data['node'];
|
danielebarchiesi@0
|
1012
|
danielebarchiesi@0
|
1013 if (!empty($node->book['mlid'])) {
|
danielebarchiesi@0
|
1014 $link = token_book_link_load($node->book['mlid']);
|
danielebarchiesi@0
|
1015
|
danielebarchiesi@0
|
1016 foreach ($tokens as $name => $original) {
|
danielebarchiesi@0
|
1017 switch ($name) {
|
danielebarchiesi@0
|
1018 case 'book':
|
danielebarchiesi@0
|
1019 $replacements[$original] = $sanitize ? check_plain($link['title']) : $link['title'];
|
danielebarchiesi@0
|
1020 break;
|
danielebarchiesi@0
|
1021 }
|
danielebarchiesi@0
|
1022 }
|
danielebarchiesi@0
|
1023
|
danielebarchiesi@0
|
1024 // Chained token relationships.
|
danielebarchiesi@0
|
1025 if ($book_tokens = token_find_with_prefix($tokens, 'book')) {
|
danielebarchiesi@0
|
1026 $replacements += token_generate('menu-link', $book_tokens, array('menu-link' => $link), $options);
|
danielebarchiesi@0
|
1027 }
|
danielebarchiesi@0
|
1028 }
|
danielebarchiesi@0
|
1029 }
|
danielebarchiesi@0
|
1030
|
danielebarchiesi@0
|
1031 return $replacements;
|
danielebarchiesi@0
|
1032 }
|
danielebarchiesi@0
|
1033
|
danielebarchiesi@0
|
1034 /**
|
danielebarchiesi@0
|
1035 * Implements hook_token_info() on behalf of menu.module.
|
danielebarchiesi@0
|
1036 */
|
danielebarchiesi@0
|
1037 function menu_token_info() {
|
danielebarchiesi@0
|
1038 // Menu tokens.
|
danielebarchiesi@0
|
1039 $info['types']['menu'] = array(
|
danielebarchiesi@0
|
1040 'name' => t('Menus'),
|
danielebarchiesi@0
|
1041 'description' => t('Tokens related to menus.'),
|
danielebarchiesi@0
|
1042 'needs-data' => 'menu',
|
danielebarchiesi@0
|
1043 );
|
danielebarchiesi@0
|
1044 $info['tokens']['menu']['name'] = array(
|
danielebarchiesi@0
|
1045 'name' => t('Name'),
|
danielebarchiesi@0
|
1046 'description' => t("The name of the menu."),
|
danielebarchiesi@0
|
1047 );
|
danielebarchiesi@0
|
1048 $info['tokens']['menu']['machine-name'] = array(
|
danielebarchiesi@0
|
1049 'name' => t('Machine-readable name'),
|
danielebarchiesi@0
|
1050 'description' => t("The unique machine-readable name of the menu."),
|
danielebarchiesi@0
|
1051 );
|
danielebarchiesi@0
|
1052 $info['tokens']['menu']['description'] = array(
|
danielebarchiesi@0
|
1053 'name' => t('Description'),
|
danielebarchiesi@0
|
1054 'description' => t('The optional description of the menu.'),
|
danielebarchiesi@0
|
1055 );
|
danielebarchiesi@0
|
1056 $info['tokens']['menu']['menu-link-count'] = array(
|
danielebarchiesi@0
|
1057 'name' => t('Menu link count'),
|
danielebarchiesi@0
|
1058 'description' => t('The number of menu links belonging to the menu.'),
|
danielebarchiesi@0
|
1059 );
|
danielebarchiesi@0
|
1060 $info['tokens']['menu']['edit-url'] = array(
|
danielebarchiesi@0
|
1061 'name' => t('Edit URL'),
|
danielebarchiesi@0
|
1062 'description' => t("The URL of the menu's edit page."),
|
danielebarchiesi@0
|
1063 );
|
danielebarchiesi@0
|
1064
|
danielebarchiesi@0
|
1065 $info['tokens']['menu-link']['menu'] = array(
|
danielebarchiesi@0
|
1066 'name' => t('Menu'),
|
danielebarchiesi@0
|
1067 'description' => t('The menu of the menu link.'),
|
danielebarchiesi@0
|
1068 'type' => 'menu',
|
danielebarchiesi@0
|
1069 );
|
danielebarchiesi@0
|
1070 $info['tokens']['menu-link']['edit-url'] = array(
|
danielebarchiesi@0
|
1071 'name' => t('Edit URL'),
|
danielebarchiesi@0
|
1072 'description' => t("The URL of the menu link's edit page."),
|
danielebarchiesi@0
|
1073 );
|
danielebarchiesi@0
|
1074 $info['tokens']['node']['menu-link'] = array(
|
danielebarchiesi@0
|
1075 'name' => t('Menu link'),
|
danielebarchiesi@0
|
1076 'description' => t("The menu link for this node."),
|
danielebarchiesi@0
|
1077 'type' => 'menu-link',
|
danielebarchiesi@0
|
1078 );
|
danielebarchiesi@0
|
1079
|
danielebarchiesi@0
|
1080 return $info;
|
danielebarchiesi@0
|
1081 }
|
danielebarchiesi@0
|
1082
|
danielebarchiesi@0
|
1083 /**
|
danielebarchiesi@0
|
1084 * Implements hook_tokens() on behalf of menu.module.
|
danielebarchiesi@0
|
1085 */
|
danielebarchiesi@0
|
1086 function menu_tokens($type, $tokens, array $data = array(), array $options = array()) {
|
danielebarchiesi@0
|
1087 $replacements = array();
|
danielebarchiesi@0
|
1088
|
danielebarchiesi@0
|
1089 $url_options = array('absolute' => TRUE);
|
danielebarchiesi@0
|
1090 if (isset($options['language'])) {
|
danielebarchiesi@0
|
1091 $url_options['language'] = $options['language'];
|
danielebarchiesi@0
|
1092 $language_code = $options['language']->language;
|
danielebarchiesi@0
|
1093 }
|
danielebarchiesi@0
|
1094 else {
|
danielebarchiesi@0
|
1095 $language_code = NULL;
|
danielebarchiesi@0
|
1096 }
|
danielebarchiesi@0
|
1097
|
danielebarchiesi@0
|
1098 $sanitize = !empty($options['sanitize']);
|
danielebarchiesi@0
|
1099
|
danielebarchiesi@0
|
1100 // Node tokens.
|
danielebarchiesi@0
|
1101 if ($type == 'node' && !empty($data['node'])) {
|
danielebarchiesi@0
|
1102 $node = $data['node'];
|
danielebarchiesi@0
|
1103
|
danielebarchiesi@0
|
1104 foreach ($tokens as $name => $original) {
|
danielebarchiesi@0
|
1105 switch ($name) {
|
danielebarchiesi@0
|
1106 case 'menu-link':
|
danielebarchiesi@0
|
1107 if ($link = token_node_menu_link_load($node)) {
|
danielebarchiesi@0
|
1108 $replacements[$original] = $sanitize ? check_plain($link['title']) : $link['title'];
|
danielebarchiesi@0
|
1109 }
|
danielebarchiesi@0
|
1110 break;
|
danielebarchiesi@0
|
1111 }
|
danielebarchiesi@0
|
1112
|
danielebarchiesi@0
|
1113 // Chained token relationships.
|
danielebarchiesi@0
|
1114 if ($menu_tokens = token_find_with_prefix($tokens, 'menu-link')) {
|
danielebarchiesi@0
|
1115 if ($link = token_node_menu_link_load($node)) {
|
danielebarchiesi@0
|
1116 $replacements += token_generate('menu-link', $menu_tokens, array('menu-link' => $link), $options);
|
danielebarchiesi@0
|
1117 }
|
danielebarchiesi@0
|
1118 }
|
danielebarchiesi@0
|
1119 }
|
danielebarchiesi@0
|
1120 }
|
danielebarchiesi@0
|
1121
|
danielebarchiesi@0
|
1122 // Menu link tokens.
|
danielebarchiesi@0
|
1123 if ($type == 'menu-link' && !empty($data['menu-link'])) {
|
danielebarchiesi@0
|
1124 $link = (array) $data['menu-link'];
|
danielebarchiesi@0
|
1125
|
danielebarchiesi@0
|
1126 foreach ($tokens as $name => $original) {
|
danielebarchiesi@0
|
1127 switch ($name) {
|
danielebarchiesi@0
|
1128 case 'menu':
|
danielebarchiesi@0
|
1129 if ($menu = menu_load($link['menu_name'])) {
|
danielebarchiesi@0
|
1130 $replacements[$original] = $sanitize ? check_plain($menu['title']) : $menu['title'];
|
danielebarchiesi@0
|
1131 }
|
danielebarchiesi@0
|
1132 break;
|
danielebarchiesi@0
|
1133 case 'edit-url':
|
danielebarchiesi@0
|
1134 $replacements[$original] = url("admin/structure/menu/item/{$link['mlid']}/edit", $url_options);
|
danielebarchiesi@0
|
1135 break;
|
danielebarchiesi@0
|
1136 }
|
danielebarchiesi@0
|
1137 }
|
danielebarchiesi@0
|
1138
|
danielebarchiesi@0
|
1139 // Chained token relationships.
|
danielebarchiesi@0
|
1140 if (($menu_tokens = token_find_with_prefix($tokens, 'menu')) && $menu = menu_load($link['menu_name'])) {
|
danielebarchiesi@0
|
1141 $replacements += token_generate('menu', $menu_tokens, array('menu' => $menu), $options);
|
danielebarchiesi@0
|
1142 }
|
danielebarchiesi@0
|
1143 }
|
danielebarchiesi@0
|
1144
|
danielebarchiesi@0
|
1145 // Menu tokens.
|
danielebarchiesi@0
|
1146 if ($type == 'menu' && !empty($data['menu'])) {
|
danielebarchiesi@0
|
1147 $menu = (array) $data['menu'];
|
danielebarchiesi@0
|
1148
|
danielebarchiesi@0
|
1149 foreach ($tokens as $name => $original) {
|
danielebarchiesi@0
|
1150 switch ($name) {
|
danielebarchiesi@0
|
1151 case 'name':
|
danielebarchiesi@0
|
1152 $replacements[$original] = $sanitize ? check_plain($menu['title']) : $menu['title'];
|
danielebarchiesi@0
|
1153 break;
|
danielebarchiesi@0
|
1154 case 'machine-name':
|
danielebarchiesi@0
|
1155 // This is a machine name so does not ever need to be sanitized.
|
danielebarchiesi@0
|
1156 $replacements[$original] = $menu['menu_name'];
|
danielebarchiesi@0
|
1157 break;
|
danielebarchiesi@0
|
1158 case 'description':
|
danielebarchiesi@0
|
1159 $replacements[$original] = $sanitize ? filter_xss($menu['description']) : $menu['description'];
|
danielebarchiesi@0
|
1160 break;
|
danielebarchiesi@0
|
1161 case 'menu-link-count':
|
danielebarchiesi@0
|
1162 $query = db_select('menu_links');
|
danielebarchiesi@0
|
1163 $query->condition('menu_name', $menu['menu_name']);
|
danielebarchiesi@0
|
1164 $query->addTag('menu_menu_link_count');
|
danielebarchiesi@0
|
1165 $count = $query->countQuery()->execute()->fetchField();
|
danielebarchiesi@0
|
1166 $replacements[$original] = (int) $count;
|
danielebarchiesi@0
|
1167 break;
|
danielebarchiesi@0
|
1168 case 'edit-url':
|
danielebarchiesi@0
|
1169 $replacements[$original] = url("admin/structure/menu/manage/" . $menu['menu_name'], $url_options);
|
danielebarchiesi@0
|
1170 break;
|
danielebarchiesi@0
|
1171 }
|
danielebarchiesi@0
|
1172 }
|
danielebarchiesi@0
|
1173 }
|
danielebarchiesi@0
|
1174
|
danielebarchiesi@0
|
1175 return $replacements;
|
danielebarchiesi@0
|
1176 }
|
danielebarchiesi@0
|
1177
|
danielebarchiesi@0
|
1178 /**
|
danielebarchiesi@0
|
1179 * Implements hook_token_info() on behalf of profile.module.
|
danielebarchiesi@0
|
1180 */
|
danielebarchiesi@0
|
1181 function profile_token_info() {
|
danielebarchiesi@0
|
1182 $info = array();
|
danielebarchiesi@0
|
1183
|
danielebarchiesi@0
|
1184 foreach (_token_profile_fields() as $field) {
|
danielebarchiesi@0
|
1185 $info['tokens']['user'][$field->token_name] = array(
|
danielebarchiesi@0
|
1186 'name' => check_plain($field->title),
|
danielebarchiesi@0
|
1187 'description' => t('@category @type field.', array('@category' => drupal_ucfirst($field->category), '@type' => $field->type)),
|
danielebarchiesi@0
|
1188 );
|
danielebarchiesi@0
|
1189
|
danielebarchiesi@0
|
1190 switch ($field->type) {
|
danielebarchiesi@0
|
1191 case 'date':
|
danielebarchiesi@0
|
1192 $info['tokens']['user'][$field->token_name]['type'] = 'date';
|
danielebarchiesi@0
|
1193 break;
|
danielebarchiesi@0
|
1194 }
|
danielebarchiesi@0
|
1195 }
|
danielebarchiesi@0
|
1196
|
danielebarchiesi@0
|
1197 return $info;
|
danielebarchiesi@0
|
1198 }
|
danielebarchiesi@0
|
1199
|
danielebarchiesi@0
|
1200 /**
|
danielebarchiesi@0
|
1201 * Implements hook_tokens() on behalf of profile.module.
|
danielebarchiesi@0
|
1202 */
|
danielebarchiesi@0
|
1203 function profile_tokens($type, $tokens, array $data = array(), array $options = array()) {
|
danielebarchiesi@0
|
1204 $replacements = array();
|
danielebarchiesi@0
|
1205 $sanitize = !empty($options['sanitize']);
|
danielebarchiesi@0
|
1206 $language_code = isset($options['language']) ? $options['language']->language : NULL;
|
danielebarchiesi@0
|
1207
|
danielebarchiesi@0
|
1208 if ($type == 'user' && !empty($data['user'])) {
|
danielebarchiesi@0
|
1209 $account = $data['user'];
|
danielebarchiesi@0
|
1210
|
danielebarchiesi@0
|
1211 // Load profile fields if this is the global user account.
|
danielebarchiesi@0
|
1212 // @see http://drupal.org/node/361471
|
danielebarchiesi@0
|
1213 // @see http://drupal.org/node/967330
|
danielebarchiesi@0
|
1214 if ($account->uid == $GLOBALS['user']->uid && isset($account->timestamp)) {
|
danielebarchiesi@0
|
1215 $profile_users = array($account->uid => $account);
|
danielebarchiesi@0
|
1216 profile_user_load($profile_users);
|
danielebarchiesi@0
|
1217 $account = $profile_users[$account->uid];
|
danielebarchiesi@0
|
1218 }
|
danielebarchiesi@0
|
1219
|
danielebarchiesi@0
|
1220 $profile_fields = _token_profile_fields();
|
danielebarchiesi@0
|
1221 foreach ($tokens as $name => $original) {
|
danielebarchiesi@0
|
1222 if (isset($profile_fields[$name]) && !empty($account->{$profile_fields[$name]->name})) {
|
danielebarchiesi@0
|
1223 $value = $account->{$profile_fields[$name]->name};
|
danielebarchiesi@0
|
1224 switch ($profile_fields[$name]->type) {
|
danielebarchiesi@0
|
1225 case 'textarea':
|
danielebarchiesi@0
|
1226 $replacements[$original] = $sanitize ? check_markup($value, filter_default_format($account), '', TRUE) : $value;
|
danielebarchiesi@0
|
1227 break;
|
danielebarchiesi@0
|
1228 case 'date':
|
danielebarchiesi@0
|
1229 $timestamp = gmmktime(0, 0, 0, $value['month'], $value['day'], $value['year']);
|
danielebarchiesi@0
|
1230 $replacements[$original] = format_date($timestamp, 'medium', '', NULL, $language_code);
|
danielebarchiesi@0
|
1231 break;
|
danielebarchiesi@0
|
1232 case 'url':
|
danielebarchiesi@0
|
1233 $replacements[$original] = $sanitize ? check_url($value) : $value;
|
danielebarchiesi@0
|
1234 break;
|
danielebarchiesi@0
|
1235 case 'checkbox':
|
danielebarchiesi@0
|
1236 // Checkbox field if checked should return the text.
|
danielebarchiesi@0
|
1237 $replacements[$original] = $sanitize ? check_plain($profile_fields[$name]->title) : $profile_fields[$name]->title;
|
danielebarchiesi@0
|
1238 break;
|
danielebarchiesi@0
|
1239 case 'list':
|
danielebarchiesi@0
|
1240 $value = preg_split("/[,\n\r]/", $value);
|
danielebarchiesi@0
|
1241 $value = array_map('trim', $value);
|
danielebarchiesi@0
|
1242 $value = implode(', ', $value);
|
danielebarchiesi@0
|
1243 // Intentionally fall through to the default condition.
|
danielebarchiesi@0
|
1244 default:
|
danielebarchiesi@0
|
1245 $replacements[$original] = $sanitize ? check_plain($value) : $value;
|
danielebarchiesi@0
|
1246 break;
|
danielebarchiesi@0
|
1247 }
|
danielebarchiesi@0
|
1248 }
|
danielebarchiesi@0
|
1249 }
|
danielebarchiesi@0
|
1250
|
danielebarchiesi@0
|
1251 // Chained token relationships.
|
danielebarchiesi@0
|
1252 foreach ($profile_fields as $field) {
|
danielebarchiesi@0
|
1253 if ($field->type == 'date' && isset($account->{$field->name}) && $field_tokens = token_find_with_prefix($tokens, $field->token_name)) {
|
danielebarchiesi@0
|
1254 $date = $account->{$field->name};
|
danielebarchiesi@0
|
1255 $replacements += token_generate('date', $field_tokens, array('date' => gmmktime(0, 0, 0, $date['month'], $date['day'], $date['year'])), $options);
|
danielebarchiesi@0
|
1256 }
|
danielebarchiesi@0
|
1257 }
|
danielebarchiesi@0
|
1258 }
|
danielebarchiesi@0
|
1259
|
danielebarchiesi@0
|
1260 return $replacements;
|
danielebarchiesi@0
|
1261 }
|
danielebarchiesi@0
|
1262
|
danielebarchiesi@0
|
1263 /**
|
danielebarchiesi@0
|
1264 * Fetch an array of profile field objects, keyed by token name.
|
danielebarchiesi@0
|
1265 */
|
danielebarchiesi@0
|
1266 function _token_profile_fields() {
|
danielebarchiesi@0
|
1267 $fields = &drupal_static(__FUNCTION__);
|
danielebarchiesi@0
|
1268
|
danielebarchiesi@0
|
1269 if (!isset($fields)) {
|
danielebarchiesi@0
|
1270 $fields = array();
|
danielebarchiesi@0
|
1271 $results = db_query("SELECT name, title, category, type FROM {profile_field}");
|
danielebarchiesi@0
|
1272 foreach ($results as $field) {
|
danielebarchiesi@0
|
1273 $field->token_name = token_clean_token_name($field->name);
|
danielebarchiesi@0
|
1274 $fields[$field->token_name] = $field;
|
danielebarchiesi@0
|
1275 }
|
danielebarchiesi@0
|
1276 }
|
danielebarchiesi@0
|
1277
|
danielebarchiesi@0
|
1278 return $fields;
|
danielebarchiesi@0
|
1279 }
|
danielebarchiesi@0
|
1280
|
danielebarchiesi@0
|
1281 /**
|
danielebarchiesi@0
|
1282 * Fetch an array of field data used for tokens.
|
danielebarchiesi@0
|
1283 */
|
danielebarchiesi@0
|
1284 function _token_field_info($field_name = NULL) {
|
danielebarchiesi@0
|
1285 $info = &drupal_static(__FUNCTION__);
|
danielebarchiesi@0
|
1286
|
danielebarchiesi@0
|
1287 if (!isset($fields)) {
|
danielebarchiesi@0
|
1288 if ($cached = cache_get('field:info', 'cache_token')) {
|
danielebarchiesi@0
|
1289 $info = $cached->data;
|
danielebarchiesi@0
|
1290 }
|
danielebarchiesi@0
|
1291 else {
|
danielebarchiesi@0
|
1292 $info = array();
|
danielebarchiesi@0
|
1293
|
danielebarchiesi@0
|
1294 $fields = field_info_fields();
|
danielebarchiesi@0
|
1295 $instances = field_info_instances();
|
danielebarchiesi@0
|
1296 $type_info = field_info_field_types();
|
danielebarchiesi@0
|
1297 $entity_info = entity_get_info();
|
danielebarchiesi@0
|
1298
|
danielebarchiesi@0
|
1299 foreach ($fields as $field) {
|
danielebarchiesi@0
|
1300 $key = $field['field_name'];
|
danielebarchiesi@0
|
1301 if (!empty($field['bundles'])) {
|
danielebarchiesi@0
|
1302 foreach (array_keys($field['bundles']) as $entity) {
|
danielebarchiesi@0
|
1303 // Make sure a token type exists for this entity.
|
danielebarchiesi@0
|
1304 $token_type = token_get_entity_mapping('entity', $entity);
|
danielebarchiesi@0
|
1305 if (empty($token_type)) {
|
danielebarchiesi@0
|
1306 continue;
|
danielebarchiesi@0
|
1307 }
|
danielebarchiesi@0
|
1308
|
danielebarchiesi@0
|
1309 $info[$key]['token types'][] = $token_type;
|
danielebarchiesi@0
|
1310 $info[$key] += array('labels' => array(), 'bundles' => array());
|
danielebarchiesi@0
|
1311
|
danielebarchiesi@0
|
1312 // Find which label is most commonly used.
|
danielebarchiesi@0
|
1313 foreach ($field['bundles'][$entity] as $bundle) {
|
danielebarchiesi@0
|
1314 // Field information will included fields attached to disabled
|
danielebarchiesi@0
|
1315 // bundles, so check that the bundle exists before provided a
|
danielebarchiesi@0
|
1316 // token for it.
|
danielebarchiesi@0
|
1317 // @see http://drupal.org/node/1252566
|
danielebarchiesi@0
|
1318 if (!isset($entity_info[$entity]['bundles'][$bundle])) {
|
danielebarchiesi@0
|
1319 continue;
|
danielebarchiesi@0
|
1320 }
|
danielebarchiesi@0
|
1321
|
danielebarchiesi@0
|
1322 $info[$key]['labels'][] = $instances[$entity][$bundle][$key]['label'];
|
danielebarchiesi@0
|
1323 $info[$key]['bundles'][$token_type][$bundle] = $entity_info[$entity]['bundles'][$bundle]['label'];
|
danielebarchiesi@0
|
1324 }
|
danielebarchiesi@0
|
1325 }
|
danielebarchiesi@0
|
1326 }
|
danielebarchiesi@0
|
1327
|
danielebarchiesi@0
|
1328 if (isset($info[$key])) {
|
danielebarchiesi@0
|
1329 $labels = array_count_values($info[$key]['labels']);
|
danielebarchiesi@0
|
1330 arsort($labels);
|
danielebarchiesi@0
|
1331 $info[$key]['label'] = check_plain(key($labels));
|
danielebarchiesi@0
|
1332
|
danielebarchiesi@0
|
1333 // Generate a description for the token.
|
danielebarchiesi@0
|
1334 $info[$key]['description'] = t('@type field.', array('@type' => $type_info[$field['type']]['label']));
|
danielebarchiesi@0
|
1335 if ($also_known_as = array_unique(array_diff($info[$key]['labels'], array($info[$key]['label'])))) {
|
danielebarchiesi@0
|
1336 $info[$key]['description'] .= ' ' . t('Also known as %labels.', array('%labels' => implode(', ', $also_known_as)));
|
danielebarchiesi@0
|
1337 }
|
danielebarchiesi@0
|
1338 }
|
danielebarchiesi@0
|
1339 }
|
danielebarchiesi@0
|
1340
|
danielebarchiesi@0
|
1341 drupal_alter('token_field_info', $info);
|
danielebarchiesi@0
|
1342 cache_set('field:info', $info, 'cache_token');
|
danielebarchiesi@0
|
1343 }
|
danielebarchiesi@0
|
1344 }
|
danielebarchiesi@0
|
1345
|
danielebarchiesi@0
|
1346 if (isset($field_name)) {
|
danielebarchiesi@0
|
1347 return isset($info[$field_name]) ? $info[$field_name] : FALSE;
|
danielebarchiesi@0
|
1348 }
|
danielebarchiesi@0
|
1349
|
danielebarchiesi@0
|
1350 return $info;
|
danielebarchiesi@0
|
1351 }
|
danielebarchiesi@0
|
1352
|
danielebarchiesi@0
|
1353 /**
|
danielebarchiesi@0
|
1354 * Implements hook_token_info_alter() on behalf of field.module.
|
danielebarchiesi@0
|
1355 *
|
danielebarchiesi@0
|
1356 * We use hook_token_info_alter() rather than hook_token_info() as other
|
danielebarchiesi@0
|
1357 * modules may already have defined some field tokens.
|
danielebarchiesi@0
|
1358 */
|
danielebarchiesi@0
|
1359 function field_token_info_alter(&$info) {
|
danielebarchiesi@0
|
1360 $fields = _token_field_info();
|
danielebarchiesi@0
|
1361
|
danielebarchiesi@0
|
1362 // Attach field tokens to their respecitve entity tokens.
|
danielebarchiesi@0
|
1363 foreach ($fields as $field_name => $field) {
|
danielebarchiesi@0
|
1364 foreach (array_keys($field['bundles']) as $token_type) {
|
danielebarchiesi@0
|
1365 // If a token already exists for this field, then don't add it.
|
danielebarchiesi@0
|
1366 if (isset($info['tokens'][$token_type][$field_name])) {
|
danielebarchiesi@0
|
1367 continue;
|
danielebarchiesi@0
|
1368 }
|
danielebarchiesi@0
|
1369
|
danielebarchiesi@0
|
1370 // Ensure the tokens exist.
|
danielebarchiesi@0
|
1371 if (!isset($info['types'][$token_type]) || !isset($info['tokens'][$token_type])) {
|
danielebarchiesi@0
|
1372 continue;
|
danielebarchiesi@0
|
1373 }
|
danielebarchiesi@0
|
1374
|
danielebarchiesi@0
|
1375 if ($token_type == 'comment' && $field_name == 'comment_body') {
|
danielebarchiesi@0
|
1376 // Core provides the comment field as [comment:body].
|
danielebarchiesi@0
|
1377 continue;
|
danielebarchiesi@0
|
1378 }
|
danielebarchiesi@0
|
1379
|
danielebarchiesi@0
|
1380 $info['tokens'][$token_type][$field_name] = array(
|
danielebarchiesi@0
|
1381 // Note that label and description have already been sanitized by _token_field_info().
|
danielebarchiesi@0
|
1382 'name' => $field['label'],
|
danielebarchiesi@0
|
1383 'description' => $field['description'],
|
danielebarchiesi@0
|
1384 'module' => 'token',
|
danielebarchiesi@0
|
1385 );
|
danielebarchiesi@0
|
1386 }
|
danielebarchiesi@0
|
1387 }
|
danielebarchiesi@0
|
1388 }
|
danielebarchiesi@0
|
1389
|
danielebarchiesi@0
|
1390 /**
|
danielebarchiesi@0
|
1391 * Implements hook_tokens() on behalf of field.module.
|
danielebarchiesi@0
|
1392 */
|
danielebarchiesi@0
|
1393 function field_tokens($type, $tokens, array $data = array(), array $options = array()) {
|
danielebarchiesi@0
|
1394 $replacements = array();
|
danielebarchiesi@0
|
1395 $sanitize = !empty($options['sanitize']);
|
danielebarchiesi@0
|
1396 $langcode = isset($options['language']) ? $options['language']->language : NULL;
|
danielebarchiesi@0
|
1397
|
danielebarchiesi@0
|
1398 // Entity tokens.
|
danielebarchiesi@0
|
1399 if ($type == 'entity' && !empty($data['entity_type']) && !empty($data['entity']) && !empty($data['token_type'])) {
|
danielebarchiesi@0
|
1400 $entity_type = $data['entity_type'];
|
danielebarchiesi@0
|
1401
|
danielebarchiesi@0
|
1402 // The field API does weird stuff to the entity, so let's clone it.
|
danielebarchiesi@0
|
1403 $entity = clone $data['entity'];
|
danielebarchiesi@0
|
1404
|
danielebarchiesi@0
|
1405 // Reset the prepared view flag in case token generation is called from
|
danielebarchiesi@0
|
1406 // inside field_attach_view().
|
danielebarchiesi@0
|
1407 unset($entity->_field_view_prepared);
|
danielebarchiesi@0
|
1408
|
danielebarchiesi@0
|
1409 list(, , $bundle) = entity_extract_ids($entity_type, $entity);
|
danielebarchiesi@0
|
1410 $fields = field_info_instances($entity_type, $bundle);
|
danielebarchiesi@0
|
1411
|
danielebarchiesi@0
|
1412 foreach (array_keys($fields) as $field_name) {
|
danielebarchiesi@0
|
1413 // Do not continue if the field is empty.
|
danielebarchiesi@0
|
1414 if (empty($entity->{$field_name})) {
|
danielebarchiesi@0
|
1415 continue;
|
danielebarchiesi@0
|
1416 }
|
danielebarchiesi@0
|
1417
|
danielebarchiesi@0
|
1418 // Replace the [entity:field-name] token only if token module added this
|
danielebarchiesi@0
|
1419 // token.
|
danielebarchiesi@0
|
1420 if (isset($tokens[$field_name]) && _token_module($data['token_type'], $field_name) == 'token') {
|
danielebarchiesi@0
|
1421 $original = $tokens[$field_name];
|
danielebarchiesi@0
|
1422
|
danielebarchiesi@0
|
1423 $field_output = field_view_field($entity_type, $entity, $field_name, 'token', $langcode);
|
danielebarchiesi@0
|
1424 $field_output['#token_options'] = $options;
|
danielebarchiesi@0
|
1425 $field_output['#pre_render'][] = 'token_pre_render_field_token';
|
danielebarchiesi@0
|
1426 $replacements[$original] = drupal_render($field_output);
|
danielebarchiesi@0
|
1427 }
|
danielebarchiesi@0
|
1428 }
|
danielebarchiesi@0
|
1429
|
danielebarchiesi@0
|
1430 // Remove the cloned object from memory.
|
danielebarchiesi@0
|
1431 unset($entity);
|
danielebarchiesi@0
|
1432 }
|
danielebarchiesi@0
|
1433
|
danielebarchiesi@0
|
1434 return $replacements;
|
danielebarchiesi@0
|
1435 }
|
danielebarchiesi@0
|
1436
|
danielebarchiesi@0
|
1437 /**
|
danielebarchiesi@0
|
1438 * Pre-render callback for field output used with tokens.
|
danielebarchiesi@0
|
1439 */
|
danielebarchiesi@0
|
1440 function token_pre_render_field_token(&$elements) {
|
danielebarchiesi@0
|
1441 // Remove the field theme hook, attachments, and JavaScript states.
|
danielebarchiesi@0
|
1442 unset($elements['#theme']);
|
danielebarchiesi@0
|
1443 unset($elements['#states']);
|
danielebarchiesi@0
|
1444 unset($elements['#attached']);
|
danielebarchiesi@0
|
1445
|
danielebarchiesi@0
|
1446 // Prevent multi-value fields from appearing smooshed together by appending
|
danielebarchiesi@0
|
1447 // a join suffix to all but the last value.
|
danielebarchiesi@0
|
1448 $deltas = element_get_visible_children($elements);
|
danielebarchiesi@0
|
1449 $count = count($deltas);
|
danielebarchiesi@0
|
1450 if ($count > 1) {
|
danielebarchiesi@0
|
1451 $join = isset($elements['#token_options']['join']) ? $elements['#token_options']['join'] : ", ";
|
danielebarchiesi@0
|
1452 foreach ($deltas as $index => $delta) {
|
danielebarchiesi@0
|
1453 // Do not add a suffix to the last item.
|
danielebarchiesi@0
|
1454 if ($index < ($count - 1)) {
|
danielebarchiesi@0
|
1455 $elements[$delta] += array('#suffix' => $join);
|
danielebarchiesi@0
|
1456 }
|
danielebarchiesi@0
|
1457 }
|
danielebarchiesi@0
|
1458 }
|
danielebarchiesi@0
|
1459 return $elements;
|
danielebarchiesi@0
|
1460 }
|