Skip to content
Snippets Groups Projects
Commit 1d9d9844 authored by Igor Biki's avatar Igor Biki
Browse files

Merge branch...

Merge branch 'feature/ISTWCMS-5544-l26yan-Refactor-add-a-warning-message-when-deleting-content' into '1.0.x'

ISTWCMS-5544 Refactor add a warning message when deleting content

See merge request !253
parents a1880124 dc6477b2
No related branches found
No related tags found
1 merge request!253ISTWCMS-5544 Refactor add a warning message when deleting content
<?php
namespace Drupal\uw_cfg_common\EventSubscriber;
use Drupal\Core\Session\AccountProxyInterface;
use Drupal\core_event_dispatcher\Event\Form\FormAlterEvent;
use Drupal\Core\StringTranslation\StringTranslationTrait;
use Drupal\core_event_dispatcher\FormHookEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* UW content type delete form event subscriber.
*/
class UwDeleteFormEventSubscriber implements EventSubscriberInterface {
use StringTranslationTrait;
/**
* Current user.
*
* @var \Drupal\Core\Session\AccountProxyInterface
*/
protected $currentUser;
/**
* Default constructor.
*
* @param \Drupal\Core\Session\AccountProxyInterface $currentUser
* Current user.
*/
public function __construct(AccountProxyInterface $currentUser) {
$this->currentUser = $currentUser;
}
/**
* {@inheritdoc}
*/
public static function getSubscribedEvents() {
return [
FormHookEvents::FORM_ALTER => 'alterForm',
];
}
/**
* Alter form.
*
* @param \Drupal\core_event_dispatcher\Event\Form\FormAlterEvent $event
* The event.
*/
public function alterForm(FormAlterEvent $event): void {
$form = &$event->getForm();
// Define all names in an array.
$names = [
'ct_names' => [
'uw_ct_blog',
'uw_ct_contact',
'uw_ct_catalog_item',
'uw_ct_event',
'uw_ct_expand_collapse_group',
'uw_ct_news_item',
'uw_ct_opportunity',
'uw_ct_profile',
'uw_ct_project',
'uw_ct_service',
'uw_ct_sidebar',
'uw_ct_site_footer',
'uw_ct_web_page',
],
'vocab_names' => [
'uw_vocab_blog_tags',
'uw_vocab_contact_group',
'uw_vocab_audience',
'uw_vocab_catalog_categories',
'uw_vocab_catalogs',
'uw_tax_event_tags',
'uw_tax_event_type',
'uw_vocab_news_tags',
'uw_vocab_profile_type',
'uw_vocab_project_roles',
'uw_vocab_project_topics',
'uw_vocab_service_categories',
],
'media_names' => [
'uw_mt_file',
'uw_mt_icon',
'uw_mt_image',
'uw_mt_local_video',
'uw_mt_remote_video',
'uw_mt_vimeo_banner_video',
],
];
// Loop all names in array.
foreach ($names as $key => $type_names) {
foreach ($type_names as $name) {
$custom_waring_message = $this->t('CAUTION. This will permanently delete this piece of content; this action cannot be undone. If anything references this content, it may cause visual or structural issues on that page. Make sure you have removed or updated all references before deleting.');
// Use custom warning message for deleting nodes, terms and medias.
// The user has 'delete any' and 'delete own' permissions.
if ($key == 'ct_names') {
if (($form['#form_id'] == 'node_' . $name . '_delete_form') &&
($this->currentUser->hasPermission('delete any ' . $name . ' content') ||
$this->currentUser->hasPermission('delete own ' . $name . ' content'))) {
$form['description']['#markup'] = $custom_waring_message;
break;
}
}
// The user has 'delete terms' permission.
if ($key == 'vocab_names') {
if (($form['#form_id'] == 'taxonomy_term_' . $name . '_delete_form') &&
$this->currentUser->hasPermission('delete terms in ' . $name)) {
$form['description']['#markup'] = $custom_waring_message;
break;
}
}
// The user has 'delete any' permission.
if ($key == 'media_names') {
if (($form['#form_id'] == 'media_' . $name . '_delete_form') &&
($this->currentUser->hasPermission('delete any ' . $name . ' media') ||
$this->currentUser->hasPermission('delete own ' . $name . ' media'))) {
$form['description']['#markup'] = $custom_waring_message;
break;
}
}
}
}
}
}
......@@ -847,85 +847,6 @@ function uw_cfg_common_preprocess_responsive_image(&$variables) {
*/
function uw_cfg_common_form_alter(array &$form, FormStateInterface $form_state, string $form_id): void {
// Define all names in an array.
$names = [
'ct_names' => [
'uw_ct_blog',
'uw_ct_contact',
'uw_ct_catalog_item',
'uw_ct_event',
'uw_ct_expand_collapse_group',
'uw_ct_news_item',
'uw_ct_opportunity',
'uw_ct_profile',
'uw_ct_project',
'uw_ct_service',
'uw_ct_sidebar',
'uw_ct_site_footer',
'uw_ct_web_page',
],
'vocab_names' => [
'uw_vocab_blog_tags',
'uw_vocab_contact_group',
'uw_vocab_audience',
'uw_vocab_catalog_categories',
'uw_vocab_catalogs',
'uw_tax_event_tags',
'uw_tax_event_type',
'uw_vocab_news_tags',
'uw_vocab_profile_type',
'uw_vocab_project_roles',
'uw_vocab_project_topics',
'uw_vocab_service_categories',
],
'media_names' => [
'uw_mt_file',
'uw_mt_icon',
'uw_mt_image',
'uw_mt_local_video',
'uw_mt_remote_video',
'uw_mt_vimeo_banner_video',
],
];
// Get current user.
$user = \Drupal::currentUser();
// Loop all names in array.
foreach ($names as $key => $type_names) {
foreach ($type_names as $name) {
$custom_waring_message = t('CAUTION. This will permanently delete this piece of content; this action cannot be undone. If anything references this content, it may cause visual or structural issues on that page. Make sure you have removed or updated all references before deleting.');
// Use custom warning message for deleting nodes, terms and medias.
// The user has 'delete any' and 'delete own' permissions.
if ($key == 'ct_names') {
if (($form_id == 'node_' . $name . '_delete_form') &&
($user->hasPermission('delete any ' . $name . ' content') ||
$user->hasPermission('delete own ' . $name . ' content'))) {
$form['description']['#markup'] = $custom_waring_message;
break;
}
}
// The user has 'delete terms' permission.
if ($key == 'vocab_names') {
if (($form_id == 'taxonomy_term_' . $name . '_delete_form') &&
$user->hasPermission('delete terms in ' . $name)) {
$form['description']['#markup'] = $custom_waring_message;
break;
}
}
// The user has 'delete any' permission.
if ($key == 'media_names') {
if (($form_id == 'media_' . $name . '_delete_form') &&
($user->hasPermission('delete any ' . $name . ' media') ||
$user->hasPermission('delete own ' . $name . ' media'))) {
$form['description']['#markup'] = $custom_waring_message;
break;
}
}
}
}
// ISTWCMS-4648: removing revisions from layout builder page.
if (\Drupal::routeMatch()->getRouteName() == 'layout_builder.overrides.node.view') {
$form['revision']['#access'] = FALSE;
......
......@@ -34,6 +34,11 @@ services:
class: '\Drupal\uw_cfg_common\EventSubscriber\UwLayoutBuilderEventSubscriber'
tags:
- { name: 'event_subscriber' }
uw_delete_form.event_subscriber:
class: '\Drupal\uw_cfg_common\EventSubscriber\UwDeleteFormEventSubscriber'
arguments: ['@current_user']
tags:
- { name: 'event_subscriber' }
uw_cfg_common.features:
class: Drupal\uw_cfg_common\Helpers\UwFeatureRevert
arguments: ['@features.manager', '@config_update.config_update']
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment