diff options
author | Ivan Kohler <ivan@freeside.biz> | 2012-06-07 00:56:06 -0700 |
---|---|---|
committer | Ivan Kohler <ivan@freeside.biz> | 2012-06-07 00:56:06 -0700 |
commit | 43a06151e47d2c59b833cbd8c26d97865ee850b6 (patch) | |
tree | 42c51d94e7fa265461b508d061562be204ccc2c1 /rt/share/html/Ticket/Update.html | |
parent | 6587f6ba7d047ddc1686c080090afe7d53365bd4 (diff) |
starting to work...
Diffstat (limited to 'rt/share/html/Ticket/Update.html')
-rwxr-xr-x | rt/share/html/Ticket/Update.html | 245 |
1 files changed, 138 insertions, 107 deletions
diff --git a/rt/share/html/Ticket/Update.html b/rt/share/html/Ticket/Update.html index 0d4e3b223..64bd531cf 100755 --- a/rt/share/html/Ticket/Update.html +++ b/rt/share/html/Ticket/Update.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC %# <sales@bestpractical.com> %# %# (Except where explicitly superseded by other copyright notices) @@ -45,11 +45,9 @@ %# 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 &> @@ -62,79 +60,24 @@ <& /Elements/GnuPG/SignEncryptWidget:ShowIssues, self => $gnupg_widget &> +<div id="ticket-update-metadata"> + <&|/Widgets/TitleBox, title => loc('Ticket and Transaction') &> <table width="100%" border="0"> % $m->callback(CallbackName => 'AfterTableOpens', ARGSRef => \%ARGS, Ticket => $TicketObj); -<tr><td valign="baseline" class="label"><&|/l&>Status</&>:</td> -<td valign="baseline"> -<script type="text/javascript"> -function changeStatus() { - var Status_select = document.getElementById('Status'); - var x = Status_select.options[Status_select.selectedIndex].value; - var text = document.getElementById('WillResolve_Date'); - var button = document.getElementById('WillResolve_Date_date_button'); - if (x == 'resolved' || x == 'rejected' || x == 'deleted') { - text.disabled = true; - button.style.display = 'none'; - } - else { - text.disabled = false; - button.style.display = 'inline'; - } -} -</script> -<& /Elements/SelectStatus, - Name=>"Status", - DefaultLabel => loc("[_1] (Unchanged)", loc($TicketObj->Status)), - Default => $ARGS{'Status'} - || ($TicketObj->Status eq $DefaultStatus ? undef : $DefaultStatus, - onchange => 'changeStatus()' -)&> -<span class="label"><&|/l&>Resolve this Ticket on</&>:</span> -<& /Elements/SelectDate, - menu_prefix => 'WillResolve', - current => 0, - ShowTime => 0, -&> -% if ( $TicketObj->WillResolve ) { -<span class="label"> (<% $TicketObj->WillResolveObj->AsString %>)</span> -% } -<script type="text/javascript"> -changeStatus(); -</script> -</td> -<td rowspan=4 valign="top"> -<table style="float:right;"> -<tr> -<td class="label"><&|/l&>Worked</&>:</td> -<td><& /Elements/EditTimeValue, - Name => 'UpdateTimeWorked', - Default => $ARGS{UpdateTimeWorked}||'', - InUnits => $ARGS{'UpdateTimeWorked-TimeUnits'}||'minutes', -&> -</td></tr> <& /Ticket/Elements/EditTransactionCustomFields, %ARGS, TicketObj => $TicketObj, UILocation => 'TimeWorked', &> -</table></td></tr> + % my $skip; % $m->callback( %ARGS, CallbackName => 'BeforeUpdateType', skip => \$skip ); % if (!$skip) { <input type="hidden" class="hidden" name="id" value="<%$TicketObj->Id%>" /><br /> % } -<tr><td class="label"><&|/l&>Owner</&>:</td> -<td><& /Elements/SelectOwner, - Name => "Owner", - TicketObj => $TicketObj, - QueueObj => $TicketObj->QueueObj, - DefaultLabel => loc("[_1] (Unchanged)", $m->scomp('/Elements/ShowUser', User => $TicketObj->OwnerObj)), - Default => $ARGS{'Owner'} -&></td> -</tr> <tr><td class="label"><&|/l&>Update Type</&>:</td> -<td><select name="UpdateType"> +<td><select name="UpdateType" id="UpdateType"> % if ($CanComment) { <option value="private" <% ($ARGS{'UpdateType'} && $ARGS{'UpdateType'} eq "private") ? qq[ selected="selected"] : !$ARGS{'UpdateType'}&&$CommentDefault |n %>><&|/l&>Comments (Not sent to requestors)</&></option> % } @@ -142,29 +85,105 @@ changeStatus(); <option value="response" <% ($ARGS{'UpdateType'} && $ARGS{'UpdateType'} eq "response") ? qq[ selected="selected"] : !$ARGS{'UpdateType'}&&$ResponseDefault |n %>><&|/l&>Reply to requestors</&></option> % } </select> + +<script type="text/javascript"> + jQuery(function() { + jQuery("#UpdateType").change(function(ev) { + jQuery(".messagebox-container") + .removeClass("action-response action-private") + .addClass("action-"+ev.target.value); + }); + }); + jQuery(function() { + jQuery("input[name=TxnSendMailTo]").change(function(ev) { + jQuery("input[name=TxnSendMailTo][value="+ev.target.value+"]") + .attr("checked",jQuery(ev.target).attr('checked')); + }); + }); +</script> + % $m->callback( %ARGS, CallbackName => 'AfterUpdateType' ); </td></tr> -<tr><td class="label"><&|/l&>Subject</&>:</td><td> <input name="UpdateSubject" size="60" value="<% $ARGS{UpdateSubject} || $TicketObj->Subject()%>" /> -% $m->callback( %ARGS, CallbackName => 'AfterSubject' ); -</td></tr> -<& /Ticket/Elements/UpdateCc, %ARGS, TicketObj => $TicketObj &> +<script type="text/javascript"> +function changeStatus() { + var Status_select = document.getElementById('Status'); + var x = Status_select.options[Status_select.selectedIndex].value; + var text = document.getElementById('WillResolve_Date'); + var button = document.getElementById('WillResolve_Date_date_button'); + if (x == 'resolved' || x == 'rejected' || x == 'deleted') { + text.disabled = true; + button.style.display = 'none'; + } + else { + text.disabled = false; + button.style.display = 'inline'; + } +} +</script> -<& /Ticket/Elements/EditTransactionCustomFields, %ARGS, TicketObj => $TicketObj &> +<& /Ticket/Elements/EditBasics, + TicketObj => $TicketObj, + InTable => 1, + fields => [ + { name => 'Status', + comp => '/Elements/SelectStatus', + args => { + Name => 'Status', + DefaultLabel => loc("[_1] (Unchanged)", loc($TicketObj->Status)), + Default => $ARGS{'Status'} || ($TicketObj->Status eq $DefaultStatus ? undef : $DefaultStatus), + TicketObj => $TicketObj, + QueueObj => $TicketObj->QueueObj, + 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)", $m->scomp('/Elements/ShowUser', User => $TicketObj->OwnerObj)), + Default => $ARGS{'Owner'} + } + }, + { name => 'Worked', + comp => '/Elements/EditTimeValue', + args => { + Name => 'UpdateTimeWorked', + Default => $ARGS{UpdateTimeWorked}||'', + InUnits => $ARGS{'UpdateTimeWorked-TimeUnits'}||'minutes', + } + }, + ] +&> -% if (exists $session{'Attachments'}) { -<tr><td><&|/l&>Attached file</&>:</td> -<td> -<&|/l&>Check box to delete</&><br /> -% foreach my $attach_name (keys %{$session{'Attachments'}}) { -<input type="checkbox" class="checkbox" name="DeleteAttach-<%$attach_name%>" value="1" /><%$attach_name%><br /> -% } # end of foreach -</td> -</tr> -% } # end of if +<script type="text/javascript"> +changeStatus(); +</script> -<tr><td class="label"><&|/l&>Attach</&>:</td><td><input name="Attach" type="file" /><input type="submit" class="button" name="AddMoreAttach" value="<&|/l&>Add More Files</&>" /><input type="hidden" class="hidden" name="UpdateAttach" value="1" /> -</td></tr> +% $m->callback( %ARGS, CallbackName => 'AfterWorked', Ticket => $TicketObj ); + +<& /Ticket/Elements/EditTransactionCustomFields, %ARGS, TicketObj => $TicketObj, AsTable => 1 &> + + <!--</table>--> + </&> +</div> + +<div id="ticket-update-message"> + <& /Ticket/Elements/ShowSimplifiedRecipients, TicketObj => $TicketObj, %ARGS &> + + <&|/Widgets/TitleBox, title => loc('Message'), class => 'messagedetails' &> + <table width="100%" border="0"> +<& /Ticket/Elements/UpdateCc, %ARGS, TicketObj => $TicketObj &> % if ( $gnupg_widget ) { <tr><td> </td><td> @@ -176,7 +195,13 @@ changeStatus(); % } % $m->callback( %ARGS, CallbackName => 'AfterGnuPG' ); -<tr><td class="label" valign="top"><&|/l&>Message</&>:</td><td colspan=2> +<tr><td class="label"><&|/l&>Subject</&>:</td><td> <input type="text" name="UpdateSubject" value="<% $ARGS{UpdateSubject} || $TicketObj->Subject || '' %>" /> +% $m->callback( %ARGS, CallbackName => 'AfterSubject' ); +</td></tr> + +<tr><td class="label" valign="top"><&|/l&>Message</&>:</td> +<td class="messagebox-container action-<% $type %>"> +<& /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 @@ -189,25 +214,32 @@ changeStatus(); % $IncludeSignature = 0 if $Action ne 'Respond' && !RT->Config->Get('MessageBoxIncludeSignatureOnComment'); <& /Elements/MessageBox, Name=>"UpdateContent", IncludeSignature => $IncludeSignature, %ARGS &> % } +% $m->callback( %ARGS, CallbackName => 'AfterMessageBox' ); </td></tr> -</table> - + <& /Ticket/Elements/AddAttachments, %ARGS, TicketObj => $TicketObj &> + </table> +</&> + <& /Elements/Submit, Label => loc('Update Ticket'), Name => 'SubmitTicket', id => 'SubmitTicket' &> -<& /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 &> + </&> +% } +</div> +% if (my $recips = $m->notes("DryRun-Recipients-".$TicketObj->Id)) { +<input type="hidden" name="TxnRecipients" value="<% join ",",sort keys %{$recips} %>" /> % } + </form> +<hr class="clear" /> <%INIT> my $CanRespond = 0; my $CanComment = 0; my $checks_failure = 0; -my $title; my $TicketObj = LoadTicket($id); @@ -219,17 +251,7 @@ unless($DefaultStatus){ $DefaultStatus=($ARGS{'Status'} ||$TicketObj->Status()); } -unless (RT->Config->Get('SuppressAutoOpenOnUpdate', $session{'CurrentUser'})) { - 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: @@ -243,6 +265,10 @@ if ($Action ne 'Respond') { $ResponseDefault = qq[ selected="selected"]; } +my $type = $ARGS{'UpdateType'} ? $ARGS{'UpdateType'} : + lc $ARGS{'Action'} eq 'respond' ? 'response' : + lc $ARGS{'Action'} eq 'comment' ? 'private' : + 'none' ; $CanRespond = 1 if ( $TicketObj->CurrentUserHasRight('ReplyToTicket') or @@ -252,17 +278,16 @@ $CanComment = 1 if ( $TicketObj->CurrentUserHasRight('CommentOnTicket') or $TicketObj->CurrentUserHasRight('ModifyTicket') ); -# {{{ deal with deleting uploaded attachments +# 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? +# store the uploaded attachment in session +if ( defined $ARGS{'Attach'} && length $ARGS{'Attach'} ) { # attachment? my $attachment = MakeMIMEEntity( AttachmentFieldName => 'Attach' ); @@ -273,13 +298,11 @@ if ($ARGS{'Attach'}) { # attachment? $file_path => $attachment, }; } -# }}} # 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', @@ -288,6 +311,14 @@ $m->comp( '/Elements/GnuPG/SignEncryptWidget:Process', ); if ( $ARGS{'SubmitTicket'} ) { + + my %checked = map {$_ => 1} grep {defined} + (ref $ARGS{'TxnSendMailTo'} eq "ARRAY" ? @{$ARGS{'TxnSendMailTo'}} + : defined $ARGS{'TxnSendMailTo'} ? ($ARGS{'TxnSendMailTo'}) : ()); + + my @squelchlist = grep {not $checked{$_}} split /,/, ($ARGS{'TxnRecipients'}||''); + $ARGS{'SquelchMailTo'} = \@squelchlist if @squelchlist; + my $CFs = $TicketObj->TransactionCustomFields; my $ValidCFs = $m->comp( '/Elements/ValidateCustomFields', |