summaryrefslogtreecommitdiff
path: root/rt
diff options
context:
space:
mode:
authorMark Wells <mark@freeside.biz>2013-07-17 15:44:04 -0700
committerMark Wells <mark@freeside.biz>2013-07-17 15:44:04 -0700
commit3da7f47cd4dcc0a702c9066ecad55568c749b4b8 (patch)
treee9e37218cdbd67981627e596cb733e4b5654e0c5 /rt
parent1aeac01ca25d937d5aa7c06ea85d8ae151468e42 (diff)
prevent deletion of auto-created RT scrips, #18184
Diffstat (limited to 'rt')
-rwxr-xr-xrt/share/html/Admin/Elements/EditScrips28
1 files changed, 22 insertions, 6 deletions
diff --git a/rt/share/html/Admin/Elements/EditScrips b/rt/share/html/Admin/Elements/EditScrips
index b09eca910..25cafb42f 100755
--- a/rt/share/html/Admin/Elements/EditScrips
+++ b/rt/share/html/Admin/Elements/EditScrips
@@ -98,17 +98,33 @@ else {
# deal with modifying and deleting existing scrips
# we still support DeleteScrip-id format but array is preferred
+
+my @not_deleted;
foreach my $id ( grep $_, @DeleteScrip, map /^DeleteScrip-(\d+)/, keys %ARGS ) {
my $scrip = RT::Scrip->new($session{'CurrentUser'});
$scrip->Load( $id );
- my ($retval, $msg) = $scrip->Delete;
- if ($retval) {
- push @actions, loc("Scrip deleted");
- }
- else {
- push @actions, $msg;
+ my $a = $scrip->FirstAttribute('Immutable');
+ if ( defined($a) and $a->Content ) {
+ # then disable the scrip instead of deleting it
+ my ($retval, $msg) = $scrip->SetStage('Disabled');
+ if ( $retval ) {
+ push @actions, loc("Scrip disabled (cannot delete system scrips)");
+ } else {
+ push @actions, $msg;
+ push @not_deleted, $id;
+ }
+ } else { # not an immutable scrip
+ my ($retval, $msg) = $scrip->Delete;
+ if ($retval) {
+ push @actions, loc("Scrip deleted");
+ }
+ else {
+ push @actions, $msg;
+ push @not_deleted, $id;
+ }
}
}
+$DECODED_ARGS->{DeleteScrip} = \@not_deleted;
</%init>
<%ARGS>