13
13
use Doctrine \DBAL \Types \Types ;
14
14
use Doctrine \ORM \Mapping \ClassMetadata ;
15
15
use Gedmo \Mapping \Event \Adapter \ORM as BaseAdapterORM ;
16
+ use Gedmo \Mapping \Event \ClockAwareAdapterInterface ;
16
17
use Gedmo \Timestampable \Mapping \Event \TimestampableAdapter ;
18
+ use Psr \Clock \ClockInterface ;
17
19
18
20
/**
19
21
* Doctrine event adapter for ORM adapted
20
22
* for Timestampable behavior
21
23
*
22
24
* @author Gediminas Morkevicius <[email protected] >
23
25
*/
24
- final class ORM extends BaseAdapterORM implements TimestampableAdapter
26
+ final class ORM extends BaseAdapterORM implements TimestampableAdapter, ClockAwareAdapterInterface
25
27
{
28
+ /**
29
+ * @var ClockInterface|null
30
+ */
31
+ private ?ClockInterface $ clock = null ;
32
+
33
+ public function setClock (ClockInterface $ clock ): void
34
+ {
35
+ $ this ->clock = $ clock ;
36
+ }
37
+
26
38
/**
27
39
* @param ClassMetadata $meta
28
40
*/
@@ -44,17 +56,17 @@ public function getDateValue($meta, $field)
44
56
*/
45
57
private function getRawDateValue (array $ mapping )
46
58
{
47
- $ datetime = new \DateTime ();
59
+ $ datetime = $ this -> clock instanceof ClockInterface ? $ this -> clock -> now () : new \DateTimeImmutable ();
48
60
$ type = $ mapping ['type ' ] ?? null ;
49
61
50
62
if ('integer ' === $ type ) {
51
63
return (int ) $ datetime ->format ('U ' );
52
64
}
53
65
54
66
if (in_array ($ type , ['date_immutable ' , 'time_immutable ' , 'datetime_immutable ' , 'datetimetz_immutable ' ], true )) {
55
- return \DateTimeImmutable:: createFromMutable ( $ datetime) ;
67
+ return $ datetime ;
56
68
}
57
69
58
- return $ datetime ;
70
+ return \DateTime:: createFromImmutable ( $ datetime) ;
59
71
}
60
72
}
0 commit comments