diff --git a/config/install/system.action.message_delete_action.yml b/config/install/system.action.contact_message_delete_action.yml similarity index 59% rename from config/install/system.action.message_delete_action.yml rename to config/install/system.action.contact_message_delete_action.yml index e07db82..f4f476e 100644 --- a/config/install/system.action.message_delete_action.yml +++ b/config/install/system.action.contact_message_delete_action.yml @@ -6,8 +6,8 @@ dependencies: - contact_storage module: - contact_storage -id: message_delete_action -label: 'Delete message' +id: contact_message_delete_action +label: 'Delete contact message' type: contact_message -plugin: message_delete_action +plugin: entity:delete_action:contact_message configuration: { } diff --git a/config/schema/contact_storage.schema.yml b/config/schema/contact_storage.schema.yml index 7c9cf92..2530485 100644 --- a/config/schema/contact_storage.schema.yml +++ b/config/schema/contact_storage.schema.yml @@ -62,6 +62,6 @@ contact_storage.settings: type: boolean label: 'Whether the mail should be sent as HTML' -action.configuration.message_delete_action: +action.configuration.entity:delete_action:contact_message: type: action_configuration_default - label: 'Delete message configuration' + label: 'Delete contact message configuration' diff --git a/contact_storage.module b/contact_storage.module index f182475..7b24afe 100644 --- a/contact_storage.module +++ b/contact_storage.module @@ -337,8 +337,9 @@ function contact_storage_entity_type_alter(array &$entity_types) { $entity_types['contact_message']->setLinkTemplate('canonical', '/admin/structure/contact/messages/{contact_message}'); $entity_types['contact_message']->setLinkTemplate('edit-form', '/admin/structure/contact/messages/{contact_message}/edit'); $entity_types['contact_message']->setLinkTemplate('delete-form', '/admin/structure/contact/messages/{contact_message}/delete'); + $entity_types['contact_message']->setLinkTemplate('delete-multiple-form', '/admin/structure/contact/messages/delete'); // Add clone link for forms. - $entity_types['contact_form']->setLinkTemplate('clone-form', '/admin/structure/contact/manage/{contact_form}/clone'); + $entity_types['contact_form']->setLinkTemplate('clone-form', '/admin/structure/contact/manage/clone'); // Define the entity route provider. $route_providers = $entity_types['contact_message']->getRouteProviderClasses(); @@ -510,3 +511,11 @@ function contact_storage_contact_form_delete(EntityInterface $entity) { // Delete all aliases with this contact form as a source. \Drupal::service('path.alias_storage')->delete(['source' => '/' . $entity->toUrl('canonical')->getInternalPath()]); } + +/** + * Implements hook_action_info_alter() for the DeleteMessage action plugin. + */ +function contact_storage_action_info_alter(array $definitions) { + $definitions['message_delete_action'] = &$definitions['entity:delete_action:contact_message']; +} + diff --git a/contact_storage.post_update.php b/contact_storage.post_update.php new file mode 100644 index 0000000..8d2ddd0 --- /dev/null +++ b/contact_storage.post_update.php @@ -0,0 +1,16 @@ +rename('system.action.message_delete_action', 'system.action.contact_message_delete_action'); +} diff --git a/contact_storage.routing.yml b/contact_storage.routing.yml index dca717f..50a4a61 100644 --- a/contact_storage.routing.yml +++ b/contact_storage.routing.yml @@ -25,6 +25,15 @@ entity.contact_form.enable: entity.contact.multiple_delete_confirm: path: '/admin/structure/contact/messages/delete' defaults: - _form: '\Drupal\contact_storage\Form\DeleteMultiple' + _form: '\Drupal\contact_storage\Form\ConfirmDeleteMultiple' + entity_type_id: 'contact_message' + requirements: + _permission: 'administer contact forms' + +entity.contact_message.delete_multiple_form: + path: '/admin/structure/contact/messages/delete' + defaults: + _form: '\Drupal\contact_storage\Form\ConfirmDeleteMultiple' + entity_type_id: 'contact_message' requirements: _permission: 'administer contact forms' diff --git a/src/Form/ConfirmDeleteMultiple.php b/src/Form/ConfirmDeleteMultiple.php new file mode 100644 index 0000000..aebba56 --- /dev/null +++ b/src/Form/ConfirmDeleteMultiple.php @@ -0,0 +1,38 @@ +formatPlural(count($this->selection), 'Are you sure you want to delete this message?', 'Are you sure you want to delete these messages?'); + } + + /** + * {@inheritdoc} + */ + public function getCancelUrl() { + return new Url('entity.contact_message.collection'); + } + + /** + * {@inheritdoc} + */ + protected function getDeletedMessage($count) { + return $this->formatPlural($count, 'Deleted @count message.', 'Deleted @count messages.'); + } + +} + diff --git a/src/Form/DeleteMultiple.php b/src/Form/DeleteMultiple.php deleted file mode 100644 index f9ff077..0000000 --- a/src/Form/DeleteMultiple.php +++ /dev/null @@ -1,140 +0,0 @@ -privateTempStoreFactory = $temp_store_factory; - $this->storage = $entity_type_manager->getStorage('contact_message'); - $this->account = $account; - $this->setStringTranslation($string_translation); - } - - /** - * {@inheritdoc} - */ - public static function create(ContainerInterface $container) { - return new static( - $container->get('tempstore.private'), - $container->get('entity_type.manager'), - $container->get('current_user'), - $container->get('string_translation') - ); - } - - /** - * {@inheritdoc} - */ - public function getFormId() { - return 'message_multiple_delete_confirm'; - } - - /** - * {@inheritdoc} - */ - public function getQuestion() { - return $this->formatPlural(count($this->messages), 'Are you sure you want to delete this message?', 'Are you sure you want to delete these messages?'); - } - - /** - * {@inheritdoc} - */ - public function getCancelUrl() { - return new Url('entity.contact_message.collection'); - } - - /** - * {@inheritdoc} - */ - public function getConfirmText() { - return t('Delete'); - } - - /** - * {@inheritdoc} - */ - public function buildForm(array $form, FormStateInterface $form_state) { - $this->messages = $this->privateTempStoreFactory->get('message_multiple_delete_confirm')->get($this->account->id()); - if (empty($this->messages)) { - return new RedirectResponse($this->getCancelUrl()->setAbsolute()->toString()); - } - - $form['messages'] = [ - '#theme' => 'item_list', - '#items' => array_map(function ($message) { - return $message->label(); - }, $this->messages), - ]; - return parent::buildForm($form, $form_state); - } - - /** - * {@inheritdoc} - */ - public function submitForm(array &$form, FormStateInterface $form_state) { - - if ($form_state->getValue('confirm') && !empty($this->messages)) { - $this->storage->delete($this->messages); - $this->privateTempStoreFactory->get('message_multiple_delete_confirm')->delete($this->account->id()); - $count = count($this->messages); - $this->logger('contact')->notice('Deleted @count messages.', ['@count' => $count]); - $this->messenger()->addStatus($this->stringTranslation->formatPlural($count, 'Deleted 1 message.', 'Deleted @count messages.')); - } - $form_state->setRedirect('entity.contact_message.collection'); - } - -} diff --git a/src/Plugin/Action/DeleteMessage.php b/src/Plugin/Action/DeleteMessage.php deleted file mode 100644 index 78f7404..0000000 --- a/src/Plugin/Action/DeleteMessage.php +++ /dev/null @@ -1,93 +0,0 @@ -currentUser = $current_user; - $this->privateTempStore = $temp_store_factory->get('message_multiple_delete_confirm'); - - parent::__construct($configuration, $plugin_id, $plugin_definition); - } - - /** - * {@inheritdoc} - */ - public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { - return new static( - $configuration, - $plugin_id, - $plugin_definition, - $container->get('tempstore.private'), - $container->get('current_user') - ); - } - - /** - * {@inheritdoc} - */ - public function executeMultiple(array $entities) { - $this->privateTempStore->set($this->currentUser->id(), $entities); - } - - /** - * {@inheritdoc} - */ - public function execute($object = NULL) { - $this->executeMultiple([$object]); - } - - /** - * {@inheritdoc} - */ - public function access($object, AccountInterface $account = NULL, $return_as_object = FALSE) { - /** @var \Drupal\contact\MessageInterface $object */ - return $object->access('delete', $account, $return_as_object); - } - -}