xref: /webtrees/resources/views/edit/reorder-families.phtml (revision bd29d468ac3a5ed7a23d7dd8f300504dda83fc72)
1<?php
2
3use Fisharebest\Webtrees\Fact;
4use Fisharebest\Webtrees\Gedcom;
5use Fisharebest\Webtrees\Http\RequestHandlers\ReorderFamiliesAction;
6use Fisharebest\Webtrees\I18N;
7use Fisharebest\Webtrees\Individual;
8use Fisharebest\Webtrees\Registry;
9use Fisharebest\Webtrees\Tree;
10use Fisharebest\Webtrees\View;
11use Illuminate\Support\Collection;
12
13/**
14 * @var Collection<int,Fact> $famc_facts
15 * @var Collection<int,Fact> $fams_facts
16 * @var Individual           $individual
17 * @var string               $title
18 * @var Tree                 $tree
19 */
20
21?>
22
23<h2 class="wt-page-title"><?= $title ?></h2>
24
25<form method="post" action="<?= e(route(ReorderFamiliesAction::class, ['tree' => $tree->name(), 'xref' => $individual->xref()])) ?>" class="wt-page-content">
26    <?php if ($fams_facts->count() < 2) : ?>
27        <?php foreach ($fams_facts as $fact) : ?>
28            <input type="hidden" name="order[]" value="<?= e($fact->id()) ?>">
29        <?php endforeach ?>
30    <?php else : ?>
31        <h3><?= I18N::translate('Spouses') ?></h3>
32
33        <p>
34            <?= I18N::translate('When an individual has more than one spouse, you should sort the families in date order.') ?>
35        </p>
36
37        <p>
38            <button class="btn btn-secondary" id="btn-default-order" type="button">
39                <?= view('icons/sort') ?>
40                <?= /* I18N: A button label. */ I18N::translate('sort by date of marriage') ?>
41            </button>
42        </p>
43
44        <div class="wt-sortable-list wt-sortable-list-fams">
45            <?php foreach ($fams_facts as $fact) : ?>
46                <div class="card mb-2 wt-sortable-item" data-wt-sort-by-date="<?= $fact->target()->getMarriageDate()->julianDay() ?>">
47                    <input type="hidden" name="order[]" value="<?= $fact->id() ?>">
48                    <div class="card-header">
49                        <?= view('edit/reorder-card-header', ['title' => $fact->target()->fullName()]) ?>
50                    </div>
51
52                    <div class="card-body">
53                        <?= $fact->target()->formatFirstMajorFact(Gedcom::MARRIAGE_EVENTS, 2) ?>
54                        <?= $fact->target()->formatFirstMajorFact(Gedcom::DIVORCE_EVENTS, 2) ?>
55                    </div>
56                </div>
57            <?php endforeach ?>
58        </div>
59    <?php endif ?>
60
61    <?php if ($famc_facts->count() < 2) : ?>
62            <?php foreach ($famc_facts as $fact) : ?>
63                <input type="hidden" name="order[]" value="<?= e($fact->id()) ?>">
64            <?php endforeach ?>
65    <?php else : ?>
66        <?php if ($fams_facts->count() >= 2) : ?>
67        <hr>
68        <?php endif ?>
69
70        <h3><?= I18N::translate('Parents') ?></h3>
71
72        <p>
73            <?= I18N::translate('An individual can have more than one set of parents.  For example, birth and adopted.') ?>
74            <br>
75            <?= I18N::translate('The first family in the list will be used in charts, lists, reports, etc.') ?>
76        </p>
77
78        <div class="wt-sortable-list wt-sortable-list-famc">
79            <?php foreach ($famc_facts as $fact) : ?>
80                <div class="card my-2 wt-sortable-item" data-sortbydate="<?= $fact->target()->getMarriageDate()->julianDay() ?>">
81                    <input type="hidden" name="order[]" value="<?= $fact->id() ?>">
82                    <div class="card-header">
83                        <?= view('edit/reorder-card-header', ['title' => $fact->target()->fullName() . ($fact->attribute('PEDI') === '' ? '' : ' — ' . Registry::elementFactory()->make('INDI:FAMC:PEDI')->value($fact->attribute('PEDI'), $tree))]) ?>
84                    </div>
85                    <div class="card-body">
86                        <?= $fact->target()->formatFirstMajorFact(Gedcom::MARRIAGE_EVENTS, 2) ?>
87                        <?= $fact->target()->formatFirstMajorFact(Gedcom::DIVORCE_EVENTS, 2) ?>
88                    </div>
89                </div>
90            <?php endforeach ?>
91        </div>
92    <?php endif ?>
93
94    <p>
95        <button class="btn btn-primary" type="submit">
96            <?= view('icons/save') ?>
97            <?= /* I18N: A button label. */ I18N::translate('save') ?>
98        </button>
99
100        <a class="btn btn-secondary" href="<?= e($individual->url()) ?>">
101            <?= view('icons/cancel') ?>
102            <?= /* I18N: A button label. */ I18N::translate('cancel') ?>
103        </a>
104    </p>
105
106    <?= csrf_field() ?>
107</form>
108
109<?php View::push('javascript') ?>
110<script>
111    const famc_list = document.querySelector(".wt-sortable-list-famc");
112    const fams_list = document.querySelector(".wt-sortable-list-fams");
113
114    if (famc_list !== null) {
115        new Sortable(famc_list, {
116            handle: ".card-header",
117        });
118    }
119
120    if (fams_list !== null) {
121        new Sortable(fams_list, {
122            handle: ".card-header",
123        });
124
125        $("#btn-default-order").on("click", function () {
126            $(".wt-sortable-list-fams .wt-sortable-item").sort(function (x, y) {
127                return Math.sign(x.dataset.wtSortByDate - y.dataset.wtSortByDate);
128            }).appendTo(".wt-sortable-list-fams");
129        });
130    }
131</script>
132<?php View::endpush() ?>
133