xref: /webtrees/resources/views/admin/control-panel.phtml (revision 040e7dbaf82a0aee63813e56eb6c22596f79f9f2)
1beefaa8eSGreg Roach<?php
2beefaa8eSGreg Roach
3e381f98dSGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\BroadcastPage;
4fd6c003fSGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\CleanDataFolder;
5b1a54200SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\ControlPanel;
65afbc57aSGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\CreateTreePage;
722e73debSGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\PendingChanges;
8b1a54200SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\PhpInformation;
957bfa969SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\SiteLogsPage;
10beefaa8eSGreg Roachuse Fisharebest\Webtrees\I18N;
11b1a54200SGreg Roachuse Fisharebest\Webtrees\Module\FamilyListModule;
12b1a54200SGreg Roachuse Fisharebest\Webtrees\Module\IndividualListModule;
13b1a54200SGreg Roachuse Fisharebest\Webtrees\Module\MediaListModule;
14beefaa8eSGreg Roachuse Fisharebest\Webtrees\Module\ModuleConfigInterface;
15beefaa8eSGreg Roachuse Fisharebest\Webtrees\Module\ModuleCustomInterface;
16b1a54200SGreg Roachuse Fisharebest\Webtrees\Module\NoteListModule;
17b1a54200SGreg Roachuse Fisharebest\Webtrees\Module\RepositoryListModule;
18b1a54200SGreg Roachuse Fisharebest\Webtrees\Module\SourceListModule;
19beefaa8eSGreg Roachuse Fisharebest\Webtrees\Webtrees;
20beefaa8eSGreg Roachuse Illuminate\Support\Collection;
21beefaa8eSGreg Roach
22beefaa8eSGreg Roach/**
23beefaa8eSGreg Roach * @var string     $latest_version
24beefaa8eSGreg Roach * @var string     $title
25beefaa8eSGreg Roach * @var Collection $server_errors
26beefaa8eSGreg Roach * @var Collection $server_warnings
27beefaa8eSGreg Roach */
28beefaa8eSGreg Roach
29beefaa8eSGreg Roach?>
30dd6b2bfcSGreg Roach
31dd6b2bfcSGreg Roach<h1><?= $title ?></h1>
32dd6b2bfcSGreg Roach
33dd6b2bfcSGreg Roach<!-- WEBSITE / WEBTREES -->
34dd6b2bfcSGreg Roach<div class="card mb-4">
35dd6b2bfcSGreg Roach    <div class="card-header">
36dd6b2bfcSGreg Roach        <h2 class="mb-0">
37dd6b2bfcSGreg Roach            <?= I18N::translate('Website') ?>
384ebbf4abSGreg Roach            <span class="badge badge-secondary" dir="ltr">
398d0ebef0SGreg Roach                <?= e(Webtrees::VERSION) ?>
40dd6b2bfcSGreg Roach            </span>
41dd6b2bfcSGreg Roach        </h2>
42dd6b2bfcSGreg Roach    </div>
43dd6b2bfcSGreg Roach    <div class="card-body">
44b7059dccSGreg Roach        <?php foreach ($server_errors as $server_error) : ?>
45b7059dccSGreg Roach            <p class="alert alert-danger"><?= $server_error ?></p>
46b7059dccSGreg Roach        <?php endforeach ?>
47b7059dccSGreg Roach
48dd6b2bfcSGreg Roach        <?php foreach ($server_warnings as $server_warning) : ?>
49dd6b2bfcSGreg Roach            <p class="alert alert-warning"><?= $server_warning ?></p>
50dd6b2bfcSGreg Roach        <?php endforeach ?>
51dd6b2bfcSGreg Roach
52dd6b2bfcSGreg Roach        <p class="card-text">
53dd6b2bfcSGreg Roach            <?= /* I18N: %s is a URL/link to the project website */
54dd6b2bfcSGreg Roach            I18N::translate('Support and documentation can be found at %s.', '<a href="https://webtrees.net/">webtrees.net</a>') ?>
55dd6b2bfcSGreg Roach        </p>
56dd6b2bfcSGreg Roach        <p class="card-text ">
57dd6b2bfcSGreg Roach            <?php if ($latest_version === '') : ?>
58dd6b2bfcSGreg Roach                <?= I18N::translate('No upgrade information is available.') ?>
598d0ebef0SGreg Roach            <?php elseif (version_compare(Webtrees::VERSION, $latest_version) < 0) : ?>
60dd6b2bfcSGreg Roach                <?= I18N::translate('A new version of webtrees is available.') ?>
61dd6b2bfcSGreg Roach                <a href="<?= e(route('upgrade')) ?>" class="error">
62dd6b2bfcSGreg Roach                    <?= /* I18N: %s is a version number */
63dd6b2bfcSGreg Roach                    I18N::translate('Upgrade to webtrees %s.', e($latest_version)) ?>
64dd6b2bfcSGreg Roach                </a>
65dd6b2bfcSGreg Roach            <?php else : ?>
66dd6b2bfcSGreg Roach                <?= I18N::translate('This is the latest version of webtrees. No upgrade is available.') ?>
67dd6b2bfcSGreg Roach            <?php endif ?>
68dd6b2bfcSGreg Roach        </p>
69dd6b2bfcSGreg Roach
70dd6b2bfcSGreg Roach        <div class="row">
71dd6b2bfcSGreg Roach            <div class="col-sm-6">
72dd6b2bfcSGreg Roach                <ul class="fa-ul">
73dd6b2bfcSGreg Roach                    <li>
74dd6b2bfcSGreg Roach                        <span class="fa-li"><?= view('icons/preferences') ?></span>
75dd6b2bfcSGreg Roach                        <a href="<?= e(route('admin-site-preferences')) ?>">
76dd6b2bfcSGreg Roach                            <?= I18N::translate('Website preferences') ?>
77dd6b2bfcSGreg Roach                        </a>
78dd6b2bfcSGreg Roach                    </li>
79dd6b2bfcSGreg Roach                    <li>
80a24f7142SGreg Roach                        <span class="fa-li"><?= view('icons/email') ?></span>
81dd6b2bfcSGreg Roach                        <a href="<?= e(route('admin-site-mail')) ?>">
82dd6b2bfcSGreg Roach                            <?= I18N::translate('Sending email') ?>
83dd6b2bfcSGreg Roach                        </a>
84dd6b2bfcSGreg Roach                    </li>
85dd6b2bfcSGreg Roach                    <li>
86a24f7142SGreg Roach                        <span class="fa-li"><?= view('icons/user') ?></span>
87dd6b2bfcSGreg Roach                        <a href="<?= e(route('admin-site-registration')) ?>">
88dd6b2bfcSGreg Roach                            <?= I18N::translate('Sign-in and registration') ?>
89dd6b2bfcSGreg Roach                        </a>
90dd6b2bfcSGreg Roach                    </li>
91dd6b2bfcSGreg Roach                </ul>
92dd6b2bfcSGreg Roach            </div>
93dd6b2bfcSGreg Roach            <div class="col-sm-6">
94dd6b2bfcSGreg Roach                <ul class="fa-ul">
95dd6b2bfcSGreg Roach                    <li>
96a24f7142SGreg Roach                        <span class="fa-li"><?= view('icons/list') ?></span>
9757bfa969SGreg Roach                        <a href="<?= e(route(SiteLogsPage::class)) ?>">
98dd6b2bfcSGreg Roach                            <?= I18N::translate('Website logs') ?>
99dd6b2bfcSGreg Roach                        </a>
100dd6b2bfcSGreg Roach                    </li>
101dd6b2bfcSGreg Roach                    <li>
102a24f7142SGreg Roach                        <span class="fa-li"><?= view('icons/delete') ?></span>
103fd6c003fSGreg Roach                        <a href="<?= e(route(CleanDataFolder::class)) ?>">
104dd6b2bfcSGreg Roach                            <?= I18N::translate('Clean up data folder') ?>
105dd6b2bfcSGreg Roach                        </a>
106dd6b2bfcSGreg Roach                    </li>
107dd6b2bfcSGreg Roach                    <li>
108a24f7142SGreg Roach                        <span class="fa-li"><?= view('icons/help') ?></span>
109b1a54200SGreg Roach                        <a href="<?= e(route(PhpInformation::class)) ?>">
110dd6b2bfcSGreg Roach                            <?= I18N::translate('Server information') ?>
111dd6b2bfcSGreg Roach                        </a>
112dd6b2bfcSGreg Roach                    </li>
113dd6b2bfcSGreg Roach                </ul>
114dd6b2bfcSGreg Roach            </div>
115dd6b2bfcSGreg Roach        </div>
116dd6b2bfcSGreg Roach    </div>
117dd6b2bfcSGreg Roach</div>
118dd6b2bfcSGreg Roach
119dd6b2bfcSGreg Roach<!-- FAMILY TREES -->
1204e73f0bdSGreg Roach<div class="card mb-4 <?= array_sum($changes) ? 'card-outline-danger' : '' ?>">
121dd6b2bfcSGreg Roach    <div class="card-header">
122dd6b2bfcSGreg Roach        <h2 class="mb-0">
123dd6b2bfcSGreg Roach            <?= I18N::translate('Family trees') ?>
124dd6b2bfcSGreg Roach            <span class="badge badge-secondary">
125dd6b2bfcSGreg Roach                    <?= I18N::number(count($all_trees)) ?>
126dd6b2bfcSGreg Roach                </span>
127dd6b2bfcSGreg Roach        </h2>
128dd6b2bfcSGreg Roach    </div>
129dd6b2bfcSGreg Roach    <div class="card-body">
130e218f363SGreg Roach        <?php if ($all_trees->isEmpty()) : ?>
131e218f363SGreg Roach            <p class="alert alert-info">
132e218f363SGreg Roach                <?= I18N::translate('You need to create a family tree.') ?>
133e218f363SGreg Roach            </p>
134e218f363SGreg Roach        <?php endif ?>
135e218f363SGreg Roach
1365afbc57aSGreg Roach        <ul class="fa-ul">
1375afbc57aSGreg Roach            <li>
1385afbc57aSGreg Roach                <span class="fa-li"><?= view('icons/add') ?></span>
1395afbc57aSGreg Roach                <a href="<?= e(route(CreateTreePage::class)) ?>">
1405afbc57aSGreg Roach                    <?= I18N::translate('Create a family tree') ?>
1415afbc57aSGreg Roach                </a>
1425afbc57aSGreg Roach            </li>
1435afbc57aSGreg Roach            <li>
1445afbc57aSGreg Roach                <span class="fa-li"><?= view('icons/block') ?></span>
1455afbc57aSGreg Roach                <a href="<?= e(route('tree-page-default-edit')) ?>">
1465afbc57aSGreg Roach                    <?= I18N::translate('Set the default blocks for new family trees') ?>
1475afbc57aSGreg Roach                </a>
1485afbc57aSGreg Roach            </li>
1495afbc57aSGreg Roach            <?php if (count($all_trees) > 1) : ?>
1505afbc57aSGreg Roach                <li>
1515afbc57aSGreg Roach                    <span class="fa-li"><?= view('icons/merge') ?></span>
1525afbc57aSGreg Roach                    <a href="<?= e(route('admin-trees-merge')) ?>">
1535afbc57aSGreg Roach                        <?= I18N::translate('Merge family trees') ?>
1545afbc57aSGreg Roach                    </a>
1555afbc57aSGreg Roach                </li>
1565afbc57aSGreg Roach            <?php endif ?>
1575afbc57aSGreg Roach        </ul>
1585afbc57aSGreg Roach
159dd6b2bfcSGreg Roach        <table class="table table-sm">
160dd6b2bfcSGreg Roach            <caption class="sr-only">
161dd6b2bfcSGreg Roach                <?= I18N::translate('Family trees') ?>
162dd6b2bfcSGreg Roach            </caption>
163dd6b2bfcSGreg Roach            <thead>
164dd6b2bfcSGreg Roach                <tr>
165dd6b2bfcSGreg Roach                    <th><?= I18N::translate('Family tree') ?></th>
166dbffae50SGreg Roach                    <th><?= I18N::translate('Pending changes') ?></th>
167dbffae50SGreg Roach                    <th class="d-none d-sm-table-cell"><?= I18N::translate('Individuals') ?></th>
168dbffae50SGreg Roach                    <th class="d-none d-lg-table-cell"><?= I18N::translate('Families') ?></th>
169dbffae50SGreg Roach                    <th class="d-none d-sm-table-cell"><?= I18N::translate('Sources') ?></th>
170dbffae50SGreg Roach                    <th class="d-none d-lg-table-cell"><?= I18N::translate('Repositories') ?></th>
171dbffae50SGreg Roach                    <th class="d-none d-sm-table-cell"><?= I18N::translate('Media') ?></th>
172dbffae50SGreg Roach                    <th class="d-none d-lg-table-cell"><?= I18N::translate('Notes') ?></th>
173dd6b2bfcSGreg Roach                </tr>
174dd6b2bfcSGreg Roach            </thead>
175dd6b2bfcSGreg Roach            <tbody>
176b1a54200SGreg Roach                <?php foreach ($all_trees as $tree) : ?>
177b1a54200SGreg Roach                    <tr class="<?= $changes[$tree->id()] ? 'danger' : '' ?>">
178b1a54200SGreg Roach                        <th scope="row">
179b1a54200SGreg Roach                            <a href="<?= e(route('manage-trees', ['tree' => $tree->name()])) ?>">
180b1a54200SGreg Roach                                <?= view('icons/preferences') ?>
181b1a54200SGreg Roach                                <?= e($tree->name()) ?>
182b1a54200SGreg Roach                                -
183b1a54200SGreg Roach                                <?= e($tree->title()) ?>
184b1a54200SGreg Roach                            </a>
185b1a54200SGreg Roach                        </th>
186b1a54200SGreg Roach                        <td style="text-align: right;">
187b1a54200SGreg Roach                            <?php if ($changes[$tree->id()]) : ?>
18822e73debSGreg Roach                                <a href="<?= e(route(PendingChanges::class, ['tree' => $tree->name(), 'url' => route(ControlPanel::class)])) ?>">
189b1a54200SGreg Roach                                    <?= I18N::number($changes[$tree->id()]) ?>
190b1a54200SGreg Roach                                    <span class="sr-only"><?= I18N::translate('Pending changes') ?> <?= e($tree->title()) ?></span>
191b1a54200SGreg Roach                                </a>
192b1a54200SGreg Roach                            <?php else : ?>
193b1a54200SGreg Roach                                -
194b1a54200SGreg Roach                            <?php endif ?>
195b1a54200SGreg Roach                        </td>
196b1a54200SGreg Roach                        <td class="d-none d-sm-table-cell align-digits">
197b1a54200SGreg Roach                            <?php if ($individuals[$tree->id()] > 0) : ?>
198b1a54200SGreg Roach                                <?php if ($individual_list_module instanceof IndividualListModule) : ?>
199b1a54200SGreg Roach                                    <a href="<?= e($individual_list_module->listUrl($tree)) ?>"><?= I18N::number($individuals[$tree->id()]) ?></a>
200b1a54200SGreg Roach                                <?php else : ?>
201b1a54200SGreg Roach                                    <?= I18N::number($individuals[$tree->id()]) ?>
202b1a54200SGreg Roach                                <?php endif ?>
203b1a54200SGreg Roach                            <?php else : ?>
204b1a54200SGreg Roach                                -
205b1a54200SGreg Roach                            <?php endif ?>
206b1a54200SGreg Roach                        </td>
207b1a54200SGreg Roach                        <td class="d-none d-lg-table-cell align-digits">
208b1a54200SGreg Roach                            <?php if ($families[$tree->id()] > 0) : ?>
209b1a54200SGreg Roach                                <?php if ($family_list_module instanceof FamilyListModule) : ?>
210b1a54200SGreg Roach                                    <a href="<?= e($family_list_module->listUrl($tree)) ?>"><?= I18N::number($families[$tree->id()]) ?></a>
211b1a54200SGreg Roach                                <?php else : ?>
212b1a54200SGreg Roach                                    <?= I18N::number($families[$tree->id()]) ?>
213b1a54200SGreg Roach                                <?php endif ?>
214b1a54200SGreg Roach                            <?php else : ?>
215b1a54200SGreg Roach                                -
216b1a54200SGreg Roach                            <?php endif ?>
217b1a54200SGreg Roach                        </td>
218b1a54200SGreg Roach                        <td class="d-none d-sm-table-cell align-digits">
219b1a54200SGreg Roach                            <?php if ($sources[$tree->id()] > 0) : ?>
220b1a54200SGreg Roach                                <?php if ($source_list_module instanceof SourceListModule) : ?>
221b1a54200SGreg Roach                                    <a href="<?= e($source_list_module->listUrl($tree)) ?>"><?= I18N::number($sources[$tree->id()]) ?></a>
222b1a54200SGreg Roach                                <?php else : ?>
223b1a54200SGreg Roach                                    <?= I18N::number($sources[$tree->id()]) ?>
224b1a54200SGreg Roach                                <?php endif ?>
225b1a54200SGreg Roach                            <?php else : ?>
226b1a54200SGreg Roach                                -
227b1a54200SGreg Roach                            <?php endif ?>
228b1a54200SGreg Roach                        </td>
229b1a54200SGreg Roach                        <td class="d-none d-lg-table-cell align-digits">
230b1a54200SGreg Roach                            <?php if ($repositories[$tree->id()] > 0) : ?>
231b1a54200SGreg Roach                                <?php if ($repository_list_module instanceof RepositoryListModule) : ?>
232b1a54200SGreg Roach                                    <a href="<?= e($repository_list_module->listUrl($tree)) ?>"><?= I18N::number($repositories[$tree->id()]) ?></a>
233b1a54200SGreg Roach                                <?php else : ?>
234b1a54200SGreg Roach                                    <?= I18N::number($repositories[$tree->id()]) ?>
235b1a54200SGreg Roach                                <?php endif ?>
236b1a54200SGreg Roach                            <?php else : ?>
237b1a54200SGreg Roach                                -
238b1a54200SGreg Roach                            <?php endif ?>
239b1a54200SGreg Roach                        </td>
240b1a54200SGreg Roach                        <td class="d-none d-sm-table-cell align-digits">
241b1a54200SGreg Roach                            <?php if ($media[$tree->id()] > 0) : ?>
242b1a54200SGreg Roach                                <?php if ($media_list_module instanceof MediaListModule) : ?>
243b1a54200SGreg Roach                                    <a href="<?= e($media_list_module->listUrl($tree)) ?>"><?= I18N::number($media[$tree->id()]) ?></a>
244b1a54200SGreg Roach                                <?php else : ?>
245b1a54200SGreg Roach                                    <?= I18N::number($media[$tree->id()]) ?>
246b1a54200SGreg Roach                                <?php endif ?>
247b1a54200SGreg Roach                            <?php else : ?>
248b1a54200SGreg Roach                                -
249b1a54200SGreg Roach                            <?php endif ?>
250b1a54200SGreg Roach                        </td>
251b1a54200SGreg Roach                        <td class="d-none d-lg-table-cell align-digits">
252b1a54200SGreg Roach                            <?php if ($notes[$tree->id()] > 0) : ?>
253b1a54200SGreg Roach                                <?php if ($note_list_module instanceof NoteListModule) : ?>
254b1a54200SGreg Roach                                    <a href="<?= e($note_list_module->listUrl($tree)) ?>"><?= I18N::number($notes[$tree->id()]) ?></a>
255b1a54200SGreg Roach                                <?php else : ?>
256b1a54200SGreg Roach                                    <?= I18N::number($notes[$tree->id()]) ?>
257b1a54200SGreg Roach                                <?php endif ?>
258b1a54200SGreg Roach                            <?php else : ?>
259b1a54200SGreg Roach                                -
260b1a54200SGreg Roach                            <?php endif ?>
261b1a54200SGreg Roach                        </td>
262b1a54200SGreg Roach                    </tr>
263b1a54200SGreg Roach                <?php endforeach ?>            </tbody>
264dd6b2bfcSGreg Roach            <tfoot>
265dd6b2bfcSGreg Roach                <tr>
266dd6b2bfcSGreg Roach                    <th scope="row">
267dd6b2bfcSGreg Roach                        <?= I18N::translate('Total') ?>
268dd6b2bfcSGreg Roach                    </th>
269dbffae50SGreg Roach                    <td class="align-digits">
270dd6b2bfcSGreg Roach                        <?= I18N::number(array_sum($changes)) ?>
271dd6b2bfcSGreg Roach                    </td>
272dbffae50SGreg Roach                    <td class="d-none d-sm-table-cell align-digits">
2732078eafaSGreg Roach                        <?= I18N::number($individuals->sum()) ?>
274dd6b2bfcSGreg Roach                    </td>
275dbffae50SGreg Roach                    <td class="d-none d-lg-table-cell align-digits">
2762078eafaSGreg Roach                        <?= I18N::number($families->sum()) ?>
277dd6b2bfcSGreg Roach                    </td>
278dbffae50SGreg Roach                    <td class="d-none d-sm-table-cell align-digits">
2792078eafaSGreg Roach                        <?= I18N::number($sources->sum()) ?>
280dd6b2bfcSGreg Roach                    </td>
281dbffae50SGreg Roach                    <td class="d-none d-lg-table-cell align-digits">
2822078eafaSGreg Roach                        <?= I18N::number($repositories->sum()) ?>
283dd6b2bfcSGreg Roach                    </td>
284dbffae50SGreg Roach                    <td class="d-none d-sm-table-cell align-digits">
2852078eafaSGreg Roach                        <?= I18N::number($media->sum()) ?>
286dd6b2bfcSGreg Roach                    </td>
287dbffae50SGreg Roach                    <td class="d-none d-lg-table-cell align-digits">
2882078eafaSGreg Roach                        <?= I18N::number($notes->sum()) ?>
289dd6b2bfcSGreg Roach                    </td>
290dd6b2bfcSGreg Roach                </tr>
291dd6b2bfcSGreg Roach            </tfoot>
292dd6b2bfcSGreg Roach        </table>
293dd6b2bfcSGreg Roach    </div>
294dd6b2bfcSGreg Roach</div>
295dd6b2bfcSGreg Roach
296dd6b2bfcSGreg Roach<!-- USERS -->
297dd6b2bfcSGreg Roach<div class="card mb-4 <?= $unapproved || $unverified ? 'card-outline-danger' : '' ?>">
298dd6b2bfcSGreg Roach    <div class="card-header">
299dd6b2bfcSGreg Roach        <h2 class="mb-0">
300dd6b2bfcSGreg Roach            <?= I18N::translate('Users') ?>
301dd6b2bfcSGreg Roach            <span class="badge badge-secondary">
302dd6b2bfcSGreg Roach                    <?= I18N::number(count($all_users)) ?>
303dd6b2bfcSGreg Roach                </span>
304dd6b2bfcSGreg Roach        </h2>
305dd6b2bfcSGreg Roach    </div>
306dd6b2bfcSGreg Roach    <div class="card-body">
307dd6b2bfcSGreg Roach        <dl class="row">
308dd6b2bfcSGreg Roach            <?php foreach ([I18N::translate('Administrators') => $administrators, I18N::translate('Managers') => $managers, I18N::translate('Moderators') => $moderators, I18N::translate('Not verified by the user') => $unverified, I18N::translate('Not approved by an administrator') => $unapproved] as $label => $list) : ?>
309dd6b2bfcSGreg Roach                <?php if (!empty($list)) : ?>
310*040e7dbaSGreg Roach                    <dt class="col-sm-6">
311dd6b2bfcSGreg Roach                        <?= $label ?>
312dd6b2bfcSGreg Roach                    </dt>
313*040e7dbaSGreg Roach                    <dd class="col-sm-6">
314dd6b2bfcSGreg Roach                        <?php foreach ($list as $n => $user) : ?>
315dd6b2bfcSGreg Roach                            <?= $n ? I18N::$list_separator : '' ?>
316895230eeSGreg Roach                            <a href="<?= e(route('admin-users-edit', ['user_id' => $user->id()])) ?>" dir="auto">
317e5a6b4d4SGreg Roach                                <?= e($user->realName()) ?>
318dd6b2bfcSGreg Roach                            </a>
319dd6b2bfcSGreg Roach                        <?php endforeach ?>
320*040e7dbaSGreg Roach                        <?php if ($list->isEmpty()): ?>
321*040e7dbaSGreg Roach322*040e7dbaSGreg Roach                        <?php endif ?>
323dd6b2bfcSGreg Roach                    </dd>
324dd6b2bfcSGreg Roach                <?php endif ?>
325dd6b2bfcSGreg Roach            <?php endforeach ?>
326dd6b2bfcSGreg Roach        </dl>
327dd6b2bfcSGreg Roach
328dd6b2bfcSGreg Roach        <div class="row">
329dd6b2bfcSGreg Roach            <div class="col-sm-6">
330dd6b2bfcSGreg Roach                <ul class="fa-ul">
331dd6b2bfcSGreg Roach                    <li>
332dd6b2bfcSGreg Roach                        <span class="fa-li"><?= view('icons/preferences') ?></span>
333bf57b580SGreg Roach                        <a href="<?= e(route('admin-users')) ?>">
334dd6b2bfcSGreg Roach                            <?= I18N::translate('User administration') ?>
335dd6b2bfcSGreg Roach                        </a>
336dd6b2bfcSGreg Roach                    </li>
337dd6b2bfcSGreg Roach                    <li>
338a24f7142SGreg Roach                        <span class="fa-li"><?= view('icons/add') ?></span>
339bf57b580SGreg Roach                        <a href="<?= e(route('admin-users-create')) ?>">
340dd6b2bfcSGreg Roach                            <?= I18N::translate('Add a user') ?>
341dd6b2bfcSGreg Roach                        </a>
342dd6b2bfcSGreg Roach                    </li>
343dd6b2bfcSGreg Roach                    <li>
344a24f7142SGreg Roach                        <span class="fa-li"><?= view('icons/delete') ?></span>
345dd6b2bfcSGreg Roach                        <a href="<?= e(route('admin-users-cleanup')) ?>">
346dd6b2bfcSGreg Roach                            <?= I18N::translate('Delete inactive users') ?>
347dd6b2bfcSGreg Roach                        </a>
348dd6b2bfcSGreg Roach                    </li>
349dd6b2bfcSGreg Roach                    <li>
350a24f7142SGreg Roach                        <span class="fa-li"><?= view('icons/block') ?></span>
351dd6b2bfcSGreg Roach                        <a href="<?= e(route('user-page-default-edit')) ?>">
352dd6b2bfcSGreg Roach                            <?= I18N::translate('Set the default blocks for new users') ?>
353dd6b2bfcSGreg Roach                        </a>
354dd6b2bfcSGreg Roach                    </li>
355dd6b2bfcSGreg Roach                </ul>
356dd6b2bfcSGreg Roach            </div>
357dd6b2bfcSGreg Roach            <div class="col-sm-6">
358dd6b2bfcSGreg Roach                <ul class="fa-ul">
359dd6b2bfcSGreg Roach                    <li>
360dd6b2bfcSGreg Roach                        <span class="fa-li"><?= view('icons/email') ?></span>
361e381f98dSGreg Roach                        <a href="<?= e(route(BroadcastPage::class, ['to' => 'all'])) ?>">
362dd6b2bfcSGreg Roach                            <?= I18N::translate('Send a message to all users') ?>
363dd6b2bfcSGreg Roach                        </a>
364dd6b2bfcSGreg Roach                    </li>
365dd6b2bfcSGreg Roach                    <li>
366dd6b2bfcSGreg Roach                        <span class="fa-li"><?= view('icons/email') ?></span>
367e381f98dSGreg Roach                        <a href="<?= e(route(BroadcastPage::class, ['to' => 'never_logged'])) ?>">
368dd6b2bfcSGreg Roach                            <?= I18N::translate('Send a message to users who have never signed in') ?>
369dd6b2bfcSGreg Roach                        </a>
370dd6b2bfcSGreg Roach                    </li>
371dd6b2bfcSGreg Roach                    <li>
372dd6b2bfcSGreg Roach                        <span class="fa-li"><?= view('icons/email') ?></span>
373e381f98dSGreg Roach                        <a href="<?= e(route(BroadcastPage::class, ['to' => 'last_6mo'])) ?>">
374dd6b2bfcSGreg Roach                            <?= I18N::translate('Send a message to users who have not signed in for 6 months') ?>
375dd6b2bfcSGreg Roach                        </a>
376dd6b2bfcSGreg Roach                    </li>
377dd6b2bfcSGreg Roach                </ul>
378dd6b2bfcSGreg Roach            </div>
379dd6b2bfcSGreg Roach        </div>
380dd6b2bfcSGreg Roach    </div>
381dd6b2bfcSGreg Roach</div>
382dd6b2bfcSGreg Roach
383dd6b2bfcSGreg Roach<!-- MODULES -->
384dd6b2bfcSGreg Roach<div class="card mb-4">
385dd6b2bfcSGreg Roach    <div class="card-header">
386dd6b2bfcSGreg Roach        <h2 class="mb-0">
387dd6b2bfcSGreg Roach            <?= I18N::translate('Modules') ?>
3889d627a9eSGreg Roach            <?= view('components/badge', ['count' => $all_modules_enabled->count(), 'total' => $all_modules_disabled->count(), 'context' => 'secondary']) ?>
389dd6b2bfcSGreg Roach        </h2>
390dd6b2bfcSGreg Roach    </div>
3910cb66f86SGreg Roach
392dd6b2bfcSGreg Roach    <div class="card-body">
3930cb66f86SGreg Roach        <ul class="fa-ul">
3940cb66f86SGreg Roach            <li>
3959d627a9eSGreg Roach                <span class="fa-li"><?= view('icons/module') ?></span>
3960cb66f86SGreg Roach                <a href="<?= e(route('modules')) ?>">
3979d627a9eSGreg Roach                    <?= I18N::translate('All modules') ?>
3980cb66f86SGreg Roach                </a>
3999d627a9eSGreg Roach                <?= view('components/badge', ['count' => $all_modules_enabled->count(), 'total' => $all_modules_disabled->count(), 'context' => 'primary']) ?>
4000cb66f86SGreg Roach            </li>
4010cb66f86SGreg Roach        </ul>
4020cb66f86SGreg Roach
403dd6b2bfcSGreg Roach        <div class="row">
404abafa13cSGreg Roach            <div class="col-sm-4">
4059d627a9eSGreg Roach                <h3>
4069d627a9eSGreg Roach                    <?= I18N::translate('Genealogy') ?>
4079d627a9eSGreg Roach                </h3>
40809fbf3e5SGreg Roach
409dd6b2bfcSGreg Roach                <ul class="fa-ul">
410dd6b2bfcSGreg Roach                    <li>
411dd6b2bfcSGreg Roach                        <span class="fa-li"><?= view('icons/menu') ?></span>
4120cb66f86SGreg Roach                        <a href="<?= e(route('menus')) ?>">
413dd6b2bfcSGreg Roach                            <?= I18N::translate('Menus') ?>
414dd6b2bfcSGreg Roach                        </a>
4159d627a9eSGreg Roach                        <?= view('components/badge', ['count' => $menu_modules_enabled->count(), 'total' => $menu_modules_disabled->count(), 'context' => 'primary']) ?>
416dd6b2bfcSGreg Roach                    </li>
417dd6b2bfcSGreg Roach                    <li>
418dd6b2bfcSGreg Roach                        <span class="fa-li"><?= view('icons/chart') ?></span>
4190cb66f86SGreg Roach                        <a href="<?= e(route('charts')) ?>">
420dd6b2bfcSGreg Roach                            <?= I18N::translate('Charts') ?>
421dd6b2bfcSGreg Roach                        </a>
4229d627a9eSGreg Roach                        <?= view('components/badge', ['count' => $chart_modules_enabled->count(), 'total' => $chart_modules_disabled->count(), 'context' => 'primary']) ?>
423dd6b2bfcSGreg Roach                    </li>
424dd6b2bfcSGreg Roach                    <li>
42567992b6aSRichard Cissee                        <span class="fa-li"><?= view('icons/list') ?></span>
42667992b6aSRichard Cissee                        <a href="<?= e(route('lists')) ?>">
42767992b6aSRichard Cissee                            <?= I18N::translate('Lists') ?>
42867992b6aSRichard Cissee                        </a>
4299d627a9eSGreg Roach                        <?= view('components/badge', ['count' => $list_modules_enabled->count(), 'total' => $list_modules_disabled->count(), 'context' => 'primary']) ?>
43067992b6aSRichard Cissee                    </li>
43167992b6aSRichard Cissee                    <li>
432dd6b2bfcSGreg Roach                        <span class="fa-li"><?= view('icons/report') ?></span>
4330cb66f86SGreg Roach                        <a href="<?= e(route('reports')) ?>">
434dd6b2bfcSGreg Roach                            <?= I18N::translate('Reports') ?>
435dd6b2bfcSGreg Roach                        </a>
4369d627a9eSGreg Roach                        <?= view('components/badge', ['count' => $report_modules_enabled->count(), 'total' => $report_modules_disabled->count(), 'context' => 'primary']) ?>
437dd6b2bfcSGreg Roach                    </li>
4389d627a9eSGreg Roach                </ul>
43909fbf3e5SGreg Roach
4409d627a9eSGreg Roach                <h3>
4419d627a9eSGreg Roach                    <?= I18N::translate('Website') ?>
4429d627a9eSGreg Roach                </h3>
44309fbf3e5SGreg Roach
4449d627a9eSGreg Roach                <ul class="fa-ul">
44533c34396SGreg Roach                    <li>
44633c34396SGreg Roach                        <span class="fa-li"><?= view('icons/footer') ?></span>
44733c34396SGreg Roach                        <a href="<?= e(route('footers')) ?>">
44833c34396SGreg Roach                            <?= I18N::translate('Footers') ?>
44933c34396SGreg Roach                        </a>
4509d627a9eSGreg Roach                        <?= view('components/badge', ['count' => $footer_modules_enabled->count(), 'total' => $footer_modules_disabled->count(), 'context' => 'primary']) ?>
4518e5c5efeSGreg Roach                    </li>
4528e5c5efeSGreg Roach                    <li>
4538e5c5efeSGreg Roach                        <span class="fa-li"><?= view('icons/analytics') ?></span>
4548e5c5efeSGreg Roach                        <a href="<?= e(route('analytics')) ?>">
4558e5c5efeSGreg Roach                            <?= I18N::translate('Tracking and analytics') ?>
4568e5c5efeSGreg Roach                        </a>
4579d627a9eSGreg Roach                        <?= view('components/badge', ['count' => $analytics_modules_enabled->count(), 'total' => $analytics_modules_disabled->count(), 'context' => 'primary']) ?>
45833c34396SGreg Roach                    </li>
45911eb8581SGreg Roach                    <li>
46011eb8581SGreg Roach                        <span class="fa-li"><?= view('icons/theme') ?></span>
46111eb8581SGreg Roach                        <a href="<?= e(route('themes')) ?>">
46211eb8581SGreg Roach                            <?= I18N::translate('Themes') ?>
46311eb8581SGreg Roach                        </a>
4649d627a9eSGreg Roach                        <?= view('components/badge', ['count' => $theme_modules_enabled->count(), 'total' => $theme_modules_disabled->count(), 'context' => 'primary']) ?>
46511eb8581SGreg Roach                    </li>
46611eb8581SGreg Roach                    <li>
46711eb8581SGreg Roach                        <span class="fa-li"><?= view('icons/language') ?></span>
46811eb8581SGreg Roach                        <a href="<?= e(route('languages')) ?>">
46911eb8581SGreg Roach                            <?= I18N::translate('Languages') ?>
47011eb8581SGreg Roach                        </a>
4719d627a9eSGreg Roach                        <?= view('components/badge', ['count' => $language_modules_enabled->count(), 'total' => $language_modules_disabled->count(), 'context' => 'primary']) ?>
47211eb8581SGreg Roach                    </li>
473dd6b2bfcSGreg Roach                </ul>
47409fbf3e5SGreg Roach
475abafa13cSGreg Roach            </div>
476abafa13cSGreg Roach
477abafa13cSGreg Roach            <div class="col-sm-4">
478abafa13cSGreg Roach
47909fbf3e5SGreg Roach                <h3>
48009fbf3e5SGreg Roach                    <?= I18N::translate('Home page') ?>
48109fbf3e5SGreg Roach                </h3>
48209fbf3e5SGreg Roach
48309fbf3e5SGreg Roach                <ul class="fa-ul">
48409fbf3e5SGreg Roach                    <li>
48509fbf3e5SGreg Roach                        <span class="fa-li"><?= view('icons/block') ?></span>
48609fbf3e5SGreg Roach                        <a href="<?= e(route('blocks')) ?>">
48709fbf3e5SGreg Roach                            <?= I18N::translate('Blocks') ?>
48809fbf3e5SGreg Roach                        </a>
48909fbf3e5SGreg Roach                        <?= view('components/badge', ['count' => $block_modules_enabled->count(), 'total' => $block_modules_disabled->count(), 'context' => 'primary']) ?>
49009fbf3e5SGreg Roach                    </li>
49109fbf3e5SGreg Roach                </ul>
49209fbf3e5SGreg Roach
4939d627a9eSGreg Roach                <h3>
4949d627a9eSGreg Roach                    <?= I18N::translate('Individual page') ?>
4959d627a9eSGreg Roach                </h3>
49609fbf3e5SGreg Roach
4979d627a9eSGreg Roach                <ul class="fa-ul">
4989d627a9eSGreg Roach                    <li>
4999d627a9eSGreg Roach                        <span class="fa-li"><?= view('icons/tab') ?></span>
5009d627a9eSGreg Roach                        <a href="<?= e(route('tabs')) ?>">
5019d627a9eSGreg Roach                            <?= I18N::translate('Tabs') ?>
5029d627a9eSGreg Roach                            <?= view('components/badge', ['count' => $tab_modules_enabled->count(), 'total' => $tab_modules_disabled->count(), 'context' => 'primary']) ?>
5039d627a9eSGreg Roach                        </a>
5049d627a9eSGreg Roach                    </li>
5059d627a9eSGreg Roach                    <li>
5069d627a9eSGreg Roach                        <span class="fa-li"><?= view('icons/sidebar') ?></span>
5079d627a9eSGreg Roach                        <a href="<?= e(route('sidebars')) ?>">
5089d627a9eSGreg Roach                            <?= I18N::translate('Sidebars') ?>
5099d627a9eSGreg Roach                        </a>
5109d627a9eSGreg Roach                        <?= view('components/badge', ['count' => $sidebar_modules_enabled->count(), 'total' => $sidebar_modules_disabled->count(), 'context' => 'primary']) ?>
5119d627a9eSGreg Roach                    </li>
5129d627a9eSGreg Roach                    <li>
5139d627a9eSGreg Roach                        <span class="fa-li"><?= view('icons/history') ?></span>
5149d627a9eSGreg Roach                        <a href="<?= e(route('history')) ?>">
5159d627a9eSGreg Roach                            <?= I18N::translate('Historic events') ?>
5169d627a9eSGreg Roach                        </a>
5179d627a9eSGreg Roach                        <?= view('components/badge', ['count' => $history_modules_enabled->count(), 'total' => $history_modules_disabled->count(), 'context' => 'primary']) ?>
5189d627a9eSGreg Roach                    </li>
5199d627a9eSGreg Roach                </ul>
52009fbf3e5SGreg Roach
521abafa13cSGreg Roach            </div>
522abafa13cSGreg Roach
523abafa13cSGreg Roach            <div class="col-sm-4">
524abafa13cSGreg Roach
5259d627a9eSGreg Roach                <h3>
5269d627a9eSGreg Roach                    <?= I18N::translate('Other') ?>
5279d627a9eSGreg Roach                </h3>
52809fbf3e5SGreg Roach
529dd6b2bfcSGreg Roach                <ul class="fa-ul">
53009fbf3e5SGreg Roach                    <?php foreach ($other_modules as $module) : ?>
531dd6b2bfcSGreg Roach                        <li>
53209fbf3e5SGreg Roach                            <span class="fa-li"><?= view('icons/module') ?></span>
5338d6560c4SGreg Roach
5348d6560c4SGreg Roach                            <?php if ($module->isEnabled()): ?>
5358d6560c4SGreg Roach                                <?php if ($module instanceof ModuleConfigInterface): ?>
536dd6b2bfcSGreg Roach                                    <a href="<?= e($module->getConfigLink()) ?>">
53749a243cbSGreg Roach                                    <?= $module->title() ?>
53809fbf3e5SGreg Roach                                    <span class="fa"><?= view('icons/preferences') ?></span>
539dd6b2bfcSGreg Roach                                    </a>
54009fbf3e5SGreg Roach                                <?php else : ?>
5418d6560c4SGreg Roach                                    <?= $module->title() ?>
54209fbf3e5SGreg Roach                                <?php endif ?>
5438d6560c4SGreg Roach                            <?php else : ?>
5448d6560c4SGreg Roach                                <span class="text-muted">
5458d6560c4SGreg Roach                                    <span class="fa-li"><?= view('icons/module') ?></span>
5468d6560c4SGreg Roach                                     <?= $module->title() ?>
5478d6560c4SGreg Roach                                    <?php if ($module instanceof ModuleConfigInterface): ?>
5488d6560c4SGreg Roach                                        <span class="fa"><?= view('icons/preferences') ?></span>
5498d6560c4SGreg Roach                                    <?php endif ?>
5508d6560c4SGreg Roach                                    </span>
5518d6560c4SGreg Roach                                </span>
5528d6560c4SGreg Roach                            <?php endif ?>
5538d6560c4SGreg Roach
554beefaa8eSGreg Roach                            <?php if ($module instanceof ModuleCustomInterface): ?>
555beefaa8eSGreg Roach                                <?= view('admin/custom-module-info', ['module' => $module]) ?>
556beefaa8eSGreg Roach                            <?php endif ?>
557dd6b2bfcSGreg Roach                        </li>
558dd6b2bfcSGreg Roach                    <?php endforeach ?>
559dd6b2bfcSGreg Roach                </ul>
560dd6b2bfcSGreg Roach            </div>
561dd6b2bfcSGreg Roach        </div>
562dd6b2bfcSGreg Roach    </div>
563dd6b2bfcSGreg Roach</div>
564dd6b2bfcSGreg Roach
565dd6b2bfcSGreg Roach<!-- MEDIA -->
566dd6b2bfcSGreg Roach<div class="card mb-4">
567dd6b2bfcSGreg Roach    <div class="card-header">
568dd6b2bfcSGreg Roach        <h2 class="mb-0">
569dd6b2bfcSGreg Roach            <?= I18N::translate('Media') ?>
570dd6b2bfcSGreg Roach        </h2>
571dd6b2bfcSGreg Roach    </div>
572dd6b2bfcSGreg Roach    <div class="card-body">
573dd6b2bfcSGreg Roach        <ul class="fa-ul">
574dd6b2bfcSGreg Roach            <li>
575dd6b2bfcSGreg Roach                <span class="fa-li"><?= view('icons/preferences') ?></span>
576dd6b2bfcSGreg Roach                <a href="<?= e(route('admin-media')) ?>">
577dd6b2bfcSGreg Roach                    <?= I18N::translate('Manage media') ?>
578dd6b2bfcSGreg Roach                </a>
579dd6b2bfcSGreg Roach            </li>
580dd6b2bfcSGreg Roach            <li>
581a24f7142SGreg Roach                <span class="fa-li"><?= view('icons/upload') ?></span>
582dd6b2bfcSGreg Roach                <a href="<?= e(route('admin-media-upload')) ?>">
583dd6b2bfcSGreg Roach                    <?= I18N::translate('Upload media files') ?>
584dd6b2bfcSGreg Roach                </a>
585dd6b2bfcSGreg Roach            </li>
586dd6b2bfcSGreg Roach            <li>
587a24f7142SGreg Roach                <span class="fa-li"><?= view('icons/link') ?></span>
588dd6b2bfcSGreg Roach                <a href="<?= e(route('admin-fix-level-0-media')) ?>">
589dd6b2bfcSGreg Roach                    <?= I18N::translate('Link media objects to facts and events') ?>
590dd6b2bfcSGreg Roach                </a>
591dd6b2bfcSGreg Roach            </li>
592dd6b2bfcSGreg Roach            <li>
593a24f7142SGreg Roach                <span class="fa-li"><?= view('icons/upload') ?></span>
594dd6b2bfcSGreg Roach                <a href="<?= e(route('admin-webtrees1-thumbs')) ?>">
595dd6b2bfcSGreg Roach                    <?= I18N::translate('Import custom thumbnails from webtrees version 1') ?>
596dd6b2bfcSGreg Roach                </a>
597dd6b2bfcSGreg Roach            </li>
598dd6b2bfcSGreg Roach        </ul>
599dd6b2bfcSGreg Roach    </div>
600dd6b2bfcSGreg Roach</div>
601dd6b2bfcSGreg Roach
602dd6b2bfcSGreg Roach<!-- MAPS -->
603dd6b2bfcSGreg Roach<div class="card mb-4">
604dd6b2bfcSGreg Roach    <div class="card-header">
605dd6b2bfcSGreg Roach        <h2 class="mb-0">
606dd6b2bfcSGreg Roach            <?= I18N::translate('Map') ?>
607dd6b2bfcSGreg Roach        </h2>
608dd6b2bfcSGreg Roach    </div>
609dd6b2bfcSGreg Roach    <div class="card-body">
610dd6b2bfcSGreg Roach        <div class="row">
611dd6b2bfcSGreg Roach            <div class="col-sm-6">
612dd6b2bfcSGreg Roach                <ul class="fa-ul">
613dd6b2bfcSGreg Roach                    <li>
614dd6b2bfcSGreg Roach                        <span class="fa-li"><?= view('icons/location') ?></span>
615dd6b2bfcSGreg Roach                        <a href="<?= e(route('map-data')) ?>">
616dd6b2bfcSGreg Roach                            <?= I18N::translate('Geographic data') ?>
617dd6b2bfcSGreg Roach                        </a>
618dd6b2bfcSGreg Roach                    </li>
619dd6b2bfcSGreg Roach                </ul>
620dd6b2bfcSGreg Roach            </div>
621dd6b2bfcSGreg Roach            <div class="col-sm-6">
622dd6b2bfcSGreg Roach                <ul class="fa-ul">
623dd6b2bfcSGreg Roach                    <li>
624dd6b2bfcSGreg Roach                        <span class="fa-li"><?= view('icons/map') ?></span>
625dd6b2bfcSGreg Roach                        <a href="<?= e(route('map-provider')) ?>">
626dd6b2bfcSGreg Roach                            <?= I18N::translate('Map provider') ?>
627dd6b2bfcSGreg Roach                        </a>
628dd6b2bfcSGreg Roach                    </li>
629dd6b2bfcSGreg Roach                </ul>
630dd6b2bfcSGreg Roach            </div>
631dd6b2bfcSGreg Roach        </div>
632dd6b2bfcSGreg Roach    </div>
633dd6b2bfcSGreg Roach</div>
634dd6b2bfcSGreg Roach
635dd6b2bfcSGreg Roach<!-- OLD FILES -->
636dd6b2bfcSGreg Roach<?php if (!empty($files_to_delete)) : ?>
637dd6b2bfcSGreg Roach    <div class="card mb-4 card-outline-danger">
638dd6b2bfcSGreg Roach        <div class="card-header">
639dd6b2bfcSGreg Roach            <h2 class="mb-0">
640dd6b2bfcSGreg Roach                <?= I18N::translate('Old files found') ?>
641dd6b2bfcSGreg Roach            </h2>
642dd6b2bfcSGreg Roach        </div>
643dd6b2bfcSGreg Roach        <div class="card-body">
644dd6b2bfcSGreg Roach            <p>
645dd6b2bfcSGreg Roach                <?= I18N::translate('Files have been found from a previous version of webtrees. Old files can sometimes be a security risk. You should delete them.') ?>
646dd6b2bfcSGreg Roach            </p>
647dd6b2bfcSGreg Roach            <ul class="list-unstyled">
648dd6b2bfcSGreg Roach                <?php foreach ($files_to_delete as $file_to_delete) : ?>
649beefaa8eSGreg Roach                    <li dir="ltr">
650beefaa8eSGreg Roach                        <code><?= e($file_to_delete) ?></code>
651beefaa8eSGreg Roach                    </li>
652dd6b2bfcSGreg Roach                <?php endforeach ?>
653dd6b2bfcSGreg Roach            </ul>
654dd6b2bfcSGreg Roach        </div>
655dd6b2bfcSGreg Roach    </div>
656dd6b2bfcSGreg Roach<?php endif ?>
657