X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=rt%2Fshare%2Fhtml%2FTicket%2FUpdate.html;h=f922c23ecf72954e2a8a321a3b232a93b6d203c3;hb=de9d037528895f7151a9aead6724ce2df95f9586;hp=f5cdddea82669303aaa255d74cdeaed777fc40cf;hpb=e70abd21bab68b23488f7ef1ee2e693a3b365691;p=freeside.git diff --git a/rt/share/html/Ticket/Update.html b/rt/share/html/Ticket/Update.html index f5cdddea8..f922c23ec 100755 --- a/rt/share/html/Ticket/Update.html +++ b/rt/share/html/Ticket/Update.html @@ -1,40 +1,40 @@ %# BEGIN BPS TAGGED BLOCK {{{ -%# +%# %# COPYRIGHT: -%# -%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC -%# -%# +%# +%# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC +%# +%# %# (Except where explicitly superseded by other copyright notices) -%# -%# +%# +%# %# LICENSE: -%# +%# %# 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. -%# +%# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA %# 02110-1301 or visit their web page on the internet at %# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. -%# -%# +%# +%# %# CONTRIBUTION SUBMISSION POLICY: -%# +%# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) -%# +%# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that @@ -43,13 +43,11 @@ %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. -%# +%# %# END BPS TAGGED BLOCK }}} -<& /Elements/Header, Title => $title &> -<& /Ticket/Elements/Tabs, - Ticket => $TicketObj, - Title=> $title &> - +<& /Elements/Header, Title => $title &> +<& /Elements/Tabs &> + % $m->callback(CallbackName => 'BeforeActionList', ARGSRef => \%ARGS, Ticket => $TicketObj); <& /Elements/ListActions, actions => \@results &> @@ -58,38 +56,29 @@ % $m->callback( CallbackName => 'FormStart', ARGSRef => \%ARGS, Ticket => $TicketObj, CanRespond => $CanRespond, CanComment => $CanComment, ResponseDefault => $ResponseDefault, CommentDefault => $CommentDefault ); - + + -<& /Elements/GnuPG/SignEncryptWidget:ShowIssues, self => $gnupg_widget &> +<& /Elements/Crypt/SignEncryptWidget:ShowIssues, self => $gnupg_widget &> +
+ <&|/Widgets/TitleBox, title => loc('Ticket and Transaction') &> % $m->callback(CallbackName => 'AfterTableOpens', ARGSRef => \%ARGS, Ticket => $TicketObj); - - + % my $skip; % $m->callback( %ARGS, CallbackName => 'BeforeUpdateType', skip => \$skip ); % if (!$skip) {
% } - - -<& /Ticket/Elements/UpdateCc, %ARGS, TicketObj => $TicketObj &> + -<& /Ticket/Elements/EditTransactionCustomFields, %ARGS, TicketObj => $TicketObj &> +<& /Ticket/Elements/EditBasics, + TicketObj => $TicketObj, + InTable => 1, + fields => [ + { name => 'Status', + comp => '/Ticket/Elements/SelectStatus', + args => { + Name => 'Status', + Default => $DefaultStatus, + TicketObj => $TicketObj, + onchange => 'changeStatus()' + }, + }, + { name => 'Resolve this Ticket on', + comp => '/Elements/SelectDate', + args => { + menu_prefix => 'WillResolve', + current => 0, + ShowTime => 0, + }, + }, + { name => 'Owner', + comp => '/Elements/SelectOwner', + args => { + Name => "Owner", + TicketObj => $TicketObj, + QueueObj => $TicketObj->QueueObj, + DefaultLabel => loc("[_1] (Unchanged)", $TicketObj->OwnerObj->Format), + Default => $ARGS{'Owner'} + } + }, + { name => 'Worked', + comp => '/Elements/EditTimeValue', + args => { + Name => 'UpdateTimeWorked', + Default => $ARGS{UpdateTimeWorked}||'', + } + }, + ] +&> -% if (exists $session{'Attachments'}) { - - - -% } # end of if + - +% $m->callback( %ARGS, CallbackName => 'AfterWorked', Ticket => $TicketObj ); + +<& /Ticket/Elements/EditTransactionCustomFields, %ARGS, TicketObj => $TicketObj, InTable => 1, KeepValue => 1, &> + +
<&|/l&>Status: -<& /Elements/SelectStatus, Name=>"Status", DefaultLabel => loc("[_1] (Unchanged)", loc($TicketObj->Status)), Default => $ARGS{'Status'} || ($TicketObj->Status eq $DefaultStatus ? undef : $DefaultStatus)&> -<&|/l&>Owner: -<& /Elements/SelectOwner, - Name => "Owner", - TicketObj => $TicketObj, - QueueObj => $TicketObj->QueueObj, - DefaultLabel => loc("[_1] (Unchanged)", $TicketObj->OwnerObj->Name), - Default => $ARGS{'Owner'} -&> -<&|/l&>Worked: -<& /Elements/EditTimeValue, - Name => 'UpdateTimeWorked', - Default => $ARGS{UpdateTimeWorked}||'', - InUnits => $ARGS{'UpdateTimeWorked-TimeUnits'}||'minutes', +<& /Ticket/Elements/EditTransactionCustomFields, + %ARGS, + TicketObj => $TicketObj, + UILocation => 'TimeWorked', &> -
<&|/l&>Update Type: + + + % $m->callback( %ARGS, CallbackName => 'AfterUpdateType' );
<&|/l&>Subject: -% $m->callback( %ARGS, CallbackName => 'AfterSubject' ); -
<&|/l&>Attached file: -<&|/l&>Check box to delete
-% foreach my $attach_name (keys %{$session{'Attachments'}}) { -<%$attach_name%>
-% } # end of foreach -
<&|/l&>Attach: -
+ + +% $m->callback( %ARGS, CallbackName => 'RightColumnBottom', Ticket => $TicketObj ); + +
+ +
+ <& /Ticket/Elements/ShowSimplifiedRecipients, TicketObj => $TicketObj, %ARGS &> + + <&|/Widgets/TitleBox, title => loc('Message'), class => 'messagedetails' &> + +<& /Ticket/Elements/UpdateCc, %ARGS, TicketObj => $TicketObj &> % if ( $gnupg_widget ) { + + + -
  -<& /Elements/GnuPG/SignEncryptWidget, +<& /Elements/Crypt/SignEncryptWidget, self => $gnupg_widget, TicketObj => $TicketObj, &> @@ -131,7 +188,13 @@ % } % $m->callback( %ARGS, CallbackName => 'AfterGnuPG' ); -
<&|/l&>Message: +
<&|/l&>Subject: +% $m->callback( %ARGS, CallbackName => 'AfterSubject' ); +
<&|/l&>Message: +<& /Articles/Elements/BeforeMessageBox, %ARGS &> % $m->callback( %ARGS, CallbackName => 'BeforeMessageBox' ); % if (exists $ARGS{UpdateContent}) { % # preserve QuoteTransaction so we can use it to set up sane references/in/reply to @@ -144,45 +207,54 @@ % $IncludeSignature = 0 if $Action ne 'Respond' && !RT->Config->Get('MessageBoxIncludeSignatureOnComment'); <& /Elements/MessageBox, Name=>"UpdateContent", IncludeSignature => $IncludeSignature, %ARGS &> % } +% $m->callback( %ARGS, CallbackName => 'AfterMessageBox' );
+ <& /Ticket/Elements/AddAttachments, %ARGS, TicketObj => $TicketObj &> + + + +% $m->callback( %ARGS, CallbackName => 'BeforeSubmit', Ticket => $TicketObj ); + <& /Elements/Submit, Label => loc('Update Ticket'), Name => 'SubmitTicket', id => 'SubmitTicket' &> +% $m->callback( %ARGS, CallbackName => 'BeforeScrips', Ticket => $TicketObj ); -<& /Elements/Submit, Label => loc('Update Ticket'), Name => 'SubmitTicket' &> % if ($TicketObj->CurrentUserHasRight('ShowOutgoingEmail')) { -<&|/Widgets/TitleBox, title => loc('Scrips and Recipients') &> -<& /Ticket/Elements/PreviewScrips, TicketObj => $TicketObj, %ARGS &> - + <&|/Widgets/TitleBox, title => loc('Scrips and Recipients'), id => 'previewscrips', rolledup => RT->Config->Get('SimplifiedRecipients', $session{'CurrentUser'}) &> + <& /Ticket/Elements/PreviewScrips, TicketObj => $TicketObj, %ARGS &> + +% } +
+ +% $m->callback( %ARGS, CallbackName => 'AfterScrips', Ticket => $TicketObj ); +% if (my $recips = $m->notes("DryRun-Recipients-".$TicketObj->Id)) { +" /> % } + +
+ +% $m->callback( %ARGS, CallbackName => 'AfterForm', Ticket => $TicketObj ); + <%INIT> my $CanRespond = 0; my $CanComment = 0; my $checks_failure = 0; -my $title; my $TicketObj = LoadTicket($id); my @results; -$m->callback( Ticket => $TicketObj, ARGSRef => \%ARGS, results => \@results, CallbackName => 'Initial' ); +$m->callback( Ticket => $TicketObj, ARGSRef => \%ARGS, checks_failure => \$checks_failure, results => \@results, CallbackName => 'Initial' ); +$m->scomp( '/Articles/Elements/SubjectOverride', Ticket => $TicketObj, ARGSRef => \%ARGS, results => \@results ); unless($DefaultStatus){ $DefaultStatus=($ARGS{'Status'} ||$TicketObj->Status()); } -if ($DefaultStatus eq 'new'){ - $DefaultStatus='open'; -} - -if ($DefaultStatus eq 'resolved') { - $title = loc("Resolve ticket #[_1] ([_2])", $TicketObj->id, $TicketObj->Subject); -} else { - $title = loc("Update ticket #[_1] ([_2])", $TicketObj->id, $TicketObj->Subject); -} +my $title = loc("Update ticket #[_1] ([_2])", $TicketObj->id, $TicketObj->Subject||''); # Things needed in the template - we'll do the processing here, just # for the convenience: @@ -196,6 +268,10 @@ if ($Action ne 'Respond') { $ResponseDefault = qq[ selected="selected"]; } +my $type = $ARGS{'UpdateType'} ? $ARGS{'UpdateType'} : + lc $Action eq 'respond' ? 'response' : + lc $Action eq 'comment' ? 'private' : + 'none' ; $CanRespond = 1 if ( $TicketObj->CurrentUserHasRight('ReplyToTicket') or @@ -204,58 +280,30 @@ $CanRespond = 1 if ( $TicketObj->CurrentUserHasRight('ReplyToTicket') or $CanComment = 1 if ( $TicketObj->CurrentUserHasRight('CommentOnTicket') or $TicketObj->CurrentUserHasRight('ModifyTicket') ); +ProcessAttachments(ARGSRef => \%ARGS); -# {{{ deal with deleting uploaded attachments -foreach my $key (keys %ARGS) { - if ($key =~ m/^DeleteAttach-(.+)$/) { - delete $session{'Attachments'}{$1}; - } - $session{'Attachments'} = { %{$session{'Attachments'} || {}} }; -} -# }}} - -# {{{ store the uploaded attachment in session -if ($ARGS{'Attach'}) { # attachment? - my $attachment = MakeMIMEEntity( - AttachmentFieldName => 'Attach' - ); - - my $file_path = Encode::decode_utf8("$ARGS{'Attach'}"); - $session{'Attachments'} = { - %{$session{'Attachments'} || {}}, - $file_path => $attachment, - }; -} -# }}} +my %squelched = ProcessTransactionSquelching( \%ARGS ); +$ARGS{'SquelchMailTo'} = [keys %squelched] if keys %squelched; -# delete temporary storage entry to make WebUI clean -unless (keys %{$session{'Attachments'}} and $ARGS{'UpdateAttach'}) { - delete $session{'Attachments'}; -} -# }}} - -my $gnupg_widget = $m->comp('/Elements/GnuPG/SignEncryptWidget:new', Arguments => \%ARGS ); -$m->comp( '/Elements/GnuPG/SignEncryptWidget:Process', +my $gnupg_widget = $m->comp('/Elements/Crypt/SignEncryptWidget:new', Arguments => \%ARGS ); +$m->comp( '/Elements/Crypt/SignEncryptWidget:Process', self => $gnupg_widget, TicketObj => $TicketObj, ); if ( $ARGS{'SubmitTicket'} ) { - my $CFs = $TicketObj->TransactionCustomFields; - my $ValidCFs = $m->comp( + + my ($status, @msg) = $m->comp( '/Elements/ValidateCustomFields', - CustomFields => $CFs, - NamePrefix => "Object-RT::Transaction--CustomField-", + CustomFields => $TicketObj->TransactionCustomFields, + Object => RT::Transaction->new( $session{'CurrentUser'} ), ARGSRef => \%ARGS ); - unless ( $ValidCFs ) { + unless ( $status ) { + push @results, @msg; $checks_failure = 1; - while (my $CF = $CFs->Next) { - my $msg = $m->notes('InvalidField-' . $CF->Id) or next; - push @results, loc($CF->Name) . ': ' . $msg; - } } - my $status = $m->comp('/Elements/GnuPG/SignEncryptWidget:Check', + $status = $m->comp('/Elements/Crypt/SignEncryptWidget:Check', self => $gnupg_widget, TicketObj => $TicketObj, ); @@ -278,7 +326,13 @@ if ( $ARGS{'SubmitTicket'} ) { } } -if ( !$checks_failure && exists $ARGS{SubmitTicket} ) { +# $skip_update is provided below by reference to allow a final check to stop +# the update and print a message for the user to fix something. +my $skip_update = 0; +$m->callback( CallbackName => 'BeforeUpdate', ARGSRef => \%ARGS, skip_update => \$skip_update, + checks_failure => $checks_failure, results => \@results, TicketObj => $TicketObj ); + +if ( !$checks_failure && !$skip_update && exists $ARGS{SubmitTicket} ) { $m->callback( Ticket => $TicketObj, ARGSRef => \%ARGS, CallbackName => 'BeforeDisplay' ); return $m->comp('Display.html', TicketObj => $TicketObj, %ARGS); } @@ -286,6 +340,6 @@ if ( !$checks_failure && exists $ARGS{SubmitTicket} ) { <%ARGS> $id => undef -$Action => undef +$Action => '' $DefaultStatus => undef