date_recur-8.x-2.2/src/Form/DateRecurInterpreterEditForm.php
src/Form/DateRecurInterpreterEditForm.php
<?php
declare(strict_types=1);
namespace Drupal\date_recur\Form;
use Drupal\Core\Entity\EntityForm;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Form\SubformState;
use Drupal\Core\Plugin\PluginFormFactoryInterface;
use Drupal\date_recur\Plugin\DateRecurInterpreterManagerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Edit form for date recur interpreter entities.
*
* @method \Drupal\date_recur\Entity\DateRecurInterpreter getEntity()
*/
class DateRecurInterpreterEditForm extends EntityForm {
/**
* Creates an instance of WorkflowStateEditForm.
*
* @param \Drupal\Core\Plugin\PluginFormFactoryInterface $pluginFormFactory
* The plugin form factory.
* @param \Drupal\date_recur\Plugin\DateRecurInterpreterManagerInterface $dateRecurInterpreterPluginManager
* Date recur interpreter plugin manager.
*/
public function __construct(
protected PluginFormFactoryInterface $pluginFormFactory,
protected DateRecurInterpreterManagerInterface $dateRecurInterpreterPluginManager,
) {
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static(
$container->get('plugin_form.factory'),
$container->get('plugin.manager.date_recur_interpreter'),
);
}
/**
* {@inheritdoc}
*/
public function form(array $form, FormStateInterface $form_state): array {
$form = parent::form($form, $form_state);
$dateRecurInterpreter = $this->getEntity();
$form['label'] = [
'#title' => $this->t('Label'),
'#type' => 'textfield',
'#default_value' => $dateRecurInterpreter->label(),
];
$plugin = $dateRecurInterpreter->getPlugin();
$key = 'configure';
if ($plugin->hasFormClass($key)) {
$form['configure'] = [
'#tree' => TRUE,
];
$subformState = SubformState::createForSubform($form['configure'], $form, $form_state);
$form['configure'] += $this->pluginFormFactory
->createInstance($plugin, $key)
->buildConfigurationForm($form['configure'], $subformState);
}
return $form;
}
/**
* {@inheritdoc}
*/
public function validateForm(array &$form, FormStateInterface $form_state): void {
$key = 'configure';
$plugin = $this->getEntity()->getPlugin();
if ($plugin->hasFormClass($key)) {
$subformState = SubformState::createForSubform($form['configure'], $form, $form_state);
$this->pluginFormFactory
->createInstance($plugin, $key)
->validateConfigurationForm($form['configure'], $subformState);
}
}
/**
* {@inheritdoc}
*/
public function save(array $form, FormStateInterface $form_state) {
$entity = $this->getEntity();
$key = 'configure';
$plugin = $entity->getPlugin();
if ($plugin->hasFormClass($key)) {
$subformState = SubformState::createForSubform($form['configure'], $form, $form_state);
$this->pluginFormFactory
->createInstance($plugin, $key)
->submitConfigurationForm($form['configure'], $subformState);
}
$result = $entity->save();
$this->messenger()->addStatus($this->t('Saved the %label interpreter.', [
'%label' => $entity->label(),
]));
$form_state->setRedirectUrl($entity->toUrl('collection'));
return $result;
}
}
