Deprecated: Constant E_STRICT is deprecated in /home/normanv/www/annuairepro/vendor/symfony/error-handler/ErrorHandler.php on line 58

Deprecated: Constant E_STRICT is deprecated in /home/normanv/www/annuairepro/vendor/symfony/error-handler/ErrorHandler.php on line 76
Symfony Profiler

vendor/symfony/serializer/Normalizer/DateIntervalNormalizer.php line 124

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the Symfony package.
  4.  *
  5.  * (c) Fabien Potencier <fabien@symfony.com>
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace Symfony\Component\Serializer\Normalizer;
  11. use Symfony\Component\Serializer\Exception\InvalidArgumentException;
  12. use Symfony\Component\Serializer\Exception\NotNormalizableValueException;
  13. /**
  14.  * Normalizes an instance of {@see \DateInterval} to an interval string.
  15.  * Denormalizes an interval string to an instance of {@see \DateInterval}.
  16.  *
  17.  * @author Jérôme Parmentier <jerome@prmntr.me>
  18.  */
  19. class DateIntervalNormalizer implements NormalizerInterfaceDenormalizerInterfaceCacheableSupportsMethodInterface
  20. {
  21.     public const FORMAT_KEY 'dateinterval_format';
  22.     private $defaultContext = [
  23.         self::FORMAT_KEY => '%rP%yY%mM%dDT%hH%iM%sS',
  24.     ];
  25.     public function __construct(array $defaultContext = [])
  26.     {
  27.         $this->defaultContext array_merge($this->defaultContext$defaultContext);
  28.     }
  29.     /**
  30.      * {@inheritdoc}
  31.      *
  32.      * @return string
  33.      *
  34.      * @throws InvalidArgumentException
  35.      */
  36.     public function normalize($objectstring $format null, array $context = [])
  37.     {
  38.         if (!$object instanceof \DateInterval) {
  39.             throw new InvalidArgumentException('The object must be an instance of "\DateInterval".');
  40.         }
  41.         return $object->format($context[self::FORMAT_KEY] ?? $this->defaultContext[self::FORMAT_KEY]);
  42.     }
  43.     /**
  44.      * {@inheritdoc}
  45.      */
  46.     public function supportsNormalization($datastring $format null)
  47.     {
  48.         return $data instanceof \DateInterval;
  49.     }
  50.     /**
  51.      * {@inheritdoc}
  52.      */
  53.     public function hasCacheableSupportsMethod(): bool
  54.     {
  55.         return __CLASS__ === static::class;
  56.     }
  57.     /**
  58.      * {@inheritdoc}
  59.      *
  60.      * @return \DateInterval
  61.      *
  62.      * @throws NotNormalizableValueException
  63.      */
  64.     public function denormalize($datastring $typestring $format null, array $context = [])
  65.     {
  66.         if (!\is_string($data)) {
  67.             throw NotNormalizableValueException::createForUnexpectedDataType('Data expected to be a string.'$data, ['string'], $context['deserialization_path'] ?? nulltrue);
  68.         }
  69.         if (!$this->isISO8601($data)) {
  70.             throw NotNormalizableValueException::createForUnexpectedDataType('Expected a valid ISO 8601 interval string.'$data, ['string'], $context['deserialization_path'] ?? nulltrue);
  71.         }
  72.         $dateIntervalFormat $context[self::FORMAT_KEY] ?? $this->defaultContext[self::FORMAT_KEY];
  73.         $signPattern '';
  74.         switch (substr($dateIntervalFormat02)) {
  75.             case '%R':
  76.                 $signPattern '[-+]';
  77.                 $dateIntervalFormat substr($dateIntervalFormat2);
  78.                 break;
  79.             case '%r':
  80.                 $signPattern '-?';
  81.                 $dateIntervalFormat substr($dateIntervalFormat2);
  82.                 break;
  83.         }
  84.         $valuePattern '/^'.$signPattern.preg_replace('/%([yYmMdDhHiIsSwW])(\w)/''(?:(?P<$1>\d+)$2)?'preg_replace('/(T.*)$/''($1)?'$dateIntervalFormat)).'$/';
  85.         if (!preg_match($valuePattern$data)) {
  86.             throw NotNormalizableValueException::createForUnexpectedDataType(sprintf('Value "%s" contains intervals not accepted by format "%s".'$data$dateIntervalFormat), $data, ['string'], $context['deserialization_path'] ?? nullfalse);
  87.         }
  88.         try {
  89.             if ('-' === $data[0]) {
  90.                 $interval = new \DateInterval(substr($data1));
  91.                 $interval->invert 1;
  92.                 return $interval;
  93.             }
  94.             if ('+' === $data[0]) {
  95.                 return new \DateInterval(substr($data1));
  96.             }
  97.             return new \DateInterval($data);
  98.         } catch (\Exception $e) {
  99.             throw NotNormalizableValueException::createForUnexpectedDataType($e->getMessage(), $data, ['string'], $context['deserialization_path'] ?? nullfalse$e->getCode(), $e);
  100.         }
  101.     }
  102.     /**
  103.      * {@inheritdoc}
  104.      */
  105.     public function supportsDenormalization($datastring $typestring $format null)
  106.     {
  107.         return \DateInterval::class === $type;
  108.     }
  109.     private function isISO8601(string $string): bool
  110.     {
  111.         return preg_match('/^[\-+]?P(?=\w*(?:\d|%\w))(?:\d+Y|%[yY]Y)?(?:\d+M|%[mM]M)?(?:(?:\d+D|%[dD]D)|(?:\d+W|%[wW]W))?(?:T(?:\d+H|[hH]H)?(?:\d+M|[iI]M)?(?:\d+S|[sS]S)?)?$/'$string);
  112.     }
  113. }