. */ declare(strict_types=1); namespace Fisharebest\Webtrees\Module; use Fisharebest\Webtrees\Fact; use Fisharebest\Webtrees\Functions\FunctionsPrintFacts; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Individual; use Illuminate\Support\Collection; /** * Class ExtraInformationModule * A sidebar to show non-genealogy information about an individual */ class IndividualMetadataModule extends AbstractModule implements ModuleSidebarInterface { use ModuleSidebarTrait; // A list of facts that are handled by this module. protected const HANDLED_FACTS = [ 'AFN', 'CHAN', 'IDNO', 'REFN', 'RESN', 'RFN', 'RIN', 'SSN', '_UID', ]; /** * How should this module be identified in the control panel, etc.? * * @return string */ public function title(): string { /* I18N: Name of a module/sidebar */ return I18N::translate('Extra information'); } /** * A sentence describing what this module does. * * @return string */ public function description(): string { /* I18N: Description of the “Extra information” module */ return I18N::translate('A sidebar showing non-genealogy information about an individual.'); } /** * The default position for this sidebar. It can be changed in the control panel. * * @return int */ public function defaultSidebarOrder(): int { return 1; } /** {@inheritdoc} */ public function hasSidebarContent(Individual $individual): bool { return true; } /** * Load this sidebar synchronously. * * @param Individual $individual * * @return string */ public function getSidebarContent(Individual $individual): string { $indifacts = []; // The individual’s own facts foreach ($individual->facts() as $fact) { if ($this->showFact($fact)) { $indifacts[] = $fact; } } ob_start(); if (!$indifacts) { echo I18N::translate('There are no facts for this individual.'); } else { foreach ($indifacts as $fact) { FunctionsPrintFacts::printFact($fact, $individual); } } return strip_tags(ob_get_clean(), '
'); } /** * Does this module display a particular fact * * @param Fact $fact * * @return bool */ public function showFact(Fact $fact): bool { return in_array($fact->getTag(), static::HANDLED_FACTS, true); } /** * This module handles the following facts - so don't show them on the "Facts and events" tab. * * @return Collection * @return string[] */ public function supportedFacts(): Collection { return new Collection(static::HANDLED_FACTS); } }