xref: /webtrees/resources/views/admin/control-panel.phtml (revision 8ce3bd7317ecf32f7aa634676ce35ec9b0055a39)
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;
764d12f7bSGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\EmailPreferencesPage;
8*8ce3bd73SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\ManageMediaPage;
96fd01894SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\ManageTrees;
1094e35917SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\MapDataList;
116fd01894SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\MergeTreesPage;
1241170634SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\ModulesAllPage;
139f667ff2SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\ModulesAnalyticsPage;
149f667ff2SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\ModulesBlocksPage;
159f667ff2SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\ModulesChartsPage;
169f667ff2SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\ModulesDataFixesPage;
179f667ff2SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\ModulesFootersPage;
189f667ff2SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\ModulesHistoricEventsPage;
199f667ff2SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\ModulesLanguagesPage;
209f667ff2SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\ModulesListsPage;
219f667ff2SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\ModulesMenusPage;
229f667ff2SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\ModulesReportsPage;
239f667ff2SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\ModulesSidebarsPage;
249f667ff2SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\ModulesTabsPage;
259f667ff2SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\ModulesThemesPage;
2622e73debSGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\PendingChanges;
27b1a54200SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\PhpInformation;
2857bfa969SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\SiteLogsPage;
29c7aa856bSGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\SitePreferencesPage;
30c7aa856bSGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\SiteRegistrationPage;
318e0e1b25SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\TreePageDefaultEdit;
32*8ce3bd73SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\UploadMediaPage;
338e0e1b25SGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\UserPageDefaultEdit;
342474349cSGreg Roachuse Fisharebest\Webtrees\Http\RequestHandlers\UsersCleanupPage;
35beefaa8eSGreg Roachuse Fisharebest\Webtrees\I18N;
36b1a54200SGreg Roachuse Fisharebest\Webtrees\Module\FamilyListModule;
37b1a54200SGreg Roachuse Fisharebest\Webtrees\Module\IndividualListModule;
38b1a54200SGreg Roachuse Fisharebest\Webtrees\Module\MediaListModule;
3941170634SGreg Roachuse Fisharebest\Webtrees\Module\ModuleAnalyticsInterface;
4041170634SGreg Roachuse Fisharebest\Webtrees\Module\ModuleBlockInterface;
4141170634SGreg Roachuse Fisharebest\Webtrees\Module\ModuleChartInterface;
42beefaa8eSGreg Roachuse Fisharebest\Webtrees\Module\ModuleConfigInterface;
43beefaa8eSGreg Roachuse Fisharebest\Webtrees\Module\ModuleCustomInterface;
4441170634SGreg Roachuse Fisharebest\Webtrees\Module\ModuleDataFixInterface;
4541170634SGreg Roachuse Fisharebest\Webtrees\Module\ModuleFooterInterface;
4641170634SGreg Roachuse Fisharebest\Webtrees\Module\ModuleHistoricEventsInterface;
4741170634SGreg Roachuse Fisharebest\Webtrees\Module\ModuleInterface;
4841170634SGreg Roachuse Fisharebest\Webtrees\Module\ModuleLanguageInterface;
4941170634SGreg Roachuse Fisharebest\Webtrees\Module\ModuleListInterface;
5041170634SGreg Roachuse Fisharebest\Webtrees\Module\ModuleMenuInterface;
5141170634SGreg Roachuse Fisharebest\Webtrees\Module\ModuleReportInterface;
5241170634SGreg Roachuse Fisharebest\Webtrees\Module\ModuleSidebarInterface;
5341170634SGreg Roachuse Fisharebest\Webtrees\Module\ModuleTabInterface;
5441170634SGreg Roachuse Fisharebest\Webtrees\Module\ModuleThemeInterface;
55b1a54200SGreg Roachuse Fisharebest\Webtrees\Module\NoteListModule;
56b1a54200SGreg Roachuse Fisharebest\Webtrees\Module\RepositoryListModule;
57b1a54200SGreg Roachuse Fisharebest\Webtrees\Module\SourceListModule;
58e72c24d6SGreg Roachuse Fisharebest\Webtrees\Module\SubmitterListModule;
5941170634SGreg Roachuse Fisharebest\Webtrees\Tree;
6041170634SGreg Roachuse Fisharebest\Webtrees\User;
61beefaa8eSGreg Roachuse Fisharebest\Webtrees\Webtrees;
62beefaa8eSGreg Roachuse Illuminate\Support\Collection;
63beefaa8eSGreg Roach
64beefaa8eSGreg Roach/**
6541170634SGreg Roach * @var Collection<User>                          $administrators
6641170634SGreg Roach * @var Collection<ModuleInterface>               $all_modules_disabled
6741170634SGreg Roach * @var Collection<ModuleInterface>               $all_modules_enabled
6841170634SGreg Roach * @var Collection<Tree>                          $all_trees
6941170634SGreg Roach * @var Collection<User>                          $all_users
7041170634SGreg Roach * @var Collection<ModuleAnalyticsInterface>      $analytics_modules_disabled
7141170634SGreg Roach * @var Collection<ModuleAnalyticsInterface>      $analytics_modules_enabled
7241170634SGreg Roach * @var Collection<ModuleBlockInterface>          $block_modules_disabled
7341170634SGreg Roach * @var Collection<ModuleBlockInterface>          $block_modules_enabled
7441170634SGreg Roach * @var array<string,int>                         $changes
7541170634SGreg Roach * @var Collection<ModuleChartInterface>          $chart_modules_disabled
7641170634SGreg Roach * @var Collection<ModuleChartInterface>          $chart_modules_enabled
7764d12f7bSGreg Roach * @var Collection<ModuleCustomInterface>         $custom_updates
7841170634SGreg Roach * @var Collection<ModuleDataFixInterface>        $data_fix_modules_disabled
7941170634SGreg Roach * @var Collection<ModuleDataFixInterface>        $data_fix_modules_enabled
8041170634SGreg Roach * @var Collection<string,int>                    $families
8141170634SGreg Roach * @var FamilyListModule|null                     $family_list_module
8241170634SGreg Roach * @var Collection<ModuleFooterInterface>         $footer_modules_disabled
8341170634SGreg Roach * @var Collection<ModuleFooterInterface>         $footer_modules_enabled
8441170634SGreg Roach * @var Collection<ModuleHistoricEventsInterface> $history_modules_disabled
8541170634SGreg Roach * @var Collection<ModuleHistoricEventsInterface> $history_modules_enabled
8641170634SGreg Roach * @var Collection<string,int>                    $individuals
8741170634SGreg Roach * @var IndividualListModule|null                 $individual_list_module
8841170634SGreg Roach * @var Collection<ModuleLanguageInterface>       $language_modules_disabled
8941170634SGreg Roach * @var Collection<ModuleLanguageInterface>       $language_modules_enabled
90beefaa8eSGreg Roach * @var string                                    $latest_version
9141170634SGreg Roach * @var Collection<ModuleListInterface>           $list_modules_disabled
9241170634SGreg Roach * @var Collection<ModuleListInterface>           $list_modules_enabled
9341170634SGreg Roach * @var Collection<User>                          $managers
9441170634SGreg Roach * @var Collection<string,int>                    $media
9541170634SGreg Roach * @var MediaListModule|null                      $media_list_module
9641170634SGreg Roach * @var Collection<ModuleMenuInterface>           $menu_modules_disabled
9741170634SGreg Roach * @var Collection<ModuleMenuInterface>           $menu_modules_enabled
9841170634SGreg Roach * @var Collection<User>                          $moderators
9941170634SGreg Roach * @var Collection<string,int>                    $notes
10041170634SGreg Roach * @var NoteListModule|null                       $note_list_module
10141170634SGreg Roach * @var Collection<ModuleInterface>               $other_modules
10241170634SGreg Roach * @var Collection<ModuleReportInterface>         $report_modules_disabled
10341170634SGreg Roach * @var Collection<ModuleReportInterface>         $report_modules_enabled
10441170634SGreg Roach * @var Collection<string,int>                    $repositories
10541170634SGreg Roach * @var RepositoryListModule|null                 $repository_list_module
10664d12f7bSGreg Roach * @var Collection<string>                        $server_errors
10764d12f7bSGreg Roach * @var Collection<string>                        $server_warnings
1086fd01894SGreg Roach * @var bool                                      $show_synchronize
10941170634SGreg Roach * @var Collection<ModuleSidebarInterface>        $sidebar_modules_disabled
11041170634SGreg Roach * @var Collection<ModuleSidebarInterface>        $sidebar_modules_enabled
11141170634SGreg Roach * @var Collection<string,int>                    $sources
11241170634SGreg Roach * @var SourceListModule|null                     $source_list_module
11341170634SGreg Roach * @var Collection<string,int>                    $submitters
11441170634SGreg Roach * @var SubmitterListModule|null                  $submitter_list_module
11541170634SGreg Roach * @var Collection<ModuleTabInterface>            $tab_modules_disabled
11641170634SGreg Roach * @var Collection<ModuleTabInterface>            $tab_modules_enabled
11741170634SGreg Roach * @var Collection<ModuleThemeInterface>          $theme_modules_disabled
11841170634SGreg Roach * @var Collection<ModuleThemeInterface>          $theme_modules_enabled
11941170634SGreg Roach * @var string                                    $title
12041170634SGreg Roach * @var Collection<User>                          $unapproved
12141170634SGreg Roach * @var Collection<User>                          $unverified
122beefaa8eSGreg Roach */
123beefaa8eSGreg Roach
124beefaa8eSGreg Roach?>
125dd6b2bfcSGreg Roach
126dd6b2bfcSGreg Roach<h1><?= $title ?></h1>
127dd6b2bfcSGreg Roach
128dd6b2bfcSGreg Roach<!-- WEBSITE / WEBTREES -->
129dd6b2bfcSGreg Roach<div class="card mb-4">
130dd6b2bfcSGreg Roach    <div class="card-header">
131dd6b2bfcSGreg Roach        <h2 class="mb-0">
132dd6b2bfcSGreg Roach            <?= I18N::translate('Website') ?>
1334ebbf4abSGreg Roach            <span class="badge badge-secondary" dir="ltr">
1348d0ebef0SGreg Roach                <?= e(Webtrees::VERSION) ?>
135dd6b2bfcSGreg Roach            </span>
136dd6b2bfcSGreg Roach        </h2>
137dd6b2bfcSGreg Roach    </div>
138dd6b2bfcSGreg Roach    <div class="card-body">
139b7059dccSGreg Roach        <?php foreach ($server_errors as $server_error) : ?>
140b7059dccSGreg Roach            <p class="alert alert-danger"><?= $server_error ?></p>
141b7059dccSGreg Roach        <?php endforeach ?>
142b7059dccSGreg Roach
143dd6b2bfcSGreg Roach        <?php foreach ($server_warnings as $server_warning) : ?>
144dd6b2bfcSGreg Roach            <p class="alert alert-warning"><?= $server_warning ?></p>
145dd6b2bfcSGreg Roach        <?php endforeach ?>
146dd6b2bfcSGreg Roach
147dd6b2bfcSGreg Roach        <p class="card-text">
148dd6b2bfcSGreg Roach            <?= /* I18N: %s is a URL/link to the project website */
149dd6b2bfcSGreg Roach            I18N::translate('Support and documentation can be found at %s.', '<a href="https://webtrees.net/">webtrees.net</a>') ?>
150dd6b2bfcSGreg Roach        </p>
151dd6b2bfcSGreg Roach        <p class="card-text">
152dd6b2bfcSGreg Roach            <?php if ($latest_version === '') : ?>
153dd6b2bfcSGreg Roach                <?= I18N::translate('No upgrade information is available.') ?>
1548d0ebef0SGreg Roach            <?php elseif (version_compare(Webtrees::VERSION, $latest_version) < 0) : ?>
1555b868ec0SGreg Roach                <div class="alert alert-info">
156dd6b2bfcSGreg Roach                    <?= I18N::translate('A new version of webtrees is available.') ?>
1575b868ec0SGreg Roach                    <a href="<?= e(route('upgrade')) ?>" class="alert-link">
158dd6b2bfcSGreg Roach                        <?= /* I18N: %s is a version number */
159dd6b2bfcSGreg Roach                        I18N::translate('Upgrade to webtrees %s.', e($latest_version)) ?>
160dd6b2bfcSGreg Roach                    </a>
1615b868ec0SGreg Roach                </div>
162dd6b2bfcSGreg Roach            <?php else : ?>
163dd6b2bfcSGreg Roach                <?= I18N::translate('This is the latest version of webtrees. No upgrade is available.') ?>
164dd6b2bfcSGreg Roach            <?php endif ?>
165dd6b2bfcSGreg Roach        </p>
166dd6b2bfcSGreg Roach
16764d12f7bSGreg Roach        <?php foreach ($custom_updates as $module) : ?>
16864d12f7bSGreg Roach        <div class="alert alert-info">
16964d12f7bSGreg Roach            <?= view('icons/information') ?>
17064d12f7bSGreg Roach            <?= I18N::translate('An upgrade is available.') ?>
17164d12f7bSGreg Roach            <br>
17264d12f7bSGreg Roach            <?= $module->title() ?><?= e($module->customModuleVersion()) ?><?= e($module->customModuleLatestVersion()) ?>
17364d12f7bSGreg Roach        </div>
17464d12f7bSGreg Roach        <?php endforeach ?>
17564d12f7bSGreg Roach
176dd6b2bfcSGreg Roach        <div class="row">
177dd6b2bfcSGreg Roach            <div class="col-sm-6">
178dd6b2bfcSGreg Roach                <ul class="fa-ul">
179dd6b2bfcSGreg Roach                    <li>
180dd6b2bfcSGreg Roach                        <span class="fa-li"><?= view('icons/preferences') ?></span>
181c7aa856bSGreg Roach                        <a href="<?= e(route(SitePreferencesPage::class)) ?>">
182dd6b2bfcSGreg Roach                            <?= I18N::translate('Website preferences') ?>
183dd6b2bfcSGreg Roach                        </a>
184dd6b2bfcSGreg Roach                    </li>
185dd6b2bfcSGreg Roach                    <li>
186a24f7142SGreg Roach                        <span class="fa-li"><?= view('icons/email') ?></span>
187b4144a6dSGreg Roach                        <a href="<?= e(route(EmailPreferencesPage::class)) ?>">
188dd6b2bfcSGreg Roach                            <?= I18N::translate('Sending email') ?>
189dd6b2bfcSGreg Roach                        </a>
190dd6b2bfcSGreg Roach                    </li>
191dd6b2bfcSGreg Roach                    <li>
192a24f7142SGreg Roach                        <span class="fa-li"><?= view('icons/user') ?></span>
193c7aa856bSGreg Roach                        <a href="<?= e(route(SiteRegistrationPage::class)) ?>">
194dd6b2bfcSGreg Roach                            <?= I18N::translate('Sign-in and registration') ?>
195dd6b2bfcSGreg Roach                        </a>
196dd6b2bfcSGreg Roach                    </li>
197dd6b2bfcSGreg Roach                </ul>
198dd6b2bfcSGreg Roach            </div>
199dd6b2bfcSGreg Roach            <div class="col-sm-6">
200dd6b2bfcSGreg Roach                <ul class="fa-ul">
201dd6b2bfcSGreg Roach                    <li>
202a24f7142SGreg Roach                        <span class="fa-li"><?= view('icons/list') ?></span>
20357bfa969SGreg Roach                        <a href="<?= e(route(SiteLogsPage::class)) ?>">
204dd6b2bfcSGreg Roach                            <?= I18N::translate('Website logs') ?>
205dd6b2bfcSGreg Roach                        </a>
206dd6b2bfcSGreg Roach                    </li>
207dd6b2bfcSGreg Roach                    <li>
208a24f7142SGreg Roach                        <span class="fa-li"><?= view('icons/delete') ?></span>
209fd6c003fSGreg Roach                        <a href="<?= e(route(CleanDataFolder::class)) ?>">
210dd6b2bfcSGreg Roach                            <?= I18N::translate('Clean up data folder') ?>
211dd6b2bfcSGreg Roach                        </a>
212dd6b2bfcSGreg Roach                    </li>
213dd6b2bfcSGreg Roach                    <li>
214a24f7142SGreg Roach                        <span class="fa-li"><?= view('icons/help') ?></span>
215b1a54200SGreg Roach                        <a href="<?= e(route(PhpInformation::class)) ?>">
216dd6b2bfcSGreg Roach                            <?= I18N::translate('Server information') ?>
217dd6b2bfcSGreg Roach                        </a>
218dd6b2bfcSGreg Roach                    </li>
219dd6b2bfcSGreg Roach                </ul>
220dd6b2bfcSGreg Roach            </div>
221dd6b2bfcSGreg Roach        </div>
222dd6b2bfcSGreg Roach    </div>
223dd6b2bfcSGreg Roach</div>
224dd6b2bfcSGreg Roach
225dd6b2bfcSGreg Roach<!-- FAMILY TREES -->
2264e73f0bdSGreg Roach<div class="card mb-4 <?= array_sum($changes) ? 'card-outline-danger' : '' ?>">
227dd6b2bfcSGreg Roach    <div class="card-header">
228dd6b2bfcSGreg Roach        <h2 class="mb-0">
229dd6b2bfcSGreg Roach            <?= I18N::translate('Family trees') ?>
230dd6b2bfcSGreg Roach            <span class="badge badge-secondary">
23141170634SGreg Roach                    <?= I18N::number($all_trees->count()) ?>
232dd6b2bfcSGreg Roach                </span>
233dd6b2bfcSGreg Roach        </h2>
234dd6b2bfcSGreg Roach    </div>
2356fd01894SGreg Roach
236dd6b2bfcSGreg Roach    <div class="card-body">
237e218f363SGreg Roach        <?php if ($all_trees->isEmpty()) : ?>
238e218f363SGreg Roach            <p class="alert alert-info">
239e218f363SGreg Roach                <?= I18N::translate('You need to create a family tree.') ?>
240e218f363SGreg Roach            </p>
241e218f363SGreg Roach        <?php endif ?>
242e218f363SGreg Roach
2435afbc57aSGreg Roach        <ul class="fa-ul">
2445afbc57aSGreg Roach            <li>
2455afbc57aSGreg Roach                <span class="fa-li"><?= view('icons/add') ?></span>
2465afbc57aSGreg Roach                <a href="<?= e(route(CreateTreePage::class)) ?>">
2475afbc57aSGreg Roach                    <?= I18N::translate('Create a family tree') ?>
2485afbc57aSGreg Roach                </a>
2495afbc57aSGreg Roach            </li>
2505afbc57aSGreg Roach            <li>
2515afbc57aSGreg Roach                <span class="fa-li"><?= view('icons/block') ?></span>
2528e0e1b25SGreg Roach                <a href="<?= e(route(TreePageDefaultEdit::class)) ?>">
2535afbc57aSGreg Roach                    <?= I18N::translate('Set the default blocks for new family trees') ?>
2545afbc57aSGreg Roach                </a>
2555afbc57aSGreg Roach            </li>
2565afbc57aSGreg Roach            <?php if (count($all_trees) > 1) : ?>
2575afbc57aSGreg Roach                <li>
2585afbc57aSGreg Roach                    <span class="fa-li"><?= view('icons/merge') ?></span>
2596fd01894SGreg Roach                    <a href="<?= e(route(MergeTreesPage::class)) ?>">
2605afbc57aSGreg Roach                        <?= I18N::translate('Merge family trees') ?>
2615afbc57aSGreg Roach                    </a>
2625afbc57aSGreg Roach                </li>
2635afbc57aSGreg Roach            <?php endif ?>
2645afbc57aSGreg Roach        </ul>
2655afbc57aSGreg Roach
266dd6b2bfcSGreg Roach        <table class="table table-sm">
267dd6b2bfcSGreg Roach            <caption class="sr-only">
268dd6b2bfcSGreg Roach                <?= I18N::translate('Family trees') ?>
269dd6b2bfcSGreg Roach            </caption>
2707039fd97SGreg Roach
271dd6b2bfcSGreg Roach            <thead>
272dd6b2bfcSGreg Roach                <tr>
273dd6b2bfcSGreg Roach                    <th><?= I18N::translate('Family tree') ?></th>
274e72c24d6SGreg Roach                    <th class="align-digits"><?= I18N::translate('Pending changes') ?></th>
275e72c24d6SGreg Roach                    <th class="d-none d-sm-table-cell align-digits"><?= I18N::translate('Individuals') ?></th>
276e72c24d6SGreg Roach                    <th class="d-none d-lg-table-cell align-digits"><?= I18N::translate('Families') ?></th>
277e72c24d6SGreg Roach                    <th class="d-none d-sm-table-cell align-digits"><?= I18N::translate('Sources') ?></th>
278e72c24d6SGreg Roach                    <th class="d-none d-lg-table-cell align-digits"><?= I18N::translate('Repositories') ?></th>
279e72c24d6SGreg Roach                    <th class="d-none d-sm-table-cell align-digits"><?= I18N::translate('Media') ?></th>
280e72c24d6SGreg Roach                    <th class="d-none d-lg-table-cell align-digits"><?= I18N::translate('Notes') ?></th>
281e72c24d6SGreg Roach                    <th class="d-none d-lg-table-cell align-digits"><?= I18N::translate('Submitters') ?></th>
282dd6b2bfcSGreg Roach                </tr>
283dd6b2bfcSGreg Roach            </thead>
2847039fd97SGreg Roach
285dd6b2bfcSGreg Roach            <tbody>
286b1a54200SGreg Roach                <?php foreach ($all_trees as $tree) : ?>
287b1a54200SGreg Roach                    <tr class="<?= $changes[$tree->id()] ? 'danger' : '' ?>">
288b1a54200SGreg Roach                        <th scope="row">
289b1a54200SGreg Roach                            <?= view('icons/preferences') ?>
2906fd01894SGreg Roach                            <a href="<?= e(route(ManageTrees::class, ['tree' => $tree->name()])) ?>">
291b1a54200SGreg Roach                                <?= e($tree->name()) ?>
292b1a54200SGreg Roach                                -
293b1a54200SGreg Roach                                <?= e($tree->title()) ?>
294b1a54200SGreg Roach                            </a>
295b1a54200SGreg Roach                        </th>
296b1a54200SGreg Roach                        <td style="text-align: right;">
297b1a54200SGreg Roach                            <?php if ($changes[$tree->id()]) : ?>
29822e73debSGreg Roach                                <a href="<?= e(route(PendingChanges::class, ['tree' => $tree->name(), 'url' => route(ControlPanel::class)])) ?>">
299b1a54200SGreg Roach                                    <?= I18N::number($changes[$tree->id()]) ?>
300b1a54200SGreg Roach                                    <span class="sr-only"><?= I18N::translate('Pending changes') ?> <?= e($tree->title()) ?></span>
301b1a54200SGreg Roach                                </a>
302b1a54200SGreg Roach                            <?php else : ?>
303b1a54200SGreg Roach                                -
304b1a54200SGreg Roach                            <?php endif ?>
305b1a54200SGreg Roach                        </td>
306b1a54200SGreg Roach                        <td class="d-none d-sm-table-cell align-digits">
307b1a54200SGreg Roach                            <?php if ($individuals[$tree->id()] > 0) : ?>
308b1a54200SGreg Roach                                <?php if ($individual_list_module instanceof IndividualListModule) : ?>
309b1a54200SGreg Roach                                    <a href="<?= e($individual_list_module->listUrl($tree)) ?>"><?= I18N::number($individuals[$tree->id()]) ?></a>
310b1a54200SGreg Roach                                <?php else : ?>
311b1a54200SGreg Roach                                    <?= I18N::number($individuals[$tree->id()]) ?>
312b1a54200SGreg Roach                                <?php endif ?>
313b1a54200SGreg Roach                            <?php else : ?>
314b1a54200SGreg Roach                                -
315b1a54200SGreg Roach                            <?php endif ?>
316b1a54200SGreg Roach                        </td>
317b1a54200SGreg Roach                        <td class="d-none d-lg-table-cell align-digits">
318b1a54200SGreg Roach                            <?php if ($families[$tree->id()] > 0) : ?>
319b1a54200SGreg Roach                                <?php if ($family_list_module instanceof FamilyListModule) : ?>
320b1a54200SGreg Roach                                    <a href="<?= e($family_list_module->listUrl($tree)) ?>"><?= I18N::number($families[$tree->id()]) ?></a>
321b1a54200SGreg Roach                                <?php else : ?>
322b1a54200SGreg Roach                                    <?= I18N::number($families[$tree->id()]) ?>
323b1a54200SGreg Roach                                <?php endif ?>
324b1a54200SGreg Roach                            <?php else : ?>
325b1a54200SGreg Roach                                -
326b1a54200SGreg Roach                            <?php endif ?>
327b1a54200SGreg Roach                        </td>
328b1a54200SGreg Roach                        <td class="d-none d-sm-table-cell align-digits">
329b1a54200SGreg Roach                            <?php if ($sources[$tree->id()] > 0) : ?>
330b1a54200SGreg Roach                                <?php if ($source_list_module instanceof SourceListModule) : ?>
331b1a54200SGreg Roach                                    <a href="<?= e($source_list_module->listUrl($tree)) ?>"><?= I18N::number($sources[$tree->id()]) ?></a>
332b1a54200SGreg Roach                                <?php else : ?>
333b1a54200SGreg Roach                                    <?= I18N::number($sources[$tree->id()]) ?>
334b1a54200SGreg Roach                                <?php endif ?>
335b1a54200SGreg Roach                            <?php else : ?>
336b1a54200SGreg Roach                                -
337b1a54200SGreg Roach                            <?php endif ?>
338b1a54200SGreg Roach                        </td>
339b1a54200SGreg Roach                        <td class="d-none d-lg-table-cell align-digits">
340b1a54200SGreg Roach                            <?php if ($repositories[$tree->id()] > 0) : ?>
341b1a54200SGreg Roach                                <?php if ($repository_list_module instanceof RepositoryListModule) : ?>
342b1a54200SGreg Roach                                    <a href="<?= e($repository_list_module->listUrl($tree)) ?>"><?= I18N::number($repositories[$tree->id()]) ?></a>
343b1a54200SGreg Roach                                <?php else : ?>
344b1a54200SGreg Roach                                    <?= I18N::number($repositories[$tree->id()]) ?>
345b1a54200SGreg Roach                                <?php endif ?>
346b1a54200SGreg Roach                            <?php else : ?>
347b1a54200SGreg Roach                                -
348b1a54200SGreg Roach                            <?php endif ?>
349b1a54200SGreg Roach                        </td>
350b1a54200SGreg Roach                        <td class="d-none d-sm-table-cell align-digits">
351b1a54200SGreg Roach                            <?php if ($media[$tree->id()] > 0) : ?>
352b1a54200SGreg Roach                                <?php if ($media_list_module instanceof MediaListModule) : ?>
353b1a54200SGreg Roach                                    <a href="<?= e($media_list_module->listUrl($tree)) ?>"><?= I18N::number($media[$tree->id()]) ?></a>
354b1a54200SGreg Roach                                <?php else : ?>
355b1a54200SGreg Roach                                    <?= I18N::number($media[$tree->id()]) ?>
356b1a54200SGreg Roach                                <?php endif ?>
357b1a54200SGreg Roach                            <?php else : ?>
358b1a54200SGreg Roach                                -
359b1a54200SGreg Roach                            <?php endif ?>
360b1a54200SGreg Roach                        </td>
361b1a54200SGreg Roach                        <td class="d-none d-lg-table-cell align-digits">
362b1a54200SGreg Roach                            <?php if ($notes[$tree->id()] > 0) : ?>
363b1a54200SGreg Roach                                <?php if ($note_list_module instanceof NoteListModule) : ?>
364b1a54200SGreg Roach                                    <a href="<?= e($note_list_module->listUrl($tree)) ?>"><?= I18N::number($notes[$tree->id()]) ?></a>
365b1a54200SGreg Roach                                <?php else : ?>
366b1a54200SGreg Roach                                    <?= I18N::number($notes[$tree->id()]) ?>
367b1a54200SGreg Roach                                <?php endif ?>
368b1a54200SGreg Roach                            <?php else : ?>
369b1a54200SGreg Roach                                -
370b1a54200SGreg Roach                            <?php endif ?>
371b1a54200SGreg Roach                        </td>
372e72c24d6SGreg Roach                         <td class="d-none d-lg-table-cell align-digits">
373e72c24d6SGreg Roach                            <?php if ($submitters[$tree->id()] > 0) : ?>
374e72c24d6SGreg Roach                                <?php if ($submitter_list_module instanceof SubmitterListModule) : ?>
375e72c24d6SGreg Roach                                    <a href="<?= e($submitter_list_module->listUrl($tree)) ?>"><?= I18N::number($submitters[$tree->id()]) ?></a>
376e72c24d6SGreg Roach                                <?php else : ?>
377e72c24d6SGreg Roach                                    <?= I18N::number($submitters[$tree->id()]) ?>
378e72c24d6SGreg Roach                                <?php endif ?>
379e72c24d6SGreg Roach                            <?php else : ?>
380e72c24d6SGreg Roach                                -
381e72c24d6SGreg Roach                            <?php endif ?>
382e72c24d6SGreg Roach                        </td>
383b1a54200SGreg Roach                    </tr>
384ce42304aSGreg Roach                <?php endforeach ?>
385ce42304aSGreg Roach            </tbody>
3867039fd97SGreg Roach
387dd6b2bfcSGreg Roach            <tfoot>
388dd6b2bfcSGreg Roach                <tr>
389dd6b2bfcSGreg Roach                    <th scope="row">
390dd6b2bfcSGreg Roach                        <?= I18N::translate('Total') ?>
391dd6b2bfcSGreg Roach                    </th>
392dbffae50SGreg Roach                    <td class="align-digits">
393dd6b2bfcSGreg Roach                        <?= I18N::number(array_sum($changes)) ?>
394dd6b2bfcSGreg Roach                    </td>
395dbffae50SGreg Roach                    <td class="d-none d-sm-table-cell align-digits">
3962078eafaSGreg Roach                        <?= I18N::number($individuals->sum()) ?>
397dd6b2bfcSGreg Roach                    </td>
398dbffae50SGreg Roach                    <td class="d-none d-lg-table-cell align-digits">
3992078eafaSGreg Roach                        <?= I18N::number($families->sum()) ?>
400dd6b2bfcSGreg Roach                    </td>
401dbffae50SGreg Roach                    <td class="d-none d-sm-table-cell align-digits">
4022078eafaSGreg Roach                        <?= I18N::number($sources->sum()) ?>
403dd6b2bfcSGreg Roach                    </td>
404dbffae50SGreg Roach                    <td class="d-none d-lg-table-cell align-digits">
4052078eafaSGreg Roach                        <?= I18N::number($repositories->sum()) ?>
406dd6b2bfcSGreg Roach                    </td>
407dbffae50SGreg Roach                    <td class="d-none d-sm-table-cell align-digits">
4082078eafaSGreg Roach                        <?= I18N::number($media->sum()) ?>
409dd6b2bfcSGreg Roach                    </td>
410dbffae50SGreg Roach                    <td class="d-none d-lg-table-cell align-digits">
4112078eafaSGreg Roach                        <?= I18N::number($notes->sum()) ?>
412dd6b2bfcSGreg Roach                    </td>
413dd6b2bfcSGreg Roach                </tr>
414dd6b2bfcSGreg Roach            </tfoot>
415dd6b2bfcSGreg Roach        </table>
416dd6b2bfcSGreg Roach    </div>
417dd6b2bfcSGreg Roach</div>
418dd6b2bfcSGreg Roach
4196fd01894SGreg Roach<?php if ($show_synchronize): ?>
4206fd01894SGreg Roach    <?= view('admin/synchronize-trees') ?>
4216fd01894SGreg Roach<?php endif ?>
4226fd01894SGreg Roach
423dd6b2bfcSGreg Roach<!-- USERS -->
424dd6b2bfcSGreg Roach<div class="card mb-4 <?= $unapproved || $unverified ? 'card-outline-danger' : '' ?>">
425dd6b2bfcSGreg Roach    <div class="card-header">
426dd6b2bfcSGreg Roach        <h2 class="mb-0">
427dd6b2bfcSGreg Roach            <?= I18N::translate('Users') ?>
428dd6b2bfcSGreg Roach            <span class="badge badge-secondary">
429dd6b2bfcSGreg Roach                    <?= I18N::number(count($all_users)) ?>
430dd6b2bfcSGreg Roach                </span>
431dd6b2bfcSGreg Roach        </h2>
432dd6b2bfcSGreg Roach    </div>
433dd6b2bfcSGreg Roach    <div class="card-body">
434dd6b2bfcSGreg Roach        <dl class="row">
435dd6b2bfcSGreg 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) : ?>
436dd6b2bfcSGreg Roach                <?php if (!empty($list)) : ?>
437040e7dbaSGreg Roach                    <dt class="col-sm-6">
438dd6b2bfcSGreg Roach                        <?= $label ?>
439dd6b2bfcSGreg Roach                    </dt>
440040e7dbaSGreg Roach                    <dd class="col-sm-6">
441dd6b2bfcSGreg Roach                        <?php foreach ($list as $n => $user) : ?>
442dd6b2bfcSGreg Roach                            <?= $n ? I18N::$list_separator : '' ?>
443895230eeSGreg Roach                            <a href="<?= e(route('admin-users-edit', ['user_id' => $user->id()])) ?>" dir="auto">
444e5a6b4d4SGreg Roach                                <?= e($user->realName()) ?>
445dd6b2bfcSGreg Roach                            </a>
446dd6b2bfcSGreg Roach                        <?php endforeach ?>
447040e7dbaSGreg Roach                        <?php if ($list->isEmpty()) : ?>
448040e7dbaSGreg Roach449040e7dbaSGreg Roach                        <?php endif ?>
450dd6b2bfcSGreg Roach                    </dd>
451dd6b2bfcSGreg Roach                <?php endif ?>
452dd6b2bfcSGreg Roach            <?php endforeach ?>
453dd6b2bfcSGreg Roach        </dl>
454dd6b2bfcSGreg Roach
455dd6b2bfcSGreg Roach        <div class="row">
456dd6b2bfcSGreg Roach            <div class="col-sm-6">
457dd6b2bfcSGreg Roach                <ul class="fa-ul">
458dd6b2bfcSGreg Roach                    <li>
459dd6b2bfcSGreg Roach                        <span class="fa-li"><?= view('icons/preferences') ?></span>
460bf57b580SGreg Roach                        <a href="<?= e(route('admin-users')) ?>">
461dd6b2bfcSGreg Roach                            <?= I18N::translate('User administration') ?>
462dd6b2bfcSGreg Roach                        </a>
463dd6b2bfcSGreg Roach                    </li>
464dd6b2bfcSGreg Roach                    <li>
465a24f7142SGreg Roach                        <span class="fa-li"><?= view('icons/add') ?></span>
466bf57b580SGreg Roach                        <a href="<?= e(route('admin-users-create')) ?>">
467dd6b2bfcSGreg Roach                            <?= I18N::translate('Add a user') ?>
468dd6b2bfcSGreg Roach                        </a>
469dd6b2bfcSGreg Roach                    </li>
470dd6b2bfcSGreg Roach                    <li>
471a24f7142SGreg Roach                        <span class="fa-li"><?= view('icons/delete') ?></span>
4722474349cSGreg Roach                        <a href="<?= e(route(UsersCleanupPage::class)) ?>">
473dd6b2bfcSGreg Roach                            <?= I18N::translate('Delete inactive users') ?>
474dd6b2bfcSGreg Roach                        </a>
475dd6b2bfcSGreg Roach                    </li>
476dd6b2bfcSGreg Roach                    <li>
477a24f7142SGreg Roach                        <span class="fa-li"><?= view('icons/block') ?></span>
4788e0e1b25SGreg Roach                        <a href="<?= e(route(UserPageDefaultEdit::class)) ?>">
479dd6b2bfcSGreg Roach                            <?= I18N::translate('Set the default blocks for new users') ?>
480dd6b2bfcSGreg Roach                        </a>
481dd6b2bfcSGreg Roach                    </li>
482dd6b2bfcSGreg Roach                </ul>
483dd6b2bfcSGreg Roach            </div>
484dd6b2bfcSGreg Roach            <div class="col-sm-6">
485dd6b2bfcSGreg Roach                <ul class="fa-ul">
486dd6b2bfcSGreg Roach                    <li>
487dd6b2bfcSGreg Roach                        <span class="fa-li"><?= view('icons/email') ?></span>
488e381f98dSGreg Roach                        <a href="<?= e(route(BroadcastPage::class, ['to' => 'all'])) ?>">
489dd6b2bfcSGreg Roach                            <?= I18N::translate('Send a message to all users') ?>
490dd6b2bfcSGreg Roach                        </a>
491dd6b2bfcSGreg Roach                    </li>
492dd6b2bfcSGreg Roach                    <li>
493dd6b2bfcSGreg Roach                        <span class="fa-li"><?= view('icons/email') ?></span>
494e381f98dSGreg Roach                        <a href="<?= e(route(BroadcastPage::class, ['to' => 'never_logged'])) ?>">
495dd6b2bfcSGreg Roach                            <?= I18N::translate('Send a message to users who have never signed in') ?>
496dd6b2bfcSGreg Roach                        </a>
497dd6b2bfcSGreg Roach                    </li>
498dd6b2bfcSGreg Roach                    <li>
499dd6b2bfcSGreg Roach                        <span class="fa-li"><?= view('icons/email') ?></span>
500e381f98dSGreg Roach                        <a href="<?= e(route(BroadcastPage::class, ['to' => 'last_6mo'])) ?>">
501dd6b2bfcSGreg Roach                            <?= I18N::translate('Send a message to users who have not signed in for 6 months') ?>
502dd6b2bfcSGreg Roach                        </a>
503dd6b2bfcSGreg Roach                    </li>
504dd6b2bfcSGreg Roach                </ul>
505dd6b2bfcSGreg Roach            </div>
506dd6b2bfcSGreg Roach        </div>
507dd6b2bfcSGreg Roach    </div>
508dd6b2bfcSGreg Roach</div>
509dd6b2bfcSGreg Roach
510dd6b2bfcSGreg Roach<!-- MODULES -->
511dd6b2bfcSGreg Roach<div class="card mb-4">
512dd6b2bfcSGreg Roach    <div class="card-header">
513dd6b2bfcSGreg Roach        <h2 class="mb-0">
514dd6b2bfcSGreg Roach            <?= I18N::translate('Modules') ?>
5159d627a9eSGreg Roach            <?= view('components/badge', ['count' => $all_modules_enabled->count(), 'total' => $all_modules_disabled->count(), 'context' => 'secondary']) ?>
516dd6b2bfcSGreg Roach        </h2>
517dd6b2bfcSGreg Roach    </div>
5180cb66f86SGreg Roach
519dd6b2bfcSGreg Roach    <div class="card-body">
5200cb66f86SGreg Roach        <ul class="fa-ul">
5210cb66f86SGreg Roach            <li>
5229d627a9eSGreg Roach                <span class="fa-li"><?= view('icons/module') ?></span>
5239f667ff2SGreg Roach                <a href="<?= e(route(ModulesAllPage::class)) ?>">
5249d627a9eSGreg Roach                    <?= I18N::translate('All modules') ?>
5250cb66f86SGreg Roach                </a>
5269d627a9eSGreg Roach                <?= view('components/badge', ['count' => $all_modules_enabled->count(), 'total' => $all_modules_disabled->count(), 'context' => 'primary']) ?>
5270cb66f86SGreg Roach            </li>
5280cb66f86SGreg Roach        </ul>
5290cb66f86SGreg Roach
530dd6b2bfcSGreg Roach        <div class="row">
531abafa13cSGreg Roach            <div class="col-sm-4">
5329d627a9eSGreg Roach                <h3>
5339d627a9eSGreg Roach                    <?= I18N::translate('Genealogy') ?>
5349d627a9eSGreg Roach                </h3>
53509fbf3e5SGreg Roach
536dd6b2bfcSGreg Roach                <ul class="fa-ul">
537dd6b2bfcSGreg Roach                    <li>
538dd6b2bfcSGreg Roach                        <span class="fa-li"><?= view('icons/menu') ?></span>
5399f667ff2SGreg Roach                        <a href="<?= e(route(ModulesMenusPage::class)) ?>">
540dd6b2bfcSGreg Roach                            <?= I18N::translate('Menus') ?>
541dd6b2bfcSGreg Roach                        </a>
5429d627a9eSGreg Roach                        <?= view('components/badge', ['count' => $menu_modules_enabled->count(), 'total' => $menu_modules_disabled->count(), 'context' => 'primary']) ?>
543dd6b2bfcSGreg Roach                    </li>
544dd6b2bfcSGreg Roach                    <li>
545dd6b2bfcSGreg Roach                        <span class="fa-li"><?= view('icons/chart') ?></span>
5469f667ff2SGreg Roach                        <a href="<?= e(route(ModulesChartsPage::class)) ?>">
547dd6b2bfcSGreg Roach                            <?= I18N::translate('Charts') ?>
548dd6b2bfcSGreg Roach                        </a>
5499d627a9eSGreg Roach                        <?= view('components/badge', ['count' => $chart_modules_enabled->count(), 'total' => $chart_modules_disabled->count(), 'context' => 'primary']) ?>
550dd6b2bfcSGreg Roach                    </li>
551dd6b2bfcSGreg Roach                    <li>
55267992b6aSRichard Cissee                        <span class="fa-li"><?= view('icons/list') ?></span>
5539f667ff2SGreg Roach                        <a href="<?= e(route(ModulesListsPage::class)) ?>">
55467992b6aSRichard Cissee                            <?= I18N::translate('Lists') ?>
55567992b6aSRichard Cissee                        </a>
5569d627a9eSGreg Roach                        <?= view('components/badge', ['count' => $list_modules_enabled->count(), 'total' => $list_modules_disabled->count(), 'context' => 'primary']) ?>
55767992b6aSRichard Cissee                    </li>
55867992b6aSRichard Cissee                    <li>
559dd6b2bfcSGreg Roach                        <span class="fa-li"><?= view('icons/report') ?></span>
5609f667ff2SGreg Roach                        <a href="<?= e(route(ModulesReportsPage::class)) ?>">
561dd6b2bfcSGreg Roach                            <?= I18N::translate('Reports') ?>
562dd6b2bfcSGreg Roach                        </a>
5639d627a9eSGreg Roach                        <?= view('components/badge', ['count' => $report_modules_enabled->count(), 'total' => $report_modules_disabled->count(), 'context' => 'primary']) ?>
564dd6b2bfcSGreg Roach                    </li>
565ce42304aSGreg Roach                    <li>
566ce42304aSGreg Roach                        <span class="fa-li"><?= view('icons/data-fix') ?></span>
5679f667ff2SGreg Roach                        <a href="<?= e(route(ModulesDataFixesPage::class)) ?>">
568ce42304aSGreg Roach                            <?= I18N::translate('Data fixes') ?>
569ce42304aSGreg Roach                        </a>
570ce42304aSGreg Roach                        <?= view('components/badge', ['count' => $data_fix_modules_enabled->count(), 'total' => $data_fix_modules_disabled->count(), 'context' => 'primary']) ?>
571ce42304aSGreg Roach                    </li>
5729d627a9eSGreg Roach                </ul>
57309fbf3e5SGreg Roach
5749d627a9eSGreg Roach                <h3>
5759d627a9eSGreg Roach                    <?= I18N::translate('Website') ?>
5769d627a9eSGreg Roach                </h3>
57709fbf3e5SGreg Roach
5789d627a9eSGreg Roach                <ul class="fa-ul">
57933c34396SGreg Roach                    <li>
58033c34396SGreg Roach                        <span class="fa-li"><?= view('icons/footer') ?></span>
5819f667ff2SGreg Roach                        <a href="<?= e(route(ModulesFootersPage::class)) ?>">
58233c34396SGreg Roach                            <?= I18N::translate('Footers') ?>
58333c34396SGreg Roach                        </a>
5849d627a9eSGreg Roach                        <?= view('components/badge', ['count' => $footer_modules_enabled->count(), 'total' => $footer_modules_disabled->count(), 'context' => 'primary']) ?>
5858e5c5efeSGreg Roach                    </li>
5868e5c5efeSGreg Roach                    <li>
5878e5c5efeSGreg Roach                        <span class="fa-li"><?= view('icons/analytics') ?></span>
5889f667ff2SGreg Roach                        <a href="<?= e(route(ModulesAnalyticsPage::class)) ?>">
5898e5c5efeSGreg Roach                            <?= I18N::translate('Tracking and analytics') ?>
5908e5c5efeSGreg Roach                        </a>
5919d627a9eSGreg Roach                        <?= view('components/badge', ['count' => $analytics_modules_enabled->count(), 'total' => $analytics_modules_disabled->count(), 'context' => 'primary']) ?>
59233c34396SGreg Roach                    </li>
59311eb8581SGreg Roach                    <li>
59411eb8581SGreg Roach                        <span class="fa-li"><?= view('icons/theme') ?></span>
5959f667ff2SGreg Roach                        <a href="<?= e(route(ModulesThemesPage::class)) ?>">
59611eb8581SGreg Roach                            <?= I18N::translate('Themes') ?>
59711eb8581SGreg Roach                        </a>
5989d627a9eSGreg Roach                        <?= view('components/badge', ['count' => $theme_modules_enabled->count(), 'total' => $theme_modules_disabled->count(), 'context' => 'primary']) ?>
59911eb8581SGreg Roach                    </li>
60011eb8581SGreg Roach                    <li>
60111eb8581SGreg Roach                        <span class="fa-li"><?= view('icons/language') ?></span>
6029f667ff2SGreg Roach                        <a href="<?= e(route(ModulesLanguagesPage::class)) ?>">
60311eb8581SGreg Roach                            <?= I18N::translate('Languages') ?>
60411eb8581SGreg Roach                        </a>
6059d627a9eSGreg Roach                        <?= view('components/badge', ['count' => $language_modules_enabled->count(), 'total' => $language_modules_disabled->count(), 'context' => 'primary']) ?>
60611eb8581SGreg Roach                    </li>
607dd6b2bfcSGreg Roach                </ul>
60809fbf3e5SGreg Roach
609abafa13cSGreg Roach            </div>
610abafa13cSGreg Roach
611abafa13cSGreg Roach            <div class="col-sm-4">
612abafa13cSGreg Roach
61309fbf3e5SGreg Roach                <h3>
61409fbf3e5SGreg Roach                    <?= I18N::translate('Home page') ?>
61509fbf3e5SGreg Roach                </h3>
61609fbf3e5SGreg Roach
61709fbf3e5SGreg Roach                <ul class="fa-ul">
61809fbf3e5SGreg Roach                    <li>
61909fbf3e5SGreg Roach                        <span class="fa-li"><?= view('icons/block') ?></span>
6209f667ff2SGreg Roach                        <a href="<?= e(route(ModulesBlocksPage::class)) ?>">
62109fbf3e5SGreg Roach                            <?= I18N::translate('Blocks') ?>
62209fbf3e5SGreg Roach                        </a>
62309fbf3e5SGreg Roach                        <?= view('components/badge', ['count' => $block_modules_enabled->count(), 'total' => $block_modules_disabled->count(), 'context' => 'primary']) ?>
62409fbf3e5SGreg Roach                    </li>
62509fbf3e5SGreg Roach                </ul>
62609fbf3e5SGreg Roach
6279d627a9eSGreg Roach                <h3>
6289d627a9eSGreg Roach                    <?= I18N::translate('Individual page') ?>
6299d627a9eSGreg Roach                </h3>
63009fbf3e5SGreg Roach
6319d627a9eSGreg Roach                <ul class="fa-ul">
6329d627a9eSGreg Roach                    <li>
6339d627a9eSGreg Roach                        <span class="fa-li"><?= view('icons/tab') ?></span>
6349f667ff2SGreg Roach                        <a href="<?= e(route(ModulesTabsPage::class)) ?>">
6359d627a9eSGreg Roach                            <?= I18N::translate('Tabs') ?>
6369d627a9eSGreg Roach                            <?= view('components/badge', ['count' => $tab_modules_enabled->count(), 'total' => $tab_modules_disabled->count(), 'context' => 'primary']) ?>
6379d627a9eSGreg Roach                        </a>
6389d627a9eSGreg Roach                    </li>
6399d627a9eSGreg Roach                    <li>
6409d627a9eSGreg Roach                        <span class="fa-li"><?= view('icons/sidebar') ?></span>
6419f667ff2SGreg Roach                        <a href="<?= e(route(ModulesSidebarsPage::class)) ?>">
6429d627a9eSGreg Roach                            <?= I18N::translate('Sidebars') ?>
6439d627a9eSGreg Roach                        </a>
6449d627a9eSGreg Roach                        <?= view('components/badge', ['count' => $sidebar_modules_enabled->count(), 'total' => $sidebar_modules_disabled->count(), 'context' => 'primary']) ?>
6459d627a9eSGreg Roach                    </li>
6469d627a9eSGreg Roach                    <li>
6479d627a9eSGreg Roach                        <span class="fa-li"><?= view('icons/history') ?></span>
6489f667ff2SGreg Roach                        <a href="<?= e(route(ModulesHistoricEventsPage::class)) ?>">
6499d627a9eSGreg Roach                            <?= I18N::translate('Historic events') ?>
6509d627a9eSGreg Roach                        </a>
6519d627a9eSGreg Roach                        <?= view('components/badge', ['count' => $history_modules_enabled->count(), 'total' => $history_modules_disabled->count(), 'context' => 'primary']) ?>
6529d627a9eSGreg Roach                    </li>
6539d627a9eSGreg Roach                </ul>
65409fbf3e5SGreg Roach
655abafa13cSGreg Roach            </div>
656abafa13cSGreg Roach
657abafa13cSGreg Roach            <div class="col-sm-4">
658abafa13cSGreg Roach
6599d627a9eSGreg Roach                <h3>
6609d627a9eSGreg Roach                    <?= I18N::translate('Other') ?>
6619d627a9eSGreg Roach                </h3>
66209fbf3e5SGreg Roach
663dd6b2bfcSGreg Roach                <ul class="fa-ul">
66409fbf3e5SGreg Roach                    <?php foreach ($other_modules as $module) : ?>
665dd6b2bfcSGreg Roach                        <li>
66609fbf3e5SGreg Roach                            <span class="fa-li"><?= view('icons/module') ?></span>
6678d6560c4SGreg Roach
6688d6560c4SGreg Roach                            <?php if ($module->isEnabled()) : ?>
6698d6560c4SGreg Roach                                <?php if ($module instanceof ModuleConfigInterface) : ?>
670dd6b2bfcSGreg Roach                                    <a href="<?= e($module->getConfigLink()) ?>">
67149a243cbSGreg Roach                                    <?= $module->title() ?>
672852bddbeSGreg Roach                                    <?= view('icons/preferences') ?>
673dd6b2bfcSGreg Roach                                    </a>
67409fbf3e5SGreg Roach                                <?php else : ?>
6758d6560c4SGreg Roach                                    <?= $module->title() ?>
67609fbf3e5SGreg Roach                                <?php endif ?>
6778d6560c4SGreg Roach                            <?php else : ?>
6788d6560c4SGreg Roach                                <span class="text-muted">
6798d6560c4SGreg Roach                                    <span class="fa-li"><?= view('icons/module') ?></span>
6808d6560c4SGreg Roach                                     <?= $module->title() ?>
6818d6560c4SGreg Roach                                    <?php if ($module instanceof ModuleConfigInterface) : ?>
682852bddbeSGreg Roach                                        <?= view('icons/preferences') ?>
6838d6560c4SGreg Roach                                    <?php endif ?>
6848d6560c4SGreg Roach                                    </span>
6858d6560c4SGreg Roach                                </span>
6868d6560c4SGreg Roach                            <?php endif ?>
6878d6560c4SGreg Roach
688beefaa8eSGreg Roach                            <?php if ($module instanceof ModuleCustomInterface) : ?>
689beefaa8eSGreg Roach                                <?= view('admin/custom-module-info', ['module' => $module]) ?>
690beefaa8eSGreg Roach                            <?php endif ?>
691dd6b2bfcSGreg Roach                        </li>
692dd6b2bfcSGreg Roach                    <?php endforeach ?>
693dd6b2bfcSGreg Roach                </ul>
694dd6b2bfcSGreg Roach            </div>
695dd6b2bfcSGreg Roach        </div>
696dd6b2bfcSGreg Roach    </div>
697dd6b2bfcSGreg Roach</div>
698dd6b2bfcSGreg Roach
699dd6b2bfcSGreg Roach<!-- MEDIA -->
700dd6b2bfcSGreg Roach<div class="card mb-4">
701dd6b2bfcSGreg Roach    <div class="card-header">
702dd6b2bfcSGreg Roach        <h2 class="mb-0">
703dd6b2bfcSGreg Roach            <?= I18N::translate('Media') ?>
704dd6b2bfcSGreg Roach        </h2>
705dd6b2bfcSGreg Roach    </div>
706dd6b2bfcSGreg Roach    <div class="card-body">
707dd6b2bfcSGreg Roach        <ul class="fa-ul">
708dd6b2bfcSGreg Roach            <li>
709dd6b2bfcSGreg Roach                <span class="fa-li"><?= view('icons/preferences') ?></span>
710*8ce3bd73SGreg Roach                <a href="<?= e(route(ManageMediaPage::class)) ?>">
711dd6b2bfcSGreg Roach                    <?= I18N::translate('Manage media') ?>
712dd6b2bfcSGreg Roach                </a>
713dd6b2bfcSGreg Roach            </li>
714dd6b2bfcSGreg Roach            <li>
715a24f7142SGreg Roach                <span class="fa-li"><?= view('icons/upload') ?></span>
716*8ce3bd73SGreg Roach                <a href="<?= e(route(UploadMediaPage::class)) ?>">
717dd6b2bfcSGreg Roach                    <?= I18N::translate('Upload media files') ?>
718dd6b2bfcSGreg Roach                </a>
719dd6b2bfcSGreg Roach            </li>
720dd6b2bfcSGreg Roach            <li>
721a24f7142SGreg Roach                <span class="fa-li"><?= view('icons/link') ?></span>
722dd6b2bfcSGreg Roach                <a href="<?= e(route('admin-fix-level-0-media')) ?>">
723dd6b2bfcSGreg Roach                    <?= I18N::translate('Link media objects to facts and events') ?>
724dd6b2bfcSGreg Roach                </a>
725dd6b2bfcSGreg Roach            </li>
726dd6b2bfcSGreg Roach            <li>
727a24f7142SGreg Roach                <span class="fa-li"><?= view('icons/upload') ?></span>
728dd6b2bfcSGreg Roach                <a href="<?= e(route('admin-webtrees1-thumbs')) ?>">
729dd6b2bfcSGreg Roach                    <?= I18N::translate('Import custom thumbnails from webtrees version 1') ?>
730dd6b2bfcSGreg Roach                </a>
731dd6b2bfcSGreg Roach            </li>
732dd6b2bfcSGreg Roach        </ul>
733dd6b2bfcSGreg Roach    </div>
734dd6b2bfcSGreg Roach</div>
735dd6b2bfcSGreg Roach
736dd6b2bfcSGreg Roach<!-- MAPS -->
737dd6b2bfcSGreg Roach<div class="card mb-4">
738dd6b2bfcSGreg Roach    <div class="card-header">
739dd6b2bfcSGreg Roach        <h2 class="mb-0">
740dd6b2bfcSGreg Roach            <?= I18N::translate('Map') ?>
741dd6b2bfcSGreg Roach        </h2>
742dd6b2bfcSGreg Roach    </div>
743dd6b2bfcSGreg Roach    <div class="card-body">
744dd6b2bfcSGreg Roach        <div class="row">
745dd6b2bfcSGreg Roach            <div class="col-sm-6">
746dd6b2bfcSGreg Roach                <ul class="fa-ul">
747dd6b2bfcSGreg Roach                    <li>
748dd6b2bfcSGreg Roach                        <span class="fa-li"><?= view('icons/location') ?></span>
74994e35917SGreg Roach                        <a href="<?= e(route(MapDataList::class)) ?>">
750dd6b2bfcSGreg Roach                            <?= I18N::translate('Geographic data') ?>
751dd6b2bfcSGreg Roach                        </a>
752dd6b2bfcSGreg Roach                    </li>
753dd6b2bfcSGreg Roach                </ul>
754dd6b2bfcSGreg Roach            </div>
755dd6b2bfcSGreg Roach            <div class="col-sm-6">
756dd6b2bfcSGreg Roach                <ul class="fa-ul">
757dd6b2bfcSGreg Roach                    <li>
758dd6b2bfcSGreg Roach                        <span class="fa-li"><?= view('icons/map') ?></span>
759dd6b2bfcSGreg Roach                        <a href="<?= e(route('map-provider')) ?>">
760dd6b2bfcSGreg Roach                            <?= I18N::translate('Map provider') ?>
761dd6b2bfcSGreg Roach                        </a>
762dd6b2bfcSGreg Roach                    </li>
763dd6b2bfcSGreg Roach                </ul>
764dd6b2bfcSGreg Roach            </div>
765dd6b2bfcSGreg Roach        </div>
766dd6b2bfcSGreg Roach    </div>
767dd6b2bfcSGreg Roach</div>
768dd6b2bfcSGreg Roach
769dd6b2bfcSGreg Roach<!-- OLD FILES -->
770dd6b2bfcSGreg Roach<?php if (!empty($files_to_delete)) : ?>
771dd6b2bfcSGreg Roach    <div class="card mb-4 card-outline-danger">
772dd6b2bfcSGreg Roach        <div class="card-header">
773dd6b2bfcSGreg Roach            <h2 class="mb-0">
774dd6b2bfcSGreg Roach                <?= I18N::translate('Old files found') ?>
775dd6b2bfcSGreg Roach            </h2>
776dd6b2bfcSGreg Roach        </div>
777dd6b2bfcSGreg Roach        <div class="card-body">
778dd6b2bfcSGreg Roach            <p>
779dd6b2bfcSGreg 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.') ?>
780dd6b2bfcSGreg Roach            </p>
781dd6b2bfcSGreg Roach            <ul class="list-unstyled">
782dd6b2bfcSGreg Roach                <?php foreach ($files_to_delete as $file_to_delete) : ?>
783beefaa8eSGreg Roach                    <li dir="ltr">
784beefaa8eSGreg Roach                        <code><?= e($file_to_delete) ?></code>
785beefaa8eSGreg Roach                    </li>
786dd6b2bfcSGreg Roach                <?php endforeach ?>
787dd6b2bfcSGreg Roach            </ul>
788dd6b2bfcSGreg Roach        </div>
789dd6b2bfcSGreg Roach    </div>
790dd6b2bfcSGreg Roach<?php endif ?>
791