]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Fix for bug 97739: Confirms deletion of an attachment status in browsers with no...
authormyk%mozilla.org <>
Wed, 13 Mar 2002 00:05:33 +0000 (00:05 +0000)
committermyk%mozilla.org <>
Wed, 13 Mar 2002 00:05:33 +0000 (00:05 +0000)
Patch by Jeff Hedlund <jeff.hedlund@matrixsi.com>.
r=myk,gerv

editattachstatuses.cgi
template/default/attachstatus/list.atml

index 0642d6bb8f67029f95de1fed2e0537ae24f5c4f3..61e1a15aee550fb80192ef0dda4821c6d3051e4d 100755 (executable)
@@ -87,11 +87,16 @@ elsif ($action eq "update")
   validateSortKey();
   update();
 }
-elsif ($action eq "delete") 
+elsif ($action eq "confirmdelete") 
 { 
   validateID();
-  deleteStatus(); 
+  confirmDelete();
 } 
+elsif ($action eq "delete")
+{
+  validateID();
+  deleteStatus();
+}
 else 
 { 
   DisplayError("I could not figure out what you wanted to do.")
@@ -174,14 +179,18 @@ sub list
 
   # Retrieve a list of attachment status flags and create an array of hashes
   # in which each hash contains the data for one flag.
-  SendSQL("SELECT id, name, description, sortkey, product 
-           FROM attachstatusdefs ORDER BY sortkey");
+  SendSQL("SELECT id, name, description, sortkey, product, count(statusid)
+           FROM attachstatusdefs LEFT JOIN attachstatuses 
+                ON attachstatusdefs.id=attachstatuses.statusid
+           GROUP BY id
+           ORDER BY sortkey");
   my @statusdefs;
   while ( MoreSQLData() )
   {
-    my ($id, $name, $description, $sortkey, $product) = FetchSQLData();
+    my ($id, $name, $description, $sortkey, $product, $attachcount) = FetchSQLData();
     push @statusdefs, { 'id' => $id , 'name' => $name , 'description' => $description , 
-                        'sortkey' => $sortkey , 'product' => $product };
+                        'sortkey' => $sortkey , 'product' => $product, 
+                        'attachcount' => $attachcount };
   }
 
   # Define the variables and functions that will be passed to the UI template.
@@ -293,6 +302,34 @@ sub update
   list("The attachment status has been updated.");
 }
 
+sub confirmDelete 
+{
+  # check if we need confirmation to delete:
+
+  SendSQL("SELECT COUNT(attach_id), name 
+           FROM attachstatusdefs LEFT JOIN attachstatuses
+                ON attachstatuses.statusid=attachstatusdefs.id
+           WHERE statusid = $::FORM{'id'}
+           GROUP BY attachstatuses.statusid;");
+  
+  my ($attachcount, $name) = FetchSQLData();
+
+  if ($attachcount > 0) {
+
+    $vars->{'id'} = $::FORM{'id'};
+    $vars->{'attachcount'} = $attachcount;
+    $vars->{'name'} = $name;
+
+    print "Content-type: text/html\n\n";
+    
+    $template->process("attachstatus/delete.atml", $vars)
+      || DisplayError("Template process failed: " . & $template->error())
+      && exit;
+  } 
+  else {
+    deleteStatus();
+  }
+}
 
 sub deleteStatus
 {
index 6828ea40c877c0ef4ad43fd523b0ca3a5012f51a..60199a2926bcbc9331f7f9a83ab1956df4be5dd9 100755 (executable)
       <td>[% statusdef.sortkey %]</td>
       <td>[% statusdef.product %]</td>
       <td>
-        <a href="editattachstatuses.cgi?action=edit&id=[% statusdef.id %]">Edit</a>
-        <a href="editattachstatuses.cgi?action=delete&id=[% statusdef.id %]" onclick="return confirmDelete();">Delete</a>
+        <a href="editattachstatuses.cgi?action=edit&id=[% statusdef.id %]">
+            Edit</a>
+        &nbsp;|&nbsp;
+        <a href="editattachstatuses.cgi?action=confirmdelete&id=[% statusdef.id %]" 
+         onclick="return confirmDelete([% statusdef.attachcount %],
+                                       '[% statusdef.name FILTER js %]',
+                                       [% statusdef.id %]);">
+            Delete</a>
       </td>
     </tr>
 
   </tr>
 
 </table>
-
 <script language="JavaScript">
-  function confirmDelete()
+  function confirmDelete(attachcount, name, id)
   {
-    return confirm('Are you sure you want to permanently delete ' +
-                   'this attachment status?  All attachments ' + 
-                   'with this status will have it unset.');
+    if (attachcount > 0) {
+        msg = attachcount + ' attachments have the status ' +
+              name + '.  If you delete it, those attachments ' +
+              'will lose this status.  Do you really want to ' +
+              'delete this status?';
+    }
+    else {
+        msg = 'Are you sure you want to delete attachment status ' +
+              name + '?';
+    }
+    if (confirm(msg)) {
+      location.href = "editattachstatuses.cgi?action=delete&id=" + id;
+    }
+    return false;
   }
 </script>