Putting 4.2.0 on top of 4.0.17
[usit-rt.git] / etc / upgrade / 3.8.2 / content
1 use strict;
2 use warnings;
3
4 our @Initial = (
5     sub {
6         RT->Logger->warning(
7             "Going to add [OLD] prefix to all templates in approvals queue."
8             ." If you have never used approvals, you can safely delete all the"
9             ." templates with the [OLD] prefix. Leave the new Approval templates because"
10             ." you may eventually want to start using approvals."
11         );
12
13         my $approvals_q = RT::Queue->new( RT->SystemUser );
14         $approvals_q->Load('___Approvals');
15         unless ( $approvals_q->id ) {
16             RT->Logger->error("You have no approvals queue.");
17             return 1;
18         }
19
20         my $templates = RT::Templates->new( RT->SystemUser );
21         $templates->LimitToQueue( $approvals_q->id );
22         while ( my $tmpl = $templates->Next ) {
23             my ($status, $msg) = $tmpl->SetName( "[OLD] ". $tmpl->Name );
24             unless ( $status ) {
25                 RT->Logger->error("Couldn't rename template #". $tmpl->id .": $msg");
26             }
27         }
28         return 1;
29     },
30
31     sub {
32         my $group = RT::Group->new( RT->SystemUser );
33         $group->DBIx::SearchBuilder::Record::LoadByCols(
34             Domain => 'SystemInternal',
35             Type   => 'Privileged',
36         );
37         unless ($group->id) {
38             RT->Logger->warn("Failed to load Privilged group");
39             return;
40         }
41         my ( $return, $msg ) = $group->PrincipalObj->GrantRight(
42             Right => 'ShowApprovalsTab',
43             Object => RT->System,
44         );
45         RT->Logger->warn("Failed to grant ShowApprovalsTab right: $msg")
46             unless $return;
47     },
48 );
49
50 our @Templates = (
51     {  Queue       => '___Approvals',
52        Name        => "New Pending Approval",    # loc
53        Description =>
54          "Notify Owners and AdminCcs of new items pending their approval", # loc
55        Content => 'Subject: New Pending Approval: {$Ticket->Subject}
56
57 Greetings,
58
59 There is a new item pending your approval: "{$Ticket->Subject()}", 
60 a summary of which appears below.
61
62 Please visit {RT->Config->Get(\'WebURL\')}Approvals/Display.html?id={$Ticket->id}
63 to approve or reject this ticket, or {RT->Config->Get(\'WebURL\')}Approvals/ to
64 batch-process all your pending approvals.
65
66 -------------------------------------------------------------------------
67 {$Transaction->Content()}
68 '
69     },
70     {  Queue       => '___Approvals',
71        Name        => "Approval Passed",    # loc
72        Description =>
73          "Notify Requestor of their ticket has been approved by some approver", # loc
74        Content => 'Subject: Ticket Approved: {$Ticket->Subject}
75
76 Greetings,
77
78 Your ticket has been approved by { eval { $Approval->OwnerObj->Name } }.
79 Other approvals may be pending.
80
81 Approver\'s notes: { $Notes }
82 '
83     },
84     {  Queue       => '___Approvals',
85        Name        => "All Approvals Passed",    # loc
86        Description =>
87          "Notify Requestor of their ticket has been approved by all approvers", # loc
88        Content => 'Subject: Ticket Approved: {$Ticket->Subject}
89
90 Greetings,
91
92 Your ticket has been approved by { eval { $Approval->OwnerObj->Name } }.
93 Its Owner may now start to act on it.
94
95 Approver\'s notes: { $Notes }
96 '
97     },
98     {  Queue       => '___Approvals',
99        Name        => "Approval Rejected",    # loc
100        Description =>
101          "Notify Owner of their rejected ticket", # loc
102        Content => 'Subject: Ticket Rejected: {$Ticket->Subject}
103
104 Greetings,
105
106 Your ticket has been rejected by { eval { $Approval->OwnerObj->Name } }.
107
108 Approver\'s notes: { $Notes }
109 '
110     },
111     {  Queue       => '___Approvals',
112        Name        => "Approval Ready for Owner",    # loc
113        Description =>
114          "Notify Owner of their ticket has been approved and is ready to be acted on", # loc
115        Content => 'Subject: Ticket Approved: {$Ticket->Subject}
116
117 Greetings,
118
119 The ticket has been approved, you may now start to act on it.
120
121 '
122     },
123 );
124
125 our @Final = (
126     sub {
127         RT->Logger->debug("Going to adjust dashboards");
128         my $sys = RT::System->new(RT->SystemUser);
129
130         my $attrs = RT::Attributes->new( RT->SystemUser );
131         $attrs->UnLimit;
132         my @dashboards = $attrs->Named('Dashboard');
133
134         if (@dashboards == 0) {
135             RT->Logger->debug("You have no dashboards. Skipped.");
136             return 1;
137         }
138
139         for my $attr (@dashboards) {
140             my $props = $attr->Content;
141             if (exists $props->{Searches}) {
142                 $props->{Panes} = {
143                     body => [
144                         map {
145                             my ($privacy, $id, $desc) = @$_;
146
147                             {
148                                 portlet_type => 'search',
149                                 privacy      => $privacy,
150                                 id           => $id,
151                                 description  => $desc,
152                                 pane         => 'body',
153                             }
154                         } @{ delete $props->{Searches} }
155                     ],
156                 };
157             }
158             my ($status, $msg) = $attr->SetContent( $props );
159             RT->Logger->error($msg) unless $status;
160         }
161
162         RT->Logger->debug("Fixed.");
163         return 1;
164     },
165     sub {
166         my $approvals_q = RT::Queue->new( RT->SystemUser );
167         $approvals_q->Load('___Approvals');
168         unless ( $approvals_q->id ) {
169             RT->Logger->error("You have no approvals queue.");
170             return 1;
171         }
172
173         require File::Temp;
174         my ($tmp_fh, $tmp_fn) = File::Temp::tempfile( 'rt-approvals-scrips-XXXX', CLEANUP => 0 );
175         unless ( $tmp_fh ) {
176             RT->Logger->error("Couldn't create temporary file.");
177             return 0;
178         }
179
180         RT->Logger->warning(
181             "IMPORTANT: We're going to delete all scrips in Approvals queue"
182             ." and save them in '$tmp_fn' file."
183         );
184
185         require Data::Dumper;
186
187         my $scrips = RT::Scrips->new( RT->SystemUser );
188         $scrips->{'with_disabled_column'} = 0;
189         $scrips->Limit( FIELD => 'Queue', VALUE => $approvals_q->id );
190         while ( my $scrip = $scrips->Next ) {
191             my %tmp =
192                 map { $_ => $scrip->_Value( $_ ) }
193                 qw/id Description ScripCondition ScripAction
194                    CustomIsApplicableCode CustomPrepareCode CustomCommitCode
195                    Stage Queue Template Creator Created LastUpdatedBy LastUpdated/;
196
197             print $tmp_fh Data::Dumper::Dumper( \%tmp );
198
199             my ($status, $msg) = $scrip->DBIx::SearchBuilder::Record::Delete;
200             unless ( $status ) {
201                 RT->Logger->error( "Couldn't delete scrip: $msg");
202             }
203         }
204     },
205 );