reverting to vendor branch rt 3.0.4, hopefully
[freeside.git] / rt / lib / RT / Action / ResolveMembers.pm
1 # BEGIN LICENSE BLOCK
2
3 # Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
4
5 # (Except where explictly superceded by other copyright notices)
6
7 # This work is made available to you under the terms of Version 2 of
8 # the GNU General Public License. A copy of that license should have
9 # been provided with this software, but in any event can be snarfed
10 # from www.gnu.org.
11
12 # This work is distributed in the hope that it will be useful, but
13 # WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 # General Public License for more details.
16
17 # Unless otherwise specified, all modifications, corrections or
18 # extensions to this work which alter its source code become the
19 # property of Best Practical Solutions, LLC when submitted for
20 # inclusion in the work.
21
22
23 # END LICENSE BLOCK
24 # This Action will resolve all members of a resolved group ticket
25
26 package RT::Action::ResolveMembers;
27 require RT::Action::Generic;
28 require RT::Links;
29
30 use strict;
31 use vars qw/@ISA/;
32 @ISA=qw(RT::Action::Generic);
33
34 #Do what we need to do and send it out.
35
36 #What does this type of Action does
37
38 # {{{ sub Describe 
39 sub Describe  {
40   my $self = shift;
41   return $self->loc("[_1] will resolve all members of a resolved group ticket.", ref $self);
42 }
43 # }}}
44
45
46 # {{{ sub Prepare 
47 sub Prepare  {
48     # nothing to prepare
49     return 1;
50 }
51 # }}}
52
53 sub Commit {
54     my $self = shift;
55
56     my $Links=RT::Links->new($RT::SystemUser);
57     $Links->Limit(FIELD => 'Type', VALUE => 'MemberOf');
58     $Links->Limit(FIELD => 'Target', VALUE => $self->TicketObj->id);
59
60     while (my $Link=$Links->Next()) {
61         # Todo: Try to deal with remote URIs as well
62         next unless $Link->BaseURI->IsLocal;
63         my $base=RT::Ticket->new($self->TicketObj->CurrentUser);
64         # Todo: Only work if Base is a plain ticket num:
65         $base->Load($Link->Base);
66         # I'm afraid this might be a major bottleneck if ResolveGroupTicket is on.
67         $base->Resolve;
68     }
69 }
70
71
72 # Applicability checked in Commit.
73
74 # {{{ sub IsApplicable 
75 sub IsApplicable  {
76   my $self = shift;
77   1;  
78   return 1;
79 }
80 # }}}
81
82 eval "require RT::Action::ResolveMembers_Vendor";
83 die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/ResolveMembers_Vendor.pm});
84 eval "require RT::Action::ResolveMembers_Local";
85 die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/ResolveMembers_Local.pm});
86
87 1;
88