X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=rt%2Fshare%2Fhtml%2FTicket%2FElements%2FReminders;h=a94ff4e5b0d67bf0fcd254aa0f5272a5780f378b;hp=14d61efeb9295bb90913fc185791584473064b0c;hb=187086c479a09629b7d180eec513fb7657f4e291;hpb=b4b0c7e72d7eaee2fbfc7022022c9698323203dd diff --git a/rt/share/html/Ticket/Elements/Reminders b/rt/share/html/Ticket/Elements/Reminders index 14d61efeb..a94ff4e5b 100644 --- a/rt/share/html/Ticket/Elements/Reminders +++ b/rt/share/html/Ticket/Elements/Reminders @@ -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-2018 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,107 +43,103 @@ %# 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 }}} <%args> $Ticket => undef $id => undef $ShowCompleted => 0 $Edit => 0 +$ShowSave => 1 <%init> $Ticket = LoadTicket($id) if ($id); +my $resolve_status = $Ticket->LifecycleObj->ReminderStatusOnResolve; -my $request_args = $m->request_args(); - -my $reminder_collection = $Ticket->Reminders->Collection; - -if ( $request_args->{'update-reminders'} ) { - while ( my $reminder = $reminder_collection->Next ) { - if ( $reminder->Status ne 'resolved' && $request_args->{ 'Complete-Reminder-' . $reminder->id } ) { - $Ticket->Reminders->Resolve($reminder); - } - elsif ( $reminder->Status eq 'resolved' && !$request_args->{ 'Complete-Reminder-' . $reminder->id } ) { - $Ticket->Reminders->Open($reminder); - } - - if ( exists( $request_args->{ 'Reminder-Subject-' . $reminder->id } ) && ( $reminder->Subject ne $request_args->{ 'Reminder-Subject-' . $reminder->id } )) { - $reminder->SetSubject( $request_args->{ 'Reminder-Subject-' . $reminder->id } ) ; - } - - if ( exists( $request_args->{ 'Reminder-Owner-' . $reminder->id } ) && ( $reminder->Owner != $request_args->{ 'Reminder-Owner-' . $reminder->id } )) { - $reminder->SetOwner( $request_args->{ 'Reminder-Owner-' . $reminder->id } , "Force" ) ; - } - - if ( exists( $request_args->{ 'Reminder-Due-' . $reminder->id } ) && ( $reminder->DueObj->Date ne $request_args->{ 'Reminder-Due-' . $reminder->id } )) { - $reminder->SetDue( $request_args->{ 'Reminder-Due-' . $reminder->id } ) ; - } - } -} - -if ( $request_args->{'NewReminder-Subject'} ) { - my $due_obj = RT::Date->new( $session{'CurrentUser'} ); - my $date = Time::ParseDate::parsedate( - $request_args->{'NewReminder-Due'}, - UK => RT->Config->Get('DateDayBeforeMonth'), - PREFER_PAST => 0, - PREFER_FUTURE => 1 - ); - $due_obj->Set( Value => $date, Format => 'unix' ); - my ( $add_id, $msg, $txnid ) = $Ticket->Reminders->Add( - - Subject => $request_args->{'NewReminder-Subject'}, - Owner => $request_args->{'NewReminder-Owner'}, - Due => $due_obj->ISO - ); +my $count_reminders = RT::Reminders->new($session{'CurrentUser'}); +$count_reminders->Ticket($Ticket->id); +my $count_tickets = $count_reminders->Collection; +if (!$ShowCompleted) { + # XXX: don't break encapsulation if we can avoid it + $count_tickets->FromSQL(q{Type = "reminder" AND RefersTo = "} . $Ticket->id . qq{" AND Status != "$resolve_status" }); } +my $has_reminders = $count_tickets->Count; # We've made changes, let's reload our search - -$reminder_collection = $Ticket->Reminders->Collection; +my $reminder_collection = $count_reminders->Collection; -
-% while (my $reminder = $reminder_collection->Next) { -% if ($reminder->Status eq 'resolved' && !$ShowCompleted) { - -% } elsif ($Edit) { -<& SELF:EditEntry, Reminder => $reminder, Ticket => $Ticket &> +% my $editable = 0; +% if ($has_reminders) { +> + +% if ( $Edit ) { + +% } else { + + + + +% } + +% my $i = 0; +% while ( my $reminder = $reminder_collection->Next ) { +% $i++; +% if ( $reminder->Status eq $resolve_status && !$ShowCompleted ) { + +% $i++; +% } +% else { +% $editable = 1 if !$editable && $reminder->CurrentUserHasRight( 'ModifyTicket' ); +% if ($Edit) { +<& SELF:EditEntry, Reminder => $reminder, Ticket => $Ticket, Index => $i &> % } else { -<& SELF:ShowEntry, Reminder => $reminder, Ticket => $Ticket &> +<& SELF:ShowEntry, Reminder => $reminder, Ticket => $Ticket, Index => $i &> % } % } -% if ($reminder_collection->Count) { -<&|/l&>(Check box to delete)

% } - -
+
<&|/l&>Reminders<&|/l&>Reminder<&|/l&>Due<&|/l&>Owner
+% if ( $editable ) { +<&|/l&>(Check box to complete)

+% } +% } else { + +%# we must always include resolved reminders due to the browser +%# checkbox-with-false-value issue +% while ( my $reminder = $reminder_collection->Next ) { +% if ( $reminder->Status eq $resolve_status && !$ShowCompleted ) { + +% } +% } +% } + +% if (lc $Ticket->Status ne "deleted" and $Ticket->QueueObj->CurrentUserHasRight('CreateTicket') and $Ticket->CurrentUserHasRight('ModifyTicket') ) { <&|/l&>New reminder: <& SELF:NewReminder, Ticket => $Ticket &> +% $editable = 1; +% } + +% if ( $editable && $ShowSave ) { +
+% } <%method NewReminder> <%args> $Ticket - - - + + + - - + + + - - - + + +
- -
<&|/l&>Subject:
- -<& /Elements/SelectOwner, Name => 'NewReminder-Owner', QueueObj => $Ticket->QueueObj, Default=>$session{'CurrentUser'}->id, DefaultValue => 0 &> -
<&|/l&>Owner:<& /Elements/SelectOwner, Name => 'NewReminder-Owner', QueueObj => $Ticket->QueueObj, Default=>$session{'CurrentUser'}->id, DefaultValue => 0 &>
-<& /Elements/SelectDate, Name => "NewReminder-Due", Default => "" &> -
<&|/l&>Due:<& /Elements/SelectDate, Name => "NewReminder-Due", Default => "" &>
@@ -151,28 +147,64 @@ $Ticket <%args> $Reminder $Ticket +$Index -Status eq 'resolved' ? 'checked="checked"' : '' %> -/> - • - <& /Elements/SelectOwner, Name => 'Reminder-Owner-'.$Reminder->id, Queue => $Ticket->QueueObj, Default => $Reminder->Owner, DefaultValue => 0 &> - <& /Elements/SelectDate, Name => 'Reminder-Due-'.$Reminder->id, Default => $Reminder->DueObj->Date &> - (<%$Reminder->DueObj->Unix>0 ? $Reminder->DueObj->AgeAsString : '' %>)
+ + +% unless ( $Reminder->CurrentUserHasRight('ModifyTicket') ) { +Status eq $Reminder->LifecycleObj->ReminderStatusOnResolve ? 1 : 0 %> /> +% } + +Status eq $Reminder->LifecycleObj->ReminderStatusOnResolve ? 'checked="checked"' : '' |n %> +% unless ( $Reminder->CurrentUserHasRight('ModifyTicket') ) { +disabled="disabled" +% } +/> +<&|/l&>Subject: + +CurrentUserHasRight('ModifyTicket') ) { +readonly="readonly" +% } +/> + + + +  +<&|/l&>Owner: +<& /Elements/SelectOwner, Name => 'Reminder-Owner-'.$Reminder->id, QueueObj => $Ticket->QueueObj, Default => $Reminder->Owner, DefaultValue => 0 &> +<&|/l&>Due: + +% if ( $Reminder->CurrentUserHasRight('ModifyTicket') ) { +<& /Elements/SelectDate, Name => 'Reminder-Due-'.$Reminder->id &> +% } +(<% $Reminder->DueObj->AsString %>) + + <%method ShowEntry> <%args> $Reminder $Ticket +$Index -Status eq 'resolved' ? 'checked="checked"' : '' %> -/> - <%$Reminder->Subject%> • - <%$Reminder->OwnerObj->Name%> - <%$Reminder->DueObj->Unix>0 ? "• ". $Reminder->DueObj->AgeAsString : '' |n%>
+% my $dueobj = $Reminder->DueObj; +% my $overdue = $dueobj->IsSet && $dueobj->Diff < 0 ? 1 : 0; + + + +% unless ( $Reminder->CurrentUserHasRight('ModifyTicket') ) { +Status eq $Reminder->LifecycleObj->ReminderStatusOnResolve ? 1 : 0 %> /> +% } +Status eq $Reminder->LifecycleObj->ReminderStatusOnResolve ? 'checked="checked"' : '' |n %> +% unless ( $Reminder->CurrentUserHasRight('ModifyTicket') ) { +disabled="disabled" +% } +/> + +<% $overdue ? '' : '' |n %><% $dueobj->AgeAsString || loc('Not set') %><% $overdue ? '' : '' |n %> +<& /Elements/ShowUser, User => $Reminder->OwnerObj &> +