%# BEGIN LICENSE BLOCK %# %# Copyright (c) 1996-2003 Jesse Vincent %# %# (Except where explictly superceded by other copyright notices) %# %# 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. %# %# %# Unless otherwise specified, all modifications, corrections or %# extensions to this work which alter its source code become the %# property of Best Practical Solutions, LLC when submitted for %# inclusion in the work. %# %# %# END LICENSE BLOCK <& /RTIR/Elements/Header, Title => $Title &> <& '/RTIR/'.$Type.'/Elements/Tabs', Ticket => $Ticket, current_tab => "RTIR/Edit.html?id=".$Ticket->Id, current_subtab => "RTIR/Edit.html?id=".$Ticket->Id, Title => $Title &> % $m->callback(CallbackName => 'BeforeActionList', Actions => \@results, ARGSRef => \%ARGS, Ticket => $Ticket); <& /Elements/ListActions, actions => \@results &> % if (!$Ticket->CurrentUserHasRight('ModifyTicket')) { <%loc("You are not allowed to edit this [_1].", $name)%> % $m->abort(); % }
<&| /Widgets/TitleBox, title => loc("The Basics"), class => 'ticket-info-basics', width => "100%", &> % if ( $constituency_cf && ($constituency_propagation ne 'reject' || !$has_parent) ) { % }
<%loc("State")%>: % unless ( $Type eq 'Block' ) { <& /RTIR/Elements/ShowRTIRField, Ticket => $Ticket, Name => 'State' &> % } else { <& /RTIR/Block/Elements/EditState, TicketObj => $Ticket, Default => $Ticket->Status &> % }
<&|/l&>Subject:
<&|/l&>Owner: <& /Elements/SelectOwner, Name => 'Owner', Default => $Ticket->Owner, TicketObj => $Ticket, QueueObj => $Ticket->QueueObj, &>
<%loc("Incident")%>: <& /RTIR/Elements/ShowIncidents, Ticket => $Ticket &>
<&|/l&>Time Worked:
<&|/l&>Constituency: <& /RTIR/Elements/EditRTIRField, TicketObj => $Ticket, Name => 'Constituency' &>
<& /Ticket/Elements/EditCustomFields, TicketObj => $Ticket &>
<&| /Widgets/TitleBox, title => loc('Dates'), width => "100%", class => 'ticket-info-dates' &> <& /RTIR/Elements/EditDates, TicketObj => $Ticket &>

<&| /Widgets/TitleBox, title => loc('People'),width => "100%", class => 'ticket-info-people' &> <& /RTIR/Elements/EditPeople, Ticket => $Ticket, UserField => $UserField, UserString => $UserString, UserOp => $UserOp &>
<& /Elements/Submit, Name => 'SaveChanges', Label => loc('Save Changes'), Caption => loc("If you've updated anything above, be sure to"), color => "#333399" &>
<%INIT> my $Ticket = LoadTicket($id); $id = $ARGS{'id'} = $Ticket->Id; $m->callback(CallbackName => 'Initial', %ARGS, Ticket => $Ticket); my $Type = RT::IR::TicketType( Ticket => $Ticket ); return $m->comp( '/Ticket/Display.html', %ARGS ) unless $Type; if( $Type eq 'Block' && RT->Config->Get('RTIR_DisableBlocksQueue') ) { Abort(loc("Blocks queue is disabled via config file")); } if ( $m->comp_exists("/RTIR/$Type/Edit.html") ) { return $m->comp("/RTIR/$Type/Edit.html", %ARGS); } my @results; my $name; if ($Type eq 'Report') { $name = "Incident Report"; } else { $name = $Type; } my ($CanRespond, $CanComment) = ( 0, 0 ); $CanRespond = 1 if ( $Ticket->CurrentUserHasRight('ReplyToTicket') or $Ticket->CurrentUserHasRight('ModifyTicket') ); $CanComment = 1 if ( $Ticket->CurrentUserHasRight('CommentOnTicket') or $Ticket->CurrentUserHasRight('ModifyTicket') ); my $constituency_cf = RT::IR->CustomFields( Constituency => Ticket => $Ticket ); my $constituency_propagation = RT->Config->Get('_RTIR_Constituency_Propagation'); my $has_parent = 0; if ( $constituency_propagation eq 'reject' ) { my $query = "Queue = 'Incidents' AND HasMember = ". $Ticket->id; my $tickets = RT::Tickets->new( $RT::SystemUser ); $tickets->FromSQL( $query ); $tickets->RowsPerPage(1); $has_parent = $tickets->First ? 1 : 0; } if ( $SaveChanges && !$OnlySearchForPeople ) { my $checks_failure = 0; my $oldstate = RT::IR::Ticket::FirstCustomFieldValue( $Ticket, 'State' ); push @results, ProcessTicketWatchers( TicketObj => $Ticket, ARGSRef => \%ARGS ); my $strict_acl = RT->Config->Set( StrictLinkACL => 0 ); push @results, ProcessTicketLinks( TicketObj => $Ticket, ARGSRef => \%ARGS ); RT->Config->Set( StrictLinkACL => $strict_acl ); push @results, ProcessTicketDates( TicketObj => $Ticket, ARGSRef => \%ARGS ); # XXX: edit page has no message box or attachments form $ARGS{UpdateAttachments} = delete $session{'Attachments'}; push @results, ProcessUpdateMessage( TicketObj => $Ticket, ARGSRef=>\%ARGS ); push @results, ProcessTicketBasics( TicketObj => $Ticket, ARGSRef => \%ARGS ); my ($status, @msg) = $m->comp('/Elements/ValidateCustomFields', CustomFields => $Ticket->QueueObj->TicketCustomFields, NamePrefix => "Object-RT::Ticket-$id-CustomField-", ARGSRef => \%ARGS, ); # we don't use messages as later ProcessTicketCustomFieldUpdates do that for us $checks_failure = 1 unless $status; push @results, ProcessTicketCustomFieldUpdates( ARGSRef => \%ARGS ); my $newstate = RT::IR::Ticket::FirstCustomFieldValue( $Ticket, 'State' ); if ($newstate ne $oldstate) { push (@results, loc("State changed from [_1] to [_2]", $oldstate, $newstate)); } if ( !$checks_failure && RT->Config->Get('DisplayAfterEdit', $session{'CurrentUser'}) ) { $m->callback(CallbackName => 'BeforeDisplay', ARGSRef => \%ARGS, Ticket => $Ticket); push @{ $session{'Actions'}{''} ||= [] }, @results; return $m->comp("/RTIR/Display.html", %ARGS, id => $id); } } # If they've gone and moved the ticket to somewhere they can't see, etc... # TODO: display the results, even if we can't display the ticket. unless ($Ticket->CurrentUserHasRight('ShowTicket')) { Abort("No permission to view ticket"); } my $Title = loc("Edit [_1] #[_2]: [_3]", $name, $Ticket->Id, $Ticket->Subject); <%ARGS> $id => undef $SaveChanges => 0 $OnlySearchForPeople => undef $UserField => undef $UserOp => undef $UserString => undef