function webform_tokens_tokens in Webform Tokens 7
Implements hook_tokens().
The first "_tokens" is part of the module name.
File
- ./
webform_tokens.module, line 98 - The Webform Tokens module.
Code
function webform_tokens_tokens($type, array $tokens, array $data = array(), array $options = array()) {
// Support [webform:] tokens if Webform Rules is not enabled.
if ($type === 'webform' && isset($data['webform']) && module_exists('webform_rules') === FALSE) {
$type = 'webform-tokens';
$data['webform-submission'] = $data['webform'];
}
if ($type === 'webform-tokens' && isset($data['webform-submission']) && is_object($data['webform-submission'])) {
$submission = $data['webform-submission'];
$nid = $submission->nid;
$sid = $submission->sid;
$replacements = array();
$special_tokens = array(
'meta-nid',
'webform-meta-nid',
'meta-submitted',
'webform-meta-submitted',
);
foreach ($tokens as $name => $original) {
switch ($name) {
case 'meta-nid':
case 'webform-meta-nid':
$replacements[$original] = $submission->nid;
break;
case 'meta-sid':
case 'webform-meta-sid':
$replacements[$original] = $submission->sid;
break;
case 'meta-uid':
case 'webform-meta-uid':
$replacements[$original] = $submission->uid;
break;
case 'meta-remote_addr':
case 'webform-meta-remote_addr':
$replacements[$original] = $submission->remote_addr;
break;
case 'meta-submitted':
case 'webform-meta-submitted':
$replacements[$original] = $submission->submitted;
break;
default:
// Don't replace if the name will be generated later.
foreach ($special_tokens as $special_name) {
if (strpos($name, $special_name) !== FALSE && $name != $special_name) {
break 2;
}
}
static $components;
// Initialize components for this webform submission if necessary.
if (!isset($components[$nid][$sid])) {
$components = array(
$nid => array(
$sid => array(),
),
);
$q = db_select('webform_component')
->fields('webform_component')
->condition('type', array(
'markup',
'pagebreak',
'fieldset',
), 'NOT IN')
->condition('nid', $submission->nid)
->execute()
->fetchAllAssoc('cid', PDO::FETCH_ASSOC);
foreach ($q as $this_component) {
$cid = $this_component['cid'];
if (isset($submission->data[$cid])) {
$submission->data[$cid] += $this_component;
}
else {
$submission->data[$cid] = array();
}
// Modify the submission.
$components[$nid][$sid] += array(
$cid => $submission->data[$cid],
);
}
}
$cid_found = FALSE;
foreach ($components as $this_nid => $this_submission) {
foreach ($this_submission as $this_sid => $this_component) {
foreach ($this_component as $this_cid => $component_data) {
if (!empty($component_data)) {
// We have to account for chained tokens as well.
$prefix_check = token_find_with_prefix($tokens, 'val-' . $component_data['form_key']);
if (in_array($name, array(
'val-' . $component_data['form_key'],
'meta-label-' . $component_data['form_key'],
)) || !empty($prefix_check)) {
$cid = $this_cid;
$cid_found = TRUE;
break;
}
$prefix_check = token_find_with_prefix($tokens, 'webform-val-' . $component_data['form_key']);
if (in_array($name, array(
'webform-val-' . $component_data['form_key'],
'webform-key-' . $component_data['form_key'],
'meta-label-' . $component_data['form_key'],
)) || !empty($prefix_check)) {
$cid = $this_cid;
$cid_found = TRUE;
break;
}
}
}
if ($cid_found) {
break;
}
}
if ($cid_found) {
break;
}
}
if ($cid_found && !empty($components[$nid][$sid][$cid])) {
$replacements += _webform_tokens_add_component_replacement($components[$nid][$sid][$cid], $submission, array(
'original' => $original,
'name' => $name,
'tokens' => $tokens,
'options' => $options,
));
}
break;
}
}
if ($webform_meta_node_tokens = token_find_with_prefix($tokens, 'meta-nid')) {
$webform_meta_node = node_load($submission->nid);
$replacements += token_generate('node', $webform_meta_node_tokens, array(
'node' => $webform_meta_node,
), $options);
}
if ($webform_meta_node_tokens = token_find_with_prefix($tokens, 'webform-meta-nid')) {
$webform_meta_node = node_load($submission->nid);
$replacements += token_generate('node', $webform_meta_node_tokens, array(
'node' => $webform_meta_node,
), $options);
}
if ($webform_meta_node_tokens = token_find_with_prefix($tokens, 'meta-uid')) {
$webform_meta_user = user_load($submission->uid);
$replacements += token_generate('user', $webform_meta_node_tokens, array(
'user' => $webform_meta_user,
), $options);
}
if ($webform_meta_node_tokens = token_find_with_prefix($tokens, 'webform-meta-uid')) {
$webform_meta_user = user_load($submission->uid);
$replacements += token_generate('user', $webform_meta_node_tokens, array(
'user' => $webform_meta_user,
), $options);
}
if ($webform_meta_submitted_tokens = token_find_with_prefix($tokens, 'meta-submitted')) {
$webform_meta_submitted = $submission->submitted;
$replacements += token_generate('date', $webform_meta_submitted_tokens, array(
'date' => $webform_meta_submitted,
), $options);
}
if ($webform_meta_submitted_tokens = token_find_with_prefix($tokens, 'webform-meta-submitted')) {
$webform_meta_submitted = $submission->submitted;
$replacements += token_generate('date', $webform_meta_submitted_tokens, array(
'date' => $webform_meta_submitted,
), $options);
}
return $replacements;
}
}