SL::DB::CVar::value: mit übergebenen DateTime-Objekten klarkommen
authorMoritz Bunkus <m.bunkus@linet-services.de>
Wed, 26 Aug 2015 13:57:01 +0000 (15:57 +0200)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Wed, 26 Aug 2015 13:59:12 +0000 (15:59 +0200)
Ruft mal value als getter auf, so wird ein DateTime-Objekt
zurückgegeben. Als setter aufgerufen, erwartete die Funktion bisher
aber, dass ein String übergeben wird. Somit war es nicht möglich, eine
Datums-CVar mit intuitiv zu clonen:

  $new_cvar->value($old_cvar->value); # Subtle fail!

Mit dem Fix werden sowohl DateTime-Objekte als auch Strings unterstützt.

SL/DB/CustomVariable.pm

index 0971e64..46428fe 100644 (file)
@@ -44,7 +44,7 @@ sub parse_value {
   }
 
   if ($type =~ m{^(?:date|timestamp)}) {
-    return $self->timestamp_value(defined($unparsed) ? DateTime->from_kivitendo($unparsed) : undef);
+    return $self->timestamp_value(!defined($unparsed) ? undef : ref($unparsed) eq 'DateTime' ? $unparsed->clone : DateTime->from_kivitendo($unparsed));
   }
 
   # text, textfield, select