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