1c2ed51d1SGreg Roach<?php 2c2ed51d1SGreg Roach 3c2ed51d1SGreg Roach/** 4c2ed51d1SGreg Roach * webtrees: online genealogy 5d11be702SGreg Roach * Copyright (C) 2023 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 24c13598cdSGreg Roachuse function array_key_exists; 25c13598cdSGreg Roachuse function str_ends_with; 26c13598cdSGreg Roachuse function str_starts_with; 27c13598cdSGreg Roachuse function strtoupper; 28c13598cdSGreg 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{ 40*e873f434SGreg Roach protected const int MAXIMUM_LENGTH = 15; 411f03f305SGreg Roach 421f03f305SGreg Roach /** 43c13598cdSGreg Roach * Convert a value to a canonical form. 44c13598cdSGreg Roach * 45c13598cdSGreg Roach * @param string $value 46c13598cdSGreg Roach * 47c13598cdSGreg Roach * @return string 48c13598cdSGreg Roach */ 49c13598cdSGreg Roach public function canonical(string $value): string 50c13598cdSGreg Roach { 51c13598cdSGreg Roach $value = parent::canonical($value); 52c13598cdSGreg Roach $upper = strtoupper($value); 53c13598cdSGreg Roach 54c13598cdSGreg Roach if (array_key_exists($upper, $this->values())) { 55c13598cdSGreg Roach return $upper; 56c13598cdSGreg Roach } 57c13598cdSGreg Roach 58c13598cdSGreg Roach if (!str_starts_with($value, '(')) { 59c13598cdSGreg Roach $value = '(' . $value; 60c13598cdSGreg Roach } 61c13598cdSGreg Roach 62c13598cdSGreg Roach if (!str_ends_with($value, ')')) { 63c13598cdSGreg Roach return $value . ')'; 64c13598cdSGreg Roach } 65c13598cdSGreg Roach 66c13598cdSGreg Roach return $value; 67c13598cdSGreg Roach } 68c13598cdSGreg Roach 69c13598cdSGreg 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