You are here

public function RulesState::mergeSaveVariables in Rules 7.2

Merges info from the given state into the existing state.

Merges the info about to-be-saved variables from the given state into the existing state. Therefore we can aggregate saves from invoked components. Merged-in saves are removed from the given state, but not-mergeable saves remain there.

Parameters

$state: The state for which to merge the to be saved variables in.

$component: The component which has been invoked, thus needs to be blocked for the merged in saves.

$settings: The settings of the element that invoked the component. Contains information about variable/selector mappings between the states.

File

includes/rules.state.inc, line 264
Contains the state and data related stuff.

Class

RulesState
The rules evaluation state.

Code

public function mergeSaveVariables(RulesState $state, RulesPlugin $component, $settings) {

  // For any saves that we take over, also block the component.
  $this
    ->block($component);
  foreach ($state->save
    ->getArrayCopy() as $selector => $data) {
    $parts = explode(':', $selector, 2);

    // Adapt the selector to fit for the parent state and move the wrapper.
    if (isset($settings[$parts[0] . ':select'])) {
      $parts[0] = $settings[$parts[0] . ':select'];
      $this
        ->save(implode(':', $parts), $data[0], FALSE);
      unset($state->save[$selector]);
    }
  }
  $this
    ->unblock($component);
}