X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=rt%2Flib%2FRT%2FAction%2FNotify.pm;h=486efff43e047aff8536f4aac6c415ba337dc74c;hp=3f58bf52f64a1f6593fdc1cc6c403b1dddb81810;hb=187086c479a09629b7d180eec513fb7657f4e291;hpb=5a5e999c1995dc74e90a5bec660e28692b81611e diff --git a/rt/lib/RT/Action/Notify.pm b/rt/lib/RT/Action/Notify.pm index 3f58bf52f..486efff43 100755 --- a/rt/lib/RT/Action/Notify.pm +++ b/rt/lib/RT/Action/Notify.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2018 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -71,8 +71,8 @@ sub Prepare { =head2 SetRecipients -Sets the recipients of this meesage to Owner, Requestor, AdminCc, Cc or All. -Explicitly B notify the creator of the transaction by default +Sets the recipients of this message to Owner, Requestor, AdminCc, Cc or All. +Explicitly B notify the creator of the transaction by default. =cut @@ -87,17 +87,6 @@ sub SetRecipients { my ( @To, @PseudoTo, @Cc, @Bcc ); - if ( $arg =~ /\bOtherRecipients\b/ ) { - if ( my $attachment = $self->TransactionObj->Attachments->First ) { - push @Cc, map { $_->address } Email::Address->parse( - $attachment->GetHeader('RT-Send-Cc') - ); - push @Bcc, map { $_->address } Email::Address->parse( - $attachment->GetHeader('RT-Send-Bcc') - ); - } - } - if ( $arg =~ /\bRequestor\b/ ) { push @To, $ticket->Requestors->MemberEmailAddresses; } @@ -115,7 +104,11 @@ sub SetRecipients { } } - if ( $arg =~ /\bOwner\b/ && $ticket->OwnerObj->id != $RT::Nobody->id ) { + if ( $arg =~ /\bOwner\b/ + && $ticket->OwnerObj->id != RT->Nobody->id + && $ticket->OwnerObj->EmailAddress + && not $ticket->OwnerObj->Disabled + ) { # If we're not sending to Ccs or requestors, # then the Owner can be the To. if (@To) { @@ -139,27 +132,47 @@ sub SetRecipients { } } - my $creatorObj = $self->TransactionObj->CreatorObj; - my $creator = $creatorObj->EmailAddress(); + @{ $self->{'To'} } = @To; + @{ $self->{'Cc'} } = @Cc; + @{ $self->{'Bcc'} } = @Bcc; + @{ $self->{'PseudoTo'} } = @PseudoTo; + + if ( $arg =~ /\bOtherRecipients\b/ ) { + if ( my $attachment = $self->TransactionObj->Attachments->First ) { + push @{ $self->{'NoSquelch'}{'Cc'} ||= [] }, map $_->address, + Email::Address->parse( $attachment->GetHeader('RT-Send-Cc') ); + push @{ $self->{'NoSquelch'}{'Bcc'} ||= [] }, map $_->address, + Email::Address->parse( $attachment->GetHeader('RT-Send-Bcc') ); + } + } +} + +=head2 RemoveInappropriateRecipients + +Remove transaction creator as appropriate for the NotifyActor setting. + +To send email to the selected receipients regardless of RT's NotifyActor +configuration, include AlwaysNotifyActor in the list of arguments. + +=cut - #Strip the sender out of the To, Cc and AdminCc and set the - # recipients fields used to build the message by the superclass. - # unless a flag is set +sub RemoveInappropriateRecipients { + my $self = shift; + + my $creatorObj = $self->TransactionObj->CreatorObj; + my $creator = $creatorObj->EmailAddress() || ''; my $TransactionCurrentUser = RT::CurrentUser->new; $TransactionCurrentUser->LoadByName($creatorObj->Name); - if (RT->Config->Get('NotifyActor',$TransactionCurrentUser)) { - @{ $self->{'To'} } = @To; - @{ $self->{'Cc'} } = @Cc; - @{ $self->{'Bcc'} } = @Bcc; - } - else { - @{ $self->{'To'} } = grep ( lc $_ ne lc $creator, @To ); - @{ $self->{'Cc'} } = grep ( lc $_ ne lc $creator, @Cc ); - @{ $self->{'Bcc'} } = grep ( lc $_ ne lc $creator, @Bcc ); - } - @{ $self->{'PseudoTo'} } = @PseudoTo; + $self->RecipientFilter( + Callback => sub { + return unless lc $_[0] eq lc $creator; + return "not sending to $creator, creator of the transaction, due to NotifyActor setting"; + }, + ) unless RT->Config->Get('NotifyActor',$TransactionCurrentUser) + || $self->Argument =~ /\bAlwaysNotifyActor\b/; + $self->SUPER::RemoveInappropriateRecipients(); } RT::Base->_ImportOverlays();