class ActionExpression
Provides an executable action expression.
This plugin is used to wrap action plugins and is responsible to setup all the context necessary, instantiate the action plugin and to execute it.
Plugin annotation
@RulesExpression(
id = "rules_action",
label = @Translation("Action"),
form_class = "\Drupal\rules\Form\Expression\ActionForm"
)
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements \Drupal\Component\Plugin\PluginInspectionInterface, \Drupal\Component\Plugin\DerivativeInspectionInterface
- class \Drupal\Core\Plugin\PluginBase extends \Drupal\Component\Plugin\PluginBase uses \Drupal\Core\StringTranslation\StringTranslationTrait, \Drupal\Core\DependencyInjection\DependencySerializationTrait, \Drupal\Core\Messenger\MessengerTrait
- class \Drupal\rules\Engine\ExpressionBase extends \Drupal\Core\Plugin\PluginBase implements \Drupal\rules\Engine\ExpressionInterface
- class \Drupal\rules\Plugin\RulesExpression\ActionExpression extends \Drupal\rules\Engine\ExpressionBase implements \Drupal\Core\Plugin\ContainerFactoryPluginInterface, \Drupal\rules\Engine\ActionExpressionInterface uses \Drupal\rules\Context\ContextHandlerIntegrityTrait
- class \Drupal\rules\Engine\ExpressionBase extends \Drupal\Core\Plugin\PluginBase implements \Drupal\rules\Engine\ExpressionInterface
- class \Drupal\Core\Plugin\PluginBase extends \Drupal\Component\Plugin\PluginBase uses \Drupal\Core\StringTranslation\StringTranslationTrait, \Drupal\Core\DependencyInjection\DependencySerializationTrait, \Drupal\Core\Messenger\MessengerTrait
Expanded class hierarchy of ActionExpression
2 files declare their use of ActionExpression
- ActionSetExpressionTest.php in tests/
src/ Unit/ ActionSetExpressionTest.php - RuleExpressionTest.php in tests/
src/ Unit/ RuleExpressionTest.php
File
-
src/
Plugin/ RulesExpression/ ActionExpression.php, line 30
Namespace
Drupal\rules\Plugin\RulesExpressionView source
class ActionExpression extends ExpressionBase implements ContainerFactoryPluginInterface, ActionExpressionInterface {
use ContextHandlerIntegrityTrait;
/**
* The action manager used to instantiate the action plugin.
*
* @var \Drupal\rules\Core\RulesActionManagerInterface
*/
protected $actionManager;
/**
* The rules debug logger channel.
*
* @var \Drupal\Core\Logger\LoggerChannelInterface
*/
protected $rulesDebugLogger;
/**
* Constructs a new class instance.
*
* @param array $configuration
* A configuration array containing information about the plugin instance.
* Contains the following entries:
* - action_id: The action plugin ID.
* @param string $plugin_id
* The plugin ID for the plugin instance.
* @param mixed $plugin_definition
* The plugin implementation definition.
* @param \Drupal\rules\Core\RulesActionManagerInterface $action_manager
* The Rules action manager.
* @param \Drupal\rules\Context\DataProcessorManager $processor_manager
* The data processor plugin manager.
* @param \Drupal\Core\Logger\LoggerChannelInterface $logger
* The Rules debug logger channel.
*/
public function __construct(array $configuration, $plugin_id, $plugin_definition, RulesActionManagerInterface $action_manager, DataProcessorManager $processor_manager, LoggerChannelInterface $logger) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->actionManager = $action_manager;
$this->processorManager = $processor_manager;
$this->rulesDebugLogger = $logger;
}
/**
* {@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_action'), $container->get('plugin.manager.rules_data_processor'), $container->get('logger.channel.rules_debug'));
}
/**
* {@inheritdoc}
*/
public function setConfiguration(array $configuration) {
// If the plugin id has been set already, keep it if not specified.
if (isset($this->configuration['action_id'])) {
$configuration += [
'action_id' => $this->configuration['action_id'],
];
}
return parent::setConfiguration($configuration);
}
/**
* {@inheritdoc}
*/
public function executeWithState(ExecutionStateInterface $state) {
$this->rulesDebugLogger
->info('Evaluating the action %name.', [
'%name' => $this->getLabel(),
'element' => $this,
]);
$action = $this->actionManager
->createInstance($this->configuration['action_id']);
$this->prepareContext($action, $state);
$action->execute();
$auto_saves = $action->autoSaveContext();
foreach ($auto_saves as $context_name) {
// Mark parameter contexts for auto saving in the Rules state.
$state->saveChangesLater($this->configuration['context_mapping'][$context_name]);
}
// Now that the action has been executed it can provide additional
// context which we will have to pass back in the evaluation state.
$this->addProvidedContext($action, $state);
}
/**
* {@inheritdoc}
*/
public function getLabel() {
if (!empty($this->configuration['action_id'])) {
$definition = $this->actionManager
->getDefinition($this->configuration['action_id']);
return $definition['label'];
}
return parent::getLabel();
}
/**
* {@inheritdoc}
*/
public function getFormHandler() {
if (isset($this->pluginDefinition['form_class'])) {
$class_name = $this->pluginDefinition['form_class'];
return new $class_name($this, $this->actionManager);
}
}
/**
* {@inheritdoc}
*/
public function checkIntegrity(ExecutionMetadataStateInterface $metadata_state, $apply_assertions = TRUE) {
$violation_list = new IntegrityViolationList();
if (empty($this->configuration['action_id'])) {
$violation_list->addViolationWithMessage($this->t('Action plugin ID is missing'), $this->getUuid());
return $violation_list;
}
if (!$this->actionManager
->hasDefinition($this->configuration['action_id'])) {
$violation_list->addViolationWithMessage($this->t('Action plugin %plugin_id does not exist', [
'%plugin_id' => $this->configuration['action_id'],
]), $this->getUuid());
return $violation_list;
}
$action = $this->actionManager
->createInstance($this->configuration['action_id']);
// Prepare and refine the context before checking integrity, such that any
// context definition changes are respected while checking.
$this->prepareContextWithMetadata($action, $metadata_state);
$result = $this->checkContextConfigIntegrity($action, $metadata_state);
$this->prepareExecutionMetadataState($metadata_state, NULL, $apply_assertions);
return $result;
}
/**
* {@inheritdoc}
*/
public function prepareExecutionMetadataState(ExecutionMetadataStateInterface $metadata_state, ExpressionInterface $until = NULL, $apply_assertions = TRUE) {
if ($until && $this->getUuid() === $until->getUuid()) {
return TRUE;
}
$action = $this->actionManager
->createInstance($this->configuration['action_id']);
// Make sure to refine context first, such that possibly refined definitions
// of provided context are respected.
$this->prepareContextWithMetadata($action, $metadata_state);
$this->addProvidedContextDefinitions($action, $metadata_state);
if ($apply_assertions) {
$this->assertMetadata($action, $metadata_state);
}
}
}
Members
Title Sort descending | Modifiers | Object type | Summary | Overriden Title | Overrides |
---|---|---|---|---|---|
ActionExpression::$actionManager | protected | property | The action manager used to instantiate the action plugin. | ||
ActionExpression::$rulesDebugLogger | protected | property | The rules debug logger channel. | ||
ActionExpression::checkIntegrity | public | function | Verifies that this expression is configured correctly. | Overrides ExpressionInterface::checkIntegrity | |
ActionExpression::create | public static | function | Creates an instance of the plugin. | Overrides ContainerFactoryPluginInterface::create | |
ActionExpression::executeWithState | public | function | Execute the expression with a given Rules state. | Overrides ExpressionInterface::executeWithState | |
ActionExpression::getFormHandler | public | function | Returns the form handling class for this expression. | Overrides ExpressionBase::getFormHandler | |
ActionExpression::getLabel | public | function | The label of this expression element that can be shown in the UI. | Overrides ExpressionBase::getLabel | |
ActionExpression::prepareExecutionMetadataState | public | function | Prepares the execution metadata state by adding metadata to it. | Overrides ExpressionInterface::prepareExecutionMetadataState | |
ActionExpression::setConfiguration | public | function | Sets the configuration for this plugin instance. | Overrides ExpressionBase::setConfiguration | |
ActionExpression::__construct | public | function | Constructs a new class instance. | Overrides ExpressionBase::__construct | |
ContextHandlerIntegrityTrait::checkContextConfigIntegrity | protected | function | Performs the integrity check. | ||
ContextHandlerIntegrityTrait::checkDataTypeCompatible | protected | function | Checks that the data type of a mapped variable matches the expectation. | ||
ContextHandlerTrait::$processorManager | protected | property | The data processor plugin manager used to process context variables. | ||
ContextHandlerTrait::addProvidedContext | protected | function | Adds provided context values from the plugin to the execution state. | ||
ContextHandlerTrait::addProvidedContextDefinitions | protected | function | Adds the definitions of provided context to the execution metadata state. | ||
ContextHandlerTrait::assertMetadata | protected | function | Asserts additional metadata. | ||
ContextHandlerTrait::getMappedDefinition | protected | function | Gets the definition of the data that is mapped to the given context. | ||
ContextHandlerTrait::getSelectedData | protected | function | Gets definitions of all selected data at configuration time. | ||
ContextHandlerTrait::prepareContext | protected | function | Prepares plugin context based upon the set context configuration. | ||
ContextHandlerTrait::prepareContextWithMetadata | protected | function | Prepares plugin context based upon the set context configuration. | ||
ContextHandlerTrait::processData | protected | function | Process data context on the plugin, usually before it gets executed. | ||
ContextHandlerTrait::processValue | protected | function | Processes a single value. | ||
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's configuration. | Overrides ConfigurableInterface::getConfiguration | 3 |
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::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 | |
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 |