home | career | drupal | java | mac | mysql | perl | php | scala | uml | unix

Drupal example source code file (token.rules.inc)

This example Drupal source code file (token.rules.inc) is included in the DevDaily.com "Drupal Source Code Warehouse" project. The intent of this project is to help you "Learn Drupal by Example".

PHP - Drupal tags/keywords

array, foreach, form, function, if, name, php, return, text, token_cache, token_id, type, used_vars, variables

The token.rules.inc Drupal example source code

<?php
// $Id: token.rules.inc,v 1.1.2.5 2010/06/09 00:48:56 davereid Exp $
/**
 * @file
 * Rules integration for the token module.
 *
 * This provides a token input evaluator, so that token replacements can be used
 * in every rules action.
 */

/**
 * Implementation of hook_rules_evaluator().
 */
function token_rules_evaluator() {
  return array(
    'token_rules_input_evaluator' => array(
      'label' => t('Token replacement patterns'),
      'weight' => -5,
    ),
  );
}

/**
 * Prepares the evalution.
 *
 * @param $string
 *   The string to evaluate later.
 * @param $variables
 *   An array of available variables.
 * @return
 *   Arbitrary data, which is passed to the evaluator on evaluation.
 *   If NULL is returned the input evaluator will be skipped later.
 */
function token_rules_input_evaluator_prepare($string, $variables) {
  $used_vars = array();
  foreach ($variables as $name => $info) {
    if (strpos($string, TOKEN_PREFIX. $name .':') !== FALSE) {
      $used_vars[] = $name;
    }
  }
  return $used_vars ? $used_vars : NULL;
}

/**
 * Apply the input evaluator.
 *
 * @param $text
 *   The string for which tokens should be replaced.
 * @param $used_vars
 *   The used variables as returned from preparation.
 * @param $state
 *   The current evaluation state of rules.
 */
function token_rules_input_evaluator_apply($text, $used_vars, &$state) {
  static $token_cache = array();

  if ($used_vars) {
    $vars = rules_get_variables(drupal_map_assoc($used_vars), $state);
    if (!$vars) {
      //there not all needed variables available!
      return FALSE;
    }

    foreach ($used_vars as $name) {
      $type = _token_rules_map_type($state['variables'][$name]->info['type']);
      if ($type) {
        $token_id = _token_get_id($type, $vars[$name]);
        if (isset($token_cache[$token_id]) && $token_cache[$token_id] != $name) {
          // this is the same variable in another state
          // so we need to flush the token cache to get the fresh values
          token_get_values('global', NULL, TRUE);
        }

        $text = token_replace($text, $type, $vars[$name], TOKEN_PREFIX. $name .':', TOKEN_SUFFIX);

        // remember that this variable has been used and got cached
        $token_cache[$token_id] = $name;
      }
    }
  }

  return $text;
}

/**
 * Map rules types to corresponding token types
 */
function _token_rules_map_type($type) {
  if (($data_type = rules_get_data_types($type)) && isset($data_type['token type'])) {
    return $data_type['token type'];
  }
  return $type;
}

/**
 * Some token replacement help for the condition/action edit form.
 */
function token_rules_input_evaluator_help($variables) {

  foreach ($variables as $name => $info) {
    $type = _token_rules_map_type($info['type']);
    if ($type) {
      $form[$name] = array(
        '#type' => 'fieldset',
        '#title' => t('Replacement patterns for @name', array('@name' => $info['label'])),
        '#collapsible' => TRUE,
        '#collapsed' => TRUE,
      );
      $form[$name]['content'] = array(
        '#value' => theme('token_help', $type, TOKEN_PREFIX. $name . ':', TOKEN_SUFFIX),
      );
    }
  }
  return $form;
}

Other Drupal examples (source code examples)

Here is a short list of links related to this Drupal token.rules.inc source code file:

new blog posts

"Drupal" is a registered trademark of Dries Buytaert.

my drupal tutorials and examples  

Copyright 1998-2016 Alvin Alexander, alvinalexander.com
All Rights Reserved.

Beginning in 2016, a portion of the proceeds from pages under the '/drupal-code-examples/' URI will be donated to charity.