*/ declare(strict_types = 1); /** * An event as required for the plausibility checker for events. */ final class MDPlausiEvent { public readonly int $event_type; public readonly MDEventCategory $event_category; public readonly string $time_name; public readonly string $time_start; public readonly string $time_end; public readonly int|false $time_start_normalized; public readonly int|false $time_end_normalized; public readonly string $actor_name; public readonly string $actor_birth; public readonly string $actor_death; public readonly int|false $actor_birth_normalized; public readonly int|false $actor_death_normalized; /** * Attempts to parse a time. * * @param string $time Time to parse. * * @return array{earliest: int|false, latest: int|false} */ private function _attemptParsingTime(string $time):array { if (empty($time)) return ['earliest' => false, 'latest' => false]; // 20, -1, 233, -233, 2005, -2005 if (in_array(strlen($time), [2, 3, 4, 5], true) and is_numeric(substr($time, 1))) { return [ 'earliest' => strtotime($time . '-01-01'), 'latest' => strtotime($time . '-12-31'), ]; } // 2005-2006 if (strlen($time) === 9) { $parts = explode('-', $time); if (count($parts) === 2) { return [ 'earliest' => strtotime($parts[0]. '-01-01'), 'latest' => strtotime($parts[1]. '-12-31'), ]; } } $strtotime = strtotime($time); return [ 'earliest' => $strtotime, 'latest' => $strtotime, ]; } /** * Constructor. * * @param integer $event_type Event type. * @param string $time_name Time. * @param string $time_start Start. * @param string $time_end End. * @param string $actor_name Name of the linked actor. * @param string $actor_birth Birth of the linked actor. * @param string $actor_death Time of death of the linked actor. * * @return void */ public function __construct(int $event_type, string $time_name, string $time_start, string $time_end, string $actor_name, string $actor_birth, string $actor_death) { $this->event_type = $event_type; $this->time_name = $time_name; $this->time_start = $time_start; $this->time_end = $time_end; $this->actor_name = $actor_name; $this->actor_birth = $actor_birth; $this->actor_death = $actor_death; $this->time_start_normalized = $this->_attemptParsingTime($time_start)['earliest']; $this->time_end_normalized = $this->_attemptParsingTime($time_end)['latest']; $this->actor_birth_normalized = $this->_attemptParsingTime($actor_birth)['earliest']; $this->actor_death_normalized = $this->_attemptParsingTime($actor_death)['latest']; $this->event_category = MDEventCategory::fromEventType($event_type); } }