fix RT per-transaction recipient squelching, RT#25260
[freeside.git] / rt / lib / RT / Interface / Web_Vendor.pm
index a5f5b88..3aad3fe 100644 (file)
@@ -259,14 +259,22 @@ sub ProcessTicketBasics {
 
     # the UI for editing WillResolve through Ticket Basics should allow 
     # setting it to null
-    my $to_date = delete($ARGSRef->{'WillResolve_Date'});
-    my $DateObj = RT::Date->new($session{'CurrentUser'});
-    if ( $to_date ) {
-        $DateObj->Set(Format => 'unknown', Value => $to_date);
-    } else {
-        $DateObj->Set(Value => 0);
+    if ( exists $ARGSRef->{'WillResolve_Date'} ) {
+      my $to_date = delete($ARGSRef->{'WillResolve_Date'});
+      my $DateObj = RT::Date->new($session{'CurrentUser'});
+      if ( $to_date ) {
+          $DateObj->Set(Format => 'unknown', Value => $to_date);
+          if ( $DateObj->Unix > time ) {
+            $ARGSRef->{'WillResolve'} = $DateObj->ISO;
+          } else {
+            warn "Ticket ".$TicketObj->Id.": WillResolve date '$to_date' not accepted.\n";
+            # and then don't set it in ARGSRef
+          }
+      } elsif ( $TicketObj and $TicketObj->WillResolveObj->Unix > 0 ) {
+          $DateObj->Set(Value => 0);
+          $ARGSRef->{'WillResolve'} = $DateObj->ISO;
+      }
     }
-    $ARGSRef->{'WillResolve'} = $DateObj->ISO;
 
     if ( $ARGSRef->{'Queue'} and ( $ARGSRef->{'Queue'} !~ /^(\d+)$/ ) ) {
         my $tempqueue = RT::Queue->new($RT::SystemUser);
@@ -340,6 +348,13 @@ sub ProcessTicketDates {
             Value  => $ARGSRef->{ $field . '_Date' }
         );
 
+        if ( $field eq 'WillResolve'
+              and $DateObj->Unix > 0 
+              and $DateObj->Unix <= time ) {
+            push @results, "Can't set WillResolve date in the past.";
+            next;
+        }
+
         my $obj = $field . "Obj";
         if (    ( defined $DateObj->Unix )
             and ( $DateObj->Unix != $Ticket->$obj()->Unix() ) )