source: sipes/modules_contrib/token/token.rules.inc @ 6e81fb4

stableversion-3.0
Last change on this file since 6e81fb4 was d5990f8, checked in by José Gregorio Puentes <jpuentes@…>, 8 años ago

se actualizo el modulo

  • Propiedad mode establecida a 100755
File size: 3.4 KB
Línea 
1<?php
2/**
3 * @file
4 * Rules integration for the token module.
5 *
6 * This provides a token input evaluator, so that token replacements can be used
7 * in every rules action.
8 */
9
10/**
11 * Implementation of hook_rules_evaluator().
12 */
13function token_rules_evaluator() {
14  return array(
15    'token_rules_input_evaluator' => array(
16      'label' => t('Token replacement patterns'),
17      'weight' => -5,
18    ),
19  );
20}
21
22/**
23 * Prepares the evalution.
24 *
25 * @param $string
26 *   The string to evaluate later.
27 * @param $variables
28 *   An array of available variables.
29 * @return
30 *   Arbitrary data, which is passed to the evaluator on evaluation.
31 *   If NULL is returned the input evaluator will be skipped later.
32 */
33function token_rules_input_evaluator_prepare($string, $variables) {
34  $used_vars = array();
35  foreach ($variables as $name => $info) {
36    if (strpos($string, TOKEN_PREFIX. $name .':') !== FALSE) {
37      $used_vars[] = $name;
38    }
39  }
40  // Using ':global' instead of 'global' to avoid potential namespace conflicts
41  // See http://drupal.org/node/932460#comment-3884866
42  $used_vars[] = ':global';
43  return $used_vars ? $used_vars : NULL;
44}
45
46/**
47 * Apply the input evaluator.
48 *
49 * @param $text
50 *   The string for which tokens should be replaced.
51 * @param $used_vars
52 *   The used variables as returned from preparation.
53 * @param $state
54 *   The current evaluation state of rules.
55 */
56function token_rules_input_evaluator_apply($text, $used_vars, &$state) {
57  static $token_cache = array();
58
59  if ($used_vars) {
60    $vars = rules_get_variables(drupal_map_assoc(array_diff($used_vars, array(':global'))), $state);
61    if ($vars === FALSE) {
62      //there not all needed variables available!
63      return FALSE;
64    }
65    $vars[':global'] = ':global';
66
67    foreach ($used_vars as $name) {
68      $type = ($name == ':global') ? 'global' : _token_rules_map_type($state['variables'][$name]->info['type']);
69      if ($type) {
70        $token_id = _token_get_id($type, $vars[$name]);
71        if (isset($token_cache[$token_id]) && $token_cache[$token_id] != $name) {
72          // this is the same variable in another state
73          // so we need to flush the token cache to get the fresh values
74          token_get_values('reset');
75        }
76
77        $text = token_replace($text, $type, $vars[$name], TOKEN_PREFIX. $name .':', TOKEN_SUFFIX);
78
79        // remember that this variable has been used and got cached
80        $token_cache[$token_id] = $name;
81      }
82    }
83  }
84
85  return $text;
86}
87
88/**
89 * Map rules types to corresponding token types
90 */
91function _token_rules_map_type($type) {
92  if (($data_type = rules_get_data_types($type)) && isset($data_type['token type'])) {
93    return $data_type['token type'];
94  }
95  return $type;
96}
97
98/**
99 * Some token replacement help for the condition/action edit form.
100 */
101function token_rules_input_evaluator_help($variables) {
102
103  $variables[':global'] = array('type' => 'global', 'label' => t('global token'),);
104
105  foreach ($variables as $name => $info) {
106    $type = _token_rules_map_type($info['type']);
107    if ($type) {
108      $form[$name] = array(
109        '#type' => 'fieldset',
110        '#title' => t('Replacement patterns for @name', array('@name' => $info['label'])),
111        '#collapsible' => TRUE,
112        '#collapsed' => TRUE,
113      );
114      $form[$name]['content'] = array(
115        '#value' => theme('token_help', $type, TOKEN_PREFIX. $name . ':', TOKEN_SUFFIX),
116      );
117    }
118  }
119  return $form;
120}
Nota: Vea TracBrowser para ayuda de uso del navegador del repositorio.