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