fix WillResolve date editing in ticket basics, #23309
[freeside.git] / rt / lib / RT / Interface / Web_Vendor.pm
index ae7f089..a5f5b88 100644 (file)
@@ -254,8 +254,20 @@ sub ProcessTicketBasics {
         TimeLeft
         Type
         Queue
+        WillResolve
     );
 
+    # 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);
+    }
+    $ARGSRef->{'WillResolve'} = $DateObj->ISO;
+
     if ( $ARGSRef->{'Queue'} and ( $ARGSRef->{'Queue'} !~ /^(\d+)$/ ) ) {
         my $tempqueue = RT::Queue->new($RT::SystemUser);
         $tempqueue->Load( $ARGSRef->{'Queue'} );
@@ -553,5 +565,32 @@ sub ProcessUpdateMessage {
     return @results;
 }
 
+sub default_FormatDate { $_[0]->AsString }
+
+sub ProcessColumnMapValue {
+    my $value = shift;
+    my %args = ( Arguments => [],
+                 Escape => 1,
+                 FormatDate => \&default_FormatDate,
+                 @_ );
+
+    if ( ref $value ) {
+        if ( ref $value eq 'RT::Date' ) {
+            return $args{FormatDate}->($value);
+        } elsif ( UNIVERSAL::isa( $value, 'CODE' ) ) {
+            my @tmp = $value->( @{ $args{'Arguments'} } );
+            return ProcessColumnMapValue( ( @tmp > 1 ? \@tmp : $tmp[0] ), %args );
+        } elsif ( UNIVERSAL::isa( $value, 'ARRAY' ) ) {
+            return join '', map ProcessColumnMapValue( $_, %args ), @$value;
+        } elsif ( UNIVERSAL::isa( $value, 'SCALAR' ) ) {
+            return $$value;
+        }
+    }
+
+    return $m->interp->apply_escapes( $value, 'h' ) if $args{'Escape'};
+    return $value;
+}
+
+
 1;