[freeside-commits] branch master updated. 3ceb32ebb390aa8aa5fffdfc095be35ef7e54bbe

Mark Wells mark at 420.am
Wed Jul 17 15:44:10 PDT 2013


The branch, master has been updated
       via  3ceb32ebb390aa8aa5fffdfc095be35ef7e54bbe (commit)
      from  f5dc45e3e21fc7c3948dd19072fd6448984d31de (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 3ceb32ebb390aa8aa5fffdfc095be35ef7e54bbe
Author: Mark Wells <mark at freeside.biz>
Date:   Wed Jul 17 15:43:52 2013 -0700

    prevent deletion of auto-created RT scrips, #18184

diff --git a/FS/FS/TicketSystem.pm b/FS/FS/TicketSystem.pm
index 7b18575..96980e9 100644
--- a/FS/FS/TicketSystem.pm
+++ b/FS/FS/TicketSystem.pm
@@ -228,30 +228,42 @@ sub _upgrade_data {
     my $desc = $s->{'Description'};
     my ($c, $a, $t) = map lc,
       @{ $s }{'ScripCondition', 'ScripAction', 'Template'};
-    # skip existing scrips
-    next if ( exists($scrip{$c}{$a}{$t}) );
-    if ( !exists($condition{$c}) ) {
-      warn "ScripCondition '$c' not found.\n";
-      next;
-    }
-    if ( !exists($action{$a}) ) {
-      warn "ScripAction '$a' not found.\n";
-      next;
-    }
-    if ( !exists($template{$t}) ) {
-      warn "Template '$t' not found.\n";
-      next;
+
+    if ( exists($scrip{$c}{$a}{$t}) ) {
+      $Scrip->Load( $scrip{$c}{$a}{$t} );
+    } else { # need to create it
+
+      if ( !exists($condition{$c}) ) {
+        warn "ScripCondition '$c' not found.\n";
+        next;
+      }
+      if ( !exists($action{$a}) ) {
+        warn "ScripAction '$a' not found.\n";
+        next;
+      }
+      if ( !exists($template{$t}) ) {
+        warn "Template '$t' not found.\n";
+        next;
+      }
+      my %new_param = (
+        ScripCondition => $condition{$c}->[0],
+        ScripAction => $action{$a}->[0],
+        Template => $template{$t}->[0],
+        Queue => 0,
+        Description => $desc,
+      );
+      warn "Creating scrip: $c $a [$t]\n";
+      my ($val, $msg) = $Scrip->Create(%new_param);
+      die $msg if !$val;
+
+    } #if $scrip{...}
+    # set the Immutable attribute on them if needed
+    if ( !$Scrip->FirstAttribute('Immutable') ) {
+      my ($val, $msg) =
+        $Scrip->SetAttribute(Name => 'Immutable', Content => '1');
+      die $msg if !$val;
     }
-    my %new_param = (
-      ScripCondition => $condition{$c}->[0],
-      ScripAction => $action{$a}->[0],
-      Template => $template{$t}->[0],
-      Queue => 0,
-      Description => $desc,
-    );
-    warn "Creating scrip: $c $a [$t]\n";
-    my ($val, $msg) = $Scrip->Create(%new_param);
-    die $msg if !$val;
+
   } #foreach (@Scrips)
 
   # one-time fix: accumulator fields (support time, etc.) that had values 
diff --git a/rt/share/html/Admin/Elements/EditScrips b/rt/share/html/Admin/Elements/EditScrips
index b09eca9..25cafb4 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>

-----------------------------------------------------------------------

Summary of changes:
 FS/FS/TicketSystem.pm                   |   58 ++++++++++++++++++------------
 rt/share/html/Admin/Elements/EditScrips |   28 ++++++++++++---
 2 files changed, 57 insertions(+), 29 deletions(-)




More information about the freeside-commits mailing list