xref: /webtrees/resources/views/admin/trees.phtml (revision 852ede8c85e501a9df6f3c9d31e5933428e18cc2)
1<?php
2
3use Fisharebest\Webtrees\Auth;
4use Fisharebest\Webtrees\Http\RequestHandlers\ControlPanel;
5use Fisharebest\Webtrees\Http\RequestHandlers\CreateRepositoryModal;
6use Fisharebest\Webtrees\Http\RequestHandlers\CreateSourceModal;
7use Fisharebest\Webtrees\Http\RequestHandlers\CreateSubmitterModal;
8use Fisharebest\Webtrees\Http\RequestHandlers\DeleteTreeAction;
9use Fisharebest\Webtrees\Http\RequestHandlers\PendingChangesLogPage;
10use Fisharebest\Webtrees\Http\RequestHandlers\SelectDefaultTree;
11use Fisharebest\Webtrees\I18N;
12use Fisharebest\Webtrees\Site;
13use Fisharebest\Webtrees\View;
14use Illuminate\Database\Capsule\Manager as DB;
15
16?>
17
18<?php if (!empty($all_trees)): ?>
19    <?= view('components/breadcrumbs', ['links' => [route(ControlPanel::class) => I18N::translate('Control panel'), $title]]) ?>
20<?php endif ?>
21
22<h1><?= $title ?></h1>
23
24<?php if (empty($all_trees)) : ?>
25    <div class="alert alert-info">
26        <?= I18N::translate('You need to create a family tree.') ?>
27    </div>
28<?php endif ?>
29
30<div id="accordion" role="tablist" aria-multiselectable="true">
31    <?php foreach ($all_trees as $managed_tree) : ?>
32        <?php if (Auth::isManager($managed_tree)) : ?>
33            <div class="card">
34                <div class="card-header" role="tab" id="card-tree-header-<?= $managed_tree->id() ?>">
35                    <h2 class="mb-0">
36                        <?= view('icons/tree') ?>
37                        <a data-toggle="collapse" data-parent="#accordion" href="#card-tree-content-<?= $managed_tree->id() ?>" <?= $managed_tree == $tree || $managed_tree->getPreference('imported') === '0' ? 'aria-expanded="true"' : '' ?> aria-controls="card-tree-content-<?= $managed_tree->id() ?>">
38                            <?= e($managed_tree->name()) ?><?= e($managed_tree->title()) ?>
39                        </a>
40                    </h2>
41                </div>
42                <div id="card-tree-content-<?= $managed_tree->id() ?>" class="collapse<?= $managed_tree == $tree || $managed_tree->getPreference('imported') === '0' ? ' show' : '' ?>" role="tabpanel" aria-labelledby="panel-tree-header-<?= $managed_tree->id() ?>">
43                    <div class="card-body">
44                        <?php $importing = DB::table('gedcom_chunk')->where('gedcom_id', '=', $managed_tree->id())->where('imported', '=', 0)->exists() ?>
45                        <?php if ($importing) : ?>
46                            <div id="import<?= $managed_tree->id() ?>" class="col-xs-12">
47                                <div class="progress">
48                                    <?= I18N::translate('Calculating…') ?>
49                                </div>
50                            </div>
51                            <?php View::push('javascript'); ?>
52                                <script>
53                                    $("#import<?= $managed_tree->id() ?>").load("<?= route('import', ['tree' => $managed_tree->name()]) ?>", {});
54                                </script>
55                                <?php View::endpush() ?>
56                            <?php endif ?>
57                        <div class="row<?= $importing ? ' d-none' : '' ?>" id="actions<?= $managed_tree->id() ?>">
58                            <div class="col-sm-6 col-md-3">
59                                <h3>
60                                    <?= I18N::translate('Family tree') ?>
61                                </h3>
62                                <ul class="fa-ul">
63                                    <li>
64                                        <span class="fa-li"><?= view('icons/tree') ?></span>
65                                        <a href="<?= e(route('tree-page', ['tree' => $managed_tree->name()])) ?>">
66                                            <?= I18N::translate('Home page') ?>
67                                        </a>
68                                    </li>
69                                </ul>
70                                <ul class="fa-ul">
71                                    <!-- PREFERENCES -->
72                                    <li>
73                                        <span class="fa-li"><?= view('icons/preferences') ?></span>
74                                        <a href="<?= e(route('admin-trees-preferences', ['tree' => $managed_tree->name()])) ?>">
75                                            <?= I18N::translate('Preferences') ?>
76                                            <span class="sr-only">
77                                        <?= e($managed_tree->title()) ?>
78                                    </span>
79                                        </a>
80                                    </li>
81                                    <!-- PRIVACY -->
82                                    <li>
83                                        <span class="fa-li"><?= view('icons/lock') ?></span>
84                                        <a href="<?= e(route('tree-privacy', ['tree' => $managed_tree->name()])) ?>">
85                                            <?= I18N::translate('Privacy') ?>
86                                            <span class="sr-only">
87                                        <?= e($managed_tree->title()) ?>
88                                    </span>
89                                        </a>
90                                    </li>
91                                    <!-- DELETE -->
92                                    <?php if (count($all_trees) > 1 && Auth::isAdmin()) : ?>
93                                        <li>
94                                            <span class="fa-li"><?= view('icons/delete') ?></span>
95                                            <a href="#" data-post-url="<?= e(route(DeleteTreeAction::class, ['tree' => $managed_tree->name()])) ?>" data-confirm="<?= I18N::translate('Are you sure you want to delete “%s”?', e($managed_tree->title())) ?>">
96                                                <?= I18N::translate('Delete') ?>
97                                            </a>
98                                        </li>
99                                    <?php endif ?>
100
101                                    <!-- SET AS DEFAULT -->
102                                    <?php if (count($all_trees) > 1 && Auth::isAdmin()) : ?>
103                                        <li>
104                                            <span class="fa-li"><?= view('icons/favorite') ?></span>
105                                            <?php if ($managed_tree->name() === Site::getPreference('DEFAULT_GEDCOM')) : ?>
106                                                <?= I18N::translate('Default family tree') ?>
107                                            <?php else : ?>
108                                                <a href="#" onclick="document.defaultform<?= $managed_tree->id() ?>.submit();">
109                                                    <?= I18N::translate('Set as default') ?>
110                                                    <span class="sr-only"><?= e($managed_tree->title()) ?></span>
111                                                </a>
112                                                <form method="post" action="<?= route(SelectDefaultTree::class, ['tree' => $managed_tree->name()]) ?>" name="defaultform<?= $managed_tree->id() ?>">
113                                                    <?= csrf_field() ?>
114                                                    <!-- A11Y - forms need submit buttons, but they look ugly here -->
115                                                    <button class="sr-only" type="submit">
116                                                        <?= I18N::translate('Set as default') ?>
117                                                    </button>
118                                                </form>
119                                            <?php endif ?>
120                                        </li>
121                                    <?php endif ?>
122                                </ul>
123                            </div>
124                            <div class="col-sm-6 col-md-3">
125                                <h3>
126                                    <?= /* I18N: Individuals, sources, dates, places, etc. */
127                                    I18N::translate('Genealogy data') ?>
128                                </h3>
129                                <ul class="fa-ul">
130                                    <!-- FIND DUPLICATES -->
131                                    <li>
132                                        <span class="fa-li"><?= view('icons/copy') ?></span>
133                                        <a href="<?= e(route('admin-trees-duplicates', ['tree' => $managed_tree->name()])) ?>">
134                                            <?= I18N::translate('Find duplicates') ?>
135                                            <span class="sr-only">
136                                              <?= e($managed_tree->title()) ?>
137                                            </span>
138                                        </a>
139                                    </li>
140                                    <!-- MERGE -->
141                                    <li>
142                                        <span class="fa-li"><?= view('icons/merge') ?></span>
143                                        <a href="<?= e(route('merge-records', ['tree' => $managed_tree->name()])) ?>">
144                                            <?= I18N::translate('Merge records') ?>
145                                            <span class="sr-only">
146                                                <?= e($managed_tree->title()) ?>
147                                          </span>
148                                        </a>
149                                    </li>
150                                    <!-- UPDATE PLACE NAMES -->
151                                    <li>
152                                        <span class="fa-li"><?= view('icons/location') ?></span>
153                                        <a href="<?= e(route('admin-trees-places', ['tree' => $managed_tree->name()])) ?>">
154                                            <?= I18N::translate('Update place names') ?>
155                                            <span class="sr-only">
156                                                <?= e($managed_tree->title()) ?>
157                                            </span>
158                                        </a>
159                                    </li>
160                                    <!-- CHECK FOR ERRORS -->
161                                    <li>
162                                        <span class="fa-li"><?= view('icons/warning') ?></span>
163                                        <a href="<?= e(route('admin-trees-check', ['tree' => $managed_tree->name()])) ?>">
164                                            <?= I18N::translate('Check for errors') ?>
165                                            <span class="sr-only">
166                                                <?= e($managed_tree->title()) ?>
167                                            </span>
168                                        </a>
169                                    </li>
170                                    <!-- UNCONNECTED INDIVIDUALS -->
171                                    <li>
172                                        <span class="fa-li"><?= view('icons/unlink') ?></span>
173                                        <a href="<?= e(route('admin-trees-unconnected', ['tree' => $managed_tree->name()])) ?>">
174                                            <?= I18N::translate('Find unrelated individuals') ?>
175                                            <span class="sr-only">
176                                                <?= e($managed_tree->title()) ?>
177                                            </span>
178                                        </a>
179                                    </li>
180                                    <!-- RENUMBER -->
181                                    <li>
182                                        <span class="fa-li"><?= view('icons/sort') ?></span>
183                                        <a href="<?= e(route('admin-trees-renumber', ['tree' => $managed_tree->name()])) ?>">
184                                            <?= I18N::translate('Renumber') ?>
185                                            <span class="sr-only">
186                                        <?= e($managed_tree->title()) ?>
187                                    </span>
188                                        </a>
189                                    </li>
190                                    <!-- CHANGES -->
191                                    <li>
192                                        <span class="fa-li"><?= view('icons/edit') ?></span>
193                                        <a href="<?= route(PendingChangesLogPage::class, ['tree' => $managed_tree->name()]) ?>">
194                                            <?= I18N::translate('Changes log') ?>
195                                            <span class="sr-only">
196                                                <?= e($managed_tree->title()) ?>
197                                            </span>
198                                        </a>
199                                    </li>
200                                </ul>
201                            </div>
202                            <div class="clearfix visible-sm-block"></div>
203                            <div class="col-sm-6 col-md-3">
204                                <h3>
205                                    <?= I18N::translate('Add unlinked records') ?>
206                                </h3>
207                                <ul class="fa-ul">
208                                    <!-- UNLINKED INDIVIDUAL -->
209                                    <li>
210                                        <span class="fa-li"><?= view('icons/individual') ?></span>
211                                        <a href="<?= e(route('add-unlinked-individual', ['tree' => $managed_tree->name()])) ?>">
212                                            <?= I18N::translate('Individual') ?>
213                                            <span class="sr-only">
214                                                <?= e($managed_tree->title()) ?>
215                                            </span>
216                                        </a>
217                                    </li>
218                                    <!-- UNLINKED SOURCE -->
219                                    <li>
220                                        <span class="fa-li"><?= view('icons/source') ?></span>
221                                        <a href="#" data-href="<?= e(route(CreateSourceModal::class, ['tree' => $managed_tree->name()])) ?>" data-target="#wt-ajax-modal" data-toggle="modal">
222                                            <?= I18N::translate('Source') ?>
223                                            <span class="sr-only">
224                                                <?= e($managed_tree->title()) ?>
225                                            </span>
226                                        </a>
227                                    </li>
228                                    <!-- UNLINKED REPOSITORY -->
229                                    <li>
230                                        <span class="fa-li"><?= view('icons/repository') ?></span>
231                                        <a href="#" data-href="<?= e(route(CreateRepositoryModal::class, ['tree' => $managed_tree->name()])) ?>" data-target="#wt-ajax-modal" data-toggle="modal">
232                                            <?= I18N::translate('Repository') ?>
233                                            <span class="sr-only">
234                                                <?= e($managed_tree->title()) ?>
235                                            </span>
236                                        </a>
237                                    </li>
238                                    <!-- UNLINKED MEDIA OBJECT -->
239                                    <li>
240                                        <span class="fa-li"><?= view('icons/media') ?></span>
241                                        <a href="#" data-href="<?= e(route('create-media-object', ['tree' => $managed_tree->name()])) ?>" data-target="#wt-ajax-modal" data-toggle="modal">
242
243                                            <?= I18N::translate('Media object') ?>
244                                            <span class="sr-only">
245                                                <?= e($managed_tree->title()) ?>
246                                            </span>
247                                        </a>
248                                    </li>
249                                    <!-- UNLINKED NOTE -->
250                                    <li>
251                                        <span class="fa-li"><?= view('icons/note') ?></span>
252                                        <a href="#" data-href="<?= e(route('create-note-object', ['tree' => $managed_tree->name()])) ?>" data-target="#wt-ajax-modal" data-toggle="modal">
253                                            <span class="sr-only">
254                                                <?= e($managed_tree->title()) ?>
255                                            </span>
256                                            <?= I18N::translate('Shared note') ?>
257                                        </a>
258                                    </li>
259                                    <!-- UNLINKED SUBMITTER -->
260                                    <li>
261                                        <span class="fa-li"><?= view('icons/submitter') ?></span>
262                                        <a href="#" data-href="<?= e(route(CreateSubmitterModal::class, ['tree' => $managed_tree->name()])) ?>" data-target="#wt-ajax-modal" data-toggle="modal">
263                                            <span class="sr-only">
264                                                <?= e($managed_tree->title()) ?>
265                                            </span>
266                                            <?= I18N::translate('Submitter') ?>
267                                        </a>
268                                    </li>
269                                </ul>
270                            </div>
271                            <div class="col-sm-6 col-md-3">
272                                <h3>
273                                    <?= I18N::translate('GEDCOM file') ?>
274                                </h3>
275                                <ul class="fa-ul">
276                                    <!-- DOWNLOAD/Export -->
277                                    <li>
278                                        <span class="fa-li"><?= view('icons/download') ?></span>
279                                        <a href="<?= e(route('admin-trees-export', ['tree' => $managed_tree->name()])) ?>">
280                                            <?= I18N::translate('Export') ?>
281                                            <span class="sr-only">
282                                        <?= e($managed_tree->title()) ?>
283                                    </span>
284                                        </a>
285                                    </li>
286                                    <!-- UPLOAD/IMPORT -->
287                                    <li>
288                                        <span class="fa-li"><?= view('icons/upload') ?></span>
289                                        <a href="<?= e(route('admin-trees-import', ['tree' => $managed_tree->name()])) ?>">
290                                            <?= I18N::translate('Import') ?>
291                                            <span class="sr-only">
292                                        <?= e($managed_tree->title()) ?>
293                                    </span>
294                                        </a>
295                                    </li>
296                                </ul>
297                            </div>
298                        </div>
299                    </div>
300                </div>
301            </div>
302        <?php endif ?>
303    <?php endforeach ?>
304
305    <!-- BULK LOAD/SYNCHRONISE GEDCOM FILES -->
306    <?php if (count($gedcom_files) >= $multiple_tree_threshold) : ?>
307        <div class="card">
308            <div class="card-header" id="card-tree-create-header">
309                <h2 class="mb-0">
310                    <?= view('icons/sync') ?>
311                    <a data-toggle="collapse" data-parent="#accordion" href="#synchronize-gedcom-files">
312                        <?= I18N::translate('Synchronize family trees with GEDCOM files') ?>
313                    </a>
314                </h2>
315            </div>
316
317            <div id="synchronize-gedcom-files" class="panel-collapse collapse">
318                <div class="card-body">
319                    <p>
320                        <?= I18N::translate('Create, update, and delete a family tree for every GEDCOM file in the data folder.') ?>
321                    </p>
322                    <form method="post" action="<?= e(route('admin-trees-sync')) ?>" class="form form-horizontal">
323                        <?= csrf_field() ?>
324                        <button type="submit" class="btn btn-danger">
325                            <?= view('icons/save') ?>
326                            <?= /* I18N: A button label. */
327                            I18N::translate('continue') ?>
328                        </button>
329                        <p class="small text-muted">
330                            <?= I18N::translate('Caution! This may take a long time. Be patient.') ?>
331                        </p>
332                    </form>
333                </div>
334            </div>
335        </div>
336    <?php endif ?>
337</div>
338
339<?= view('modals/ajax') ?>
340