From 49686269f217cd22b9fc6f1f95ae6215e8ac77c8 Mon Sep 17 00:00:00 2001
From: Lily Yan <l26yan@uwaterloo.ca>
Date: Fri, 8 Jul 2022 13:26:51 -0400
Subject: [PATCH] ISTWCMS-5544 Add a warning message when deleting contents

---
 uw_cfg_common.module | 79 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 79 insertions(+)

diff --git a/uw_cfg_common.module b/uw_cfg_common.module
index 987b0384..0b6fb6c8 100644
--- a/uw_cfg_common.module
+++ b/uw_cfg_common.module
@@ -847,6 +847,85 @@ 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;
-- 
GitLab