X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=rt%2Flib%2FRT%2FAction%2FNotify.pm;h=486efff43e047aff8536f4aac6c415ba337dc74c;hp=6dca4fd41fa8d23c0f54b9ceb606227b56afe0e2;hb=187086c479a09629b7d180eec513fb7657f4e291;hpb=3ef62a0570055da710328937e7f65dbb2c027c62 diff --git a/rt/lib/RT/Action/Notify.pm b/rt/lib/RT/Action/Notify.pm index 6dca4fd41..486efff43 100755 --- a/rt/lib/RT/Action/Notify.pm +++ b/rt/lib/RT/Action/Notify.pm @@ -1,99 +1,180 @@ -#$Header: /home/cvs/cvsroot/freeside/rt/lib/RT/Action/Notify.pm,v 1.1 2002-08-12 06:17:07 ivan Exp $ - +# BEGIN BPS TAGGED BLOCK {{{ +# +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2018 Best Practical Solutions, LLC +# +# +# (Except where explicitly superseded by other copyright notices) +# +# +# LICENSE: +# +# This work is made available to you under the terms of Version 2 of +# the GNU General Public License. A copy of that license should have +# been provided with this software, but in any event can be snarfed +# from www.gnu.org. +# +# This work is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 or visit their web page on the internet at +# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} + +# package RT::Action::Notify; -require RT::Action::SendEmail; -@ISA = qw(RT::Action::SendEmail); -# {{{ sub SetRecipients +use strict; +use warnings; + +use base qw(RT::Action::SendEmail); + +use Email::Address; + +=head2 Prepare + +Set up the relevant recipients, then call our parent. + +=cut + + +sub Prepare { + my $self = shift; + $self->SetRecipients(); + $self->SUPER::Prepare(); +} =head2 SetRecipients -Sets the recipients of this meesage to Owner, Requestor, AdminCc, Cc or All. -Explicitly B notify the creator of the transaction. +Sets the recipients of this message to Owner, Requestor, AdminCc, Cc or All. +Explicitly B notify the creator of the transaction by default. =cut sub SetRecipients { my $self = shift; - $arg = $self->Argument; + my $ticket = $self->TicketObj; + my $arg = $self->Argument; $arg =~ s/\bAll\b/Owner,Requestor,AdminCc,Cc/; my ( @To, @PseudoTo, @Cc, @Bcc ); - if ($arg =~ /\bOtherRecipients\b/) { - if ($self->TransactionObj->Message->First) { - push (@Cc, $self->TransactionObj->Message->First->GetHeader('RT-Send-Cc')); - push (@Bcc, $self->TransactionObj->Message->First->GetHeader('RT-Send-Bcc')); - } - } - if ( $arg =~ /\bRequestor\b/ ) { - push ( @To, @{ $self->TicketObj->Requestors->Emails } ); + push @To, $ticket->Requestors->MemberEmailAddresses; } - - if ( $arg =~ /\bCc\b/ ) { #If we have a To, make the Ccs, Ccs, otherwise, promote them to To if (@To) { - push ( @Cc, @{ $self->TicketObj->Cc->Emails } ); - push ( @Cc, @{ $self->TicketObj->QueueObj->Cc->Emails } ); + push ( @Cc, $ticket->Cc->MemberEmailAddresses ); + push ( @Cc, $ticket->QueueObj->Cc->MemberEmailAddresses ); } else { - push ( @Cc, @{ $self->TicketObj->Cc->Emails } ); - push ( @To, @{ $self->TicketObj->QueueObj->Cc->Emails } ); + push ( @Cc, $ticket->Cc->MemberEmailAddresses ); + push ( @To, $ticket->QueueObj->Cc->MemberEmailAddresses ); } } - if ( ( $arg =~ /\bOwner\b/ ) - && ( $self->TicketObj->OwnerObj->id != $RT::Nobody->id ) ) - { - - # If we're not sending to Ccs or requestors, + 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) { - push ( @Bcc, $self->TicketObj->OwnerObj->EmailAddress ); + push ( @Bcc, $ticket->OwnerObj->EmailAddress ); } else { - push ( @To, $self->TicketObj->OwnerObj->EmailAddress ); + push ( @To, $ticket->OwnerObj->EmailAddress ); } } if ( $arg =~ /\bAdminCc\b/ ) { - push ( @Bcc, @{ $self->TicketObj->AdminCc->Emails } ); - push ( @Bcc, @{ $self->TicketObj->QueueObj->AdminCc->Emails } ); + push ( @Bcc, $ticket->AdminCc->MemberEmailAddresses ); + push ( @Bcc, $ticket->QueueObj->AdminCc->MemberEmailAddresses ); } - if ($RT::UseFriendlyToLine) { + if ( RT->Config->Get('UseFriendlyToLine') ) { unless (@To) { - push ( @PseudoTo, - "\"$arg of $RT::rtname Ticket #" - . $self->TicketObj->id . "\":;" ); + push @PseudoTo, + sprintf RT->Config->Get('FriendlyToLineFormat'), $arg, $ticket->id; } } - my $creator = $self->TransactionObj->CreatorObj->EmailAddress(); + @{ $self->{'To'} } = @To; + @{ $self->{'Cc'} } = @Cc; + @{ $self->{'Bcc'} } = @Bcc; + @{ $self->{'PseudoTo'} } = @PseudoTo; - #Strip the sender out of the To, Cc and AdminCc and set the - # recipients fields used to build the message by the superclass. + 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') ); + } + } +} - $RT::Logger->debug("$self: To is ".join(",",@To)); - $RT::Logger->debug("$self: Cc is ".join(",",@Cc)); - $RT::Logger->debug("$self: Bcc is ".join(",",@Bcc)); +=head2 RemoveInappropriateRecipients - @{ $self->{'To'} } = grep ( !/^$creator$/, @To ); - @{ $self->{'Cc'} } = grep ( !/^$creator$/, @Cc ); - @{ $self->{'Bcc'} } = grep ( !/^$creator$/, @Bcc ); - @{ $self->{'PseudoTo'} } = @PseudoTo; - return (1); +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 + +sub RemoveInappropriateRecipients { + my $self = shift; + + my $creatorObj = $self->TransactionObj->CreatorObj; + my $creator = $creatorObj->EmailAddress() || ''; + my $TransactionCurrentUser = RT::CurrentUser->new; + $TransactionCurrentUser->LoadByName($creatorObj->Name); + + $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(); 1;