38 lines
904 B
PHP
38 lines
904 B
PHP
<?php
|
|
|
|
namespace App\Domains\Event\Services;
|
|
|
|
use App\Domains\Event\Models\EventDate;
|
|
|
|
class EffectiveEventDateResolver
|
|
{
|
|
public function resolve(EventDate $eventDate): ?EventDate
|
|
{
|
|
$current = $eventDate;
|
|
$visited = [];
|
|
|
|
while (true) {
|
|
$identity = $current->getKey() === null
|
|
? 'object:'.spl_object_id($current)
|
|
: 'key:'.$current->getKey();
|
|
|
|
if (isset($visited[$identity])) {
|
|
return null;
|
|
}
|
|
|
|
$visited[$identity] = true;
|
|
|
|
if ($current->rescheduled_to_event_date_id === null) {
|
|
return $current->suspended_at === null ? $current : null;
|
|
}
|
|
|
|
$current->loadMissing('rescheduledTo');
|
|
$current = $current->rescheduledTo;
|
|
|
|
if ($current === null) {
|
|
return null;
|
|
}
|
|
}
|
|
}
|
|
}
|