100 lines
3.2 KiB
PHP
100 lines
3.2 KiB
PHP
<?PHP
|
|
/**
|
|
* An event as required for the plausibility checker for events.
|
|
*
|
|
* @author Joshua Ramon Enslin <joshua@museum-digital.de>
|
|
*/
|
|
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);
|
|
|
|
}
|
|
}
|