prevent deletion of auto-created RT scrips, #18184
[freeside.git] / FS / FS / TicketSystem.pm
index 7b18575..96980e9 100644 (file)
@@ -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