You are here

function rules_unwrap_data in Rules 7.2

Unwraps the given data, if it's wrapped.

Parameters

array $data: An array of wrapped data.

array $info: Optionally an array of info about how to unwrap the data. Keyed as $data.

Return value

array An array containing unwrapped or passed through data.

7 calls to rules_unwrap_data()
RulesPHPEvaluator::evaluate in modules/php.eval.inc
Evaluates PHP code contained in $text.
RulesPlugin::getArgument in includes/rules.core.inc
Returns the argument for the parameter $name described with $info.
RulesPlugin::getExecutionArguments in includes/rules.core.inc
Gets the right arguments for executing the element.
RulesPlugin::returnVariables in includes/rules.core.inc
Gets variables to return once the configuration has been executed.
RulesState::get in includes/rules.state.inc
Gets a variable.

... See full list

File

./rules.module, line 585
Rules engine module.

Code

function rules_unwrap_data(array $data, $info = array()) {
  $cache = rules_get_cache();
  foreach ($data as $key => $entry) {

    // If it's a wrapper, unwrap unless specified otherwise.
    if ($entry instanceof EntityMetadataWrapper) {
      if (!isset($info[$key]['allow null'])) {
        $info[$key]['allow null'] = FALSE;
      }
      if (!isset($info[$key]['wrapped'])) {

        // By default, do not unwrap special data types that are always wrapped.
        $info[$key]['wrapped'] = isset($info[$key]['type']) && is_string($info[$key]['type']) && !empty($cache['data_info'][$info[$key]['type']]['is wrapped']);
      }

      // Activate the decode option by default if 'sanitize' is not enabled, so
      // any text is either sanitized or decoded.
      // @see EntityMetadataWrapper::value()
      $options = $info[$key] + array(
        'decode' => empty($info[$key]['sanitize']),
      );
      try {
        if (!($info[$key]['allow null'] && $info[$key]['wrapped'])) {
          $value = $entry
            ->value($options);
          if (!$info[$key]['wrapped']) {
            $data[$key] = $value;
          }
          if (!$info[$key]['allow null'] && !isset($value)) {
            throw new RulesEvaluationException('The variable or parameter %name is empty.', array(
              '%name' => $key,
            ));
          }
        }
      } catch (EntityMetadataWrapperException $e) {
        throw new RulesEvaluationException('Unable to get the data value for the variable or parameter %name. Error: !error', array(
          '%name' => $key,
          '!error' => $e
            ->getMessage(),
        ));
      }
    }
  }
  return $data;
}