class ExpressionContainerBase

Common base class for action and condition expression containers.

Hierarchy

Expanded class hierarchy of ExpressionContainerBase

File

src/Engine/ExpressionContainerBase.php, line 12

Namespace

Drupal\rules\Engine
View source
abstract class ExpressionContainerBase extends ExpressionBase implements ExpressionContainerInterface {
    
    /**
     * The expression manager.
     *
     * @var \Drupal\rules\Engine\ExpressionManagerInterface
     */
    protected $expressionManager;
    
    /**
     * The rules debug logger channel.
     *
     * @var \Drupal\Core\Logger\LoggerChannelInterface
     */
    protected $rulesDebugLogger;
    
    /**
     * {@inheritdoc}
     */
    public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
        return new static($configuration, $plugin_id, $plugin_definition, $container->get('plugin.manager.rules_expression'), $container->get('logger.channel.rules_debug'));
    }
    
    /**
     * Sorts an array of expressions by 'weight' property.
     *
     * Callback for uasort().
     *
     * @param \Drupal\rules\Engine\ExpressionInterface $a
     *   First item for comparison.
     * @param \Drupal\rules\Engine\ExpressionInterface $b
     *   Second item for comparison.
     *
     * @return int
     *   The comparison result for uasort().
     */
    public static function sortByWeightProperty(ExpressionInterface $a, ExpressionInterface $b) {
        $a_weight = $a->getWeight();
        $b_weight = $b->getWeight();
        if ($a_weight == $b_weight) {
            return 0;
        }
        return $a_weight < $b_weight ? -1 : 1;
    }
    
    /**
     * {@inheritdoc}
     */
    public function addExpression($plugin_id, ContextConfig $config = NULL) {
        return $this->addExpressionObject($this->expressionManager
            ->createInstance($plugin_id, $config ? $config->toArray() : []));
    }
    
    /**
     * Determines whether child-expressions are allowed to assert metadata.
     *
     * @return bool
     *   Whether child-expressions are allowed to assert metadata.
     *
     * @see \Drupal\rules\Engine\ExpressionInterface::prepareExecutionMetadataState()
     */
    protected abstract function allowsMetadataAssertions();
    
    /**
     * {@inheritdoc}
     */
    public function checkIntegrity(ExecutionMetadataStateInterface $metadata_state, $apply_assertions = TRUE) {
        $violation_list = new IntegrityViolationList();
        $this->prepareExecutionMetadataStateBeforeTraversal($metadata_state);
        $apply_assertions = $apply_assertions && $this->allowsMetadataAssertions();
        foreach ($this as $child_expression) {
            $child_violations = $child_expression->checkIntegrity($metadata_state, $apply_assertions);
            $violation_list->addAll($child_violations);
        }
        $this->prepareExecutionMetadataStateAfterTraversal($metadata_state);
        return $violation_list;
    }
    
    /**
     * {@inheritdoc}
     */
    public function prepareExecutionMetadataState(ExecutionMetadataStateInterface $metadata_state, ExpressionInterface $until = NULL, $apply_assertions = TRUE) {
        if ($until && $this->getUuid() === $until->getUuid()) {
            return TRUE;
        }
        $this->prepareExecutionMetadataStateBeforeTraversal($metadata_state);
        $apply_assertions = $apply_assertions && $this->allowsMetadataAssertions();
        foreach ($this as $child_expression) {
            $found = $child_expression->prepareExecutionMetadataState($metadata_state, $until, $apply_assertions);
            // If the expression was found, we need to stop.
            if ($found) {
                return TRUE;
            }
        }
        $this->prepareExecutionMetadataStateAfterTraversal($metadata_state);
    }
    
    /**
     * Prepares execution metadata state before traversing through children.
     *
     * @see ::prepareExecutionMetadataState()
     * @see ::checkIntegrity()
     */
    protected function prepareExecutionMetadataStateBeforeTraversal(ExecutionMetadataStateInterface $metadata_state) {
        // Any pre-traversal preparations need to be added here.
    }
    
    /**
     * Prepares execution metadata state after traversing through children.
     *
     * @see ::prepareExecutionMetadataState()
     * @see ::checkIntegrity()
     */
    protected function prepareExecutionMetadataStateAfterTraversal(ExecutionMetadataStateInterface $metadata_state) {
        // Any post-traversal preparations need to be added here.
    }

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title Overrides
ExpressionBase::$configEntityId protected property The config entity this expression is associated with, if any.
ExpressionBase::$configuration protected property The plugin configuration.
ExpressionBase::$root protected property The root expression if this object is nested.
ExpressionBase::$uuid protected property The UUID of this expression.
ExpressionBase::$weight protected property The weight (list order) of this expression.
ExpressionBase::calculateDependencies public function Calculates dependencies for the configured plugin. Overrides DependentPluginInterface::calculateDependencies
ExpressionBase::defaultConfiguration public function Gets default configuration for this plugin. Overrides ConfigurableInterface::defaultConfiguration 2
ExpressionBase::execute public function Executes a rules expression. Overrides ExecutableInterface::execute
ExpressionBase::getConfiguration public function Gets this plugin&#039;s configuration. Overrides ConfigurableInterface::getConfiguration 3
ExpressionBase::getFormHandler public function Returns the form handling class for this expression. Overrides ExpressionInterface::getFormHandler 2
ExpressionBase::getLabel public function The label of this expression element that can be shown in the UI. Overrides ExpressionInterface::getLabel 2
ExpressionBase::getRoot public function Returns the root expression if this expression is nested. Overrides ExpressionInterface::getRoot
ExpressionBase::getUuid public function Returns the UUID of this expression if it is nested in another expression. Overrides ExpressionInterface::getUuid
ExpressionBase::getWeight public function Returns the list order of this expression. Overrides ExpressionInterface::getWeight
ExpressionBase::setConfiguration public function Sets the configuration for this plugin instance. Overrides ConfigurableInterface::setConfiguration 2
ExpressionBase::setRoot public function Set the root expression for this expression if it is nested. Overrides ExpressionInterface::setRoot
ExpressionBase::setUuid public function Sets the UUID of this expression in an expression tree. Overrides ExpressionInterface::setUuid
ExpressionBase::setWeight public function Sets the list order of this expression in an expression tree. Overrides ExpressionInterface::setWeight
ExpressionBase::__construct public function Constructor. 5
ExpressionContainerBase::$expressionManager protected property The expression manager.
ExpressionContainerBase::$rulesDebugLogger protected property The rules debug logger channel.
ExpressionContainerBase::addExpression public function Creates and adds an expression. Overrides ExpressionContainerInterface::addExpression
ExpressionContainerBase::allowsMetadataAssertions abstract protected function Determines whether child-expressions are allowed to assert metadata. 4
ExpressionContainerBase::checkIntegrity public function Verifies that this expression is configured correctly. Overrides ExpressionInterface::checkIntegrity 1
ExpressionContainerBase::create public static function
ExpressionContainerBase::prepareExecutionMetadataState public function Prepares the execution metadata state by adding metadata to it. Overrides ExpressionInterface::prepareExecutionMetadataState
ExpressionContainerBase::prepareExecutionMetadataStateAfterTraversal protected function Prepares execution metadata state after traversing through children. 1
ExpressionContainerBase::prepareExecutionMetadataStateBeforeTraversal protected function Prepares execution metadata state before traversing through children. 1
ExpressionContainerBase::sortByWeightProperty public static function Sorts an array of expressions by &#039;weight&#039; property.
ExpressionContainerInterface::addExpressionObject public function Adds an expression object. 3
ExpressionContainerInterface::deleteExpression public function Deletes an expression identified by the specified UUID in the container. 3
ExpressionContainerInterface::getExpression public function Looks up the expression by UUID in this container. 3
ExpressionContainerInterface::getIterator public function Returns an iterator for expressions in this container. 3
ExpressionInterface::executeWithState public function Execute the expression with a given Rules state. 6
PluginInspectionInterface::getPluginDefinition public function Gets the definition of the plugin implementation. 6
PluginInspectionInterface::getPluginId public function Gets the plugin_id of the plugin instance. 2