src/Service/AgendaService.php line 12

Open in your IDE?
  1. <?php
  2. namespace App\Service;
  3. use DateTime;
  4. class AgendaService
  5. {
  6.   /**
  7.    * @throws \JsonException
  8.    */
  9.   public function parseAgendaEvents(mixed $eventsmixed $query_date nullmixed $query_date2 nullbool $isAgenda false): mixed
  10.   {
  11.     $current_date $query_date ?? new DateTime();
  12.     $to_unset = [];
  13.     $i 0;
  14.     foreach ($events as $event) {
  15.       if ($event['json'] !== null) {
  16.         $json_horaires json_decode($event['json'], true512JSON_THROW_ON_ERROR);
  17.         if ($json_horaires['modeDates'] === 'multiple') {
  18.           $to_unset[] = $i;
  19.           if ($json_horaires['datesMultiple']['modeHours'] === 'simple') {
  20.             $date null;
  21.             foreach ($json_horaires['datesMultiple']['dates'] as $date) {
  22.               $start_date date_create_from_format('d/m/Y'$date);
  23.               if ($query_date2 === null) {
  24.                 if ($start_date >= $current_date) {
  25.                   $new_event $event;
  26.                   $new_event['date_time_debut'] = $start_date;
  27.                   $new_event['date_debut'] = $start_date->format('d/m/Y');
  28.                   $new_event['date_fin'] = $start_date->format('d/m/Y');
  29.                   $events[] = $new_event;
  30.                 }
  31.               } else
  32.                 if (($query_date !== null) && $query_date <= $start_date && $start_date <= $query_date2) {
  33.                   $new_event $event;
  34.                   $new_event['date_time_debut'] = $start_date;
  35.                   $new_event['date_debut'] = $start_date->format('d/m/Y');
  36.                   $new_event['date_fin'] = $start_date->format('d/m/Y');
  37.                   $events[] = $new_event;
  38.                 }
  39.             }
  40.           } else if ($json_horaires['datesMultiple']['modeHours'] === 'details') {
  41.             $hoursDetails $json_horaires['datesMultiple']['hoursDetails'];
  42.             foreach ($hoursDetails as $hour) {
  43.               $start_date date_create_from_format('d/m/Y'$hour['date']);
  44.               if ($start_date >= $current_date) {
  45.                 $new_event $event;
  46.                 $new_event['date_time_debut'] = $start_date;
  47.                 $new_event['date_debut'] = $start_date->format('d/m/Y');
  48.                 $new_event['date_fin'] = $start_date->format('d/m/Y');
  49.                 $events[] = $new_event;
  50.               }
  51.             }
  52.           }
  53.         }
  54.       } else {
  55.         $event['date_time_debut'] = date_create_from_format('d/m/Y'$event['date_debut']);
  56.       }
  57.       $i++;
  58.     }
  59.     $to_unset array_reverse($to_unset);
  60.     foreach ($to_unset as $i_) {
  61.       unset($events[$i_]);
  62.     }
  63.     if ($isAgenda === true) {
  64.       usort(
  65.         $events,
  66.         static function ($x$y) {
  67.           $x_is_datetime $x['date_time_debut'] instanceof DateTime;
  68.           $y_is_datetime $y['date_time_debut'] instanceof DateTime;
  69.           if (!$x_is_datetime && !$y_is_datetime) {
  70.             return 0// Maintain original order if both are invalid
  71.           }
  72.           if (!$x_is_datetime) {
  73.             return 1// Put invalid dates at the end
  74.           }
  75.           if (!$y_is_datetime) {
  76.             return -1// Put invalid dates at the end
  77.           }
  78.           return $x['date_time_debut']->getTimestamp() > $y['date_time_debut']->getTimestamp();
  79.         }
  80.       );
  81.     } else {
  82.       usort(
  83.         $events,
  84.         static function ($x$y) {
  85.           $x_is_datetime $x['date_time_debut'] instanceof DateTime;
  86.           $y_is_datetime $y['date_time_debut'] instanceof DateTime;
  87.           if (!$x_is_datetime && !$y_is_datetime) {
  88.             return 0// Maintain original order if both are invalid
  89.           }
  90.           if (!$x_is_datetime) {
  91.             return 1// Put invalid dates at the end
  92.           }
  93.           if (!$y_is_datetime) {
  94.             return -1// Put invalid dates at the end
  95.           }
  96.           return $x['date_time_debut']->getTimestamp() < $y['date_time_debut']->getTimestamp();
  97.         }
  98.       );
  99.     }
  100.     return $events;
  101.   }
  102. }