xref: /webtrees/resources/views/fact.phtml (revision 10e0649788c8d7d4974d81c048ca2b225df8f22e)
1b315f3e1SGreg Roach<?php
2b315f3e1SGreg Roach
3*10e06497SGreg Roachdeclare(strict_types=1);
4*10e06497SGreg Roach
5b315f3e1SGreg Roachuse Fisharebest\Webtrees\Auth;
6b315f3e1SGreg Roachuse Fisharebest\Webtrees\Elements\UnknownElement;
7b315f3e1SGreg Roachuse Fisharebest\Webtrees\Elements\XrefAssociate;
8b315f3e1SGreg Roachuse Fisharebest\Webtrees\Fact;
9b315f3e1SGreg Roachuse Fisharebest\Webtrees\Family;
10b315f3e1SGreg Roachuse Fisharebest\Webtrees\Gedcom;
11b315f3e1SGreg Roachuse Fisharebest\Webtrees\GedcomRecord;
12b315f3e1SGreg Roachuse Fisharebest\Webtrees\I18N;
13b315f3e1SGreg Roachuse Fisharebest\Webtrees\Individual;
14b315f3e1SGreg Roachuse Fisharebest\Webtrees\Media;
15b315f3e1SGreg Roachuse Fisharebest\Webtrees\Module\ModuleChartInterface;
16b315f3e1SGreg Roachuse Fisharebest\Webtrees\Module\ModuleInterface;
17b315f3e1SGreg Roachuse Fisharebest\Webtrees\Module\RelationshipsChartModule;
18b315f3e1SGreg Roachuse Fisharebest\Webtrees\Registry;
19b315f3e1SGreg Roachuse Fisharebest\Webtrees\Services\ModuleService;
20b315f3e1SGreg Roachuse Fisharebest\Webtrees\Services\RelationshipService;
21b315f3e1SGreg Roach
22b315f3e1SGreg Roach/**
23b315f3e1SGreg Roach * @var Fact         $fact
24b315f3e1SGreg Roach * @var GedcomRecord $record
25b315f3e1SGreg Roach */
26b315f3e1SGreg Roach
27b315f3e1SGreg Roach$parent  = $fact->record();
28b315f3e1SGreg Roach$tree    = $parent->tree();
29b315f3e1SGreg Roach[, $tag] = explode(':', $fact->tag());
30b315f3e1SGreg Roach$label   = $fact->label();
31b315f3e1SGreg Roach$value   = $fact->value();
32b315f3e1SGreg Roach$type    = $fact->attribute('TYPE');
33b315f3e1SGreg Roach$id      = $fact->id();
34b315f3e1SGreg Roach
35b315f3e1SGreg Roach$element = Registry::elementFactory()->make($fact->tag());
36b315f3e1SGreg Roach
37b315f3e1SGreg Roach// New or deleted facts need different styling
38b315f3e1SGreg Roach$styles = [];
39b315f3e1SGreg Roachif ($fact->isPendingAddition()) {
40b315f3e1SGreg Roach    $styles[] = 'wt-new';
41b315f3e1SGreg Roach}
42b315f3e1SGreg Roachif ($fact->isPendingDeletion()) {
43b315f3e1SGreg Roach    $styles[] = 'wt-old';
44b315f3e1SGreg Roach}
45b315f3e1SGreg Roach
46b315f3e1SGreg Roach// Event of close relative
47b315f3e1SGreg Roachif ($tag === 'EVEN' && $value === 'CLOSE_RELATIVE') {
48b315f3e1SGreg Roach    $value    = '';
49b315f3e1SGreg Roach    $styles[] = 'wt-relation-fact collapse';
50b315f3e1SGreg Roach}
51b315f3e1SGreg Roach
52b315f3e1SGreg Roach// Event of close associates
53b315f3e1SGreg Roachif ($id === 'asso') {
54b315f3e1SGreg Roach    $styles[] = 'wt-associate-fact collapse';
55b315f3e1SGreg Roach}
56b315f3e1SGreg Roach
57b315f3e1SGreg Roachif ($element instanceof UnknownElement && $tree->getPreference('HIDE_GEDCOM_ERRORS') === '0') {
58b315f3e1SGreg Roach    $styles[] = 'd-none';
59b315f3e1SGreg Roach}
60b315f3e1SGreg Roach
61b315f3e1SGreg Roach
62b315f3e1SGreg Roach// historical facts
63b315f3e1SGreg Roachif ($id === 'histo') {
64b315f3e1SGreg Roach    $styles[] = 'wt-historic-fact collapse';
65b315f3e1SGreg Roach}
66b315f3e1SGreg Roach
67b315f3e1SGreg Roach// Use marriage type as the label.  e.g. "Civil partnership"
68b315f3e1SGreg Roachif ($tag === 'MARR') {
69b315f3e1SGreg Roach    $label = $fact->label();
70b315f3e1SGreg Roach    $type  = '';
71b315f3e1SGreg Roach}
72b315f3e1SGreg Roach
73b315f3e1SGreg Roach?>
74b315f3e1SGreg Roach<tr class="<?= implode(' ', $styles) ?>">
75b315f3e1SGreg Roach    <th scope="row">
765d2c6313SGreg Roach        <div class="wt-fact-label ut"><?= $label?></div>
77b315f3e1SGreg Roach
78b315f3e1SGreg Roach        <?php if ($id !== 'histo' && $id !== 'asso' && $fact->canEdit() && !in_array($tag, ['HUSB', 'WIFE', 'CHIL', 'FAMC', 'FAMS'], true)) : ?>
79b315f3e1SGreg Roach            <?= view('fact-edit-links', ['fact' => $fact, 'url' => $record->url()]) ?>
80b315f3e1SGreg Roach        <?php endif ?>
81b315f3e1SGreg Roach
82bd29d468SGreg Roach        <?php if ($tree->getPreference('SHOW_FACT_ICONS') === '1') : ?>
83b315f3e1SGreg Roach            <span class="wt-fact-icon wt-fact-icon-<?= e($tag) ?>" title="<?= strip_tags($label) ?>"></span>
84b315f3e1SGreg Roach        <?php endif ?>
85b315f3e1SGreg Roach    </th>
86b315f3e1SGreg Roach
87b315f3e1SGreg Roach    <td>
88b315f3e1SGreg Roach        <?php if ($fact->target() instanceof Media) : ?>
898c19bf42SGreg Roach            <div class="d-flex flex-wrap">
90b315f3e1SGreg Roach                <?php foreach ($fact->target()->mediaFiles() as $media_file) : ?>
918c19bf42SGreg Roach                    <div class="me-1 mb-1">
92b315f3e1SGreg Roach                        <?= $media_file->displayImage(100, 100, 'contain', []) ?>
938c19bf42SGreg Roach                    </div>
94b315f3e1SGreg Roach                <?php endforeach ?>
95b315f3e1SGreg Roach            </div>
96b315f3e1SGreg Roach
97b315f3e1SGreg Roach            <a href="<?= e($fact->target()->url()) ?>"><?= $fact->target()->fullName() ?></a>
98b315f3e1SGreg Roach
99b315f3e1SGreg Roach            <?php foreach ($fact->target()->facts(['NOTE']) as $note) : ?>
100b315f3e1SGreg Roach                <?= view('fact-gedcom-fields', ['gedcom' => $note->gedcom(), 'parent' => $fact->target()->tag(), 'tree' => $fact->record()->tree()]) ?>
101b315f3e1SGreg Roach            <?php endforeach ?>
102b315f3e1SGreg Roach        <?php else : ?>
103b315f3e1SGreg Roach            <div class="wt-fact-main-attributes">
104b315f3e1SGreg Roach                <?php if ($parent !== $record) : ?>
105b315f3e1SGreg Roach                    <div class="wt-fact-record">
106b315f3e1SGreg Roach                        <?php if ($parent instanceof Family) : ?>
107b315f3e1SGreg Roach                            <?php foreach ($parent->spouses()->filter(static fn ($individual): bool => $individual !== $record) as $spouse) : ?>
108b315f3e1SGreg Roach                                <a href="<?= e($spouse->url()) ?>"><?= $spouse->fullName() ?></a> —
109b315f3e1SGreg Roach                            <?php endforeach ?>
110b315f3e1SGreg Roach                            <a href="<?= e($parent->url()) ?>"><?= I18N::translate('View this family') ?></a>
111b315f3e1SGreg Roach                        <?php elseif ($parent instanceof Individual) : ?>
112b315f3e1SGreg Roach                            <a href="<?= e($parent->url()) ?>"><?= $parent->fullName() ?></a>
113b315f3e1SGreg Roach                        <?php endif ?>
114b315f3e1SGreg Roach                    </div>
115b315f3e1SGreg Roach                <?php endif ?>
116b315f3e1SGreg Roach
117b315f3e1SGreg Roach                <div class="wt-fact-value">
118b315f3e1SGreg Roach                    <?= $element->value($value, $tree) ?>
119b315f3e1SGreg Roach                    <?php if ($element instanceof XrefAssociate && $fact->target() instanceof Individual) : ?>
120b315f3e1SGreg Roach                        <?php
121b315f3e1SGreg Roach                        $module = app(ModuleService::class)->findByComponent(ModuleChartInterface::class, $tree, Auth::user())
122b315f3e1SGreg Roach                            ->first(static fn (ModuleInterface $module): bool => $module instanceof RelationshipsChartModule)
123b315f3e1SGreg Roach                        ?>
124b315f3e1SGreg Roach
125b61651baSGreg Roach                        <?php if ($module instanceof RelationshipsChartModule && $record instanceof Individual) : ?>
126b315f3e1SGreg Roach                            — <a href="<?= $module->chartUrl($fact->target(), ['xref2' => $record->xref()]) ?>" rel="nofollow">
127b315f3e1SGreg Roach                                <?= app(RelationshipService::class)->getCloseRelationshipName($fact->target(), $record) ?>
128b315f3e1SGreg Roach                            </a>
129b315f3e1SGreg Roach                        <?php endif ?>
130b315f3e1SGreg Roach                    <?php endif ?>
131b315f3e1SGreg Roach                </div>
132b315f3e1SGreg Roach
133b315f3e1SGreg Roach                <!-- Type of this fact/event (allow user-translations) -->
134b315f3e1SGreg Roach                <?php if ($type !== '' && $tag !== 'EVEN' && $tag !== 'FACT') : ?>
135b315f3e1SGreg Roach                    <div class="wt-fact-type">
136b315f3e1SGreg Roach                        <?= Registry::elementFactory()->make($fact->tag() . ':TYPE')->labelValue(I18N::translate($type), $tree) ?>
137b315f3e1SGreg Roach                    </div>
138b315f3e1SGreg Roach                <?php endif ?>
139b315f3e1SGreg Roach
140b315f3e1SGreg Roach                <?= view('fact-date', ['cal_link' => 'true', 'fact' => $fact, 'record' => $record, 'time' => true]) ?>
141b315f3e1SGreg Roach                <?= view('fact-place', ['fact' => $fact, 'record' => $record]) ?>
142b315f3e1SGreg Roach            </div>
143b315f3e1SGreg Roach
144b315f3e1SGreg Roach            <div class="wt-fact-other-attributes mt-2">
1459926a509SGreg Roach                <?php preg_match_all('/\n2 (' . Gedcom::REGEX_TAG . ')( .*)?((\n[3-9].*)*)/', $fact->gedcom(), $matches, PREG_SET_ORDER) ?>
146b315f3e1SGreg Roach                <?php foreach ($matches as $match) : ?>
1479926a509SGreg Roach                    <?php if (!in_array($match[1], ['DATE', 'AGE', 'HUSB', 'WIFE', 'PLAC', 'ASSO', '_ASSO', 'STAT', 'TEMP', 'TYPE', 'CONT', 'NOTE', 'OBJE', 'SOUR'], true)) : ?>
148b315f3e1SGreg Roach                        <?= view('fact-gedcom-fields', ['gedcom' => $match[0], 'parent' => $fact->tag() . ':' . $match[1], 'tree' => $tree]) ?>
149b315f3e1SGreg Roach                    <?php endif ?>
150b315f3e1SGreg Roach                <?php endforeach; ?>
151b315f3e1SGreg Roach            </div>
152b315f3e1SGreg Roach
153b315f3e1SGreg Roach            <?php if ($id !== 'asso') : ?>
154b315f3e1SGreg Roach                <?= view('fact-associates', ['fact' => $fact]) ?>
155b315f3e1SGreg Roach            <?php endif ?>
156b315f3e1SGreg Roach
157b315f3e1SGreg Roach            <?= view('fact-sources', ['fact' => $fact]) ?>
158b315f3e1SGreg Roach            <?= view('fact-notes', ['fact' => $fact]) ?>
159b315f3e1SGreg Roach            <?= view('fact-media', ['fact' => $fact]) ?>
160b315f3e1SGreg Roach        <?php endif ?>
161b315f3e1SGreg Roach    </td>
162b315f3e1SGreg Roach</tr>
163