Commit 919aae0f authored by Laurent Lecluse's avatar Laurent Lecluse
Browse files

Correction des problèmes de dates

parent 74c66669
Loading
Loading
Loading
Loading
+54 −0
Original line number Diff line number Diff line
@@ -7,3 +7,57 @@
 * @var $viewName   string
 * @var $viewFile   string
 */

$form = new \Laminas\Form\Form();


$form->add([
    'type'       => 'Date',
    'name'       => 'd1',
    'options'    => [
        'label' => 'Date de début',
    ],
    'attributes' => [
        'step' => '1',
    ],
]);

$form->add([
    'type'       => 'DateTime',
    'name'       => 'd2',
    'options'    => [
        'label' => 'Date de début',
    ],
    'attributes' => [
        'step' => '60',
    ],
]);

$form->add([
    'name'       => 'submit',
    'type'       => 'Submit',
    'attributes' => [
        'value' => 'Enregistrer',
        'class' => 'btn btn-primary',
    ],
]);
//$form->inpu

var_dump($_POST);

if (isset($_POST['d1'])) {
    $d1 = \Application\Filter\DateTimeFromString::run($_POST['d1']);
    var_dump($d1);
}

if (isset($_POST['d2'])) {
    $d2 = \Application\Filter\DateTimeFromString::run($_POST['d2']);
    var_dump($d2);
}


$form->get('d1')->setValue($d1?->format('Y-m-d\TH:i'));
$form->get('d2')->setValue($d2?->format('Y-m-d\TH:i'));


echo $this->form($form);
 No newline at end of file
+50 −0
Original line number Diff line number Diff line
<?php

namespace Application\Filter;

use Laminas\Filter\AbstractFilter;

class DateTimeFromString extends AbstractFilter
{
    private static $instance;



    public function filter($value)
    {
        if ($value === '') return null;

        return $this->convert($value);
    }



    protected function convert($value): ?\DateTime
    {
        if (!$value) return null;

        $datetime = null;
        if (strlen($value) == 10) {
            $value .= "T00:00:00";
        } elseif (strlen($value) == 16) {
            $value .= ":00";
        }

        $datetime = \DateTime::createFromFormat('Y-m-d\TH:i:s', $value);

        if ($datetime instanceof \DateTime) return $datetime;

        return null;
    }



    public static function run($value)
    {
        if (!self::$instance) {
            self::$instance = new self;
        }

        return self::$instance->filter($value);
    }
}
 No newline at end of file
+8 −4
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@
namespace Application\Form\Agrement;

use Application\Constants;
use Application\Filter\DateTimeFromString;
use Application\Form\AbstractForm;
use Laminas\Form\Element\Csrf;
use Laminas\Hydrator\ClassMethodsHydrator;
@@ -25,10 +26,9 @@ class Saisie extends AbstractForm

        $this->add([
            'name'       => 'dateDecision',
            'type'       => 'DateTime',
            'type'       => 'Date',
            'options'    => [
                'label' => "Date de la décision",
                'format' => Constants::DATE_FORMAT,
            ],
            'attributes' => [
                'id' => uniqid('dateDecision'),
@@ -67,6 +67,10 @@ class Saisie extends AbstractForm
    }
}





class AgreementRetourFormHydrator implements HydratorInterface
{

@@ -76,7 +80,7 @@ class AgreementRetourFormHydrator implements HydratorInterface
     */
    public function hydrate(array $data, $object)
    {
        $object->setDateDecision($data['dateDecision'] ? \DateTime::createFromFormat(Constants::DATE_FORMAT, $data['dateDecision']) : null);
        $object->setDateDecision(DateTimeFromString::run($data['dateDecision'] ?? null);
    }


@@ -90,7 +94,7 @@ class AgreementRetourFormHydrator implements HydratorInterface
    public function extract($object): array
    {
        $data = [
            'dateDecision' => $object->getDateDecision() ? $object->getDateDecision()->format(Constants::DATE_FORMAT) : null,
            'dateDecision' => $object->getDateDecision() ? $object->getDateDecision()->format('Y-m-d') : null,
        ];

        return $data;
+4 −4
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@ namespace Application\Form\Intervenant;

use Application\Constants;
use Application\Entity\Db\Traits\ContratAwareTrait;
use Application\Filter\DateTimeFromString;
use Application\Form\AbstractForm;
use Laminas\Hydrator\HydratorInterface;
use UnicaenApp\Hydrator\Strategy\DateStrategy;
@@ -28,10 +29,9 @@ class ContratRetour extends AbstractForm

        $this->add([
            'name'       => 'dateRetourSigne',
            'type'       => 'DateTime',
            'type'       => 'Date',
            'options'    => [
                'label' => "Date de retour $contratToString signé",
                'format' => Constants::DATE_FORMAT,
            ],
            'attributes' => [
            ],
@@ -86,7 +86,7 @@ class ContratRetourFormHydrator implements HydratorInterface
     */
    public function hydrate(array $data, $object)
    {
        $object->setDateRetourSigne($data['dateRetourSigne'] ? \DateTime::createFromFormat(Constants::DATE_FORMAT, $data['dateRetourSigne']) : null);
        $object->setDateRetourSigne(DateTimeFromString::run($data['dateRetourSigne'] ?? null));

        return $object;
    }
@@ -101,7 +101,7 @@ class ContratRetourFormHydrator implements HydratorInterface
    public function extract($object): array
    {
        $data = [
            'dateRetourSigne' => $object->getDateRetourSigne() ? $object->getDateRetourSigne()->format(Constants::DATE_FORMAT) : null,
            'dateRetourSigne' => $object->getDateRetourSigne(),
        ];

        return $data;
+2 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ class DossierIdentiteComplementaireFieldset extends AbstractFieldset
    static private $franceId;



    public function init()
    {
        /**
@@ -137,6 +138,7 @@ class DossierIdentiteComplementaireFieldset extends AbstractFieldset
    }



    /**
     * Should return an array specification compatible with
     * {@link Laminas\InputFilter\Factory::createInputFilter()}.
Loading