ConditionFormBase.php in Block Visibility Groups 8
File
src/Form/ConditionFormBase.php
View source
<?php
namespace Drupal\block_visibility_groups\Form;
use Drupal\block_visibility_groups\BlockVisibilityGroupInterface;
use Drupal\block_visibility_groups\ConditionRedirectTrait;
use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormState;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Plugin\Context\ContextRepositoryInterface;
use Drupal\Core\Plugin\ContextAwarePluginAssignmentTrait;
use Drupal\Core\Plugin\ContextAwarePluginInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
abstract class ConditionFormBase extends FormBase {
use ContextAwarePluginAssignmentTrait;
use ConditionRedirectTrait;
protected $block_visibility_group;
protected $condition;
protected $contextRepository;
public function __construct(ContextRepositoryInterface $context_repository) {
$this->contextRepository = $context_repository;
}
public static function create(ContainerInterface $container) {
return new static($container
->get('context.repository'));
}
protected abstract function prepareCondition($condition_id);
protected abstract function submitButtonText();
protected abstract function submitMessageText();
public function buildForm(array $form, FormStateInterface $form_state, BlockVisibilityGroupInterface $block_visibility_group = NULL, $condition_id = NULL, $redirect = NULL) {
$this->block_visibility_group = $block_visibility_group;
$this->condition = $this
->prepareCondition($condition_id);
$this
->setRedirectValue($form, $redirect);
$form_state
->setTemporaryValue('gathered_contexts', $this->contextRepository
->getAvailableContexts());
$form['condition'] = $this->condition
->buildConfigurationForm([], $form_state);
$form['condition']['#tree'] = TRUE;
$form['actions'] = [
'#type' => 'actions',
];
$form['actions']['submit'] = [
'#type' => 'submit',
'#value' => $this
->submitButtonText(),
'#button_type' => 'primary',
];
return $form;
}
public function validateForm(array &$form, FormStateInterface $form_state) {
$condition_values = (new FormState())
->setValues($form_state
->getValue('condition'));
$this->condition
->validateConfigurationForm($form, $condition_values);
$form_state
->setValue('condition', $condition_values
->getValues());
}
public function submitForm(array &$form, FormStateInterface $form_state) {
$condition_values = (new FormState())
->setValues($form_state
->getValue('condition'));
$this->condition
->submitConfigurationForm($form, $condition_values);
$form_state
->setValue('condition', $condition_values
->getValues());
if ($this->condition instanceof ContextAwarePluginInterface) {
$this->condition
->setContextMapping($condition_values
->getValue('context_mapping', []));
}
$this
->messenger()
->addMessage($this
->submitMessageText());
$configuration = $this->condition
->getConfiguration();
if (!isset($configuration['uuid'])) {
$this->block_visibility_group
->addCondition($configuration);
}
$this->block_visibility_group
->save();
$this
->setConditionRedirect($form_state);
}
}