Skip to content

Commit a8f16fb

Browse files
authored
correction de la gestion des dates dans l'admin des événements (#1775)
* correction de la gestion des dates dans l'admin des événements Depuis qu'on est passé par les objets ting pour gérer les events dans l'admin nous avons un souci sur la gestion des heures. Lors de la récupération de l'heure, celle-ci est décalée de 2 heures, et lors de l'enregistrement on enregistre cette version décalée, à chaque enregistre on a le décalage qui s'applique. Cela car on stocke la date/heure en timestamp sur certains champs (c'est historique et à long terme l'idée est de changer cela mais on ne va pas changer cela à court terme), que le timestamp est converti en datetime par Ting et cela dans gérer le fuseau horaire. Afin de corriger cela on crée un nouveau type de serialiser qu'on applique aux champs en timestamp qui va avoir une option pour setter la timezone, ainsi la date enregistrée est bien la date affichée. * correction conventions * on évite de répéter la timezone * correction typo * on ajoute une vérification sur la timezone * ajout d'une vérification si on a bien une datetime
1 parent 036d210 commit a8f16fb

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

sources/AppBundle/Event/Model/Repository/EventRepository.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use AppBundle\Event\Model\Event;
88
use AppBundle\Event\Model\GithubUser;
99
use AppBundle\Event\Model\Ticket;
10+
use AppBundle\Ting\DateTimeWithTimeZoneSerializer;
1011
use CCMBenchmark\Ting\Driver\Mysqli\Serializer\Boolean;
1112
use CCMBenchmark\Ting\Repository\CollectionInterface;
1213
use CCMBenchmark\Ting\Repository\HydratorArray;
@@ -292,6 +293,7 @@ public static function initMetadata(SerializerFactoryInterface $serializerFactor
292293
'columnName' => 'date_fin_appel_projet',
293294
'fieldName' => 'dateEndCallForProjects',
294295
'type' => 'datetime',
296+
'serializer' => DateTimeWithTimeZoneSerializer::class,
295297
'serializer_options' => [
296298
'unserialize' => ['unSerializeUseFormat' => true, 'format' => 'U'],
297299
'serialize' => ['serializeUseFormat' => true, 'format' => 'U'],
@@ -301,6 +303,7 @@ public static function initMetadata(SerializerFactoryInterface $serializerFactor
301303
'columnName' => 'date_fin_appel_conferencier',
302304
'fieldName' => 'dateEndCallForPapers',
303305
'type' => 'datetime',
306+
'serializer' => DateTimeWithTimeZoneSerializer::class,
304307
'serializer_options' => [
305308
'unserialize' => ['unSerializeUseFormat' => true, 'format' => 'U'],
306309
'serialize' => ['serializeUseFormat' => true, 'format' => 'U'],
@@ -315,6 +318,7 @@ public static function initMetadata(SerializerFactoryInterface $serializerFactor
315318
'columnName' => 'date_fin_prevente',
316319
'fieldName' => 'dateEndPreSales',
317320
'type' => 'datetime',
321+
'serializer' => DateTimeWithTimeZoneSerializer::class,
318322
'serializer_options' => [
319323
'unserialize' => ['unSerializeUseFormat' => true, 'format' => 'U'],
320324
'serialize' => ['serializeUseFormat' => true, 'format' => 'U'],
@@ -324,6 +328,7 @@ public static function initMetadata(SerializerFactoryInterface $serializerFactor
324328
'columnName' => 'date_fin_vente',
325329
'fieldName' => 'dateEndSales',
326330
'type' => 'datetime',
331+
'serializer' => DateTimeWithTimeZoneSerializer::class,
327332
'serializer_options' => [
328333
'unserialize' => ['unSerializeUseFormat' => true, 'format' => 'U'],
329334
'serialize' => ['serializeUseFormat' => true, 'format' => 'U'],
@@ -333,6 +338,7 @@ public static function initMetadata(SerializerFactoryInterface $serializerFactor
333338
'columnName' => 'date_fin_vente_token_sponsor',
334339
'fieldName' => 'dateEndSalesSponsorToken',
335340
'type' => 'datetime',
341+
'serializer' => DateTimeWithTimeZoneSerializer::class,
336342
'serializer_options' => [
337343
'unserialize' => ['unSerializeUseFormat' => true, 'format' => 'U'],
338344
'serialize' => ['serializeUseFormat' => true, 'format' => 'U'],
@@ -342,6 +348,7 @@ public static function initMetadata(SerializerFactoryInterface $serializerFactor
342348
'columnName' => 'date_fin_saisie_repas_speakers',
343349
'fieldName' => 'dateEndSpeakersDinerInfosCollection',
344350
'type' => 'datetime',
351+
'serializer' => DateTimeWithTimeZoneSerializer::class,
345352
'serializer_options' => [
346353
'unserialize' => ['unSerializeUseFormat' => true, 'format' => 'U'],
347354
'serialize' => ['serializeUseFormat' => true, 'format' => 'U'],
@@ -351,6 +358,7 @@ public static function initMetadata(SerializerFactoryInterface $serializerFactor
351358
'columnName' => 'date_annonce_planning',
352359
'fieldName' => 'datePlanningAnnouncement',
353360
'type' => 'datetime',
361+
'serializer' => DateTimeWithTimeZoneSerializer::class,
354362
'serializer_options' => [
355363
'unserialize' => ['unSerializeUseFormat' => true, 'format' => 'U'],
356364
'serialize' => ['serializeUseFormat' => true, 'format' => 'U'],
@@ -360,6 +368,7 @@ public static function initMetadata(SerializerFactoryInterface $serializerFactor
360368
'columnName' => 'date_fin_saisie_nuites_hotel',
361369
'fieldName' => 'dateEndHotelInfosCollection',
362370
'type' => 'datetime',
371+
'serializer' => DateTimeWithTimeZoneSerializer::class,
363372
'serializer_options' => [
364373
'unserialize' => ['unSerializeUseFormat' => true, 'format' => 'U'],
365374
'serialize' => ['serializeUseFormat' => true, 'format' => 'U'],
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace AppBundle\Ting;
6+
7+
use CCMBenchmark\Ting\Serializer\DateTime;
8+
9+
class DateTimeWithTimeZoneSerializer extends DateTime
10+
{
11+
public function unserialize($serialized, array $options = [])
12+
{
13+
$value = parent::unserialize($serialized, $options);
14+
15+
if ($value instanceof \DateTime && isset($options['timezone'])) {
16+
$timeZone = $options['timezone'];
17+
} else {
18+
$timeZone = date_default_timezone_get();
19+
}
20+
21+
if ($value && $timeZone) {
22+
$value->setTimezone(new \DateTimeZone($timeZone));
23+
}
24+
25+
return $value;
26+
}
27+
}

0 commit comments

Comments
 (0)