X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=rt%2Flib%2FRT%2FReminders.pm;h=fed03bc74c2f6e2593774e31fe0ee1edf1a05314;hb=ed022ff91d69fd1258250cb027c4c1f17e1b5b10;hp=8d2bdcb748ed97b7e0c764997d5593b6d6095d14;hpb=75162bb14b3e38d66617077843f4dfdcaf09d5c4;p=freeside.git diff --git a/rt/lib/RT/Reminders.pm b/rt/lib/RT/Reminders.pm index 8d2bdcb74..fed03bc74 100644 --- a/rt/lib/RT/Reminders.pm +++ b/rt/lib/RT/Reminders.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -48,10 +48,10 @@ package RT::Reminders; -use base qw/RT::Base/; - -our $REMINDER_QUEUE = 'General'; +use strict; +use warnings; +use base 'RT::Base'; sub new { my $class = shift; @@ -61,7 +61,6 @@ sub new { return($self); } - sub Ticket { my $self = shift; $self->{'_ticket'} = shift if (@_); @@ -74,10 +73,9 @@ sub TicketObj { $self->{'_ticketobj'} = RT::Ticket->new($self->CurrentUser); $self->{'_ticketobj'}->Load($self->Ticket); } - return $self->{'_ticketobj'}; + return $self->{'_ticketobj'}; } - =head2 Collection Returns an RT::Tickets object containing reminders for this object's "Ticket" @@ -88,12 +86,12 @@ sub Collection { my $self = shift; my $col = RT::Tickets->new($self->CurrentUser); - my $query = 'Type = "reminder" AND RefersTo = "'.$self->Ticket.'"'; - + my $query = 'Type = "reminder" AND RefersTo = "'.$self->Ticket.'"'; + $col->FromSQL($query); - $col->OrderBy( FIELD => 'Due' ); - + $col->OrderByCols( { FIELD => 'Due' }, { FIELD => 'id' } ); + return($col); } @@ -107,55 +105,83 @@ Takes Owner Due - =cut - sub Add { my $self = shift; - my %args = ( Subject => undef, - Owner => undef, - Due => undef, - @_); + my %args = ( + Subject => undef, + Owner => undef, + Due => undef, + @_ + ); + + my $ticket = RT::Ticket->new($self->CurrentUser); + $ticket->Load($self->Ticket); + if ( !$ticket->id ) { + return ( 0, $self->loc( "Failed to load ticket [_1]", $self->Ticket ) ); + } - my $reminder = RT::Ticket->new($self->CurrentUser); - $reminder->Create( Subject => $args{'Subject'}, - Owner => $args{'Owner'}, - Due => $args{'Due'}, - RefersTo => $self->Ticket, - Type => 'reminder', - Queue => $self->TicketObj->Queue, - - ); - $self->TicketObj->_NewTransaction(Type => 'AddReminder', - Field => 'RT::Ticket', - NewValue => $reminder->id); + 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); + # 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', + Field => 'RT::Ticket', + NewValue => $reminder->id + ) if $status; + return ( $status, $msg ); } - sub Open { my $self = shift; - my $reminder = shift; + my $reminder = shift; - $reminder->SetStatus('open'); - $self->TicketObj->_NewTransaction(Type => 'OpenReminder', - Field => 'RT::Ticket', - NewValue => $reminder->id); + my ( $status, $msg ) = + $reminder->SetStatus( $reminder->LifecycleObj->ReminderStatusOnOpen ); + $self->TicketObj->_NewTransaction( + Type => 'OpenReminder', + Field => 'RT::Ticket', + NewValue => $reminder->id + ) if $status; + return ( $status, $msg ); } - sub Resolve { my $self = shift; my $reminder = shift; - $reminder->SetStatus('resolved'); - $self->TicketObj->_NewTransaction(Type => 'ResolveReminder', - Field => 'RT::Ticket', - NewValue => $reminder->id); + my ( $status, $msg ) = + $reminder->SetStatus( $reminder->LifecycleObj->ReminderStatusOnResolve ); + $self->TicketObj->_NewTransaction( + Type => 'ResolveReminder', + Field => 'RT::Ticket', + NewValue => $reminder->id + ) if $status; + return ( $status, $msg ); } - RT::Base->_ImportOverlays(); - +RT::Base->_ImportOverlays(); 1;