You are here

protected function RulesPlugin::getArgument in Rules 7.2

Returns the argument for the parameter $name described with $info.

Returns the argument as configured in the element settings for the parameter $name described with $info.

Parameters

string $name: The name of the parameter for which to get the argument.

$info: Info about the parameter.

RulesState $state: The current evaluation state.

string $langcode: (optional) The language code used to get the argument value if the argument value should be translated. By default (NULL) the current interface language will be used.

Return value

The argument, possibly wrapped.

Throws

RulesEvaluationException In case the argument cannot be retrieved an exception is thrown.

3 calls to RulesPlugin::getArgument()
RulesLoop::evaluate in includes/rules.plugins.inc
Evaluate, whereas by default new vars are visible in the parent's scope.
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.

File

includes/rules.core.inc, line 960
Rules base classes and interfaces needed for any rule evaluation.

Class

RulesPlugin
Base class for rules plugins.

Code

protected function getArgument($name, $info, RulesState $state, $langcode = NULL) {

  // Only apply the langcode if the parameter has been marked translatable.
  if (empty($info['translatable'])) {
    $langcode = LANGUAGE_NONE;
  }
  elseif (!isset($langcode)) {
    $langcode = $GLOBALS['language']->language;
  }
  if (!empty($this->settings[$name . ':select'])) {
    $arg = $state
      ->applyDataSelector($this->settings[$name . ':select'], $langcode);
  }
  elseif (isset($this->settings[$name])) {
    $arg = rules_wrap_data($this->settings[$name], $info);

    // We don't sanitize directly specified values.
    $skip_sanitize = TRUE;
  }
  elseif ($state
    ->varinfo($name)) {
    $arg = $state
      ->get($name);
  }
  elseif (empty($info['optional']) && $info['type'] != 'hidden') {
    throw new RulesEvaluationException('Required parameter %name is missing.', array(
      '%name' => $name,
    ), $this, RulesLog::ERROR);
  }
  else {
    $arg = isset($info['default value']) ? $info['default value'] : NULL;
    $skip_sanitize = TRUE;
    $info['allow null'] = TRUE;
  }

  // Make sure the given value is set if required (default).
  if (!isset($arg) && empty($info['allow null'])) {
    throw new RulesEvaluationException('The provided argument for parameter %name is empty.', array(
      '%name' => $name,
    ), $this);
  }

  // Support passing already sanitized values.
  if ($info['type'] == 'text' && !isset($skip_sanitize) && !empty($info['sanitize']) && !$arg instanceof EntityMetadataWrapper) {
    $arg = check_plain((string) $arg);
  }

  // Apply any configured data processors.
  if (!empty($this->settings[$name . ':process'])) {

    // For processing, make sure the data is unwrapped now.
    $return = rules_unwrap_data(array(
      $arg,
    ), array(
      $info,
    ));

    // @todo For Drupal 8: Refactor to add the name and language code as
    // separate parameter to process().
    $info['#name'] = $name;
    $info['#langcode'] = $langcode;
    return isset($return[0]) ? $this->settings[$name . ':process']
      ->process($return[0], $info, $state, $this) : NULL;
  }
  return $arg;
}