101 lines
3.4 KiB
PHP
101 lines
3.4 KiB
PHP
<?php
|
|
|
|
function getCorrespondingSeasons($request) {
|
|
$year = explode('-', $request['month'])[0];
|
|
return page('programme')->children()->filter(
|
|
fn ($season) => str_contains($season->title()->value(), $year)
|
|
);
|
|
}
|
|
|
|
function getTimeDifference($start, $end) {
|
|
$start = new DateTime($start);
|
|
$end = new DateTime($end);
|
|
|
|
$difference = $end->diff($start);
|
|
|
|
return $difference->h . "h" . $difference->i;
|
|
}
|
|
|
|
return [
|
|
'pattern' => '/get-current-season-calendar.json',
|
|
'method' => 'POST',
|
|
'action' => function () {
|
|
$jsonRequest = file_get_contents("php://input");
|
|
$request = json_decode($jsonRequest, true);
|
|
|
|
$calendar = $request['calendar'];
|
|
|
|
$currentSeason = page('programme')->children()->first();
|
|
|
|
foreach ($currentSeason->children() as $event) {
|
|
|
|
$eventInfos = [
|
|
"title" => $event->title()->value(),
|
|
"place" => $event->place()->value(),
|
|
"authors" => $event->authors()->value()
|
|
];
|
|
|
|
if ($event->isMapadoEvent() == 'false') {
|
|
foreach ($event->sessions()->toStructure() as $session) {
|
|
|
|
$sessionMonth = $session->date()->toDate('M');
|
|
|
|
$sessionDay = intval($session->date()->toDate('d'));
|
|
$calendar[$sessionMonth][$sessionDay]['sessions'][] = array_merge($eventInfos, [
|
|
"color" => $event->color()->value(),
|
|
"day" => $sessionDay,
|
|
"time" => $session->timeComplement()->isEmpty() == 'true' ? $session->time()->value() : $session->time()->value() . ' ' . $session->timeComplement()->value(),
|
|
"place" => $event->place()->value(),
|
|
"duration" => $event->duration()->value(),
|
|
"eventUrl" => $event->url(),
|
|
]);
|
|
}
|
|
}
|
|
|
|
if ($event->isMapadoEvent() == 'true') {
|
|
$request = createMapadoEventRequest($event);
|
|
$mapadoEvent = fetchMapadoEvent($request);
|
|
|
|
$sessionsToSave = [];
|
|
|
|
foreach ($mapadoEvent->eventDateList as $session) {
|
|
|
|
$sessionMonth = (int) substr($session->startDate, 5, 2);
|
|
$sessionDay = intval(substr($session->startDate, 8, 2));
|
|
|
|
$startTime = substr($session->startDate, 11, 5);
|
|
|
|
$eventDateId = explode('/', $session->{'@id'});
|
|
$eventDateId = $eventDateId[count($eventDateId) - 1];
|
|
|
|
$ticketingUrl = option('ticketingUrl') . 'event/' . $mapadoEvent->slug . '?eventDate=' . $eventDateId;
|
|
$bookableStock = $session->notInStockContingentBookableStock;
|
|
|
|
$calendar[$sessionMonth][$sessionDay]['sessions'][] = array_merge($eventInfos, [
|
|
"color" => $event->color()->value(),
|
|
"day" => $sessionDay,
|
|
"time" => str_replace(':', 'h', $startTime),
|
|
"duration" => $event->duration()->value(),
|
|
"place" => $event->place()->value(),
|
|
"public" => $event->public()->value(),
|
|
"eventUrl" => $event->url(),
|
|
"ticketingUrl" => $ticketingUrl,
|
|
"bookableStock" => $bookableStock,
|
|
"totalStock" => (int) $event->totalStock()->value(),
|
|
]);
|
|
}
|
|
|
|
saveMapadoEvent($mapadoEvent, $event);
|
|
}
|
|
}
|
|
|
|
$jsonCalendar = json_encode($calendar);
|
|
|
|
$seasonDirPath = __DIR__ . '/../../../content/' . $currentSeason->diruri() . '/data.json';
|
|
$dataFile = fopen($seasonDirPath, "w");
|
|
fwrite($dataFile, $jsonCalendar);
|
|
fclose($dataFile);
|
|
|
|
return $jsonCalendar;
|
|
}
|
|
];
|