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; };