diff options
-rwxr-xr-x | editattachstatuses.cgi | 49 | ||||
-rwxr-xr-x | template/default/attachstatus/list.atml | 30 |
2 files changed, 66 insertions, 13 deletions
diff --git a/editattachstatuses.cgi b/editattachstatuses.cgi index 0642d6bb8..61e1a15ae 100755 --- a/editattachstatuses.cgi +++ b/editattachstatuses.cgi @@ -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 { diff --git a/template/default/attachstatus/list.atml b/template/default/attachstatus/list.atml index 6828ea40c..60199a292 100755 --- a/template/default/attachstatus/list.atml +++ b/template/default/attachstatus/list.atml @@ -44,8 +44,14 @@ <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> + | + <a href="editattachstatuses.cgi?action=confirmdelete&id=[% statusdef.id %]" + onclick="return confirmDelete([% statusdef.attachcount %], + '[% statusdef.name FILTER js %]', + [% statusdef.id %]);"> + Delete</a> </td> </tr> @@ -59,13 +65,23 @@ </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> |