%#
%# COPYRIGHT:
%#
-%# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC
%# <sales@bestpractical.com>
%#
%# (Except where explicitly superseded by other copyright notices)
%# those contributions and any derivatives thereof.
%#
%# END BPS TAGGED BLOCK }}}
-<table>
- <tr>
- <td class="label"><&|/l&>Subject</&>:</td>
- <td class="value"><input name="Subject" value="<%$TicketObj->Subject|h%>" size="50" /></td>
- </tr>
-
- <tr>
- <td class="label"><&|/l&>Status</&>:</td>
- <td class="value"><%$SelectStatus|n%></td>
- </tr>
- <tr>
- <td class="label"><&|/l&>Queue</&>:</td>
- <td class="value"><%$SelectQueue|n%></td>
- </tr>
- <tr>
- <td class="label"><&|/l&>Owner</&>:</td>
- <td class="value"><& /Elements/SelectOwner,
- Name => 'Owner',
- QueueObj => $TicketObj->QueueObj,
- TicketObj => $TicketObj,
- Default => $TicketObj->OwnerObj->Id,
- DefaultValue => 0,
- &></td>
- </tr>
-
- <tr>
- <td class="label"><&|/l&>Time Estimated</&>:</td>
- <td class="value">
- <& /Elements/EditTimeValue,
- Name => 'TimeEstimated',
- Default => $TicketObj->TimeEstimated,
- &>
- </td>
- </tr>
- <tr>
- <td class="label"><&|/l&>Time Worked</&>:</td>
- <td class="value">
- <& /Elements/EditTimeValue,
- Name => 'TimeWorked',
- Default => $TicketObj->TimeWorked,
- &>
- </td>
- </tr>
- <tr>
- <td class="label"><&|/l&>Time Left</&>:</td>
- <td class="value">
- <& /Elements/EditTimeValue,
- Name => 'TimeLeft',
- Default => $TicketObj->TimeLeft,
- &>
- </td>
- </tr>
-
- <tr>
- <td class="label"><&|/l&>Priority</&>:</td>
- <td class="value"><& /Elements/SelectPriority,
- Default => $TicketObj->Priority,
- &></td>
- </tr>
-
- <tr>
- <td class="label"><&|/l&>Final Priority</&>:</td>
- <td class="value"><& /Elements/SelectPriority,
- Name => "FinalPriority",
- Default => $TicketObj->FinalPriority,
- &></td>
- </tr>
-
-
-
-% $m->callback( CallbackName => 'EndOfList', TicketObj => $TicketObj, %ARGS );
-</table>
-
+<%ARGS>
+$TicketObj => undef
+@fields => ()
+$InTable => 0
+%defaults => ()
+</%ARGS>
<%INIT>
-#It's hard to do this inline, so we'll preload the html of the selectstatus in here.
-my $SelectStatus = $m->scomp("/Elements/SelectStatus", Name => 'Status', DefaultLabel => loc("[_1] (Unchanged)",loc($TicketObj->Status)));
-my $SelectQueue = $m->scomp("/Elements/SelectQueue", Name => 'Queue', Default =>$TicketObj->QueueObj->Id, ShowNullOption => 0);
+my $WillResolveObj = $TicketObj->WillResolveObj if defined $TicketObj;
+unless ( @fields ) {
+ my $subject = $defaults{'Subject'} || $TicketObj->Subject;
+ @fields = (
+ { name => 'Subject',
+ html => '<input name="Subject" value="'.(defined($subject) ? $m->interp->apply_escapes( $subject, 'h' ) : '').'" />',
+ },
+ { name => 'Status',
+ comp => '/Elements/SelectStatus',
+ args => {
+ Name => 'Status',
+ DefaultLabel => loc("[_1] (Unchanged)",loc($TicketObj->Status)),
+ Default => $defaults{'Status'} || undef,
+ TicketObj => $TicketObj,
+ QueueObj => $TicketObj->QueueObj,
+ onchange => 'changeStatus()',
+ },
+ },
+ { name => 'Resolve this Ticket on',
+ comp => '/Elements/SelectDate',
+ args => {
+ menu_prefix => 'WillResolve',
+ Default => $ARGS{'WillResolve'} ||
+ (defined($WillResolveObj)
+ and $WillResolveObj->Unix > 0 ?
+ $WillResolveObj->Date : ''),
+ current => 0,
+ ShowTime => 0,
+ },
+ },
+ { name => 'Queue',
+ comp => '/Elements/SelectQueue',
+ args => {
+ Name => 'Queue',
+ Default => $defaults{'Queue'} || $TicketObj->QueueObj->Id,
+ ShowNullOption => 0,
+ }
+ },
+ { name => 'Owner',
+ comp => '/Elements/SelectOwner',
+ args => {
+ Name => 'Owner',
+ QueueObj => $TicketObj->QueueObj,
+ TicketObj => $TicketObj,
+ Default => $defaults{'Owner'} || $TicketObj->OwnerObj->Id,
+ DefaultValue => 0,
+ }
+ },
+ # Time Estimated, Worked, and Left
+ (
+ map {
+ (my $field = $_) =~ s/ //g;
+ {
+ name => $_,
+ comp => '/Elements/EditTimeValue',
+ args => {
+ Name => $field,
+ Default => $defaults{$field} || $TicketObj->$field,
+ }
+ }
+ } ('Time Estimated', 'Time Worked', 'Time Left')
+ ),
+ # Priority and Final Priority
+ (
+ map {
+ (my $field = $_) =~ s/ //g;
+ {
+ name => $_,
+ comp => '/Elements/SelectPriority',
+ args => {
+ Name => $field,
+ Default => $defaults{$field} || $TicketObj->$field,
+ }
+ }
+ } ('Priority', 'Final Priority')
+ ),
+ );
+}
+$m->callback( CallbackName => 'MassageFields', %ARGS, TicketObj => $TicketObj, Fields => \@fields );
+
+# Process the field list, skipping if html is provided and running the
+# components otherwise
+for my $field (@fields) {
+ next if defined $field->{'html'};
+ if ( $field->{'comp'} ) {
+ $field->{'html'} = $m->scomp($field->{'comp'}, %{$field->{'args'} || {}});
+ }
+}
</%INIT>
-<%ARGS>
-$TicketObj => undef
-</%ARGS>
+% unless ($InTable) {
+<table>
+% }
+% for my $field (@fields) {
+ <tr class="<% lc $field->{'name'} %>">\
+<td class="label"><&|/l&><% $field->{'name'} %></&>:</td>\
+<td class="value"><% $field->{'html'} |n %></td>\
+</tr>
+% }
+% $m->callback( CallbackName => 'EndOfList', TicketObj => $TicketObj, %ARGS, Fields => \@fields );
+% unless ($InTable) {
+</table>
+% }
+<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>