AddExpressionForm.php in Rules 8.3
File
src/Form/AddExpressionForm.php
View source
<?php
namespace Drupal\rules\Form;
use Drupal\Core\Form\FormStateInterface;
use Drupal\rules\Ui\RulesUiHandlerInterface;
use Drupal\rules\Engine\ExpressionContainerInterface;
use Drupal\rules\Engine\ExpressionManagerInterface;
use Drupal\rules\Engine\RulesComponent;
use Drupal\rules\Exception\LogicException;
use Symfony\Component\DependencyInjection\ContainerInterface;
class AddExpressionForm extends EditExpressionForm {
protected $expressionManager;
protected $expressionId;
public function __construct(ExpressionManagerInterface $expression_manager) {
$this->expressionManager = $expression_manager;
}
public static function create(ContainerInterface $container) {
return new static($container
->get('plugin.manager.rules_expression'));
}
public function buildForm(array $form, FormStateInterface $form_state, RulesUiHandlerInterface $rules_ui_handler = NULL, $uuid = NULL, $expression_id = NULL) {
$this->expressionId = $expression_id;
$this->uuid = $uuid;
if (!$this->uuid) {
$component = clone $rules_ui_handler
->getComponent();
$this->uuid = $this
->getEditedExpression($component)
->getUuid();
$form_state
->set('component', $component);
$form_state
->set('uuid', $this->uuid);
}
return parent::buildForm($form, $form_state, $rules_ui_handler, $this->uuid);
}
protected function getEditedExpression(RulesComponent $component) {
$component_expression = $component
->getExpression();
if (!$component_expression instanceof ExpressionContainerInterface) {
throw new LogicException('Cannot add expression to expression of type ' . $component_expression
->getPluginId());
}
if ($this->uuid && ($expression = $component_expression
->getExpression($this->uuid))) {
return $expression;
}
else {
$expression = $this->expressionManager
->createInstance($this->expressionId);
$rule_expression = $component
->getExpression();
$rule_expression
->addExpressionObject($expression);
return $expression;
}
}
public function submitForm(array &$form, FormStateInterface $form_state) {
parent::submitForm($form, $form_state);
$form_state
->setRedirectUrl($this->rulesUiHandler
->getBaseRouteUrl());
}
public function getTitle(RulesUiHandlerInterface $rules_ui_handler, $expression_id) {
$this->expressionId = $expression_id;
$expression = $this->expressionManager
->createInstance($this->expressionId);
return $this
->t('Add @expression', [
'@expression' => $expression
->getLabel(),
]);
}
}