rt 4.2.16
[freeside.git] / rt / lib / RT / Ticket.pm
index e7478ad..4151f2b 100755 (executable)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2019 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
@@ -316,6 +316,10 @@ sub Create {
         unless defined $args{'Priority'};
 
     # Dates
+
+    my $Now = RT::Date->new( $self->CurrentUser );
+    $Now->SetToNow();
+
     #TODO we should see what sort of due date we're getting, rather +
     # than assuming it's in ISO format.
 
@@ -325,7 +329,7 @@ sub Create {
         $Due->Set( Format => 'ISO', Value => $args{'Due'} );
     }
     elsif ( my $due_in = $QueueObj->DefaultDueIn ) {
-        $Due->SetToNow;
+        $Due->Set( Format => 'ISO', Value => $Now->ISO );
         $Due->AddDays( $due_in );
     }
 
@@ -346,7 +350,7 @@ sub Create {
 
     # If the status is not an initial status, set the started date
     elsif ( !$cycle->IsInitial($args{'Status'}) ) {
-        $Started->SetToNow;
+        $Started->Set( Format => 'ISO', Value => $Now->ISO );
     }
 
     my $Resolved = RT::Date->new( $self->CurrentUser );
@@ -360,7 +364,7 @@ sub Create {
         $RT::Logger->debug( "Got a ". $args{'Status'}
             ."(inactive) ticket with undefined resolved date. Setting to now."
         );
-        $Resolved->SetToNow;
+        $Resolved->Set( Format => 'ISO', Value => $Now->ISO );
     }
 
     # Dealing with time fields
@@ -390,6 +394,7 @@ sub Create {
         TimeEstimated   => $args{'TimeEstimated'},
         TimeLeft        => $args{'TimeLeft'},
         Type            => $args{'Type'},
+        Created         => $Now->ISO,
         Starts          => $Starts->ISO,
         Started         => $Started->ISO,
         Resolved        => $Resolved->ISO,
@@ -757,13 +762,14 @@ sub DeleteWatcher {
 
 
 
-=head2 SquelchMailTo [EMAIL]
-
-Takes an optional email address to never email about updates to this ticket.
+=head2 SquelchMailTo ADDRESSES
 
+Takes a list of email addresses to never email about updates to this ticket.
+Subsequent calls to this method add, rather than replace, the list of
+squelched addresses.
 
-Returns an array of the RT::Attribute objects for this ticket's 'SquelchMailTo' attributes.
-
+Returns an array of the L<RT::Attribute> objects for this ticket's
+'SquelchMailTo' attributes.
 
 =cut
 
@@ -784,7 +790,7 @@ sub SquelchMailTo {
 
 sub _SquelchMailTo {
     my $self = shift;
-    if (@_) {
+    while (@_) {
         my $attr = shift;
         $self->AddAttribute( Name => 'SquelchMailTo', Content => $attr )
             unless grep { $_->Content eq $attr }
@@ -1098,6 +1104,11 @@ sub TransactionAddresses {
     $attachments->Columns( qw( id Headers TransactionId));
 
     $attachments->Limit(
+        FIELD => 'Parent',
+        VALUE => 0,
+    );
+
+    $attachments->Limit(
         ALIAS         => $attachments->TransactionAlias,
         FIELD         => 'Type',
         OPERATOR      => 'IN',
@@ -1216,6 +1227,23 @@ sub QueueObj {
     return ($self->{_queue_obj});
 }
 
+sub Subject {
+    my $self = shift;
+
+    my $subject = $self->_Value( 'Subject' );
+    return $subject if defined $subject;
+
+    if ( RT->Config->Get( 'DatabaseType' ) eq 'Oracle' && $self->CurrentUserHasRight( 'ShowTicket' ) ) {
+
+        # Oracle treats empty strings as NULL, so it returns undef for empty subjects.
+        # Since '' is the default Subject value, returning '' is more correct.
+        return '';
+    }
+    else {
+        return undef;
+    }
+}
+
 sub SetSubject {
     my $self = shift;
     my $value = shift;