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