use strict; use warnings; our @Final = ( sub { RT->Logger->debug("Going to correct arguments of NotifyGroup actions if you have any"); 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; } }, );