Namespace
Drupal\rules\Plugin\RulesExpression
File
-
src/Plugin/RulesExpression/ActionExpression.php
View source
<?php
namespace Drupal\rules\Plugin\RulesExpression;
use Drupal\Core\Logger\LoggerChannelInterface;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Drupal\rules\Context\DataProcessorManager;
use Drupal\rules\Context\ExecutionMetadataStateInterface;
use Drupal\rules\Context\ExecutionStateInterface;
use Drupal\rules\Core\RulesActionManagerInterface;
use Drupal\rules\Engine\ActionExpressionInterface;
use Drupal\rules\Engine\ExpressionBase;
use Drupal\rules\Engine\ExpressionInterface;
use Drupal\rules\Context\ContextHandlerIntegrityTrait;
use Drupal\rules\Engine\IntegrityViolationList;
use Symfony\Component\DependencyInjection\ContainerInterface;
class ActionExpression extends ExpressionBase implements ContainerFactoryPluginInterface, ActionExpressionInterface {
use ContextHandlerIntegrityTrait;
protected $actionManager;
protected $rulesDebugLogger;
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;
}
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'));
}
public function setConfiguration(array $configuration) {
if (isset($this->configuration['action_id'])) {
$configuration += [
'action_id' => $this->configuration['action_id'],
];
}
return parent::setConfiguration($configuration);
}
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) {
$state->saveChangesLater($this->configuration['context_mapping'][$context_name]);
}
$this->addProvidedContext($action, $state);
}
public function getLabel() {
if (!empty($this->configuration['action_id'])) {
$definition = $this->actionManager
->getDefinition($this->configuration['action_id']);
return $definition['label'];
}
return parent::getLabel();
}
public function getFormHandler() {
if (isset($this->pluginDefinition['form_class'])) {
$class_name = $this->pluginDefinition['form_class'];
return new $class_name($this, $this->actionManager);
}
}
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']);
$this->prepareContextWithMetadata($action, $metadata_state);
$result = $this->checkContextConfigIntegrity($action, $metadata_state);
$this->prepareExecutionMetadataState($metadata_state, NULL, $apply_assertions);
return $result;
}
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']);
$this->prepareContextWithMetadata($action, $metadata_state);
$this->addProvidedContextDefinitions($action, $metadata_state);
if ($apply_assertions) {
$this->assertMetadata($action, $metadata_state);
}
}
}
Classes
| Title |
Deprecated |
Summary |
| ActionExpression |
|
Provides an executable action expression. |