. */ declare(strict_types=1); namespace Fisharebest\Webtrees\Module; use Fisharebest\Webtrees\Fact; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Individual; use Illuminate\Support\Collection; use function array_map; /** * 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', '_FSFTID', '_WEBTAG', ]; /** * 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; } /** * @param Individual $individual * * @return bool */ public function hasSidebarContent(Individual $individual): bool { return $individual->facts(static::HANDLED_FACTS)->isNotEmpty(); } /** * Load this sidebar synchronously. * * @param Individual $individual * * @return string */ public function getSidebarContent(Individual $individual): string { $html = $individual->facts(static::HANDLED_FACTS) ->map(static fn (Fact $fact): string =>view('fact', ['fact' => $fact, 'record' => $individual])) ->implode('