xref: /webtrees/resources/views/admin/trees-privacy.phtml (revision c8d78f19d0bdf4c0ec4728253bd37250d2e6cec4)
1b6c326d8SGreg Roach<?php
2b6c326d8SGreg Roach
3870365fbSGreg Roachuse Fisharebest\Webtrees\Auth;
40c0910bfSGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\ControlPanel;
56fd01894SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\ManageTrees;
66fd01894SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\TreePrivacyAction;
7269403b3SGreg Roachuse Fisharebest\Webtrees\I18N;
87c2c99faSGreg Roachuse Fisharebest\Webtrees\Tree;
9b6c326d8SGreg Roachuse Fisharebest\Webtrees\View;
10b6c326d8SGreg Roach
117c2c99faSGreg Roach/**
127c2c99faSGreg Roach * @var array<string,string> $all_tags
137c2c99faSGreg Roach * @var int                  $count_trees
147c2c99faSGreg Roach * @var array<string,string> $privacy_constants
157c2c99faSGreg Roach * @var array<int,object>    $privacy_restrictions
167c2c99faSGreg Roach * @var string               $title
177c2c99faSGreg Roach * @var Tree                 $tree
187c2c99faSGreg Roach */
197c2c99faSGreg Roach
20b6c326d8SGreg Roach?>
21dd6b2bfcSGreg Roach
226fd01894SGreg Roach<?= view('components/breadcrumbs', ['links' => [route(ControlPanel::class) => I18N::translate('Control panel'), route(ManageTrees::class, ['tree' => $tree->name()]) => I18N::translate('Manage family trees'), $title]]) ?>
23dd6b2bfcSGreg Roach
24dd6b2bfcSGreg Roach<h1><?= $title ?></h1>
25dd6b2bfcSGreg Roach
266fd01894SGreg Roach<form method="post" action="<?= e(route(TreePrivacyAction::class, ['tree' => $tree->name()])) ?>">
27dd6b2bfcSGreg Roach    <?= csrf_field() ?>
28dd6b2bfcSGreg Roach
29dd6b2bfcSGreg Roach    <!-- REQUIRE_AUTHENTICATION -->
30afc2d190SGreg Roach    <div class="row form-group mb-3">
31dd6b2bfcSGreg Roach        <div class="col-form-label col-sm-4">
32dd6b2bfcSGreg Roach            <label>
33dd6b2bfcSGreg Roach                <?= /* I18N: A configuration setting */ I18N::translate('Show the family tree') ?>
34dd6b2bfcSGreg Roach            </label>
35dd6b2bfcSGreg Roach            <div class="hidden-xs">
36dd6b2bfcSGreg Roach                <span class="badge visitors"><?= I18N::translate('visitors') ?></span>
37dd6b2bfcSGreg Roach                <span class="badge members"><?= I18N::translate('members') ?></span>
38dd6b2bfcSGreg Roach            </div>
39dd6b2bfcSGreg Roach        </div>
40dd6b2bfcSGreg Roach        <div class="col-sm-8">
41c9e11c2aSGreg Roach            <?= view('components/select', ['name' => 'REQUIRE_AUTHENTICATION', 'selected' => $tree->getPreference('REQUIRE_AUTHENTICATION'), 'options' => ['0' => I18N::translate('Show to visitors'), '1' => I18N::translate('Show to members')]]) ?>
42315eb316SGreg Roach            <div class="form-text">
43dd6b2bfcSGreg Roach                <?= /* I18N: Help text for the “Family tree” configuration setting */ I18N::translate('Enabling this option will force all visitors to sign in before they can view any data on the website.') ?>
44315eb316SGreg Roach            </div>
45dd6b2bfcSGreg Roach        </div>
46dd6b2bfcSGreg Roach    </div>
47dd6b2bfcSGreg Roach
48dd6b2bfcSGreg Roach    <!-- SHOW_DEAD_PEOPLE -->
49afc2d190SGreg Roach    <div class="row form-group mb-3">
50dd6b2bfcSGreg Roach        <div class="col-form-label col-sm-4">
51dd6b2bfcSGreg Roach            <label for="SHOW_DEAD_PEOPLE">
52dd6b2bfcSGreg Roach                <?= /* I18N: A configuration setting */ I18N::translate('Show dead individuals') ?>
53dd6b2bfcSGreg Roach            </label>
54dd6b2bfcSGreg Roach            <div class="hidden-xs">
55dd6b2bfcSGreg Roach                <span class="badge visitors"><?= I18N::translate('visitors') ?></span>
56dd6b2bfcSGreg Roach                <span class="badge members"><?= I18N::translate('members') ?></span>
57dd6b2bfcSGreg Roach            </div>
58dd6b2bfcSGreg Roach        </div>
59dd6b2bfcSGreg Roach        <div class="col-sm-8">
60870365fbSGreg Roach            <?= view('components/select', ['name' => 'SHOW_DEAD_PEOPLE', 'selected' => $tree->getPreference('SHOW_DEAD_PEOPLE'), 'options' => array_slice(Auth::accessLevelNames(), 0, 2, true)]) ?>
61315eb316SGreg Roach            <div class="form-text">
62dd6b2bfcSGreg Roach                <?= /* I18N: Help text for the “Show dead individuals” configuration setting */ I18N::translate('Set the privacy access level for all dead individuals.') ?>
63315eb316SGreg Roach            </div>
64dd6b2bfcSGreg Roach        </div>
65dd6b2bfcSGreg Roach    </div>
66dd6b2bfcSGreg Roach
67dd6b2bfcSGreg Roach
68dd6b2bfcSGreg Roach    <!-- MAX_ALIVE_AGE -->
69afc2d190SGreg Roach    <div class="row form-group mb-3">
70dd6b2bfcSGreg Roach        <label class="col-form-label col-sm-4" for="MAX_ALIVE_AGE">
71dd6b2bfcSGreg Roach            <?= I18N::translate('Age at which to assume an individual is dead') ?>
72dd6b2bfcSGreg Roach        </label>
73dd6b2bfcSGreg Roach        <div class="col-sm-8">
74315eb316SGreg Roach            <input class="form-control" id="MAX_ALIVE_AGE" min="1" max="9999" name="MAX_ALIVE_AGE" required type="number" value="<?= e($tree->getPreference('MAX_ALIVE_AGE')) ?>">
75315eb316SGreg Roach            <div class="form-text">
76dd6b2bfcSGreg Roach                <?= /* I18N: Help text for the “Age at which to assume an individual is dead” configuration setting */ I18N::translate('If this individual has any events other than death, burial, or cremation more recent than this number of years, they are considered to be “alive”. Children’s birth dates are considered to be such events for this purpose.') ?>
77315eb316SGreg Roach            </div>
78dd6b2bfcSGreg Roach        </div>
79dd6b2bfcSGreg Roach    </div>
80dd6b2bfcSGreg Roach
81dd6b2bfcSGreg Roach    <!-- HIDE_LIVE_PEOPLE -->
82afc2d190SGreg Roach    <fieldset class="row form-group mb-3">
83315eb316SGreg Roach        <legend class="col-sm-4 col-form-label">
84dd6b2bfcSGreg Roach            <?= /* I18N: A configuration setting */ I18N::translate('Show living individuals') ?>
85dd6b2bfcSGreg Roach            <div class="hidden-xs">
86dd6b2bfcSGreg Roach                <span class="badge visitors"><?= I18N::translate('visitors') ?></span>
87dd6b2bfcSGreg Roach                <span class="badge members"><?= I18N::translate('members') ?></span>
88dd6b2bfcSGreg Roach            </div>
89dd6b2bfcSGreg Roach        </legend>
90315eb316SGreg Roach
91dd6b2bfcSGreg Roach        <div class="col-sm-8">
92c9e11c2aSGreg Roach            <?= view('components/select', ['name' => 'HIDE_LIVE_PEOPLE', 'selected' => $tree->getPreference('HIDE_LIVE_PEOPLE'), 'options' => ['0' => I18N::translate('Show to visitors'), '1' => I18N::translate('Show to members')]]) ?>
93315eb316SGreg Roach            <div class="form-text">
94dd6b2bfcSGreg Roach                <?= /* I18N: Help text for the “Show living individuals” configuration setting */ I18N::translate('If you show living individuals to visitors, all other privacy restrictions are ignored. Do this only if all the data in your tree is public.') ?>
95dd6b2bfcSGreg Roach            </div>
96dd6b2bfcSGreg Roach        </div>
97dd6b2bfcSGreg Roach    </fieldset>
98dd6b2bfcSGreg Roach
99dd6b2bfcSGreg Roach    <!-- KEEP_ALIVE_YEARS_BIRTH / KEEP_ALIVE_YEARS_DEATH -->
100afc2d190SGreg Roach    <fieldset class="row form-group mb-3">
101dd6b2bfcSGreg Roach        <legend class="col-form-label col-sm-4">
102dd6b2bfcSGreg Roach            <?= /* I18N: A configuration setting. …who were born in the last XX years or died in the    last YY years */ I18N::translate('Extend privacy to dead individuals') ?>
103dd6b2bfcSGreg Roach        </legend>
104dd6b2bfcSGreg Roach        <div class="col-sm-8">
105dd6b2bfcSGreg Roach            <?php
106dd6b2bfcSGreg Roach            echo
107dd6b2bfcSGreg Roach                /* I18N: Extend privacy to dead individuals who were… */ I18N::translate(
108dd6b2bfcSGreg Roach                    'born in the last %1$s years or died in the last %2$s years',
109dd6b2bfcSGreg Roach                    '<input type="text" name="KEEP_ALIVE_YEARS_BIRTH" value="' . $tree->getPreference('KEEP_ALIVE_YEARS_BIRTH') . '" size="5" maxlength="3">',
110dd6b2bfcSGreg Roach                    '<input type="text" name="KEEP_ALIVE_YEARS_DEATH" value="' . $tree->getPreference('KEEP_ALIVE_YEARS_DEATH') . '" size="5" maxlength="3">'
111dd6b2bfcSGreg Roach                ) ?>
112315eb316SGreg Roach            <div class="form-text">
113dd6b2bfcSGreg Roach                <?= /* I18N: Help text for the “Extend privacy to dead individuals” configuration setting */ I18N::translate('In some countries, privacy laws apply not only to living individuals, but also to those who have died recently. This option will allow you to extend the privacy rules for living individuals to those who were born or died within a specified number of years. Leave these values empty to disable this feature.') ?>
114dd6b2bfcSGreg Roach            </div>
115dd6b2bfcSGreg Roach        </div>
116dd6b2bfcSGreg Roach    </fieldset>
117dd6b2bfcSGreg Roach
118dd6b2bfcSGreg Roach    <!-- SHOW_LIVING_NAMES -->
119afc2d190SGreg Roach    <div class="row form-group mb-3">
120dd6b2bfcSGreg Roach        <div class="col-form-label col-sm-4">
121dd6b2bfcSGreg Roach            <label for="SHOW_LIVING_NAMES">
122dd6b2bfcSGreg Roach                <?= /* I18N: A configuration setting */ I18N::translate('Show names of private individuals') ?>
123dd6b2bfcSGreg Roach            </label>
124dd6b2bfcSGreg Roach            <div class="hidden-xs">
125dd6b2bfcSGreg Roach                <span class="badge visitors"><?= I18N::translate('visitors') ?></span>
126dd6b2bfcSGreg Roach                <span class="badge members"><?= I18N::translate('members') ?></span>
127dd6b2bfcSGreg Roach                <span class="badge managers"><?= I18N::translate('managers') ?></span>
128dd6b2bfcSGreg Roach            </div>
129dd6b2bfcSGreg Roach        </div>
130dd6b2bfcSGreg Roach        <div class="col-sm-8">
131870365fbSGreg Roach            <?= view('components/select', ['name' => 'SHOW_LIVING_NAMES', 'selected' => $tree->getPreference('SHOW_LIVING_NAMES'), 'options' => array_slice(Auth::accessLevelNames(), 0, 3, true)]) ?>
132315eb316SGreg Roach            <div class="form-text">
133dd6b2bfcSGreg Roach                <?= /* I18N: Help text for the “Show names of private individuals” configuration setting */ I18N::translate('This option will show the names (but no other details) of private individuals. Individuals are private if they are still alive or if a privacy restriction has been added to their individual record. To hide a specific name, add a privacy restriction to that name record.') ?>
134315eb316SGreg Roach            </div>
135dd6b2bfcSGreg Roach        </div>
136dd6b2bfcSGreg Roach    </div>
137dd6b2bfcSGreg Roach
138dd6b2bfcSGreg Roach    <!-- SHOW_PRIVATE_RELATIONSHIPS -->
139afc2d190SGreg Roach    <div class="row form-group mb-3">
140dd6b2bfcSGreg Roach        <div class="col-form-label col-sm-4">
141dd6b2bfcSGreg Roach            <label for="SHOW_PRIVATE_RELATIONSHIPS">
142dd6b2bfcSGreg Roach                <?= /* I18N: A configuration setting */ I18N::translate('Show private relationships') ?>
143dd6b2bfcSGreg Roach            </label>
144dd6b2bfcSGreg Roach            <div class="hidden-xs">
145dd6b2bfcSGreg Roach                <span class="badge visitors"><?= I18N::translate('visitors') ?></span>
146dd6b2bfcSGreg Roach                <span class="badge members"><?= I18N::translate('members') ?></span>
147dd6b2bfcSGreg Roach            </div>
148dd6b2bfcSGreg Roach        </div>
149dd6b2bfcSGreg Roach        <div class="col-sm-8">
150c9e11c2aSGreg Roach            <?= view('components/select', ['name' => 'SHOW_PRIVATE_RELATIONSHIPS', 'selected' => $tree->getPreference('SHOW_PRIVATE_RELATIONSHIPS'), 'options' => ['0' => I18N::translate('Hide from everyone'), '1' => I18N::translate('Show to visitors')]]) ?>
151315eb316SGreg Roach            <div class="form-text">
152dd6b2bfcSGreg Roach                <?= /* I18N: Help text for the “Show private relationships” configuration setting */ I18N::translate('This option will retain family links in private records. This means that you will see empty “private” boxes on the pedigree chart and on other charts with private individuals.') ?>
153315eb316SGreg Roach            </div>
154dd6b2bfcSGreg Roach        </div>
155dd6b2bfcSGreg Roach    </div>
156dd6b2bfcSGreg Roach    <h2><?= /* I18N: Privacy restrictions are set by RESN tags in GEDCOM. */ I18N::translate('Privacy restrictions') ?></h2>
157dd6b2bfcSGreg Roach    <p>
158dd6b2bfcSGreg Roach        <?= /* I18N: Privacy restrictions are RESN tags in GEDCOM. */ I18N::translate('You can set the access for a specific record, fact, or event by adding a restriction to it. If a record, fact, or event does not have a restriction, the following default restrictions will be used.') ?>
159dd6b2bfcSGreg Roach    </p>
160dd6b2bfcSGreg Roach
161dd6b2bfcSGreg Roach    <script id="new-resn-template" type="text/html">
162dd6b2bfcSGreg Roach        <tr>
163dd6b2bfcSGreg Roach            <td>
164*c8d78f19SGreg Roach                <select class="form-control record-type-selector mb-3">
165ac5ee73fSGreg Roach                    <option value="all"><?= I18N::translate('All records') ?></option>
166dd6b2bfcSGreg Roach                    <option value="individual"><?= I18N::translate('Individual') ?></option>
167dd6b2bfcSGreg Roach                    <option value="family"><?= I18N::translate('Family') ?></option>
168dd6b2bfcSGreg Roach                    <option value="source"><?= I18N::translate('Source') ?></option>
169dd6b2bfcSGreg Roach                    <option value="repository"><?= I18N::translate('Repository') ?></option>
170dd6b2bfcSGreg Roach                    <option value="note"><?= I18N::translate('Note') ?></option>
171dd6b2bfcSGreg Roach                    <option value="media"><?= I18N::translate('Media object') ?></option>
172dd6b2bfcSGreg Roach                </select>
173ac5ee73fSGreg Roach
174ac5ee73fSGreg Roach                <div class="select-record select-all">
175ac5ee73fSGreg Roach                    <input type="hidden" name="xref[]">
176ac5ee73fSGreg Roach                </div>
177ac5ee73fSGreg Roach
17864b4a654SGreg Roach                <div class="select-record select-individual d-none">
179ac5ee73fSGreg Roach                    <?= view('components/select-individual', ['name' => 'xref[]', 'id' => '', 'tree' => $tree, 'disabled' => true]) ?>
18064b4a654SGreg Roach                </div>
181ac5ee73fSGreg Roach
18264b4a654SGreg Roach                <div class="select-record select-family d-none">
183ac5ee73fSGreg Roach                    <?= view('components/select-family', ['name' => 'xref[]', 'id' => '', 'tree' => $tree, 'disabled' => true]) ?>
18464b4a654SGreg Roach                </div>
185ac5ee73fSGreg Roach
18664b4a654SGreg Roach                <div class="select-record select-source d-none">
187ac5ee73fSGreg Roach                    <?= view('components/select-source', ['name' => 'xref[]', 'id' => '', 'tree' => $tree, 'disabled' => true]) ?>
18864b4a654SGreg Roach                </div>
189ac5ee73fSGreg Roach
19064b4a654SGreg Roach                <div class="select-record select-repository d-none">
191ac5ee73fSGreg Roach                    <?= view('components/select-repository', ['name' => 'xref[]', 'id' => '', 'tree' => $tree, 'disabled' => true]) ?>
19264b4a654SGreg Roach                </div>
193ac5ee73fSGreg Roach
19464b4a654SGreg Roach                <div class="select-record select-note d-none">
195ac5ee73fSGreg Roach                    <?= view('components/select-note', ['name' => 'xref[]', 'id' => '', 'tree' => $tree, 'disabled' => true]) ?>
19664b4a654SGreg Roach                </div>
197ac5ee73fSGreg Roach
19864b4a654SGreg Roach                <div class="select-record select-media d-none">
199ac5ee73fSGreg Roach                    <?= view('components/select-media', ['name' => 'xref[]', 'id' => '', 'tree' => $tree, 'disabled' => true]) ?>
20064b4a654SGreg Roach                </div>
201dd6b2bfcSGreg Roach            </td>
202ac5ee73fSGreg Roach
203dd6b2bfcSGreg Roach            <td>
204ac5ee73fSGreg Roach                <?= view('components/select', ['name' => 'tag_type[]', 'id' => '', 'selected' => '', 'options' => $all_tags]) ?>
205dd6b2bfcSGreg Roach            </td>
206ac5ee73fSGreg Roach
207dd6b2bfcSGreg Roach            <td>
208ac5ee73fSGreg Roach                <?= view('components/select', ['name' => 'resn[]', 'id' => '', 'selected' => 'privacy', 'options' => $privacy_constants]) ?>
209dd6b2bfcSGreg Roach            </td>
210ac5ee73fSGreg Roach
211dd6b2bfcSGreg Roach            <td>
212dd6b2bfcSGreg Roach            </td>
213dd6b2bfcSGreg Roach        </tr>
214dd6b2bfcSGreg Roach    </script>
215dd6b2bfcSGreg Roach
216dd6b2bfcSGreg Roach    <table class="table table-bordered table-sm table-hover" id="default-resn">
217315eb316SGreg Roach        <caption class="visually-hidden">
218dd6b2bfcSGreg Roach            <?= I18N::translate('Privacy restrictions - these apply to records and facts that do not contain a GEDCOM RESN tag') ?>
219dd6b2bfcSGreg Roach        </caption>
220dd6b2bfcSGreg Roach        <thead>
221dd6b2bfcSGreg Roach            <tr>
222dd6b2bfcSGreg Roach                <th>
223dd6b2bfcSGreg Roach                    <?= I18N::translate('Record') ?>
224dd6b2bfcSGreg Roach                </th>
225dd6b2bfcSGreg Roach                <th>
226dd6b2bfcSGreg Roach                    <?= I18N::translate('Fact or event') ?>
227dd6b2bfcSGreg Roach                </th>
228dd6b2bfcSGreg Roach                <th>
229dd6b2bfcSGreg Roach                    <?= I18N::translate('Access level') ?>
230dd6b2bfcSGreg Roach                </th>
231dd6b2bfcSGreg Roach                <th>
232dd6b2bfcSGreg Roach                    <button class="btn btn-primary" id="add-resn" type="button">
233dd6b2bfcSGreg Roach                <?= view('icons/add') ?>
234dd6b2bfcSGreg Roach                        <?= /* I18N: A button label. */ I18N::translate('add') ?>
235dd6b2bfcSGreg Roach                    </button>
236dd6b2bfcSGreg Roach                </th>
237dd6b2bfcSGreg Roach            </tr>
238dd6b2bfcSGreg Roach        </thead>
239dd6b2bfcSGreg Roach        <tbody>
240dd6b2bfcSGreg Roach            <?php foreach ($privacy_restrictions as $privacy_restriction) : ?>
241dd6b2bfcSGreg Roach                <tr>
242dd6b2bfcSGreg Roach                    <td>
243dd6b2bfcSGreg Roach                        <?php if ($privacy_restriction->record) : ?>
24439ca88baSGreg Roach                            <a href="<?= e($privacy_restriction->record->url()) ?>"><?= $privacy_restriction->record->fullName() ?></a>
245dd6b2bfcSGreg Roach                        <?php elseif ($privacy_restriction->xref) : ?>
246dd6b2bfcSGreg Roach                            <div class="text-danger">
247dd6b2bfcSGreg Roach                                <?= $privacy_restriction->xref ?><?= I18N::translate('This record does not exist.') ?>
248dd6b2bfcSGreg Roach                            </div>
249dd6b2bfcSGreg Roach                        <?php else : ?>
250dd6b2bfcSGreg Roach                            <div class="text-muted">
251dd6b2bfcSGreg Roach                                <?= I18N::translate('All records') ?>
252dd6b2bfcSGreg Roach                            </div>
253dd6b2bfcSGreg Roach                        <?php endif ?>
254dd6b2bfcSGreg Roach                    </td>
255dd6b2bfcSGreg Roach                    <td>
256cd494761SGreg Roach                        <?php if ($privacy_restriction->tag_label === '') : ?>
257dd6b2bfcSGreg Roach                            <div class="text-muted">
258dd6b2bfcSGreg Roach                                <?= I18N::translate('All facts and events') ?>
259dd6b2bfcSGreg Roach                            </div>
260cd494761SGreg Roach                        <?php else : ?>
261cd494761SGreg Roach                            <?= $privacy_restriction->tag_label ?>
262dd6b2bfcSGreg Roach                        <?php endif ?>
263dd6b2bfcSGreg Roach                    </td>
264dd6b2bfcSGreg Roach                    <td>
265138139c2SGreg Roach                        <?= Auth::privacyRuleNames()[$privacy_restriction->resn] ?>
266dd6b2bfcSGreg Roach                    </td>
267dd6b2bfcSGreg Roach                    <td>
268dd6b2bfcSGreg Roach                        <label for="delete-<?= $privacy_restriction->default_resn_id ?>">
269dd6b2bfcSGreg Roach                            <input id="delete-<?= $privacy_restriction->default_resn_id ?>" name="delete[]" type="checkbox" value="<?= $privacy_restriction->default_resn_id ?>">
270dd6b2bfcSGreg Roach                            <?= I18N::translate('Delete') ?>
271dd6b2bfcSGreg Roach                        </label>
272dd6b2bfcSGreg Roach                    </td>
273dd6b2bfcSGreg Roach                </tr>
274dd6b2bfcSGreg Roach            <?php endforeach ?>
275dd6b2bfcSGreg Roach        </tbody>
276dd6b2bfcSGreg Roach    </table>
277dd6b2bfcSGreg Roach
278afc2d190SGreg Roach    <div class="row form-group mb-3">
279dd6b2bfcSGreg Roach        <div class="offset-sm-4 col-sm-8">
280dd6b2bfcSGreg Roach            <button type="submit" class="btn btn-primary">
281dd6b2bfcSGreg Roach                <?= view('icons/save') ?>
282dd6b2bfcSGreg Roach                <?= I18N::translate('save') ?>
283dd6b2bfcSGreg Roach            </button>
2840c0910bfSGreg Roach
2856fd01894SGreg Roach            <a class="btn btn-secondary" href="<?= route(ManageTrees::class, ['tree' => $tree->name()]) ?>">
286dd6b2bfcSGreg Roach                <?= view('icons/cancel') ?>
287dd6b2bfcSGreg Roach                <?= I18N::translate('cancel') ?>
288dd6b2bfcSGreg Roach            </a>
289dd6b2bfcSGreg Roach            <!-- Coming soon
290dd6b2bfcSGreg Roach            <div class="form-check">
291dd6b2bfcSGreg Roach                <?php if ($count_trees > 1) : ?>
292dd6b2bfcSGreg Roach                <label>
293dd6b2bfcSGreg Roach                    <input type="checkbox" name="all_trees">
294dd6b2bfcSGreg Roach                    <?= /* I18N: Label for checkbox */ I18N::translate('Apply these preferences to all family trees') ?>
295dd6b2bfcSGreg Roach                </label>
296dd6b2bfcSGreg Roach                <?php endif ?>
297dd6b2bfcSGreg Roach            </div>
298dd6b2bfcSGreg Roach            <div class="form-check">
299dd6b2bfcSGreg Roach                <label>
300dd6b2bfcSGreg Roach                    <input type="checkbox" name="new_trees">
301dd6b2bfcSGreg Roach                    <?= /* I18N: Label for checkbox */ I18N::translate('Apply these preferences to new family trees') ?>
302dd6b2bfcSGreg Roach                </label>
303dd6b2bfcSGreg Roach            </div>
304dd6b2bfcSGreg Roach        </div>
305dd6b2bfcSGreg Roach        -->
306dd6b2bfcSGreg Roach        </div>
307dd6b2bfcSGreg Roach
308dd6b2bfcSGreg Roach</form>
309dd6b2bfcSGreg Roach
310dd6b2bfcSGreg Roach<?php View::push('javascript') ?>
311dd6b2bfcSGreg Roach<script>
312*c8d78f19SGreg Roach  'use strict';
313dd6b2bfcSGreg Roach
314dd6b2bfcSGreg Roach  /**
315dd6b2bfcSGreg Roach   * Hide/show the feedback labels for a privacy option.
316dd6b2bfcSGreg Roach   *
317dd6b2bfcSGreg Roach   * @param sel    the control to change
318dd6b2bfcSGreg Roach   * @param who    "visitors", "members" or "managers"
319dd6b2bfcSGreg Roach   * @param access true or false
320dd6b2bfcSGreg Roach   */
321dd6b2bfcSGreg Roach  function setPrivacyFeedback (sel, who, access) {
322*c8d78f19SGreg Roach    var formGroup = $(sel).closest('.form-group');
323dd6b2bfcSGreg Roach
324dd6b2bfcSGreg Roach    if (access) {
325*c8d78f19SGreg Roach      $('.' + who, formGroup).addClass('bg-success').removeClass('bg-secondary');
326*c8d78f19SGreg Roach      $('.' + who + ' i', formGroup).addClass('fa-check').removeClass('fa-times');
327dd6b2bfcSGreg Roach    } else {
328*c8d78f19SGreg Roach      $('.' + who, formGroup).addClass('bg-secondary').removeClass('bg-success');
329*c8d78f19SGreg Roach      $('.' + who + ' i', formGroup).addClass('fa-times').removeClass('fa-check');
330dd6b2bfcSGreg Roach    }
331dd6b2bfcSGreg Roach  }
332dd6b2bfcSGreg Roach
333dd6b2bfcSGreg Roach  /**
334dd6b2bfcSGreg Roach   * Update all the privacy feedback labels.
335dd6b2bfcSGreg Roach   */
336dd6b2bfcSGreg Roach  function updatePrivacyFeedback () {
337*c8d78f19SGreg Roach    var requireAuthentication = parseInt($('[name=REQUIRE_AUTHENTICATION]').val(), 10);
338*c8d78f19SGreg Roach    var showDeadPeople = parseInt($('[name=SHOW_DEAD_PEOPLE]').val(), 10);
339*c8d78f19SGreg Roach    var hideLivePeople = parseInt($('[name=HIDE_LIVE_PEOPLE]').val(), 10);
340*c8d78f19SGreg Roach    var showLivingNames = parseInt($('[name=SHOW_LIVING_NAMES]').val(), 10);
341*c8d78f19SGreg Roach    var showPrivateRelationships = parseInt($('[name=SHOW_PRIVATE_RELATIONSHIPS]').val(), 10);
342dd6b2bfcSGreg Roach
343*c8d78f19SGreg Roach    setPrivacyFeedback('[name=REQUIRE_AUTHENTICATION]', 'visitors', requireAuthentication === 0);
344*c8d78f19SGreg Roach    setPrivacyFeedback('[name=REQUIRE_AUTHENTICATION]', 'members', true);
345dd6b2bfcSGreg Roach
346*c8d78f19SGreg Roach    setPrivacyFeedback('[name=SHOW_DEAD_PEOPLE]', 'visitors', requireAuthentication === 0 && (showDeadPeople >= 2 || hideLivePeople === 0));
347*c8d78f19SGreg Roach    setPrivacyFeedback('[name=SHOW_DEAD_PEOPLE]', 'members', showDeadPeople >= 1 || hideLivePeople === 0);
348dd6b2bfcSGreg Roach
349*c8d78f19SGreg Roach    setPrivacyFeedback('[name=HIDE_LIVE_PEOPLE]', 'visitors', requireAuthentication === 0 && hideLivePeople === 0);
350*c8d78f19SGreg Roach    setPrivacyFeedback('[name=HIDE_LIVE_PEOPLE]', 'members', true);
351dd6b2bfcSGreg Roach
352*c8d78f19SGreg Roach    setPrivacyFeedback('[name=SHOW_LIVING_NAMES]', 'visitors', requireAuthentication === 0 && showLivingNames >= 2);
353*c8d78f19SGreg Roach    setPrivacyFeedback('[name=SHOW_LIVING_NAMES]', 'members', showLivingNames >= 1);
354*c8d78f19SGreg Roach    setPrivacyFeedback('[name=SHOW_LIVING_NAMES]', 'managers', showLivingNames >= 0);
355dd6b2bfcSGreg Roach
356*c8d78f19SGreg Roach    setPrivacyFeedback('[name=SHOW_PRIVATE_RELATIONSHIPS]', 'visitors', requireAuthentication === 0 && showPrivateRelationships >= 1);
357*c8d78f19SGreg Roach    setPrivacyFeedback('[name=SHOW_PRIVATE_RELATIONSHIPS]', 'members', showPrivateRelationships >= 1);
358dd6b2bfcSGreg Roach  }
359dd6b2bfcSGreg Roach
360dd6b2bfcSGreg Roach  // Activate the privacy feedback labels.
361dd6b2bfcSGreg Roach  updatePrivacyFeedback();
362*c8d78f19SGreg Roach  $('[name=REQUIRE_AUTHENTICATION], [name=HIDE_LIVE_PEOPLE], [name=SHOW_DEAD_PEOPLE], [name=SHOW_LIVING_NAMES], [name=SHOW_PRIVATE_RELATIONSHIPS]').on('change', function () {
363dd6b2bfcSGreg Roach    updatePrivacyFeedback();
364dd6b2bfcSGreg Roach  });
365dd6b2bfcSGreg Roach
366dd6b2bfcSGreg Roach  // Mute a line when it is marked for deletion
367*c8d78f19SGreg Roach  $('#default-resn').on('click', 'input[type=checkbox]', function () {
368*c8d78f19SGreg Roach    if ($(this).prop('checked')) {
369*c8d78f19SGreg Roach      $($(this).closest('tr').addClass('text-muted'));
370dd6b2bfcSGreg Roach    } else {
371*c8d78f19SGreg Roach      $($(this).closest('tr').removeClass('text-muted'));
372dd6b2bfcSGreg Roach    }
373dd6b2bfcSGreg Roach  });
374dd6b2bfcSGreg Roach
375dd6b2bfcSGreg Roach  // Add a new row to the table
376*c8d78f19SGreg Roach  $('#add-resn').on('click', function () {
377*c8d78f19SGreg Roach    $('#default-resn tbody').prepend($('#new-resn-template').html());
378269403b3SGreg Roach
379*c8d78f19SGreg Roach    document.querySelectorAll('#default-resn tbody tr select.tom-select')
380*c8d78f19SGreg Roach      .forEach(element => webtrees.initializeTomSelect(element));
381269403b3SGreg Roach
382*c8d78f19SGreg Roach
383*c8d78f19SGreg Roach//      .on('select2:unselect', function (evt) {
384*c8d78f19SGreg Roach//        $(evt.delegateTarget).append('<option value="" selected="selected"></option>');
385*c8d78f19SGreg Roach//      });
386*c8d78f19SGreg Roach
387*c8d78f19SGreg Roach
388*c8d78f19SGreg Roach    let row = document.getElementById('default-resn').querySelector('tbody tr');
389*c8d78f19SGreg Roach    console.log(row.querySelector('select'));
390*c8d78f19SGreg Roach    webtrees.initializeIFSRO(row.querySelector('select'), row);
391dd6b2bfcSGreg Roach  });
392dd6b2bfcSGreg Roach</script>
393dd6b2bfcSGreg Roach<?php View::endpush() ?>
394