nouveau-theatre-de-besancon/site/collections/ordered-season.php

40 lines
1.4 KiB
PHP

<?php
return function($kirby) {
$orderedSeason = new Pages();
foreach ($kirby->collection('current-season')->children() as $event) {
$sessions = $event->isMapadoEvent() == 'true' ? $event->remoteSessions()->toStructure() : $event->sessions()->toStructure();
$sessionDates = $sessions->map(function($session) {
return $session->date()->value();
})->data;
$orderedSeason->add($event);
}
$endOfProgramEvents = $orderedSeason->filter(function ($event) {
$sessions = $event->isMapadoEvent() == 'true' ? $event->remoteSessions()->toStructure() : $event->sessions()->toStructure();
$sessionDates = $sessions->map(function($session) {
return $session->date()->value();
})->data;
return empty($sessionDates) || $event->status() === 'unlisted';
});
$normalEvents = $orderedSeason->filter(function ($event) use ($endOfProgramEvents) {
return $event->status() === 'listed' && !$endOfProgramEvents->has($event);
});
$normalEvents = $normalEvents->sortBy(function ($event) {
$sessions = $event->isMapadoEvent() == 'true' ? $event->remoteSessions()->toStructure() : $event->sessions()->toStructure();
$sessionDates = $sessions->map(function($session) {
return $session->date()->value();
})->data;
return !empty($sessionDates) ? min($sessionDates) : PHP_INT_MAX;
});
$orderedSeason = $normalEvents->merge($endOfProgramEvents);
return $orderedSeason;
};