1<?php 2 3use Fisharebest\Webtrees\Http\RequestHandlers\BroadcastPage; 4use Fisharebest\Webtrees\Http\RequestHandlers\CleanDataFolder; 5use Fisharebest\Webtrees\Http\RequestHandlers\ControlPanel; 6use Fisharebest\Webtrees\Http\RequestHandlers\CreateTreePage; 7use Fisharebest\Webtrees\Http\RequestHandlers\PendingChanges; 8use Fisharebest\Webtrees\Http\RequestHandlers\PhpInformation; 9use Fisharebest\Webtrees\Http\RequestHandlers\SiteLogsPage; 10use Fisharebest\Webtrees\Http\RequestHandlers\EmailPreferencesPage; 11use Fisharebest\Webtrees\Http\RequestHandlers\UsersCleanupPage; 12use Fisharebest\Webtrees\I18N; 13use Fisharebest\Webtrees\Module\FamilyListModule; 14use Fisharebest\Webtrees\Module\IndividualListModule; 15use Fisharebest\Webtrees\Module\MediaListModule; 16use Fisharebest\Webtrees\Module\ModuleConfigInterface; 17use Fisharebest\Webtrees\Module\ModuleCustomInterface; 18use Fisharebest\Webtrees\Module\NoteListModule; 19use Fisharebest\Webtrees\Module\RepositoryListModule; 20use Fisharebest\Webtrees\Module\SourceListModule; 21use Fisharebest\Webtrees\Webtrees; 22use Illuminate\Support\Collection; 23 24/** 25 * @var string $latest_version 26 * @var string $title 27 * @var Collection $server_errors 28 * @var Collection $server_warnings 29 */ 30 31?> 32 33<h1><?= $title ?></h1> 34 35<!-- WEBSITE / WEBTREES --> 36<div class="card mb-4"> 37 <div class="card-header"> 38 <h2 class="mb-0"> 39 <?= I18N::translate('Website') ?> 40 <span class="badge badge-secondary" dir="ltr"> 41 <?= e(Webtrees::VERSION) ?> 42 </span> 43 </h2> 44 </div> 45 <div class="card-body"> 46 <?php foreach ($server_errors as $server_error) : ?> 47 <p class="alert alert-danger"><?= $server_error ?></p> 48 <?php endforeach ?> 49 50 <?php foreach ($server_warnings as $server_warning) : ?> 51 <p class="alert alert-warning"><?= $server_warning ?></p> 52 <?php endforeach ?> 53 54 <p class="card-text"> 55 <?= /* I18N: %s is a URL/link to the project website */ 56 I18N::translate('Support and documentation can be found at %s.', '<a href="https://webtrees.net/">webtrees.net</a>') ?> 57 </p> 58 <p class="card-text"> 59 <?php if ($latest_version === '') : ?> 60 <?= I18N::translate('No upgrade information is available.') ?> 61 <?php elseif (version_compare(Webtrees::VERSION, $latest_version) < 0) : ?> 62 <div class="alert alert-info"> 63 <?= I18N::translate('A new version of webtrees is available.') ?> 64 <a href="<?= e(route('upgrade')) ?>" class="alert-link"> 65 <?= /* I18N: %s is a version number */ 66 I18N::translate('Upgrade to webtrees %s.', e($latest_version)) ?> 67 </a> 68 </div> 69 <?php else : ?> 70 <?= I18N::translate('This is the latest version of webtrees. No upgrade is available.') ?> 71 <?php endif ?> 72 </p> 73 74 <div class="row"> 75 <div class="col-sm-6"> 76 <ul class="fa-ul"> 77 <li> 78 <span class="fa-li"><?= view('icons/preferences') ?></span> 79 <a href="<?= e(route('admin-site-preferences')) ?>"> 80 <?= I18N::translate('Website preferences') ?> 81 </a> 82 </li> 83 <li> 84 <span class="fa-li"><?= view('icons/email') ?></span> 85 <a href="<?= e(route(EmailPreferencesPage::class)) ?>"> 86 <?= I18N::translate('Sending email') ?> 87 </a> 88 </li> 89 <li> 90 <span class="fa-li"><?= view('icons/user') ?></span> 91 <a href="<?= e(route('admin-site-registration')) ?>"> 92 <?= I18N::translate('Sign-in and registration') ?> 93 </a> 94 </li> 95 </ul> 96 </div> 97 <div class="col-sm-6"> 98 <ul class="fa-ul"> 99 <li> 100 <span class="fa-li"><?= view('icons/list') ?></span> 101 <a href="<?= e(route(SiteLogsPage::class)) ?>"> 102 <?= I18N::translate('Website logs') ?> 103 </a> 104 </li> 105 <li> 106 <span class="fa-li"><?= view('icons/delete') ?></span> 107 <a href="<?= e(route(CleanDataFolder::class)) ?>"> 108 <?= I18N::translate('Clean up data folder') ?> 109 </a> 110 </li> 111 <li> 112 <span class="fa-li"><?= view('icons/help') ?></span> 113 <a href="<?= e(route(PhpInformation::class)) ?>"> 114 <?= I18N::translate('Server information') ?> 115 </a> 116 </li> 117 </ul> 118 </div> 119 </div> 120 </div> 121</div> 122 123<!-- FAMILY TREES --> 124<div class="card mb-4 <?= array_sum($changes) ? 'card-outline-danger' : '' ?>"> 125 <div class="card-header"> 126 <h2 class="mb-0"> 127 <?= I18N::translate('Family trees') ?> 128 <span class="badge badge-secondary"> 129 <?= I18N::number(count($all_trees)) ?> 130 </span> 131 </h2> 132 </div> 133 <div class="card-body"> 134 <?php if ($all_trees->isEmpty()) : ?> 135 <p class="alert alert-info"> 136 <?= I18N::translate('You need to create a family tree.') ?> 137 </p> 138 <?php endif ?> 139 140 <ul class="fa-ul"> 141 <li> 142 <span class="fa-li"><?= view('icons/add') ?></span> 143 <a href="<?= e(route(CreateTreePage::class)) ?>"> 144 <?= I18N::translate('Create a family tree') ?> 145 </a> 146 </li> 147 <li> 148 <span class="fa-li"><?= view('icons/block') ?></span> 149 <a href="<?= e(route('tree-page-default-edit')) ?>"> 150 <?= I18N::translate('Set the default blocks for new family trees') ?> 151 </a> 152 </li> 153 <?php if (count($all_trees) > 1) : ?> 154 <li> 155 <span class="fa-li"><?= view('icons/merge') ?></span> 156 <a href="<?= e(route('admin-trees-merge')) ?>"> 157 <?= I18N::translate('Merge family trees') ?> 158 </a> 159 </li> 160 <?php endif ?> 161 </ul> 162 163 <table class="table table-sm"> 164 <caption class="sr-only"> 165 <?= I18N::translate('Family trees') ?> 166 </caption> 167 <thead> 168 <tr> 169 <th><?= I18N::translate('Family tree') ?></th> 170 <th><?= I18N::translate('Pending changes') ?></th> 171 <th class="d-none d-sm-table-cell"><?= I18N::translate('Individuals') ?></th> 172 <th class="d-none d-lg-table-cell"><?= I18N::translate('Families') ?></th> 173 <th class="d-none d-sm-table-cell"><?= I18N::translate('Sources') ?></th> 174 <th class="d-none d-lg-table-cell"><?= I18N::translate('Repositories') ?></th> 175 <th class="d-none d-sm-table-cell"><?= I18N::translate('Media') ?></th> 176 <th class="d-none d-lg-table-cell"><?= I18N::translate('Notes') ?></th> 177 </tr> 178 </thead> 179 <tbody> 180 <?php foreach ($all_trees as $tree) : ?> 181 <tr class="<?= $changes[$tree->id()] ? 'danger' : '' ?>"> 182 <th scope="row"> 183 <a href="<?= e(route('manage-trees', ['tree' => $tree->name()])) ?>"> 184 <?= view('icons/preferences') ?> 185 <?= e($tree->name()) ?> 186 - 187 <?= e($tree->title()) ?> 188 </a> 189 </th> 190 <td style="text-align: right;"> 191 <?php if ($changes[$tree->id()]) : ?> 192 <a href="<?= e(route(PendingChanges::class, ['tree' => $tree->name(), 'url' => route(ControlPanel::class)])) ?>"> 193 <?= I18N::number($changes[$tree->id()]) ?> 194 <span class="sr-only"><?= I18N::translate('Pending changes') ?> <?= e($tree->title()) ?></span> 195 </a> 196 <?php else : ?> 197 - 198 <?php endif ?> 199 </td> 200 <td class="d-none d-sm-table-cell align-digits"> 201 <?php if ($individuals[$tree->id()] > 0) : ?> 202 <?php if ($individual_list_module instanceof IndividualListModule) : ?> 203 <a href="<?= e($individual_list_module->listUrl($tree)) ?>"><?= I18N::number($individuals[$tree->id()]) ?></a> 204 <?php else : ?> 205 <?= I18N::number($individuals[$tree->id()]) ?> 206 <?php endif ?> 207 <?php else : ?> 208 - 209 <?php endif ?> 210 </td> 211 <td class="d-none d-lg-table-cell align-digits"> 212 <?php if ($families[$tree->id()] > 0) : ?> 213 <?php if ($family_list_module instanceof FamilyListModule) : ?> 214 <a href="<?= e($family_list_module->listUrl($tree)) ?>"><?= I18N::number($families[$tree->id()]) ?></a> 215 <?php else : ?> 216 <?= I18N::number($families[$tree->id()]) ?> 217 <?php endif ?> 218 <?php else : ?> 219 - 220 <?php endif ?> 221 </td> 222 <td class="d-none d-sm-table-cell align-digits"> 223 <?php if ($sources[$tree->id()] > 0) : ?> 224 <?php if ($source_list_module instanceof SourceListModule) : ?> 225 <a href="<?= e($source_list_module->listUrl($tree)) ?>"><?= I18N::number($sources[$tree->id()]) ?></a> 226 <?php else : ?> 227 <?= I18N::number($sources[$tree->id()]) ?> 228 <?php endif ?> 229 <?php else : ?> 230 - 231 <?php endif ?> 232 </td> 233 <td class="d-none d-lg-table-cell align-digits"> 234 <?php if ($repositories[$tree->id()] > 0) : ?> 235 <?php if ($repository_list_module instanceof RepositoryListModule) : ?> 236 <a href="<?= e($repository_list_module->listUrl($tree)) ?>"><?= I18N::number($repositories[$tree->id()]) ?></a> 237 <?php else : ?> 238 <?= I18N::number($repositories[$tree->id()]) ?> 239 <?php endif ?> 240 <?php else : ?> 241 - 242 <?php endif ?> 243 </td> 244 <td class="d-none d-sm-table-cell align-digits"> 245 <?php if ($media[$tree->id()] > 0) : ?> 246 <?php if ($media_list_module instanceof MediaListModule) : ?> 247 <a href="<?= e($media_list_module->listUrl($tree)) ?>"><?= I18N::number($media[$tree->id()]) ?></a> 248 <?php else : ?> 249 <?= I18N::number($media[$tree->id()]) ?> 250 <?php endif ?> 251 <?php else : ?> 252 - 253 <?php endif ?> 254 </td> 255 <td class="d-none d-lg-table-cell align-digits"> 256 <?php if ($notes[$tree->id()] > 0) : ?> 257 <?php if ($note_list_module instanceof NoteListModule) : ?> 258 <a href="<?= e($note_list_module->listUrl($tree)) ?>"><?= I18N::number($notes[$tree->id()]) ?></a> 259 <?php else : ?> 260 <?= I18N::number($notes[$tree->id()]) ?> 261 <?php endif ?> 262 <?php else : ?> 263 - 264 <?php endif ?> 265 </td> 266 </tr> 267 <?php endforeach ?> </tbody> 268 <tfoot> 269 <tr> 270 <th scope="row"> 271 <?= I18N::translate('Total') ?> 272 </th> 273 <td class="align-digits"> 274 <?= I18N::number(array_sum($changes)) ?> 275 </td> 276 <td class="d-none d-sm-table-cell align-digits"> 277 <?= I18N::number($individuals->sum()) ?> 278 </td> 279 <td class="d-none d-lg-table-cell align-digits"> 280 <?= I18N::number($families->sum()) ?> 281 </td> 282 <td class="d-none d-sm-table-cell align-digits"> 283 <?= I18N::number($sources->sum()) ?> 284 </td> 285 <td class="d-none d-lg-table-cell align-digits"> 286 <?= I18N::number($repositories->sum()) ?> 287 </td> 288 <td class="d-none d-sm-table-cell align-digits"> 289 <?= I18N::number($media->sum()) ?> 290 </td> 291 <td class="d-none d-lg-table-cell align-digits"> 292 <?= I18N::number($notes->sum()) ?> 293 </td> 294 </tr> 295 </tfoot> 296 </table> 297 </div> 298</div> 299 300<!-- USERS --> 301<div class="card mb-4 <?= $unapproved || $unverified ? 'card-outline-danger' : '' ?>"> 302 <div class="card-header"> 303 <h2 class="mb-0"> 304 <?= I18N::translate('Users') ?> 305 <span class="badge badge-secondary"> 306 <?= I18N::number(count($all_users)) ?> 307 </span> 308 </h2> 309 </div> 310 <div class="card-body"> 311 <dl class="row"> 312 <?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) : ?> 313 <?php if (!empty($list)) : ?> 314 <dt class="col-sm-6"> 315 <?= $label ?> 316 </dt> 317 <dd class="col-sm-6"> 318 <?php foreach ($list as $n => $user) : ?> 319 <?= $n ? I18N::$list_separator : '' ?> 320 <a href="<?= e(route('admin-users-edit', ['user_id' => $user->id()])) ?>" dir="auto"> 321 <?= e($user->realName()) ?> 322 </a> 323 <?php endforeach ?> 324 <?php if ($list->isEmpty()): ?> 325 — 326 <?php endif ?> 327 </dd> 328 <?php endif ?> 329 <?php endforeach ?> 330 </dl> 331 332 <div class="row"> 333 <div class="col-sm-6"> 334 <ul class="fa-ul"> 335 <li> 336 <span class="fa-li"><?= view('icons/preferences') ?></span> 337 <a href="<?= e(route('admin-users')) ?>"> 338 <?= I18N::translate('User administration') ?> 339 </a> 340 </li> 341 <li> 342 <span class="fa-li"><?= view('icons/add') ?></span> 343 <a href="<?= e(route('admin-users-create')) ?>"> 344 <?= I18N::translate('Add a user') ?> 345 </a> 346 </li> 347 <li> 348 <span class="fa-li"><?= view('icons/delete') ?></span> 349 <a href="<?= e(route(UsersCleanupPage::class)) ?>"> 350 <?= I18N::translate('Delete inactive users') ?> 351 </a> 352 </li> 353 <li> 354 <span class="fa-li"><?= view('icons/block') ?></span> 355 <a href="<?= e(route('user-page-default-edit')) ?>"> 356 <?= I18N::translate('Set the default blocks for new users') ?> 357 </a> 358 </li> 359 </ul> 360 </div> 361 <div class="col-sm-6"> 362 <ul class="fa-ul"> 363 <li> 364 <span class="fa-li"><?= view('icons/email') ?></span> 365 <a href="<?= e(route(BroadcastPage::class, ['to' => 'all'])) ?>"> 366 <?= I18N::translate('Send a message to all users') ?> 367 </a> 368 </li> 369 <li> 370 <span class="fa-li"><?= view('icons/email') ?></span> 371 <a href="<?= e(route(BroadcastPage::class, ['to' => 'never_logged'])) ?>"> 372 <?= I18N::translate('Send a message to users who have never signed in') ?> 373 </a> 374 </li> 375 <li> 376 <span class="fa-li"><?= view('icons/email') ?></span> 377 <a href="<?= e(route(BroadcastPage::class, ['to' => 'last_6mo'])) ?>"> 378 <?= I18N::translate('Send a message to users who have not signed in for 6 months') ?> 379 </a> 380 </li> 381 </ul> 382 </div> 383 </div> 384 </div> 385</div> 386 387<!-- MODULES --> 388<div class="card mb-4"> 389 <div class="card-header"> 390 <h2 class="mb-0"> 391 <?= I18N::translate('Modules') ?> 392 <?= view('components/badge', ['count' => $all_modules_enabled->count(), 'total' => $all_modules_disabled->count(), 'context' => 'secondary']) ?> 393 </h2> 394 </div> 395 396 <div class="card-body"> 397 <ul class="fa-ul"> 398 <li> 399 <span class="fa-li"><?= view('icons/module') ?></span> 400 <a href="<?= e(route('modules')) ?>"> 401 <?= I18N::translate('All modules') ?> 402 </a> 403 <?= view('components/badge', ['count' => $all_modules_enabled->count(), 'total' => $all_modules_disabled->count(), 'context' => 'primary']) ?> 404 </li> 405 </ul> 406 407 <div class="row"> 408 <div class="col-sm-4"> 409 <h3> 410 <?= I18N::translate('Genealogy') ?> 411 </h3> 412 413 <ul class="fa-ul"> 414 <li> 415 <span class="fa-li"><?= view('icons/menu') ?></span> 416 <a href="<?= e(route('menus')) ?>"> 417 <?= I18N::translate('Menus') ?> 418 </a> 419 <?= view('components/badge', ['count' => $menu_modules_enabled->count(), 'total' => $menu_modules_disabled->count(), 'context' => 'primary']) ?> 420 </li> 421 <li> 422 <span class="fa-li"><?= view('icons/chart') ?></span> 423 <a href="<?= e(route('charts')) ?>"> 424 <?= I18N::translate('Charts') ?> 425 </a> 426 <?= view('components/badge', ['count' => $chart_modules_enabled->count(), 'total' => $chart_modules_disabled->count(), 'context' => 'primary']) ?> 427 </li> 428 <li> 429 <span class="fa-li"><?= view('icons/list') ?></span> 430 <a href="<?= e(route('lists')) ?>"> 431 <?= I18N::translate('Lists') ?> 432 </a> 433 <?= view('components/badge', ['count' => $list_modules_enabled->count(), 'total' => $list_modules_disabled->count(), 'context' => 'primary']) ?> 434 </li> 435 <li> 436 <span class="fa-li"><?= view('icons/report') ?></span> 437 <a href="<?= e(route('reports')) ?>"> 438 <?= I18N::translate('Reports') ?> 439 </a> 440 <?= view('components/badge', ['count' => $report_modules_enabled->count(), 'total' => $report_modules_disabled->count(), 'context' => 'primary']) ?> 441 </li> 442 </ul> 443 444 <h3> 445 <?= I18N::translate('Website') ?> 446 </h3> 447 448 <ul class="fa-ul"> 449 <li> 450 <span class="fa-li"><?= view('icons/footer') ?></span> 451 <a href="<?= e(route('footers')) ?>"> 452 <?= I18N::translate('Footers') ?> 453 </a> 454 <?= view('components/badge', ['count' => $footer_modules_enabled->count(), 'total' => $footer_modules_disabled->count(), 'context' => 'primary']) ?> 455 </li> 456 <li> 457 <span class="fa-li"><?= view('icons/analytics') ?></span> 458 <a href="<?= e(route('analytics')) ?>"> 459 <?= I18N::translate('Tracking and analytics') ?> 460 </a> 461 <?= view('components/badge', ['count' => $analytics_modules_enabled->count(), 'total' => $analytics_modules_disabled->count(), 'context' => 'primary']) ?> 462 </li> 463 <li> 464 <span class="fa-li"><?= view('icons/theme') ?></span> 465 <a href="<?= e(route('themes')) ?>"> 466 <?= I18N::translate('Themes') ?> 467 </a> 468 <?= view('components/badge', ['count' => $theme_modules_enabled->count(), 'total' => $theme_modules_disabled->count(), 'context' => 'primary']) ?> 469 </li> 470 <li> 471 <span class="fa-li"><?= view('icons/language') ?></span> 472 <a href="<?= e(route('languages')) ?>"> 473 <?= I18N::translate('Languages') ?> 474 </a> 475 <?= view('components/badge', ['count' => $language_modules_enabled->count(), 'total' => $language_modules_disabled->count(), 'context' => 'primary']) ?> 476 </li> 477 </ul> 478 479 </div> 480 481 <div class="col-sm-4"> 482 483 <h3> 484 <?= I18N::translate('Home page') ?> 485 </h3> 486 487 <ul class="fa-ul"> 488 <li> 489 <span class="fa-li"><?= view('icons/block') ?></span> 490 <a href="<?= e(route('blocks')) ?>"> 491 <?= I18N::translate('Blocks') ?> 492 </a> 493 <?= view('components/badge', ['count' => $block_modules_enabled->count(), 'total' => $block_modules_disabled->count(), 'context' => 'primary']) ?> 494 </li> 495 </ul> 496 497 <h3> 498 <?= I18N::translate('Individual page') ?> 499 </h3> 500 501 <ul class="fa-ul"> 502 <li> 503 <span class="fa-li"><?= view('icons/tab') ?></span> 504 <a href="<?= e(route('tabs')) ?>"> 505 <?= I18N::translate('Tabs') ?> 506 <?= view('components/badge', ['count' => $tab_modules_enabled->count(), 'total' => $tab_modules_disabled->count(), 'context' => 'primary']) ?> 507 </a> 508 </li> 509 <li> 510 <span class="fa-li"><?= view('icons/sidebar') ?></span> 511 <a href="<?= e(route('sidebars')) ?>"> 512 <?= I18N::translate('Sidebars') ?> 513 </a> 514 <?= view('components/badge', ['count' => $sidebar_modules_enabled->count(), 'total' => $sidebar_modules_disabled->count(), 'context' => 'primary']) ?> 515 </li> 516 <li> 517 <span class="fa-li"><?= view('icons/history') ?></span> 518 <a href="<?= e(route('history')) ?>"> 519 <?= I18N::translate('Historic events') ?> 520 </a> 521 <?= view('components/badge', ['count' => $history_modules_enabled->count(), 'total' => $history_modules_disabled->count(), 'context' => 'primary']) ?> 522 </li> 523 </ul> 524 525 </div> 526 527 <div class="col-sm-4"> 528 529 <h3> 530 <?= I18N::translate('Other') ?> 531 </h3> 532 533 <ul class="fa-ul"> 534 <?php foreach ($other_modules as $module) : ?> 535 <li> 536 <span class="fa-li"><?= view('icons/module') ?></span> 537 538 <?php if ($module->isEnabled()): ?> 539 <?php if ($module instanceof ModuleConfigInterface): ?> 540 <a href="<?= e($module->getConfigLink()) ?>"> 541 <?= $module->title() ?> 542 <?= view('icons/preferences') ?> 543 </a> 544 <?php else : ?> 545 <?= $module->title() ?> 546 <?php endif ?> 547 <?php else : ?> 548 <span class="text-muted"> 549 <span class="fa-li"><?= view('icons/module') ?></span> 550 <?= $module->title() ?> 551 <?php if ($module instanceof ModuleConfigInterface): ?> 552 <?= view('icons/preferences') ?> 553 <?php endif ?> 554 </span> 555 </span> 556 <?php endif ?> 557 558 <?php if ($module instanceof ModuleCustomInterface): ?> 559 <?= view('admin/custom-module-info', ['module' => $module]) ?> 560 <?php endif ?> 561 </li> 562 <?php endforeach ?> 563 </ul> 564 </div> 565 </div> 566 </div> 567</div> 568 569<!-- MEDIA --> 570<div class="card mb-4"> 571 <div class="card-header"> 572 <h2 class="mb-0"> 573 <?= I18N::translate('Media') ?> 574 </h2> 575 </div> 576 <div class="card-body"> 577 <ul class="fa-ul"> 578 <li> 579 <span class="fa-li"><?= view('icons/preferences') ?></span> 580 <a href="<?= e(route('admin-media')) ?>"> 581 <?= I18N::translate('Manage media') ?> 582 </a> 583 </li> 584 <li> 585 <span class="fa-li"><?= view('icons/upload') ?></span> 586 <a href="<?= e(route('admin-media-upload')) ?>"> 587 <?= I18N::translate('Upload media files') ?> 588 </a> 589 </li> 590 <li> 591 <span class="fa-li"><?= view('icons/link') ?></span> 592 <a href="<?= e(route('admin-fix-level-0-media')) ?>"> 593 <?= I18N::translate('Link media objects to facts and events') ?> 594 </a> 595 </li> 596 <li> 597 <span class="fa-li"><?= view('icons/upload') ?></span> 598 <a href="<?= e(route('admin-webtrees1-thumbs')) ?>"> 599 <?= I18N::translate('Import custom thumbnails from webtrees version 1') ?> 600 </a> 601 </li> 602 </ul> 603 </div> 604</div> 605 606<!-- MAPS --> 607<div class="card mb-4"> 608 <div class="card-header"> 609 <h2 class="mb-0"> 610 <?= I18N::translate('Map') ?> 611 </h2> 612 </div> 613 <div class="card-body"> 614 <div class="row"> 615 <div class="col-sm-6"> 616 <ul class="fa-ul"> 617 <li> 618 <span class="fa-li"><?= view('icons/location') ?></span> 619 <a href="<?= e(route('map-data')) ?>"> 620 <?= I18N::translate('Geographic data') ?> 621 </a> 622 </li> 623 </ul> 624 </div> 625 <div class="col-sm-6"> 626 <ul class="fa-ul"> 627 <li> 628 <span class="fa-li"><?= view('icons/map') ?></span> 629 <a href="<?= e(route('map-provider')) ?>"> 630 <?= I18N::translate('Map provider') ?> 631 </a> 632 </li> 633 </ul> 634 </div> 635 </div> 636 </div> 637</div> 638 639<!-- OLD FILES --> 640<?php if (!empty($files_to_delete)) : ?> 641 <div class="card mb-4 card-outline-danger"> 642 <div class="card-header"> 643 <h2 class="mb-0"> 644 <?= I18N::translate('Old files found') ?> 645 </h2> 646 </div> 647 <div class="card-body"> 648 <p> 649 <?= I18N::translate('Files have been found from a previous version of webtrees. Old files can sometimes be a security risk. You should delete them.') ?> 650 </p> 651 <ul class="list-unstyled"> 652 <?php foreach ($files_to_delete as $file_to_delete) : ?> 653 <li dir="ltr"> 654 <code><?= e($file_to_delete) ?></code> 655 </li> 656 <?php endforeach ?> 657 </ul> 658 </div> 659 </div> 660<?php endif ?> 661