diff options
Diffstat (limited to 'rt/etc/upgrade/3.8.4/content')
-rw-r--r-- | rt/etc/upgrade/3.8.4/content | 59 |
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; + } + }, +); + + |