Upgrade to 4.0.13
[usit-rt.git] / share / html / SelfService / Display.html
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<& /SelfService/Elements/Header, Title => loc('#[_1]: [_2]', $Ticket->id, $Ticket->Subject) &>
49
50% $m->callback(CallbackName => 'BeforeActionList', %ARGS, Actions => \@results, ARGSRef => \%ARGS, Ticket => $Ticket );
51
52<& /Elements/ListActions, actions => \@results &>
53
54 <table width="100%" class="ticketsummary" >
55 <tr>
56 <td valign="top" width="50%" class="boxcontainer">
57 <&| /Widgets/TitleBox, title => loc('The Basics'),
58 ($LinkBasicsTitle ? (title_href => $title_box_link) : ()),
59 title_class=> 'inverse',
60 color => "#993333" &>
61 <& /Ticket/Elements/ShowBasics, Ticket => $Ticket &>
62 <& /Ticket/Elements/ShowCustomFields, Ticket => $Ticket &>
63 </&>
64</td>
65 <td valign="top" width="50%" class="boxcontainer">
66 <&| /Widgets/TitleBox, title => loc("Dates"),
67 title_class=> 'inverse',
68 color => "#663366" &>
69 <& /Ticket/Elements/ShowDates, Ticket => $Ticket, UpdatedLink => 0 &>
70 </&>
71</td>
72</tr>
73</table>
74
75
76
77<& /Ticket/Elements/ShowHistory,
78 Ticket => $Ticket,
79 URIFile => "Display.html",
80 ShowHeaders => $ARGS{'ShowHeaders'},
81 DownloadableHeaders => 0,
82 AttachPath => "Attachment",
83 Attachments => $attachments,
84 UpdatePath => "Update.html"
85&>
86
87
88
89<%INIT>
90
91my ( $field, @results );
92
93$m->callback( ARGSRef => \%ARGS, CallbackName => 'Initial' );
94
95# Load the ticket
96#If we get handed two ids, mason will make them an array. bleck.
97# We want teh first one. Just because there's no other sensible way
98# to deal
99my @id = ( ref $id eq 'ARRAY' ) ? @{$id} : ($id);
100
101my $Ticket = RT::Ticket->new( $session{'CurrentUser'} );
102
84fb5b46
MKG
103if ( defined ($id[0]) && $id[0] eq 'new' ) {
104
105 # {{{ Create a new ticket
106
107 my $Queue = RT::Queue->new( $session{'CurrentUser'} );
108 unless ( $Queue->Load( $ARGS{'Queue'} ) ) {
109 $m->comp( 'Error.html', Why => loc('Queue not found') );
110 $m->abort;
111 }
112
113 unless ( $Queue->CurrentUserHasRight('CreateTicket') ) {
114 $m->comp( 'Error.html',
115 Why =>
116 loc('You have no permission to create tickets in that queue.') );
117 $m->abort;
118 }
119
120
121 ( $Ticket, @results ) =
5b0d0914 122 CreateTicket( Attachments => delete $session{'Attachments'}, %ARGS );
84fb5b46
MKG
123
124 unless ( $Ticket->id ) {
125 $m->comp( 'Error.html', Why => join( "\n", @results ));
126 $m->abort();
127 }
84fb5b46
MKG
128 }
129 else {
130 unless ( $Ticket->Load( $id[0] ) ) {
131 $m->comp( 'Error.html',
132 Why => loc( "Couldn't load ticket '[_1]'", $id ) );
133 $m->abort();
134 }
135
136 my ( $code, $msg );
137
138
139 if (
140 $session{'Attachments'}
141 || ( defined $ARGS{'UpdateContent'}
142 && $ARGS{'UpdateContent'} ne ''
143 && $ARGS{'UpdateContent'} ne "-- \n"
144 . $session{'CurrentUser'}->UserObj->Signature )
145 )
146 {
147 $ARGS{UpdateAttachments} = $session{'Attachments'};
148 }
149 push @results, ProcessUpdateMessage(
150 ARGSRef => \%ARGS,
151 TicketObj => $Ticket
152 );
5b0d0914 153 delete $session{'Attachments'};
84fb5b46
MKG
154
155 my @cfupdates = ProcessObjectCustomFieldUpdates(Object => $Ticket, ARGSRef => \%ARGS);
156 push (@results, @cfupdates);
157
158
159 #Update the status
160 if ( ( defined $ARGS{'Status'} )
161 and $ARGS{'Status'}
162 and ( $ARGS{'Status'} ne $Ticket->Status ) )
163 {
164 ( $code, $msg ) = $Ticket->SetStatus( $ARGS{'Status'} );
165 push @results, "$msg";
166 }
167
168
169 }
170
171 # This code does automatic redirection if any updates happen.
172
173 unless ( $Ticket->CurrentUserHasRight('ShowTicket') ) {
174 $m->comp( 'Error.html',
175 Why => loc("No permission to display that ticket") );
176 # XXX: Why abort? then we loose footer //ruz
177 $m->abort();
178 }
179
180 if (@results) {
181 # We've done something, so we need to clear the decks to avoid
182 # resubmission on refresh.
183 # But we need to store Actions somewhere too, so we don't lose them.
184 my $key = Digest::MD5::md5_hex(rand(1024));
185 push @{ $session{"Actions"}->{$key} ||= [] }, @results;
186 $session{'i'}++;
187 RT::Interface::Web::Redirect( RT->Config->Get('WebURL') ."SelfService/Display.html?id=". $Ticket->id."&results=".$key);
188 }
189
190 my $Transactions = $Ticket->Transactions;
191
192 my $attachments =
193 $m->comp( '/Ticket/Elements/FindAttachments', Ticket => $Ticket );
194
195 my $LinkBasicsTitle = $Ticket->CurrentUserHasRight('ModifyTicket')
196 || $Ticket->CurrentUserHasRight('ReplyToTicket');
197 my $title_box_link = RT->Config->Get('WebPath')."/SelfService/Update.html?id=".$Ticket->Id;
198 $m->callback(CallbackName => 'BeforeDisplay', Ticket => \$Ticket, ARGSRef => \%ARGS, title_box_link => \$title_box_link);
199</%INIT>
200
201
202<%ARGS>
203$id => undef
204</%ARGS>