nouveau-theatre-de-besancon/site/config/routes/month-dates.php

100 lines
3.1 KiB
PHP
Raw Normal View History

2024-07-29 08:57:35 +02:00
<?php
2024-07-29 09:57:01 +02:00
function getCorrespondingSeasons($request) {
$year = explode('-', $request['month'])[0];
return page('programme')->children()->filter(
fn ($season) => str_contains($season->title()->value(), $year)
);
}
2024-07-29 17:42:30 +02:00
function getTimeDifference($start, $end) {
$start = new DateTime($start);
$end = new DateTime($end);
$difference = $end->diff($start);
return $difference->h . "h" . $difference->i;
}
2024-07-29 08:57:35 +02:00
return [
'pattern' => '/month-dates.json',
'method' => 'POST',
'action' => function () {
$jsonRequest = file_get_contents("php://input");
$request = json_decode($jsonRequest, true);
2024-07-29 12:29:00 +02:00
$dates = $request['dates'];
$requestMonth = $request['month'];
2024-07-29 09:57:01 +02:00
2024-07-29 12:29:00 +02:00
$correspondingSeasons = getCorrespondingSeasons($request);
2024-07-29 08:57:35 +02:00
2024-07-29 12:29:00 +02:00
foreach ($correspondingSeasons->children() as $event) {
2024-07-29 17:42:30 +02:00
$eventInfos = [
"title" => $event->title()->value(),
"place" => $event->place()->value(),
"authors" => $event->authors()->value()
];
2024-07-29 12:29:00 +02:00
if ($event->isMapadoEvent() == 'false') {
foreach ($event->sessions()->toStructure() as $session) {
2024-08-28 14:41:30 +02:00
$sessionMonth = $session->date()->toDate('Y-MM');
2024-07-29 12:29:00 +02:00
if ($sessionMonth === $requestMonth) {
2024-07-29 17:42:30 +02:00
$day = intval($session->date()->toDate('d'));
2024-08-28 19:11:58 +02:00
$dates[$day]['sessions'][] = array_merge($eventInfos, [
"color" => $event->color()->value(),
2024-07-29 12:42:53 +02:00
"day" => $day,
2024-07-29 12:29:00 +02:00
"time" => $session->time()->value(),
2024-08-28 19:11:58 +02:00
"place" => $event->place()->value(),
2024-07-29 12:42:53 +02:00
"duration" => $event->duration()->value(),
2024-08-28 19:11:58 +02:00
"eventUrl" => $event->url(),
2024-07-29 17:42:30 +02:00
]);
2024-07-29 12:29:00 +02:00
};
}
}
2024-08-28 14:41:30 +02:00
if ($event->isMapadoEvent() == 'true') {
$request = createMapadoEventRequest($event);
$mapadoEvent = fetchMapadoEvent($request);
2024-07-29 08:57:35 +02:00
2024-07-29 17:42:30 +02:00
$duration = null;
2024-07-30 16:31:55 +02:00
$sessionsToSave = [];
2024-07-29 12:42:53 +02:00
foreach ($mapadoEvent->eventDateList as $session) {
2024-07-30 16:31:55 +02:00
2024-07-29 12:29:00 +02:00
$sessionMonth = substr($session->startDate, 0, 7);
2024-07-30 16:31:55 +02:00
2024-07-29 12:29:00 +02:00
if ($sessionMonth === $requestMonth) {
$day = intval(substr($session->startDate, 8, 2));
2024-07-29 17:42:30 +02:00
$startTime = substr($session->startDate, 11, 5);
$eventDateId = explode('/', $session->{'@id'});
$eventDateId = $eventDateId[count($eventDateId) - 1];
2024-07-31 12:09:03 +02:00
$ticketingUrl = option('ticketingUrl') . 'event/' . $mapadoEvent->slug . '?eventDate=' . $eventDateId;
2024-07-29 17:42:30 +02:00
if (isset($session->endDate) && !$duration) {
$endTime = substr($session->endDate, 11 , 5);
$duration = getTimeDifference($startTime, $endTime);
}
2024-07-29 12:29:00 +02:00
2024-08-28 19:11:58 +02:00
$dates[$day]['sessions'][] = array_merge($eventInfos, [
"color" => $event->color()->value(),
2024-07-29 12:42:53 +02:00
"day" => $day,
2024-07-29 17:42:30 +02:00
"time" => str_replace(':', 'h', $startTime),
"duration" => $duration,
2024-08-28 19:11:58 +02:00
"place" => $event->place()->value(),
"eventUrl" => $event->url(),
2024-07-30 19:03:01 +02:00
"ticketingUrl" => $ticketingUrl
2024-07-29 17:42:30 +02:00
]);
2024-07-30 16:31:55 +02:00
}
2024-07-29 12:29:00 +02:00
}
2024-08-28 14:41:30 +02:00
saveMapadoEvent($mapadoEvent, $event);
2024-07-29 09:57:01 +02:00
}
2024-07-29 08:57:35 +02:00
}
2024-07-29 12:29:00 +02:00
return json_encode($dates);
2024-07-29 08:57:35 +02:00
}
];