xref: /webtrees/app/Elements/RoleInEvent.php (revision d11be7027e34e3121be11cc025421873364403f9)
1c2ed51d1SGreg Roach<?php
2c2ed51d1SGreg Roach
3c2ed51d1SGreg Roach/**
4c2ed51d1SGreg Roach * webtrees: online genealogy
5*d11be702SGreg 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{
40ae0043b7SGreg Roach    protected const 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