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