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