From 7c845e1307c20ed6747b739f33a334543c012e1a Mon Sep 17 00:00:00 2001 From: Lee Rowlands Date: Fri, 29 Mar 2019 14:59:47 +1000 Subject: [PATCH] Issue #2811749 by naveenvalecha, andypost, harsha012, xjm: Move ActionAddForm & ActionEditForm to src/Form --- core/modules/action/action.module | 6 +- core/modules/action/src/ActionAddForm.php | 28 ++-- core/modules/action/src/ActionEditForm.php | 11 +- core/modules/action/src/ActionFormBase.php | 152 ++--------------- .../modules/action/src/Form/ActionAddForm.php | 31 ++++ .../action/src/Form/ActionEditForm.php | 12 ++ .../action/src/Form/ActionFormBase.php | 153 ++++++++++++++++++ 7 files changed, 228 insertions(+), 165 deletions(-) create mode 100644 core/modules/action/src/Form/ActionAddForm.php create mode 100644 core/modules/action/src/Form/ActionEditForm.php create mode 100644 core/modules/action/src/Form/ActionFormBase.php diff --git a/core/modules/action/action.module b/core/modules/action/action.module index a29893b3440..026fa3c6189 100644 --- a/core/modules/action/action.module +++ b/core/modules/action/action.module @@ -5,6 +5,8 @@ * This is the Actions module for executing stored actions. */ +use Drupal\action\Form\ActionAddForm; +use Drupal\action\Form\ActionEditForm; use Drupal\Core\Routing\RouteMatchInterface; /** @@ -41,8 +43,8 @@ function action_help($route_name, RouteMatchInterface $route_match) { function action_entity_type_build(array &$entity_types) { /** @var $entity_types \Drupal\Core\Entity\EntityTypeInterface[] */ $entity_types['action'] - ->setFormClass('add', 'Drupal\action\ActionAddForm') - ->setFormClass('edit', 'Drupal\action\ActionEditForm') + ->setFormClass('add', ActionAddForm::class) + ->setFormClass('edit', ActionEditForm::class) ->setFormClass('delete', 'Drupal\action\Form\ActionDeleteForm') ->setListBuilderClass('Drupal\action\ActionListBuilder') ->setLinkTemplate('delete-form', '/admin/config/system/actions/configure/{action}/delete') diff --git a/core/modules/action/src/ActionAddForm.php b/core/modules/action/src/ActionAddForm.php index 59d56ecd90a..e8da362cb6f 100644 --- a/core/modules/action/src/ActionAddForm.php +++ b/core/modules/action/src/ActionAddForm.php @@ -2,30 +2,20 @@ namespace Drupal\action; -use Drupal\Core\Form\FormStateInterface; +use Drupal\action\Form\ActionAddForm as ActionAddFormCurrent; + +@trigger_error('The ' . __NAMESPACE__ . '\ActionAddForm is deprecated in Drupal 8.8.0 and will be removed before Drupal 9.0.0. Use ' . __NAMESPACE__ . '\Form\ActionAddForm. See https://www.drupal.org/node/3033540', E_USER_DEPRECATED); /** * Provides a form for action add forms. * * @internal + * + * @deprecated in Drupal 8.8.x and will be removed before Drupal 9.0.0. Use + * \Drupal\action\Form\ActionEditForm instead. + * + * @see https://www.drupal.org/node/3033540 */ -class ActionAddForm extends ActionFormBase { - - /** - * {@inheritdoc} - * - * @param string $action_id - * The action ID. - */ - public function buildForm(array $form, FormStateInterface $form_state, $action_id = NULL) { - $this->entity->setPlugin($action_id); - - // Derive the label and type from the action definition. - $definition = $this->entity->getPluginDefinition(); - $this->entity->set('label', $definition['label']); - $this->entity->set('type', $definition['type']); - - return parent::buildForm($form, $form_state); - } +class ActionAddForm extends ActionAddFormCurrent { } diff --git a/core/modules/action/src/ActionEditForm.php b/core/modules/action/src/ActionEditForm.php index 01f5a9d20d8..d5b352c71b7 100644 --- a/core/modules/action/src/ActionEditForm.php +++ b/core/modules/action/src/ActionEditForm.php @@ -2,11 +2,20 @@ namespace Drupal\action; +use Drupal\action\Form\ActionEditForm as ActionEditFormCurrent; + +@trigger_error('The ' . __NAMESPACE__ . '\ActionEditForm is deprecated in Drupal 8.8.0 and will be removed before Drupal 9.0.0. Use ' . __NAMESPACE__ . '\Form\ActionEditForm. See https://www.drupal.org/node/3033540', E_USER_DEPRECATED); + /** * Provides a form for action edit forms. * * @internal + * + * @deprecated in Drupal 8.8.x and will be removed before Drupal 9.0.0. Use + * \Drupal\action\Form\ActionEditForm instead. + * + * @see https://www.drupal.org/node/3033540 */ -class ActionEditForm extends ActionFormBase { +class ActionEditForm extends ActionEditFormCurrent { } diff --git a/core/modules/action/src/ActionFormBase.php b/core/modules/action/src/ActionFormBase.php index db878a94530..d7784a2e773 100644 --- a/core/modules/action/src/ActionFormBase.php +++ b/core/modules/action/src/ActionFormBase.php @@ -2,152 +2,18 @@ namespace Drupal\action; -use Drupal\Core\Entity\EntityForm; -use Drupal\Core\Entity\EntityStorageInterface; -use Drupal\Core\Form\FormStateInterface; -use Drupal\Core\Plugin\PluginFormInterface; -use Symfony\Component\DependencyInjection\ContainerInterface; +use Drupal\action\Form\ActionFormBase as ActionFormBaseCurrent; + +@trigger_error('The ' . __NAMESPACE__ . '\ActionFormBase is deprecated in Drupal 8.8.0 and will be removed before Drupal 9.0.0. Use ' . __NAMESPACE__ . '\Form\ActionFormBase. See https://www.drupal.org/node/3033540', E_USER_DEPRECATED); /** * Provides a base form for action forms. + * + * @deprecated in Drupal 8.8.x and will be removed before Drupal 9.0.0. Use + * \Drupal\action\Form\ActionFormBase instead. + * + * @see https://www.drupal.org/node/3033540 */ -abstract class ActionFormBase extends EntityForm { - - /** - * The action storage. - * - * @var \Drupal\Core\Entity\EntityStorageInterface - */ - protected $storage; - - /** - * The action entity. - * - * @var \Drupal\system\ActionConfigEntityInterface - */ - protected $entity; - - /** - * Constructs a new action form. - * - * @param \Drupal\Core\Entity\EntityStorageInterface $storage - * The action storage. - */ - public function __construct(EntityStorageInterface $storage) { - $this->storage = $storage; - } - - /** - * {@inheritdoc} - */ - public static function create(ContainerInterface $container) { - return new static( - $container->get('entity.manager')->getStorage('action') - ); - } - - /** - * {@inheritdoc} - */ - public function form(array $form, FormStateInterface $form_state) { - $form['label'] = [ - '#type' => 'textfield', - '#title' => $this->t('Label'), - '#default_value' => $this->entity->label(), - '#maxlength' => '255', - '#description' => $this->t('A unique label for this advanced action. This label will be displayed in the interface of modules that integrate with actions.'), - ]; - - $form['id'] = [ - '#type' => 'machine_name', - '#default_value' => $this->entity->id(), - '#disabled' => !$this->entity->isNew(), - '#maxlength' => 64, - '#description' => $this->t('A unique name for this action. It must only contain lowercase letters, numbers and underscores.'), - '#machine_name' => [ - 'exists' => [$this, 'exists'], - ], - ]; - $form['plugin'] = [ - '#type' => 'value', - '#value' => $this->entity->get('plugin'), - ]; - $form['type'] = [ - '#type' => 'value', - '#value' => $this->entity->getType(), - ]; - - if ($plugin = $this->getPlugin()) { - $form += $plugin->buildConfigurationForm($form, $form_state); - } - - return parent::form($form, $form_state); - } - - /** - * Determines if the action already exists. - * - * @param string $id - * The action ID. - * - * @return bool - * TRUE if the action exists, FALSE otherwise. - */ - public function exists($id) { - $action = $this->storage->load($id); - return !empty($action); - } - - /** - * {@inheritdoc} - */ - protected function actions(array $form, FormStateInterface $form_state) { - $actions = parent::actions($form, $form_state); - unset($actions['delete']); - return $actions; - } - - /** - * {@inheritdoc} - */ - public function validateForm(array &$form, FormStateInterface $form_state) { - parent::validateForm($form, $form_state); - if ($plugin = $this->getPlugin()) { - $plugin->validateConfigurationForm($form, $form_state); - } - } - - /** - * {@inheritdoc} - */ - public function submitForm(array &$form, FormStateInterface $form_state) { - parent::submitForm($form, $form_state); - if ($plugin = $this->getPlugin()) { - $plugin->submitConfigurationForm($form, $form_state); - } - } - - /** - * {@inheritdoc} - */ - public function save(array $form, FormStateInterface $form_state) { - $this->entity->save(); - $this->messenger()->addStatus($this->t('The action has been successfully saved.')); - - $form_state->setRedirect('entity.action.collection'); - } - - /** - * Gets the action plugin while ensuring it implements configuration form. - * - * @return \Drupal\Core\Action\ActionInterface|\Drupal\Core\Plugin\PluginFormInterface|null - * The action plugin, or NULL if it does not implement configuration forms. - */ - protected function getPlugin() { - if ($this->entity->getPlugin() instanceof PluginFormInterface) { - return $this->entity->getPlugin(); - } - return NULL; - } +abstract class ActionFormBase extends ActionFormBaseCurrent { } diff --git a/core/modules/action/src/Form/ActionAddForm.php b/core/modules/action/src/Form/ActionAddForm.php new file mode 100644 index 00000000000..54a2c4c0376 --- /dev/null +++ b/core/modules/action/src/Form/ActionAddForm.php @@ -0,0 +1,31 @@ +entity->setPlugin($action_id); + + // Derive the label and type from the action definition. + $definition = $this->entity->getPluginDefinition(); + $this->entity->set('label', $definition['label']); + $this->entity->set('type', $definition['type']); + + return parent::buildForm($form, $form_state); + } + +} diff --git a/core/modules/action/src/Form/ActionEditForm.php b/core/modules/action/src/Form/ActionEditForm.php new file mode 100644 index 00000000000..1fb28d7229d --- /dev/null +++ b/core/modules/action/src/Form/ActionEditForm.php @@ -0,0 +1,12 @@ +storage = $storage; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container) { + return new static( + $container->get('entity.manager')->getStorage('action') + ); + } + + /** + * {@inheritdoc} + */ + public function form(array $form, FormStateInterface $form_state) { + $form['label'] = [ + '#type' => 'textfield', + '#title' => $this->t('Label'), + '#default_value' => $this->entity->label(), + '#maxlength' => '255', + '#description' => $this->t('A unique label for this advanced action. This label will be displayed in the interface of modules that integrate with actions.'), + ]; + + $form['id'] = [ + '#type' => 'machine_name', + '#default_value' => $this->entity->id(), + '#disabled' => !$this->entity->isNew(), + '#maxlength' => 64, + '#description' => $this->t('A unique name for this action. It must only contain lowercase letters, numbers and underscores.'), + '#machine_name' => [ + 'exists' => [$this, 'exists'], + ], + ]; + $form['plugin'] = [ + '#type' => 'value', + '#value' => $this->entity->get('plugin'), + ]; + $form['type'] = [ + '#type' => 'value', + '#value' => $this->entity->getType(), + ]; + + if ($plugin = $this->getPlugin()) { + $form += $plugin->buildConfigurationForm($form, $form_state); + } + + return parent::form($form, $form_state); + } + + /** + * Determines if the action already exists. + * + * @param string $id + * The action ID. + * + * @return bool + * TRUE if the action exists, FALSE otherwise. + */ + public function exists($id) { + $action = $this->storage->load($id); + return !empty($action); + } + + /** + * {@inheritdoc} + */ + protected function actions(array $form, FormStateInterface $form_state) { + $actions = parent::actions($form, $form_state); + unset($actions['delete']); + return $actions; + } + + /** + * {@inheritdoc} + */ + public function validateForm(array &$form, FormStateInterface $form_state) { + parent::validateForm($form, $form_state); + if ($plugin = $this->getPlugin()) { + $plugin->validateConfigurationForm($form, $form_state); + } + } + + /** + * {@inheritdoc} + */ + public function submitForm(array &$form, FormStateInterface $form_state) { + parent::submitForm($form, $form_state); + if ($plugin = $this->getPlugin()) { + $plugin->submitConfigurationForm($form, $form_state); + } + } + + /** + * {@inheritdoc} + */ + public function save(array $form, FormStateInterface $form_state) { + $this->entity->save(); + $this->messenger()->addStatus($this->t('The action has been successfully saved.')); + + $form_state->setRedirect('entity.action.collection'); + } + + /** + * Gets the action plugin while ensuring it implements configuration form. + * + * @return \Drupal\Core\Action\ActionInterface|\Drupal\Core\Plugin\PluginFormInterface|null + * The action plugin, or NULL if it does not implement configuration forms. + */ + protected function getPlugin() { + if ($this->entity->getPlugin() instanceof PluginFormInterface) { + return $this->entity->getPlugin(); + } + return NULL; + } + +}