You are here

function rules_action_data_set in Rules 7.2

Action: Modify data.

Related topics

1 string reference to 'rules_action_data_set'
rules_data_action_info in modules/data.rules.inc
Implements hook_rules_action_info() on behalf of the pseudo data module.

File

modules/data.eval.inc, line 15
Contains rules integration for the data module needed during evaluation.

Code

function rules_action_data_set($wrapper, $value, $settings, $state, $element) {
  if ($wrapper instanceof EntityMetadataWrapper) {
    try {

      // Update the value first then save changes, if possible.
      $wrapper
        ->set($value);
    } catch (EntityMetadataWrapperException $e) {
      throw new RulesEvaluationException('Unable to modify data "@selector": ' . $e
        ->getMessage(), array(
        '@selector' => $settings['data:select'],
      ));
    }

    // Save changes if a property of a variable has been changed.
    if (strpos($element->settings['data:select'], ':') !== FALSE) {
      $info = $wrapper
        ->info();

      // We always have to save the changes in the parent entity. E.g. when the
      // node author is changed, we don't want to save the author but the node.
      $state
        ->saveChanges(implode(':', explode(':', $settings['data:select'], -1)), $info['parent']);
    }
  }
  else {

    // A not wrapped variable (e.g. a number) is being updated. Just overwrite
    // the variable with the new value.
    return array(
      'data' => $value,
    );
  }
}