xref: /webtrees/app/Census/CensusColumnFullName.php (revision fcfa147e10aaa6c7ff580c29bd6e5b88666befc1)
14ccf2a72SGreg Roach<?php
23976b470SGreg Roach
34ccf2a72SGreg Roach/**
44ccf2a72SGreg Roach * webtrees: online genealogy
58fcd0d32SGreg Roach * Copyright (C) 2019 webtrees development team
64ccf2a72SGreg Roach * This program is free software: you can redistribute it and/or modify
74ccf2a72SGreg Roach * it under the terms of the GNU General Public License as published by
84ccf2a72SGreg Roach * the Free Software Foundation, either version 3 of the License, or
94ccf2a72SGreg Roach * (at your option) any later version.
104ccf2a72SGreg Roach * This program is distributed in the hope that it will be useful,
114ccf2a72SGreg Roach * but WITHOUT ANY WARRANTY; without even the implied warranty of
124ccf2a72SGreg Roach * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
134ccf2a72SGreg Roach * GNU General Public License for more details.
144ccf2a72SGreg Roach * You should have received a copy of the GNU General Public License
154ccf2a72SGreg Roach * along with this program. If not, see <http://www.gnu.org/licenses/>.
164ccf2a72SGreg Roach */
17*fcfa147eSGreg Roach
18e7f56f2aSGreg Roachdeclare(strict_types=1);
1915d603e7SGreg Roach
204ccf2a72SGreg Roachnamespace Fisharebest\Webtrees\Census;
214ccf2a72SGreg Roach
2209db5ef8SGreg Roachuse Fisharebest\Webtrees\Date;
23db7d25eeSGreg Roachuse Fisharebest\Webtrees\Individual;
244ccf2a72SGreg Roach
254ccf2a72SGreg Roach/**
264ccf2a72SGreg Roach * The individual's full name.
274ccf2a72SGreg Roach */
28c1010edaSGreg Roachclass CensusColumnFullName extends AbstractCensusColumn implements CensusColumnInterface
29c1010edaSGreg Roach{
304ccf2a72SGreg Roach    /**
314ccf2a72SGreg Roach     * Generate the likely value of this census column, based on available information.
324ccf2a72SGreg Roach     *
33db7d25eeSGreg Roach     * @param Individual $individual
3415d603e7SGreg Roach     * @param Individual $head
35db7d25eeSGreg Roach     *
364ccf2a72SGreg Roach     * @return string
374ccf2a72SGreg Roach     */
388f53f488SRico Sonntag    public function generate(Individual $individual, Individual $head): string
39c1010edaSGreg Roach    {
4009db5ef8SGreg Roach        $name = $this->nameAtCensusDate($individual, $this->date());
4109db5ef8SGreg Roach
4209db5ef8SGreg Roach        return strip_tags($name['full']);
4309db5ef8SGreg Roach    }
4409db5ef8SGreg Roach
4509db5ef8SGreg Roach    /**
4609db5ef8SGreg Roach     * What was an individual's likely name on a given date, allowing
4709db5ef8SGreg Roach     * for marriages and married names.
4809db5ef8SGreg Roach     *
4909db5ef8SGreg Roach     * @param Individual $individual
5009db5ef8SGreg Roach     * @param Date       $census_date
5109db5ef8SGreg Roach     *
5209db5ef8SGreg Roach     * @return string[]
5309db5ef8SGreg Roach     */
548f53f488SRico Sonntag    protected function nameAtCensusDate(Individual $individual, Date $census_date): array
55c1010edaSGreg Roach    {
5609db5ef8SGreg Roach        $names = $individual->getAllNames();
5709db5ef8SGreg Roach        $name  = $names[0];
5809db5ef8SGreg Roach
5939ca88baSGreg Roach        foreach ($individual->spouseFamilies() as $family) {
608d0ebef0SGreg Roach            foreach ($family->facts(['MARR']) as $marriage) {
612decada7SGreg Roach                if ($marriage->date()->isOK() && Date::compare($marriage->date(), $census_date) < 0) {
6239ca88baSGreg Roach                    $spouse = $family->spouse($individual);
6309db5ef8SGreg Roach                    foreach ($names as $individual_name) {
6409db5ef8SGreg Roach                        foreach ($spouse->getAllNames() as $spouse_name) {
6509db5ef8SGreg Roach                            if ($individual_name['type'] === '_MARNM' && $individual_name['surn'] === $spouse_name['surn']) {
6609db5ef8SGreg Roach                                return $individual_name;
6709db5ef8SGreg Roach                            }
6809db5ef8SGreg Roach                        }
6909db5ef8SGreg Roach                    }
7009db5ef8SGreg Roach                }
7109db5ef8SGreg Roach            }
7209db5ef8SGreg Roach        }
7309db5ef8SGreg Roach
7409db5ef8SGreg Roach        return $name;
754ccf2a72SGreg Roach    }
764ccf2a72SGreg Roach}
77