Putting 4.2.0 on top of 4.0.17
[usit-rt.git] / lib / RT / Action / Notify.pm
CommitLineData
84fb5b46
MKG
1# BEGIN BPS TAGGED BLOCK {{{
2#
3# COPYRIGHT:
4#
403d7b0b 5# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC
84fb5b46
MKG
6# <sales@bestpractical.com>
7#
8# (Except where explicitly superseded by other copyright notices)
9#
10#
11# LICENSE:
12#
13# This work is made available to you under the terms of Version 2 of
14# the GNU General Public License. A copy of that license should have
15# been provided with this software, but in any event can be snarfed
16# from www.gnu.org.
17#
18# This work is distributed in the hope that it will be useful, but
19# WITHOUT ANY WARRANTY; without even the implied warranty of
20# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21# General Public License for more details.
22#
23# You should have received a copy of the GNU General Public License
24# along with this program; if not, write to the Free Software
25# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
26# 02110-1301 or visit their web page on the internet at
27# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
28#
29#
30# CONTRIBUTION SUBMISSION POLICY:
31#
32# (The following paragraph is not intended to limit the rights granted
33# to you to modify and distribute this software under the terms of
34# the GNU General Public License and is only of importance to you if
35# you choose to contribute your changes and enhancements to the
36# community by submitting them to Best Practical Solutions, LLC.)
37#
38# By intentionally submitting any modifications, corrections or
39# derivatives to this work, or any other work intended for use with
40# Request Tracker, to Best Practical Solutions, LLC, you confirm that
41# you are the copyright holder for those contributions and you grant
42# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
43# royalty-free, perpetual, license to use, copy, create derivative
44# works based on those contributions, and sublicense and distribute
45# those contributions and any derivatives thereof.
46#
47# END BPS TAGGED BLOCK }}}
48
49#
50package RT::Action::Notify;
51
52use strict;
53use warnings;
54
55use base qw(RT::Action::SendEmail);
56
57use Email::Address;
58
59=head2 Prepare
60
61Set up the relevant recipients, then call our parent.
62
63=cut
64
65
66sub Prepare {
67 my $self = shift;
68 $self->SetRecipients();
69 $self->SUPER::Prepare();
70}
71
72=head2 SetRecipients
73
af59614d
MKG
74Sets the recipients of this message to Owner, Requestor, AdminCc, Cc or All.
75Explicitly B<does not> notify the creator of the transaction by default.
84fb5b46
MKG
76
77=cut
78
79sub SetRecipients {
80 my $self = shift;
81
82 my $ticket = $self->TicketObj;
83
84 my $arg = $self->Argument;
85 $arg =~ s/\bAll\b/Owner,Requestor,AdminCc,Cc/;
86
87 my ( @To, @PseudoTo, @Cc, @Bcc );
88
89
90 if ( $arg =~ /\bRequestor\b/ ) {
91 push @To, $ticket->Requestors->MemberEmailAddresses;
92 }
93
94 if ( $arg =~ /\bCc\b/ ) {
95
96 #If we have a To, make the Ccs, Ccs, otherwise, promote them to To
97 if (@To) {
98 push ( @Cc, $ticket->Cc->MemberEmailAddresses );
99 push ( @Cc, $ticket->QueueObj->Cc->MemberEmailAddresses );
100 }
101 else {
102 push ( @Cc, $ticket->Cc->MemberEmailAddresses );
103 push ( @To, $ticket->QueueObj->Cc->MemberEmailAddresses );
104 }
105 }
106
107 if ( $arg =~ /\bOwner\b/
108 && $ticket->OwnerObj->id != RT->Nobody->id
109 && $ticket->OwnerObj->EmailAddress
110 ) {
111 # If we're not sending to Ccs or requestors,
112 # then the Owner can be the To.
113 if (@To) {
114 push ( @Bcc, $ticket->OwnerObj->EmailAddress );
115 }
116 else {
117 push ( @To, $ticket->OwnerObj->EmailAddress );
118 }
119
120 }
121
122 if ( $arg =~ /\bAdminCc\b/ ) {
123 push ( @Bcc, $ticket->AdminCc->MemberEmailAddresses );
124 push ( @Bcc, $ticket->QueueObj->AdminCc->MemberEmailAddresses );
125 }
126
127 if ( RT->Config->Get('UseFriendlyToLine') ) {
128 unless (@To) {
129 push @PseudoTo,
130 sprintf RT->Config->Get('FriendlyToLineFormat'), $arg, $ticket->id;
131 }
132 }
133
af59614d
MKG
134 @{ $self->{'To'} } = @To;
135 @{ $self->{'Cc'} } = @Cc;
136 @{ $self->{'Bcc'} } = @Bcc;
84fb5b46
MKG
137 @{ $self->{'PseudoTo'} } = @PseudoTo;
138
139 if ( $arg =~ /\bOtherRecipients\b/ ) {
140 if ( my $attachment = $self->TransactionObj->Attachments->First ) {
141 push @{ $self->{'NoSquelch'}{'Cc'} ||= [] }, map $_->address,
142 Email::Address->parse( $attachment->GetHeader('RT-Send-Cc') );
143 push @{ $self->{'NoSquelch'}{'Bcc'} ||= [] }, map $_->address,
144 Email::Address->parse( $attachment->GetHeader('RT-Send-Bcc') );
145 }
146 }
147}
148
af59614d
MKG
149=head2 RemoveInappropriateRecipients
150
151Remove transaction creator as appropriate for the NotifyActor setting.
152
153To send email to the selected receipients regardless of RT's NotifyActor
154configuration, include AlwaysNotifyActor in the list of arguments.
155
156=cut
157
158sub RemoveInappropriateRecipients {
159 my $self = shift;
160
161 my $creatorObj = $self->TransactionObj->CreatorObj;
162 my $creator = $creatorObj->EmailAddress() || '';
163 my $TransactionCurrentUser = RT::CurrentUser->new;
164 $TransactionCurrentUser->LoadByName($creatorObj->Name);
165
166 $self->RecipientFilter(
167 Callback => sub {
168 return unless lc $_[0] eq lc $creator;
169 return "not sending to $creator, creator of the transaction, due to NotifyActor setting";
170 },
171 ) unless RT->Config->Get('NotifyActor',$TransactionCurrentUser)
172 || $self->Argument =~ /\bAlwaysNotifyActor\b/;
173
174 $self->SUPER::RemoveInappropriateRecipients();
175}
176
84fb5b46
MKG
177RT::Base->_ImportOverlays();
178
1791;