function RulesPlugin::setUpState

Sets up the execution state for the given arguments.

3 calls to RulesPlugin::setUpState()
RulesAbstractPlugin::executeByArgs in includes/rules.core.inc
Execute the configuration by passing arguments in a single array.
RulesContainerPlugin::executeByArgs in includes/rules.core.inc
Executes container with the given arguments.
RulesEventSet::executeByArgs in includes/rules.plugins.inc
Executes container with the given arguments.

File

includes/rules.core.inc, line 721

Class

RulesPlugin
Base class for rules plugins.

Code

public function setUpState(array $args) {
    $state = new RulesState();
    $vars = $this->setUpVariables();
    // Fix numerically indexed args to start with 0.
    if (!isset($args[rules_array_key($vars)])) {
        $args = array_values($args);
    }
    $offset = 0;
    foreach (array_keys($vars) as $i => $name) {
        $info = $vars[$name];
        if (!empty($info['handler']) || isset($info['parameter']) && $info['parameter'] === FALSE) {
            $state->addVariable($name, NULL, $info);
            // Count the variables that are not passed as parameters.
            $offset++;
        }
        elseif (isset($args[$i - $offset])) {
            $state->addVariable($name, $args[$i - $offset], $info);
        }
        elseif (isset($args[$name])) {
            $state->addVariable($name, $args[$name], $info);
        }
        elseif (empty($info['optional']) && $info['type'] != 'hidden') {
            throw new RulesEvaluationException('Argument %name is missing.', array(
                '%name' => $name,
            ), $this, RulesLog::ERROR);
        }
    }
    return $state;
}