1c2ed51d1SGreg Roach<?php 2c2ed51d1SGreg Roach 3c2ed51d1SGreg Roach/** 4c2ed51d1SGreg Roach * webtrees: online genealogy 55bfc6897SGreg Roach * Copyright (C) 2022 webtrees development team 6c2ed51d1SGreg Roach * This program is free software: you can redistribute it and/or modify 7c2ed51d1SGreg Roach * it under the terms of the GNU General Public License as published by 8c2ed51d1SGreg Roach * the Free Software Foundation, either version 3 of the License, or 9c2ed51d1SGreg Roach * (at your option) any later version. 10c2ed51d1SGreg Roach * This program is distributed in the hope that it will be useful, 11c2ed51d1SGreg Roach * but WITHOUT ANY WARRANTY; without even the implied warranty of 12c2ed51d1SGreg Roach * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13c2ed51d1SGreg Roach * GNU General Public License for more details. 14c2ed51d1SGreg Roach * You should have received a copy of the GNU General Public License 15c2ed51d1SGreg Roach * along with this program. If not, see <https://www.gnu.org/licenses/>. 16c2ed51d1SGreg Roach */ 17c2ed51d1SGreg Roach 18c2ed51d1SGreg Roachdeclare(strict_types=1); 19c2ed51d1SGreg Roach 20c2ed51d1SGreg Roachnamespace Fisharebest\Webtrees\Elements; 21c2ed51d1SGreg Roach 221f03f305SGreg Roachuse Fisharebest\Webtrees\I18N; 231f03f305SGreg Roach 24*c13598cdSGreg Roachuse function array_key_exists; 25*c13598cdSGreg Roachuse function str_ends_with; 26*c13598cdSGreg Roachuse function str_starts_with; 27*c13598cdSGreg Roachuse function strtoupper; 28*c13598cdSGreg Roach 29c2ed51d1SGreg Roach/** 30c2ed51d1SGreg Roach * ROLE_IN_EVENT := {Size=1:15} 31c2ed51d1SGreg Roach * [ CHIL | HUSB | WIFE | MOTH | FATH | SPOU | (<ROLE_DESCRIPTOR>) ] 32c2ed51d1SGreg Roach * Indicates what role this person played in the event that is being cited in this context. For 33c2ed51d1SGreg Roach * example, if you cite a child's birth record as the source of the mother's name, the value for 34c2ed51d1SGreg Roach * this field is "MOTH." If you describe the groom of a marriage, the role is "HUSB." If the role 35c2ed51d1SGreg Roach * is something different than one of the six relationship role tags listed above then enclose the 36c2ed51d1SGreg Roach * role name within matching parentheses. 37c2ed51d1SGreg Roach */ 38c2ed51d1SGreg Roachclass RoleInEvent extends AbstractElement 39c2ed51d1SGreg Roach{ 40ae0043b7SGreg Roach protected const MAXIMUM_LENGTH = 15; 411f03f305SGreg Roach 421f03f305SGreg Roach /** 43*c13598cdSGreg Roach * Convert a value to a canonical form. 44*c13598cdSGreg Roach * 45*c13598cdSGreg Roach * @param string $value 46*c13598cdSGreg Roach * 47*c13598cdSGreg Roach * @return string 48*c13598cdSGreg Roach */ 49*c13598cdSGreg Roach public function canonical(string $value): string 50*c13598cdSGreg Roach { 51*c13598cdSGreg Roach $value = parent::canonical($value); 52*c13598cdSGreg Roach $upper = strtoupper($value); 53*c13598cdSGreg Roach 54*c13598cdSGreg Roach if (array_key_exists($upper, $this->values())) { 55*c13598cdSGreg Roach return $upper; 56*c13598cdSGreg Roach } 57*c13598cdSGreg Roach 58*c13598cdSGreg Roach if (!str_starts_with($value, '(')) { 59*c13598cdSGreg Roach $value = '(' . $value; 60*c13598cdSGreg Roach } 61*c13598cdSGreg Roach 62*c13598cdSGreg Roach if (!str_ends_with($value, ')')) { 63*c13598cdSGreg Roach return $value . ')'; 64*c13598cdSGreg Roach } 65*c13598cdSGreg Roach 66*c13598cdSGreg Roach return $value; 67*c13598cdSGreg Roach } 68*c13598cdSGreg Roach 69*c13598cdSGreg Roach /** 701f03f305SGreg Roach * A list of controlled values for this element 711f03f305SGreg Roach * 721f03f305SGreg Roach * @return array<int|string,string> 731f03f305SGreg Roach */ 741f03f305SGreg Roach public function values(): array 751f03f305SGreg Roach { 761f03f305SGreg Roach return [ 771f03f305SGreg Roach '' => '', 781f03f305SGreg Roach 'CHIL' => I18N::translate('child'), 791f03f305SGreg Roach 'HUSB' => I18N::translate('husband'), 801f03f305SGreg Roach 'WIFE' => I18N::translate('wife'), 811f03f305SGreg Roach 'MOTH' => I18N::translate('mother'), 821f03f305SGreg Roach 'FATH' => I18N::translate('father'), 831f03f305SGreg Roach 'SPOU' => I18N::translate('spouse'), 841f03f305SGreg Roach ]; 851f03f305SGreg Roach } 86c2ed51d1SGreg Roach} 87