. */ declare(strict_types=1); namespace Fisharebest\Webtrees\Census; use Fisharebest\Webtrees\Date; use Fisharebest\Webtrees\Individual; /** * The individual's full name. */ class CensusColumnFullName extends AbstractCensusColumn implements CensusColumnInterface { /** * Generate the likely value of this census column, based on available information. * * @param Individual $individual * @param Individual $head * * @return string */ public function generate(Individual $individual, Individual $head): string { $name = $this->nameAtCensusDate($individual, $this->date()); return strip_tags($name['full']); } /** * What was an individual's likely name on a given date, allowing * for marriages and married names. * * @param Individual $individual * @param Date $census_date * * @return string[] */ protected function nameAtCensusDate(Individual $individual, Date $census_date): array { $names = $individual->getAllNames(); $name = $names[0]; foreach ($individual->getSpouseFamilies() as $family) { foreach ($family->getFacts('MARR') as $marriage) { if ($marriage->date()->isOK() && Date::compare($marriage->date(), $census_date) < 0) { $spouse = $family->getSpouse($individual); foreach ($names as $individual_name) { foreach ($spouse->getAllNames() as $spouse_name) { if ($individual_name['type'] === '_MARNM' && $individual_name['surn'] === $spouse_name['surn']) { return $individual_name; } } } } } } return $name; } }