rt 4.2.13 ticket#13852
[freeside.git] / rt / lib / RT / Reminders.pm
index 42f4e1d..2baab01 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
@@ -90,8 +90,8 @@ sub Collection {
 
     $col->FromSQL($query);
 
-    $col->OrderBy( FIELD => 'Due' );
-    
+    $col->OrderByCols( { FIELD => 'Due' }, { FIELD => 'id' } );
+
     return($col);
 }
 
@@ -122,18 +122,30 @@ sub Add {
         return ( 0, $self->loc( "Failed to load ticket [_1]", $self->Ticket ) );
     }
 
-    if ( $ticket->Status eq 'deleted' ) {
+    if ( lc $ticket->Status eq 'deleted' ) {
         return ( 0, $self->loc("Can't link to a deleted ticket") );
     }
 
+    return ( 0, $self->loc('Permission Denied') )
+      unless $self->CurrentUser->HasRight(
+        Right  => 'CreateTicket',
+        Object => $self->TicketObj->QueueObj,
+      )
+      && $self->CurrentUser->HasRight(
+        Right  => 'ModifyTicket',
+        Object => $self->TicketObj,
+      );
+
     my $reminder = RT::Ticket->new($self->CurrentUser);
-    my ( $status, $msg ) = $reminder->Create(
+    # the 2nd return value is txn id, which is useless here
+    my ( $status, undef, $msg ) = $reminder->Create(
         Subject => $args{'Subject'},
         Owner => $args{'Owner'},
         Due => $args{'Due'},
         RefersTo => $self->Ticket,
         Type => 'reminder',
         Queue => $self->TicketObj->Queue,
+        Status => $self->TicketObj->QueueObj->LifecycleObj->ReminderStatusOnOpen,
     );
     $self->TicketObj->_NewTransaction(
         Type => 'AddReminder',
@@ -148,7 +160,7 @@ sub Open {
     my $reminder = shift;
 
     my ( $status, $msg ) =
-      $reminder->SetStatus( $reminder->QueueObj->Lifecycle->ReminderStatusOnOpen );
+      $reminder->SetStatus( $reminder->LifecycleObj->ReminderStatusOnOpen );
     $self->TicketObj->_NewTransaction(
         Type => 'OpenReminder',
         Field => 'RT::Ticket',
@@ -161,7 +173,7 @@ sub Resolve {
     my $self = shift;
     my $reminder = shift;
     my ( $status, $msg ) =
-      $reminder->SetStatus( $reminder->QueueObj->Lifecycle->ReminderStatusOnResolve );
+      $reminder->SetStatus( $reminder->LifecycleObj->ReminderStatusOnResolve );
     $self->TicketObj->_NewTransaction(
         Type => 'ResolveReminder',
         Field => 'RT::Ticket',