. */ namespace Fisharebest\Webtrees\Census; use Fisharebest\Webtrees\Date; use Fisharebest\Webtrees\Individual; /** * Marital status. */ abstract class AbstractCensusColumnCondition extends AbstractCensusColumn implements CensusColumnInterface { /* Text to display for married individuals */ protected $husband = ''; protected $wife = ''; /* Text to display for unmarried individuals */ protected $bachelor = ''; protected $spinster = ''; /* Text to display for children */ protected $boy = ''; protected $girl = ''; /* Text to display for divorced individuals */ protected $divorce = ''; protected $divorcee = ''; /* Text to display for widowed individuals (not yet implemented) */ protected $widower = ''; protected $widow = ''; /* At what age is this individual recorded as an adult */ protected $age_adult = 15; /** * Generate the likely value of this census column, based on available information. * * @param Individual $individual * @param Individual|null $head * * @return string */ public function generate(Individual $individual, Individual $head = null) { $family = $this->spouseFamily($individual); $sex = $individual->getSex(); if ($family === null || count($family->getFacts('_NMR')) > 0) { if ($this->isChild($individual)) { return $this->conditionChild($sex); } else { return $this->conditionSingle($sex); } } elseif (count($family->getFacts('DIV')) > 0) { return $this->conditionDivorced($sex); } else { return $this->conditionMarried($sex); } } /** * How is this condition written in a census column. * * @param $sex * * @return string */ private function conditionChild($sex) { if ($sex === 'F') { return $this->girl; } else { return $this->boy; } } /** * How is this condition written in a census column. * * @param $sex * * @return string */ private function conditionDivorced($sex) { if ($sex === 'F') { return $this->divorcee; } else { return $this->divorce; } } /** * How is this condition written in a census column. * * @param $sex * * @return string */ private function conditionMarried($sex) { if ($sex === 'F') { return $this->wife; } else { return $this->husband; } } /** * How is this condition written in a census column. * * @param $sex * * @return string */ private function conditionSingle($sex) { if ($sex === 'F') { return $this->spinster; } else { return $this->bachelor; } } /** * Is the individual a child. * * @param Individual $individual * * @return bool */ private function isChild(Individual $individual) { $age = (int) Date::getAge($individual->getEstimatedBirthDate(), $this->date(), 0); return $age < $this->age_adult; } }