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