summaryrefslogtreecommitdiff
path: root/rt/etc/upgrade/3.8.4/content
diff options
context:
space:
mode:
Diffstat (limited to 'rt/etc/upgrade/3.8.4/content')
-rw-r--r--rt/etc/upgrade/3.8.4/content59
1 files changed, 59 insertions, 0 deletions
diff --git a/rt/etc/upgrade/3.8.4/content b/rt/etc/upgrade/3.8.4/content
new file mode 100644
index 0000000..be5a6bf
--- /dev/null
+++ b/rt/etc/upgrade/3.8.4/content
@@ -0,0 +1,59 @@
+
+@Final = (
+ sub {
+ $RT::Logger->debug("Going to correct arguments of NotifyGroup actions if you have any");
+ use strict;
+
+ my $actions = RT::ScripActions->new( $RT::SystemUser );
+ $actions->Limit(
+ FIELD => 'ExecModule',
+ VALUE => 'NotifyGroup',
+ );
+ $actions->Limit(
+ FIELD => 'ExecModule',
+ VALUE => 'NotifyGroupAsComment',
+ );
+
+ my $converter = sub {
+ my $arg = shift;
+ my @res;
+ foreach my $r ( @{ $arg } ) {
+ my $obj;
+ next unless $r->{'Type'};
+ if( lc $r->{'Type'} eq 'user' ) {
+ $obj = RT::User->new( $RT::SystemUser );
+ } elsif ( lc $r->{'Type'} eq 'group' ) {
+ $obj = RT::Group->new( $RT::SystemUser );
+ } else {
+ next;
+ }
+ $obj->Load( $r->{'Instance'} );
+ my $id = $obj->id;
+ next unless( $id );
+
+ push @res, $id;
+ }
+
+ return join ',', @res;
+ };
+
+ require Storable;
+ while ( my $action = $actions->Next ) {
+ my $argument = $action->Argument;
+ my $new = '';
+ local $@;
+ if ( my $struct = eval { Storable::thaw( $argument ) } ) {
+ $new = $converter->( $struct );
+ } else {
+ $new = join /, /, grep length, split /[^0-9]+/, $argument;
+ }
+ next if $new eq $argument;
+
+ my ($status, $msg) = $action->__Set( Field => 'Argument', Value => $new );
+ $RT::Logger->warning( "Couldn't change argument value of the action: $msg" )
+ unless $status;
+ }
+ },
+);
+
+