function RulesContainerPlugin::sortChildren

Sorts all child elements by their weight.

Parameters

bool $deep: If enabled a deep sort is performed, thus the whole element tree below this element is sorted.

1 call to RulesContainerPlugin::sortChildren()
Rule::sortChildren in includes/rules.plugins.inc
Sorts all child elements by their weight.
1 method overrides RulesContainerPlugin::sortChildren()
Rule::sortChildren in includes/rules.plugins.inc
Sorts all child elements by their weight.

File

includes/rules.core.inc, line 2419

Class

RulesContainerPlugin
Base class for ContainerPlugins like Rules, Logical Operations or Loops.

Code

public function sortChildren($deep = FALSE) {
    // Make sure the array order is kept in case two children have the same
    // weight by ensuring later children would have higher weights.
    foreach (array_values($this->children) as $i => $child) {
        $child->weight += $i / 1000;
    }
    usort($this->children, array(
        'RulesPlugin',
        'compare',
    ));
    // Fix up the weights afterwards to be unique integers.
    foreach (array_values($this->children) as $i => $child) {
        $child->weight = $i;
    }
    if ($deep) {
        foreach (new ParentIterator($this->getIterator()) as $child) {
            $child->sortChildren(TRUE);
        }
    }
    $this->resetInternalCache();
}