. */ declare(strict_types=1); namespace Fisharebest\Webtrees\Module; use Fisharebest\Webtrees\Date; use Fisharebest\Webtrees\Fact; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Individual; use Illuminate\Support\Collection; /** * Trait ModuleHistoricEventsTrait - Show historic events on an individual‘s page */ trait ModuleHistoricEventsTrait { /** * A sentence describing what this module does. * * @return string */ public function description(): string { return I18N::translate('Add historic events to an individual‘s page.'); } /** * All events provided by this module. * * @param Individual $individual * * @return string[] */ public function historicEventsAll(): array { return [ "1 EVEN foo\n2 TYPE bar\n2 DATE FROM 6 FEB 1952" ]; } /** * Which events should we show for an individual? * * @param Individual $individual * * @return Collection */ public function historicEventsForIndividual(Individual $individual): Collection { $min_date = $individual->getEstimatedBirthDate(); $max_date = $individual->getEstimatedDeathDate(); return (new Collection($this->historicEventsAll())) ->map(function (string $gedcom) use ($individual): Fact { return new Fact($gedcom, $individual, 'histo'); }) ->filter(function (Fact $fact) use ($min_date, $max_date): bool { return Date::compare($fact->date(), $min_date) >= 0 && Date::compare($fact->date(), $max_date) <= 0; }); } }