diff options
Diffstat (limited to 'resources/views')
| -rw-r--r-- | resources/views/admin/changes-log.phtml | 68 | ||||
| -rw-r--r-- | resources/views/admin/control-panel.phtml | 3 | ||||
| -rw-r--r-- | resources/views/admin/trees.phtml | 3 | ||||
| -rw-r--r-- | resources/views/emails/pending-changes-html.phtml | 9 | ||||
| -rw-r--r-- | resources/views/emails/pending-changes-text.phtml | 9 | ||||
| -rw-r--r-- | resources/views/family-page.phtml | 6 | ||||
| -rw-r--r-- | resources/views/gedcom-record-page.phtml | 8 | ||||
| -rw-r--r-- | resources/views/individual-page.phtml | 6 | ||||
| -rw-r--r-- | resources/views/media-page.phtml | 5 | ||||
| -rw-r--r-- | resources/views/note-page.phtml | 8 | ||||
| -rw-r--r-- | resources/views/pending-changes-page.phtml | 52 | ||||
| -rw-r--r-- | resources/views/repository-page.phtml | 6 | ||||
| -rw-r--r-- | resources/views/source-page.phtml | 8 |
13 files changed, 108 insertions, 83 deletions
diff --git a/resources/views/admin/changes-log.phtml b/resources/views/admin/changes-log.phtml index 28e23ef0f7..7c8108d4a2 100644 --- a/resources/views/admin/changes-log.phtml +++ b/resources/views/admin/changes-log.phtml @@ -1,18 +1,19 @@ <?php use Fisharebest\Webtrees\Http\RequestHandlers\ControlPanel; +use Fisharebest\Webtrees\Http\RequestHandlers\PendingChangesLogData; +use Fisharebest\Webtrees\Http\RequestHandlers\PendingChangesLogDelete; +use Fisharebest\Webtrees\Http\RequestHandlers\PendingChangesLogDownload; use Fisharebest\Webtrees\I18N; ?> -<?= view('components/breadcrumbs', ['links' => [route(ControlPanel::class) => I18N::translate('Control panel'), route('manage-trees') => I18N::translate('Manage family trees'), $title]]) ?> +<?= view('components/breadcrumbs', ['links' => [route(ControlPanel::class) => I18N::translate('Control panel'), route('manage-trees', ['tree' => $tree->name()]) => I18N::translate('Manage family trees'), $title]]) ?> <h1><?= $title ?></h1> -<form method="get" action="<?= e(route('admin-changes-log')) ?>" class="form" name="logs"> - <input type="hidden" name="action" value="show"> - <input type="hidden" name="route" value="admin-changes-log"> - <input type="hidden" name="tree" value="<?= e($ged) ?>"> +<form method="post" class="form" name="logs"> + <?= csrf_field() ?> <div class="row"> <div class="form-group col-xs-6 col-md-3"> @@ -63,14 +64,14 @@ use Fisharebest\Webtrees\I18N; <label for="username"> <?= I18N::translate('User') ?> </label> - <?= view('components/select', ['name' => 'username', 'selected' => $username, 'options' => $user_list]) ?> + <?= view('components/select', ['name' => 'username', 'selected' => $username, 'options' => $users]) ?> </div> <div class="form-group col-xs-6 col-md-3"> <label for="tree"> <?= I18N::translate('Family tree') ?> </label> - <?= view('components/select', ['name' => 'ged', 'selected' => $ged, 'options' => $tree_list]) ?> + <?= view('components/select', ['name' => 'tree', 'selected' => $tree->name(), 'options' => $trees]) ?> </div> </div> @@ -80,38 +81,37 @@ use Fisharebest\Webtrees\I18N; <?= I18N::translate('search') ?> </button> - <button type="submit" class="btn btn-secondary" onclick="document.logs.action.value='export';return true;" <?= $action === 'show' ? '' : 'disabled' ?>> + <a class="btn btn-secondary" href="<?= (route(PendingChangesLogDownload::class, ['from' => $from, 'to' => $to, 'type' => $type, 'xref' => $xref, 'oldged' => $oldged, 'newged' => $newged, 'tree' => $tree->name(), 'username' => $username])) ?>"> <?= view('icons/download') ?> <?= /* I18N: A button label. */ I18N::translate('download') ?> - </button> + </a> - <button type="submit" class="btn btn-danger" data-confirm="<?= I18N::translate('Permanently delete these records?') ?>" onclick="if (confirm(this.dataset.confirm)) {document.logs.action.value='delete'; return true;} else {return false;}" <?= $action === 'show' ? '' : 'disabled' ?>> + <a href="#" class="btn btn-danger" data-confirm="<?= I18N::translate('Permanently delete these records?') ?>" data-post-url="<?= (route(PendingChangesLogDelete::class, ['from' => $from, 'to' => $to, 'type' => $type, 'xref' => $xref, 'oldged' => $oldged, 'newged' => $newged, 'tree' => $tree->name(), 'username' => $username])) ?>"> <?= view('icons/delete') ?> <?= I18N::translate('delete') ?> - </button> + </a> </div> </form> -<?php if ($action === 'show') : ?> - <table - class="table table-bordered table-sm table-hover table-site-changes datatables" - data-ajax="<?= route('admin-changes-log-data', ['from' => $from, 'to' => $to, 'type' => $type, 'xref' => $xref, 'oldged' => $oldged, 'newged' => $newged, 'ged' => $ged, 'username' => $username]) ?>" - data-server-side="true" - data-sorting="<?= e('[[ 0, "desc" ]]') ?>" - > - <caption class="sr-only"> - <?= $title ?> - </caption> - <thead> - <tr> - <th data-visible="false"></th> - <th><?= I18N::translate('Timestamp') ?></th> - <th><?= I18N::translate('Status') ?></th> - <th><?= I18N::translate('Record') ?></th> - <th data-sortable="false"><?= I18N::translate('Data') ?></th> - <th><?= I18N::translate('User') ?></th> - <th><?= I18N::translate('Family tree') ?></th> - </tr> - </thead> - </table> -<?php endif ?> +<table + class="table table-bordered table-sm table-hover table-site-changes datatables" + data-ajax="<?= route(PendingChangesLogData::class, ['from' => $from, 'to' => $to, 'type' => $type, 'xref' => $xref, 'oldged' => $oldged, 'newged' => $newged, 'tree' => $tree->name(), 'username' => $username]) ?>" + data-server-side="true" + data-sorting="<?= e('[[ 0, "desc" ]]') ?>" +> + <caption class="sr-only"> + <?= $title ?> + </caption> + + <thead> + <tr> + <th data-visible="false"></th> + <th><?= I18N::translate('Timestamp') ?></th> + <th><?= I18N::translate('Status') ?></th> + <th><?= I18N::translate('Record') ?></th> + <th data-sortable="false"><?= I18N::translate('Data') ?></th> + <th><?= I18N::translate('User') ?></th> + <th><?= I18N::translate('Family tree') ?></th> + </tr> + </thead> +</table> diff --git a/resources/views/admin/control-panel.phtml b/resources/views/admin/control-panel.phtml index df9a916818..575242479a 100644 --- a/resources/views/admin/control-panel.phtml +++ b/resources/views/admin/control-panel.phtml @@ -3,6 +3,7 @@ use Fisharebest\Webtrees\Http\RequestHandlers\CleanDataFolder; use Fisharebest\Webtrees\Http\RequestHandlers\ControlPanel; use Fisharebest\Webtrees\Http\RequestHandlers\CreateTreePage; +use Fisharebest\Webtrees\Http\RequestHandlers\PendingChanges; use Fisharebest\Webtrees\Http\RequestHandlers\PhpInformation; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Module\FamilyListModule; @@ -182,7 +183,7 @@ use Illuminate\Support\Collection; </th> <td style="text-align: right;"> <?php if ($changes[$tree->id()]) : ?> - <a href="<?= e(route('show-pending', ['tree' => $tree->name(), 'url' => route(ControlPanel::class)])) ?>"> + <a href="<?= e(route(PendingChanges::class, ['tree' => $tree->name(), 'url' => route(ControlPanel::class)])) ?>"> <?= I18N::number($changes[$tree->id()]) ?> <span class="sr-only"><?= I18N::translate('Pending changes') ?> <?= e($tree->title()) ?></span> </a> diff --git a/resources/views/admin/trees.phtml b/resources/views/admin/trees.phtml index 20ee632470..1ec9170616 100644 --- a/resources/views/admin/trees.phtml +++ b/resources/views/admin/trees.phtml @@ -3,6 +3,7 @@ use Fisharebest\Webtrees\Auth; use Fisharebest\Webtrees\Http\RequestHandlers\ControlPanel; use Fisharebest\Webtrees\Http\RequestHandlers\DeleteTreeAction; +use Fisharebest\Webtrees\Http\RequestHandlers\PendingChangesLogPage; use Fisharebest\Webtrees\Http\RequestHandlers\SelectDefaultTree; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Site; @@ -186,7 +187,7 @@ use Illuminate\Database\Capsule\Manager as DB; <!-- CHANGES --> <li> <span class="fa-li"><?= view('icons/edit') ?></span> - <a href="<?= route('admin-changes-log', ['tree' => $managed_tree->name()]) ?>"> + <a href="<?= route(PendingChangesLogPage::class, ['tree' => $managed_tree->name()]) ?>"> <?= I18N::translate('Changes log') ?> <span class="sr-only"> <?= e($managed_tree->title()) ?> diff --git a/resources/views/emails/pending-changes-html.phtml b/resources/views/emails/pending-changes-html.phtml index 9e3647dde7..5662c0d5e4 100644 --- a/resources/views/emails/pending-changes-html.phtml +++ b/resources/views/emails/pending-changes-html.phtml @@ -1,4 +1,9 @@ -<?php use Fisharebest\Webtrees\I18N; ?> +<?php + +use Fisharebest\Webtrees\Http\RequestHandlers\PendingChanges; +use Fisharebest\Webtrees\I18N; + +?> <div <?= I18N::htmlAttributes() ?>> <p> <?= I18N::translate('Hello %s…', '<span dir="auto">' . e($user->realName()) . '</span>') ?> @@ -10,7 +15,7 @@ <ul> <li> - <a href="<?= e(route('show-pending', ['tree' => $tree->name()])) ?>"> + <a href="<?= e(route(PendingChanges::class, ['tree' => $tree->name()])) ?>"> <?= e($tree->title()) ?> </a> </li> diff --git a/resources/views/emails/pending-changes-text.phtml b/resources/views/emails/pending-changes-text.phtml index 31f17ca8d3..239a891254 100644 --- a/resources/views/emails/pending-changes-text.phtml +++ b/resources/views/emails/pending-changes-text.phtml @@ -1,7 +1,12 @@ -<?php use Fisharebest\Webtrees\I18N; ?> +<?php + +use Fisharebest\Webtrees\Http\RequestHandlers\PendingChanges; +use Fisharebest\Webtrees\I18N; + +?> <?= I18N::translate('Hello %s…', $user->realName()) ?> <?= I18N::translate('There are pending changes for you to moderate.') ?> -<?= $tree->title() ?> - <?= route('show-pending', ['tree' => $tree->name()]) ?> +<?= $tree->title() ?> - <?= route(PendingChanges::class, ['tree' => $tree->name()]) ?> diff --git a/resources/views/family-page.phtml b/resources/views/family-page.phtml index 49f3fb4660..572c36d5c3 100644 --- a/resources/views/family-page.phtml +++ b/resources/views/family-page.phtml @@ -3,6 +3,8 @@ use Fisharebest\Webtrees\Auth; use Fisharebest\Webtrees\Functions\FunctionsPrint; use Fisharebest\Webtrees\Functions\FunctionsPrintFacts; +use Fisharebest\Webtrees\Http\RequestHandlers\PendingChangesAcceptRecord; +use Fisharebest\Webtrees\Http\RequestHandlers\PendingChangesRejectRecord; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\View; @@ -10,13 +12,13 @@ use Fisharebest\Webtrees\View; <?php if ($record->isPendingDeletion()) : ?> <?php if (Auth::isModerator($record->tree())) : ?> - <?= view('components/alert-warning-dismissible', ['alert' => /* I18N: %1$s is “accept”, %2$s is “reject”. These are links. */ I18N::translate('This family has been deleted. You should review the deletion and then %1$s or %2$s it.', '<a href="#" class="alert-link" data-post-url="' . e(route('accept-changes', ['tree' => $record->tree()->name(), 'xref' => $record->xref()])) . '">' . I18N::translateContext('You should review the deletion and then accept or reject it.', 'accept') . '</a>', '<a href="#" class="alert-link" data-post-url="' . e(route('reject-changes', ['tree' => $record->tree()->name(), 'xref' => $record->xref()])) . '">' . I18N::translateContext('You should review the deletion and then accept or reject it.', 'reject') . '</a>') . ' ' . FunctionsPrint::helpLink('pending_changes')]) ?> + <?= view('components/alert-warning-dismissible', ['alert' => /* I18N: %1$s is “accept”, %2$s is “reject”. These are links. */ I18N::translate('This family has been deleted. You should review the deletion and then %1$s or %2$s it.', '<a href="#" class="alert-link" data-post-url="' . e(route(PendingChangesAcceptRecord::class, ['tree' => $record->tree()->name(), 'xref' => $record->xref()])) . '">' . I18N::translateContext('You should review the deletion and then accept or reject it.', 'accept') . '</a>', '<a href="#" class="alert-link" data-post-url="' . e(route(PendingChangesRejectRecord::class, ['tree' => $record->tree()->name(), 'xref' => $record->xref()])) . '">' . I18N::translateContext('You should review the deletion and then accept or reject it.', 'reject') . '</a>') . ' ' . FunctionsPrint::helpLink('pending_changes')]) ?> <?php elseif (Auth::isEditor($record->tree())) : ?> <?= view('components/alert-warning-dismissible', ['alert' => I18N::translate('This family has been deleted. The deletion will need to be reviewed by a moderator.') . ' ' . FunctionsPrint::helpLink('pending_changes')]) ?> <?php endif ?> <?php elseif ($record->isPendingAddition()) : ?> <?php if (Auth::isModerator($record->tree())) : ?> - <?= view('components/alert-warning-dismissible', ['alert' => /* I18N: %1$s is “accept”, %2$s is “reject”. These are links. */ I18N::translate('This family has been edited. You should review the changes and then %1$s or %2$s them.', '<a href="#" class="alert-link" data-post-url="' . e(route('accept-changes', ['tree' => $record->tree()->name(), 'xref' => $record->xref()])) . '">' . I18N::translateContext('You should review the changes and then accept or reject them.', 'accept') . '</a>', '<a href="#" class="alert-link" data-post-url="' . e(route('reject-changes', ['tree' => $record->tree()->name(), 'xref' => $record->xref()])) . '">' . I18N::translateContext('You should review the changes and then accept or reject them.', 'reject') . '</a>') . ' ' . FunctionsPrint::helpLink('pending_changes')]) ?> + <?= view('components/alert-warning-dismissible', ['alert' => /* I18N: %1$s is “accept”, %2$s is “reject”. These are links. */ I18N::translate('This family has been edited. You should review the changes and then %1$s or %2$s them.', '<a href="#" class="alert-link" data-post-url="' . e(route(PendingChangesAcceptRecord::class, ['tree' => $record->tree()->name(), 'xref' => $record->xref()])) . '">' . I18N::translateContext('You should review the changes and then accept or reject them.', 'accept') . '</a>', '<a href="#" class="alert-link" data-post-url="' . e(route(PendingChangesRejectRecord::class, ['tree' => $record->tree()->name(), 'xref' => $record->xref()])) . '">' . I18N::translateContext('You should review the changes and then accept or reject them.', 'reject') . '</a>') . ' ' . FunctionsPrint::helpLink('pending_changes')]) ?> <?php elseif (Auth::isEditor($record->tree())) : ?> <?= view('components/alert-warning-dismissible', ['alert' => I18N::translate('This family has been edited. The changes need to be reviewed by a moderator.') . ' ' . FunctionsPrint::helpLink('pending_changes')]) ?> <?php endif ?> diff --git a/resources/views/gedcom-record-page.phtml b/resources/views/gedcom-record-page.phtml index e35540308e..84c237f678 100644 --- a/resources/views/gedcom-record-page.phtml +++ b/resources/views/gedcom-record-page.phtml @@ -1,17 +1,19 @@ <?php use Fisharebest\Webtrees\Auth; ?> <?php use Fisharebest\Webtrees\Functions\FunctionsPrint; ?> <?php use Fisharebest\Webtrees\Functions\FunctionsPrintFacts; ?> -<?php use Fisharebest\Webtrees\I18N; ?> +<?php use Fisharebest\Webtrees\Http\RequestHandlers\PendingChangesAcceptRecord; +use Fisharebest\Webtrees\Http\RequestHandlers\PendingChangesRejectRecord; +use Fisharebest\Webtrees\I18N; ?> <?php if ($record->isPendingDeletion()) : ?> <?php if (Auth::isModerator($record->tree())) : ?> - <?= view('components/alert-warning-dismissible', ['alert' => /* I18N: %1$s is “accept”, %2$s is “reject”. These are links. */ I18N::translate('This record has been deleted. You should review the deletion and then %1$s or %2$s it.', '<a href="#" class="alert-link" data-post-url="' . e(route('accept-changes', ['tree' => $record->tree()->name(), 'xref' => $record->xref()])) . '">' . I18N::translateContext('You should review the deletion and then accept or reject it.', 'accept') . '</a>', '<a href="#" class="alert-link" data-post-url="' . e(route('reject-changes', ['tree' => $record->tree()->name(), 'xref' => $record->xref()])) . '">' . I18N::translateContext('You should review the deletion and then accept or reject it.', 'reject') . '</a>') . ' ' . FunctionsPrint::helpLink('pending_changes')]) ?> + <?= view('components/alert-warning-dismissible', ['alert' => /* I18N: %1$s is “accept”, %2$s is “reject”. These are links. */ I18N::translate('This record has been deleted. You should review the deletion and then %1$s or %2$s it.', '<a href="#" class="alert-link" data-post-url="' . e(route(PendingChangesAcceptRecord::class, ['tree' => $record->tree()->name(), 'xref' => $record->xref()])) . '">' . I18N::translateContext('You should review the deletion and then accept or reject it.', 'accept') . '</a>', '<a href="#" class="alert-link" data-post-url="' . e(route(PendingChangesRejectRecord::class, ['tree' => $record->tree()->name(), 'xref' => $record->xref()])) . '">' . I18N::translateContext('You should review the deletion and then accept or reject it.', 'reject') . '</a>') . ' ' . FunctionsPrint::helpLink('pending_changes')]) ?> <?php elseif (Auth::isEditor($record->tree())) : ?> <?= view('components/alert-warning-dismissible', ['alert' => I18N::translate('This record has been deleted. The deletion will need to be reviewed by a moderator.') . ' ' . FunctionsPrint::helpLink('pending_changes')]) ?> <?php endif ?> <?php elseif ($record->isPendingAddition()) : ?> <?php if (Auth::isModerator($record->tree())) : ?> - <?= view('components/alert-warning-dismissible', ['alert' => /* I18N: %1$s is “accept”, %2$s is “reject”. These are links. */ I18N::translate('This record has been edited. You should review the changes and then %1$s or %2$s them.', '<a href="#" class="alert-link" data-post-url="' . e(route('accept-changes', ['tree' => $record->tree()->name(), 'xref' => $record->xref()])) . '">' . I18N::translateContext('You should review the changes and then accept or reject them.', 'accept') . '</a>', '<a href="#" class="alert-link" data-post-url="' . e(route('reject-changes', ['tree' => $record->tree()->name(), 'xref' => $record->xref()])) . '">' . I18N::translateContext('You should review the changes and then accept or reject them.', 'reject') . '</a>') . ' ' . FunctionsPrint::helpLink('pending_changes')]) ?> + <?= view('components/alert-warning-dismissible', ['alert' => /* I18N: %1$s is “accept”, %2$s is “reject”. These are links. */ I18N::translate('This record has been edited. You should review the changes and then %1$s or %2$s them.', '<a href="#" class="alert-link" data-post-url="' . e(route(PendingChangesAcceptRecord::class, ['tree' => $record->tree()->name(), 'xref' => $record->xref()])) . '">' . I18N::translateContext('You should review the changes and then accept or reject them.', 'accept') . '</a>', '<a href="#" class="alert-link" data-post-url="' . e(route(PendingChangesRejectRecord::class, ['tree' => $record->tree()->name(), 'xref' => $record->xref()])) . '">' . I18N::translateContext('You should review the changes and then accept or reject them.', 'reject') . '</a>') . ' ' . FunctionsPrint::helpLink('pending_changes')]) ?> <?php elseif (Auth::isEditor($record->tree())) : ?> <?= view('components/alert-warning-dismissible', ['alert' => I18N::translate('This record has been edited. The changes need to be reviewed by a moderator.') . ' ' . FunctionsPrint::helpLink('pending_changes')]) ?> <?php endif ?> diff --git a/resources/views/individual-page.phtml b/resources/views/individual-page.phtml index f6f92fbe2b..ea6260d51e 100644 --- a/resources/views/individual-page.phtml +++ b/resources/views/individual-page.phtml @@ -1,6 +1,8 @@ <?php use Fisharebest\Webtrees\Auth; use Fisharebest\Webtrees\Functions\FunctionsPrint; +use Fisharebest\Webtrees\Http\RequestHandlers\PendingChangesAcceptRecord; +use Fisharebest\Webtrees\Http\RequestHandlers\PendingChangesRejectRecord; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Individual; use Fisharebest\Webtrees\View; @@ -22,7 +24,7 @@ use Illuminate\Support\Collection; <?php if (Auth::isModerator($individual->tree())) : ?> <?= view('components/alert-warning-dismissible', [ 'alert' => /* I18N: %1$s is “accept”, %2$s is “reject”. These are links. */ - I18N::translate('This individual has been deleted. You should review the deletion and then %1$s or %2$s it.', '<a href="#" class="alert-link" data-post-url="' . e(route('accept-changes', ['tree' => $individual->tree()->name(), 'xref' => $individual->xref()])) . '">' . I18N::translateContext('You should review the deletion and then accept or reject it.', 'accept') . '</a>', '<a href="#" class="alert-link" data-post-url="' . e(route('reject-changes', ['tree' => $individual->tree()->name(), 'xref' => $individual->xref()])) . '">' . I18N::translateContext('You should review the deletion and then accept or reject it.', 'reject') . '</a>') . ' ' . FunctionsPrint::helpLink('pending_changes'), + I18N::translate('This individual has been deleted. You should review the deletion and then %1$s or %2$s it.', '<a href="#" class="alert-link" data-post-url="' . e(route(PendingChangesAcceptRecord::class, ['tree' => $individual->tree()->name(), 'xref' => $individual->xref()])) . '">' . I18N::translateContext('You should review the deletion and then accept or reject it.', 'accept') . '</a>', '<a href="#" class="alert-link" data-post-url="' . e(route(PendingChangesRejectRecord::class, ['tree' => $individual->tree()->name(), 'xref' => $individual->xref()])) . '">' . I18N::translateContext('You should review the deletion and then accept or reject it.', 'reject') . '</a>') . ' ' . FunctionsPrint::helpLink('pending_changes'), ]) ?> <?php elseif (Auth::isEditor($individual->tree())) : ?> <?= view('components/alert-warning-dismissible', ['alert' => I18N::translate('This individual has been deleted. The deletion will need to be reviewed by a moderator.') . ' ' . FunctionsPrint::helpLink('pending_changes')]) ?> @@ -31,7 +33,7 @@ use Illuminate\Support\Collection; <?php if (Auth::isModerator($individual->tree())) : ?> <?= view('components/alert-warning-dismissible', [ 'alert' => /* I18N: %1$s is “accept”, %2$s is “reject”. These are links. */ - I18N::translate('This individual has been edited. You should review the changes and then %1$s or %2$s them.', '<a href="#" class="alert-link" data-post-url="' . e(route('accept-changes', ['tree' => $individual->tree()->name(), 'xref' => $individual->xref()])) . '">' . I18N::translateContext('You should review the changes and then accept or reject them.', 'accept') . '</a>', '<a href="#" class="alert-link" data-post-url="' . e(route('reject-changes', ['tree' => $individual->tree()->name(), 'xref' => $individual->xref()])) . '">' . I18N::translateContext('You should review the changes and then accept or reject them.', 'reject') . '</a>') . ' ' . FunctionsPrint::helpLink('pending_changes'), + I18N::translate('This individual has been edited. You should review the changes and then %1$s or %2$s them.', '<a href="#" class="alert-link" data-post-url="' . e(route(PendingChangesAcceptRecord::class, ['tree' => $individual->tree()->name(), 'xref' => $individual->xref()])) . '">' . I18N::translateContext('You should review the changes and then accept or reject them.', 'accept') . '</a>', '<a href="#" class="alert-link" data-post-url="' . e(route(PendingChangesRejectRecord::class, ['tree' => $individual->tree()->name(), 'xref' => $individual->xref()])) . '">' . I18N::translateContext('You should review the changes and then accept or reject them.', 'reject') . '</a>') . ' ' . FunctionsPrint::helpLink('pending_changes'), ]) ?> <?php elseif (Auth::isEditor($individual->tree())) : ?> <?= view('components/alert-warning-dismissible', ['alert' => I18N::translate('This individual has been edited. The changes need to be reviewed by a moderator.') . ' ' . FunctionsPrint::helpLink('pending_changes')]) ?> diff --git a/resources/views/media-page.phtml b/resources/views/media-page.phtml index 9b162a6ecf..26ccbe410b 100644 --- a/resources/views/media-page.phtml +++ b/resources/views/media-page.phtml @@ -4,6 +4,7 @@ use Fisharebest\Webtrees\Auth; use Fisharebest\Webtrees\Functions\FunctionsPrint; use Fisharebest\Webtrees\Functions\FunctionsPrintFacts; use Fisharebest\Webtrees\GedcomTag; +use Fisharebest\Webtrees\Http\RequestHandlers\PendingChangesAcceptRecord; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Media; use Illuminate\Support\Collection; @@ -21,13 +22,13 @@ use Illuminate\Support\Collection; <?php if ($media->isPendingDeletion()) : ?> <?php if (Auth::isModerator($media->tree())) : ?> - <?= view('components/alert-warning-dismissible', ['alert' => /* I18N: %1$s is “accept”, %2$s is “reject”. These are links. */ I18N::translate('This media object has been deleted. You should review the deletion and then %1$s or %2$s it.', '<a href="#" class="alert-link" data-post-url="' . e(route('accept-changes', ['tree' => $media->tree()->name(), 'xref' => $media->xref()])) . '">' . I18N::translateContext('You should review the deletion and then accept or reject it.', 'accept') . '</a>', '<a href="#" class="alert-link" data-post-url="' . e(route('reject-changes', ['tree' => $media->tree()->name(), 'xref' => $media->xref()])) . '">' . I18N::translateContext('You should review the deletion and then accept or reject it.', 'reject') . '</a>') . ' ' . FunctionsPrint::helpLink('pending_changes')]) ?> + <?= view('components/alert-warning-dismissible', ['alert' => /* I18N: %1$s is “accept”, %2$s is “reject”. These are links. */ I18N::translate('This media object has been deleted. You should review the deletion and then %1$s or %2$s it.', '<a href="#" class="alert-link" data-post-url="' . e(route(PendingChangesAcceptRecord::class, ['tree' => $media->tree()->name(), 'xref' => $media->xref()])) . '">' . I18N::translateContext('You should review the deletion and then accept or reject it.', 'accept') . '</a>', '<a href="#" class="alert-link" data-post-url="' . e(route(PendingChangesRejectRecord::class, ['tree' => $media->tree()->name(), 'xref' => $media->xref()])) . '">' . I18N::translateContext('You should review the deletion and then accept or reject it.', 'reject') . '</a>') . ' ' . FunctionsPrint::helpLink('pending_changes')]) ?> <?php elseif (Auth::isEditor($media->tree())) : ?> <?= view('components/alert-warning-dismissible', ['alert' => I18N::translate('This media object has been deleted. The deletion will need to be reviewed by a moderator.') . ' ' . FunctionsPrint::helpLink('pending_changes')]) ?> <?php endif ?> <?php elseif ($media->isPendingAddition()) : ?> <?php if (Auth::isModerator($media->tree())) : ?> - <?= view('components/alert-warning-dismissible', ['alert' => /* I18N: %1$s is “accept”, %2$s is “reject”. These are links. */ I18N::translate('This media object has been edited. You should review the changes and then %1$s or %2$s them.', '<a href="#" class="alert-link" data-post-url="' . e(route('accept-changes', ['tree' => $media->tree()->name(), 'xref' => $media->xref()])) . '">' . I18N::translateContext('You should review the changes and then accept or reject them.', 'accept') . '</a>', '<a href="#" class="alert-link" data-post-url="' . e(route('reject-changes', ['tree' => $media->tree()->name(), 'xref' => $media->xref()])) . '">' . I18N::translateContext('You should review the changes and then accept or reject them.', 'reject') . '</a>') . ' ' . FunctionsPrint::helpLink('pending_changes')]) ?> + <?= view('components/alert-warning-dismissible', ['alert' => /* I18N: %1$s is “accept”, %2$s is “reject”. These are links. */ I18N::translate('This media object has been edited. You should review the changes and then %1$s or %2$s them.', '<a href="#" class="alert-link" data-post-url="' . e(route(PendingChangesAcceptRecord::class, ['tree' => $media->tree()->name(), 'xref' => $media->xref()])) . '">' . I18N::translateContext('You should review the changes and then accept or reject them.', 'accept') . '</a>', '<a href="#" class="alert-link" data-post-url="' . e(route(PendingChangesRejectRecord::class, ['tree' => $media->tree()->name(), 'xref' => $media->xref()])) . '">' . I18N::translateContext('You should review the changes and then accept or reject them.', 'reject') . '</a>') . ' ' . FunctionsPrint::helpLink('pending_changes')]) ?> <?php elseif (Auth::isEditor($media->tree())) : ?> <?= view('components/alert-warning-dismissible', ['alert' => I18N::translate('This media object has been edited. The changes need to be reviewed by a moderator.') . ' ' . FunctionsPrint::helpLink('pending_changes')]) ?> <?php endif ?> diff --git a/resources/views/note-page.phtml b/resources/views/note-page.phtml index fc15cbe1a6..17b496f40c 100644 --- a/resources/views/note-page.phtml +++ b/resources/views/note-page.phtml @@ -1,17 +1,19 @@ <?php use Fisharebest\Webtrees\Auth; ?> <?php use Fisharebest\Webtrees\Functions\FunctionsPrint; ?> <?php use Fisharebest\Webtrees\Functions\FunctionsPrintFacts; ?> -<?php use Fisharebest\Webtrees\I18N; ?> +<?php use Fisharebest\Webtrees\Http\RequestHandlers\PendingChangesAcceptRecord; +use Fisharebest\Webtrees\Http\RequestHandlers\PendingChangesRejectRecord; +use Fisharebest\Webtrees\I18N; ?> <?php if ($note->isPendingDeletion()) : ?> <?php if (Auth::isModerator($note->tree())) : ?> - <?= view('components/alert-warning-dismissible', ['alert' => /* I18N: %1$s is “accept”, %2$s is “reject”. These are links. */ I18N::translate('This note has been deleted. You should review the deletion and then %1$s or %2$s it.', '<a href="#" class="alert-link" data-post-url="' . e(route('accept-changes', ['tree' => $note->tree()->name(), 'xref' => $note->xref()])) . '">' . I18N::translateContext('You should review the deletion and then accept or reject it.', 'accept') . '</a>', '<a href="#" class="alert-link" data-post-url="' . e(route('reject-changes', ['tree' => $note->tree()->name(), 'xref' => $note->xref()])) . '">' . I18N::translateContext('You should review the deletion and then accept or reject it.', 'reject') . '</a>') . ' ' . FunctionsPrint::helpLink('pending_changes')]) ?> + <?= view('components/alert-warning-dismissible', ['alert' => /* I18N: %1$s is “accept”, %2$s is “reject”. These are links. */ I18N::translate('This note has been deleted. You should review the deletion and then %1$s or %2$s it.', '<a href="#" class="alert-link" data-post-url="' . e(route(PendingChangesAcceptRecord::class, ['tree' => $note->tree()->name(), 'xref' => $note->xref()])) . '">' . I18N::translateContext('You should review the deletion and then accept or reject it.', 'accept') . '</a>', '<a href="#" class="alert-link" data-post-url="' . e(route(PendingChangesRejectRecord::class, ['tree' => $note->tree()->name(), 'xref' => $note->xref()])) . '">' . I18N::translateContext('You should review the deletion and then accept or reject it.', 'reject') . '</a>') . ' ' . FunctionsPrint::helpLink('pending_changes')]) ?> <?php elseif (Auth::isEditor($note->tree())) : ?> <?= view('components/alert-warning-dismissible', ['alert' => I18N::translate('This note has been deleted. The deletion will need to be reviewed by a moderator.') . ' ' . FunctionsPrint::helpLink('pending_changes')]) ?> <?php endif ?> <?php elseif ($note->isPendingAddition()) : ?> <?php if (Auth::isModerator($note->tree())) : ?> - <?= view('components/alert-warning-dismissible', ['alert' => /* I18N: %1$s is “accept”, %2$s is “reject”. These are links. */ I18N::translate('This note has been edited. You should review the changes and then %1$s or %2$s them.', '<a href="#" class="alert-link" data-post-url="' . e(route('accept-changes', ['tree' => $note->tree()->name(), 'xref' => $note->xref()])) . '">' . I18N::translateContext('You should review the changes and then accept or reject them.', 'accept') . '</a>', '<a href="#" class="alert-link" data-post-url="' . e(route('reject-changes', ['tree' => $note->tree()->name(), 'xref' => $note->xref()])) . '">' . I18N::translateContext('You should review the changes and then accept or reject them.', 'reject') . '</a>') . ' ' . FunctionsPrint::helpLink('pending_changes')]) ?> + <?= view('components/alert-warning-dismissible', ['alert' => /* I18N: %1$s is “accept”, %2$s is “reject”. These are links. */ I18N::translate('This note has been edited. You should review the changes and then %1$s or %2$s them.', '<a href="#" class="alert-link" data-post-url="' . e(route(PendingChangesAcceptRecord::class, ['tree' => $note->tree()->name(), 'xref' => $note->xref()])) . '">' . I18N::translateContext('You should review the changes and then accept or reject them.', 'accept') . '</a>', '<a href="#" class="alert-link" data-post-url="' . e(route(PendingChangesRejectRecord::class, ['tree' => $note->tree()->name(), 'xref' => $note->xref()])) . '">' . I18N::translateContext('You should review the changes and then accept or reject them.', 'reject') . '</a>') . ' ' . FunctionsPrint::helpLink('pending_changes')]) ?> <?php elseif (Auth::isEditor($note->tree())) : ?> <?= view('components/alert-warning-dismissible', ['alert' => I18N::translate('This note has been edited. The changes need to be reviewed by a moderator.') . ' ' . FunctionsPrint::helpLink('pending_changes')]) ?> <?php endif ?> diff --git a/resources/views/pending-changes-page.phtml b/resources/views/pending-changes-page.phtml index 8af92e03df..dddf6ff315 100644 --- a/resources/views/pending-changes-page.phtml +++ b/resources/views/pending-changes-page.phtml @@ -1,5 +1,13 @@ -<?php use Fisharebest\Webtrees\I18N; ?> -<?php use Fisharebest\Webtrees\Tree; ?> +<?php + +use Fisharebest\Webtrees\Http\RequestHandlers\PendingChangesAcceptChange; +use Fisharebest\Webtrees\Http\RequestHandlers\PendingChangesAcceptTree; +use Fisharebest\Webtrees\Http\RequestHandlers\PendingChangesRejectChange; +use Fisharebest\Webtrees\Http\RequestHandlers\PendingChangesRejectTree; +use Fisharebest\Webtrees\I18N; +use Fisharebest\Webtrees\Tree; + +?> <h2 class="wt-page-title"> <?= $title ?> @@ -51,13 +59,11 @@ <?php foreach ($record_changes as $record_change) : ?> <tr> <td> - <form method="post" action="<?= e(route('accept-pending', ['change_id' => $record_change->change_id, 'xref' => $record_change->xref, 'tree' => $record_change->gedcom_name, 'url' => $url])) ?>"> - <?= csrf_field() ?> - <button class="btn btn-primary" type="submit"> - <?= I18N::translate('Accept') ?> - </button> - </form> + <a class="btn btn-primary" href="#" data-post-url="<?= e(route(PendingChangesAcceptChange::class, ['tree' => $record_change->gedcom_name, 'xref' => $record_change->xref, 'change' => $record_change->change_id])) ?>"> + <?= I18N::translate('Accept') ?> + </a> </td> + <td> <?php foreach ($record_change->record->facts() as $fact) : ?> <?php if ($fact->getTag() !== 'CHAN' && $fact->isPendingAddition()) : ?> @@ -71,21 +77,21 @@ <?php endif ?> <?php endforeach ?> </td> + <td> <a href="<?= e(route('message', ['to' => $record_change->user_name, 'subject' => I18N::translate('Pending changes') . ' - ' . strip_tags($record_change->record->fullName()), 'body' => $record_change->record->url(), 'tree' => $record_change->gedcom_name])) ?>" title="<?= I18N::translate('Send a message') ?>"> <?= e($record_change->real_name) ?> - <?= e($record_change->user_name) ?> </a> </td> + <td> <?= view('components/datetime', ['timestamp' => $record_change->change_time]) ?> </td> + <td> - <form method="post" action="<?= e(route('reject-pending', ['change_id' => $record_change->change_id, 'xref' => $record_change->xref, 'tree' => $record_change->gedcom_name, 'url' => $url])) ?>"> - <?= csrf_field() ?> - <button class="btn btn-secondary" type="submit"> - <?= I18N::translate('Reject') ?> - </button> - </form> + <a class="btn btn-secondary" href="#" data-post-url="<?= e(route(PendingChangesRejectChange::class, ['tree' => $record_change->gedcom_name, 'xref' => $record_change->xref, 'change' => $record_change->change_id])) ?>"> + <?= I18N::translate('Reject') ?> + </a> </td> </tr> <?php endforeach ?> @@ -94,19 +100,13 @@ <?php endforeach ?> <div class="d-flex justify-content-between"> - <form method="post" action="<?= e(route('accept-all-changes', ['tree' => $tree->name(), 'url' => $url])) ?>"> - <?= csrf_field() ?> - <button class="btn btn-primary" type="submit"> - <?= I18N::translate('Accept all changes') ?> - </button> - </form> + <a class="btn btn-primary" href="#" data-post-url="<?= e(route(PendingChangesAcceptTree::class, ['tree' => $tree->name()])) ?>"> + <?= I18N::translate('Accept all changes') ?> + </a> - <form method="post" action="<?= e(route('reject-all-changes', ['tree' => $tree->name(), 'url' => $url])) ?>"> - <?= csrf_field() ?> - <button class="btn btn-secondary" type="submit" data-confirm="<?= I18N::translate('Are you sure you want to reject all the changes to this family tree?') ?>" onclick="return confirm(this.dataset.confirm);"> - <?= I18N::translate('Reject all changes') ?> - </button> - </form> + <a class="btn btn-secondary" href="#" data-post-url="<?= e(route(PendingChangesRejectTree::class, ['tree' => $tree->name()])) ?>" data-confirm="<?= I18N::translate('Are you sure you want to reject all the changes to this family tree?') ?>"> + <?= I18N::translate('Reject all changes') ?> + </a> </div> </div> <?php endforeach ?> diff --git a/resources/views/repository-page.phtml b/resources/views/repository-page.phtml index 7fac1eccdb..9e169db337 100644 --- a/resources/views/repository-page.phtml +++ b/resources/views/repository-page.phtml @@ -3,19 +3,21 @@ use Fisharebest\Webtrees\Auth; use Fisharebest\Webtrees\Functions\FunctionsPrint; use Fisharebest\Webtrees\Functions\FunctionsPrintFacts; +use Fisharebest\Webtrees\Http\RequestHandlers\PendingChangesAcceptRecord; +use Fisharebest\Webtrees\Http\RequestHandlers\PendingChangesRejectRecord; use Fisharebest\Webtrees\I18N; ?> <?php if ($repository->isPendingDeletion()) : ?> <?php if (Auth::isModerator($repository->tree())) : ?> - <?= view('components/alert-warning-dismissible', ['alert' => /* I18N: %1$s is “accept”, %2$s is “reject”. These are links. */ I18N::translate('This repository has been deleted. You should review the deletion and then %1$s or %2$s it.', '<a href="#" class="alert-link" data-post-url="' . e(route('accept-changes', ['tree' => $repository->tree()->name(), 'xref' => $repository->xref()])) . '">' . I18N::translateContext('You should review the deletion and then accept or reject it.', 'accept') . '</a>', '<a href="#" class="alert-link" data-post-url="' . e(route('reject-changes', ['tree' => $repository->tree()->name(), 'xref' => $repository->xref()])) . '">' . I18N::translateContext('You should review the deletion and then accept or reject it.', 'reject') . '</a>') . ' ' . FunctionsPrint::helpLink('pending_changes')]) ?> + <?= view('components/alert-warning-dismissible', ['alert' => /* I18N: %1$s is “accept”, %2$s is “reject”. These are links. */ I18N::translate('This repository has been deleted. You should review the deletion and then %1$s or %2$s it.', '<a href="#" class="alert-link" data-post-url="' . e(route(PendingChangesAcceptRecord::class, ['tree' => $repository->tree()->name(), 'xref' => $repository->xref()])) . '">' . I18N::translateContext('You should review the deletion and then accept or reject it.', 'accept') . '</a>', '<a href="#" class="alert-link" data-post-url="' . e(route(PendingChangesRejectRecord::class, ['tree' => $repository->tree()->name(), 'xref' => $repository->xref()])) . '">' . I18N::translateContext('You should review the deletion and then accept or reject it.', 'reject') . '</a>') . ' ' . FunctionsPrint::helpLink('pending_changes')]) ?> <?php elseif (Auth::isEditor($repository->tree())) : ?> <?= view('components/alert-warning-dismissible', ['alert' => I18N::translate('This repository has been deleted. The deletion will need to be reviewed by a moderator.') . ' ' . FunctionsPrint::helpLink('pending_changes')]) ?> <?php endif ?> <?php elseif ($repository->isPendingAddition()) : ?> <?php if (Auth::isModerator($repository->tree())) : ?> - <?= view('components/alert-warning-dismissible', ['alert' => /* I18N: %1$s is “accept”, %2$s is “reject”. These are links. */ I18N::translate('This repository has been edited. You should review the changes and then %1$s or %2$s them.', '<a href="#" class="alert-link" data-post-url="' . e(route('accept-changes', ['tree' => $repository->tree()->name(), 'xref' => $repository->xref()])) . '">' . I18N::translateContext('You should review the changes and then accept or reject them.', 'accept') . '</a>', '<a href="#" class="alert-link" data-post-url="' . e(route('reject-changes', ['tree' => $repository->tree()->name(), 'xref' => $repository->xref()])) . '">' . I18N::translateContext('You should review the changes and then accept or reject them.', 'reject') . '</a>') . ' ' . FunctionsPrint::helpLink('pending_changes')]) ?> + <?= view('components/alert-warning-dismissible', ['alert' => /* I18N: %1$s is “accept”, %2$s is “reject”. These are links. */ I18N::translate('This repository has been edited. You should review the changes and then %1$s or %2$s them.', '<a href="#" class="alert-link" data-post-url="' . e(route(PendingChangesAcceptRecord::class, ['tree' => $repository->tree()->name(), 'xref' => $repository->xref()])) . '">' . I18N::translateContext('You should review the changes and then accept or reject them.', 'accept') . '</a>', '<a href="#" class="alert-link" data-post-url="' . e(route(PendingChangesRejectRecord::class, ['tree' => $repository->tree()->name(), 'xref' => $repository->xref()])) . '">' . I18N::translateContext('You should review the changes and then accept or reject them.', 'reject') . '</a>') . ' ' . FunctionsPrint::helpLink('pending_changes')]) ?> <?php elseif (Auth::isEditor($repository->tree())) : ?> <?= view('components/alert-warning-dismissible', ['alert' => I18N::translate('This repository has been edited. The changes need to be reviewed by a moderator.') . ' ' . FunctionsPrint::helpLink('pending_changes')]) ?> <?php endif ?> diff --git a/resources/views/source-page.phtml b/resources/views/source-page.phtml index 405c6d160b..aef4c5114c 100644 --- a/resources/views/source-page.phtml +++ b/resources/views/source-page.phtml @@ -1,17 +1,19 @@ <?php use Fisharebest\Webtrees\Auth; ?> <?php use Fisharebest\Webtrees\Functions\FunctionsPrint; ?> <?php use Fisharebest\Webtrees\Functions\FunctionsPrintFacts; ?> -<?php use Fisharebest\Webtrees\I18N; ?> +<?php use Fisharebest\Webtrees\Http\RequestHandlers\PendingChangesAcceptRecord; +use Fisharebest\Webtrees\Http\RequestHandlers\PendingChangesRejectRecord; +use Fisharebest\Webtrees\I18N; ?> <?php if ($source->isPendingDeletion()) : ?> <?php if (Auth::isModerator($source->tree())) : ?> - <?= view('components/alert-warning-dismissible', ['alert' => /* I18N: %1$s is “accept”, %2$s is “reject”. These are links. */ I18N::translate('This source has been deleted. You should review the deletion and then %1$s or %2$s it.', '<a href="#" class="alert-link" data-post-url="' . e(route('accept-changes', ['tree' => $source->tree()->name(), 'xref' => $source->xref()])) . '">' . I18N::translateContext('You should review the deletion and then accept or reject it.', 'accept') . '</a>', '<a href="#" class="alert-link" data-post-url="' . e(route('reject-changes', ['tree' => $source->tree()->name(), 'xref' => $source->xref()])) . '">' . I18N::translateContext('You should review the deletion and then accept or reject it.', 'reject') . '</a>') . ' ' . FunctionsPrint::helpLink('pending_changes')]) ?> + <?= view('components/alert-warning-dismissible', ['alert' => /* I18N: %1$s is “accept”, %2$s is “reject”. These are links. */ I18N::translate('This source has been deleted. You should review the deletion and then %1$s or %2$s it.', '<a href="#" class="alert-link" data-post-url="' . e(route(PendingChangesAcceptRecord::class, ['tree' => $source->tree()->name(), 'xref' => $source->xref()])) . '">' . I18N::translateContext('You should review the deletion and then accept or reject it.', 'accept') . '</a>', '<a href="#" class="alert-link" data-post-url="' . e(route(PendingChangesRejectRecord::class, ['tree' => $source->tree()->name(), 'xref' => $source->xref()])) . '">' . I18N::translateContext('You should review the deletion and then accept or reject it.', 'reject') . '</a>') . ' ' . FunctionsPrint::helpLink('pending_changes')]) ?> <?php elseif (Auth::isEditor($source->tree())) : ?> <?= view('components/alert-warning-dismissible', ['alert' => I18N::translate('This source has been deleted. The deletion will need to be reviewed by a moderator.') . ' ' . FunctionsPrint::helpLink('pending_changes')]) ?> <?php endif ?> <?php elseif ($source->isPendingAddition()) : ?> <?php if (Auth::isModerator($source->tree())) : ?> - <?= view('components/alert-warning-dismissible', ['alert' => /* I18N: %1$s is “accept”, %2$s is “reject”. These are links. */ I18N::translate('This source has been edited. You should review the changes and then %1$s or %2$s them.', '<a href="#" class="alert-link" data-post-url="' . e(route('accept-changes', ['tree' => $source->tree()->name(), 'xref' => $source->xref()])) . '">' . I18N::translateContext('You should review the changes and then accept or reject them.', 'accept') . '</a>', '<a href="#" class="alert-link" data-post-url="' . e(route('reject-changes', ['tree' => $source->tree()->name(), 'xref' => $source->xref()])) . '">' . I18N::translateContext('You should review the changes and then accept or reject them.', 'reject') . '</a>') . ' ' . FunctionsPrint::helpLink('pending_changes')]) ?> + <?= view('components/alert-warning-dismissible', ['alert' => /* I18N: %1$s is “accept”, %2$s is “reject”. These are links. */ I18N::translate('This source has been edited. You should review the changes and then %1$s or %2$s them.', '<a href="#" class="alert-link" data-post-url="' . e(route(PendingChangesAcceptRecord::class, ['tree' => $source->tree()->name(), 'xref' => $source->xref()])) . '">' . I18N::translateContext('You should review the changes and then accept or reject them.', 'accept') . '</a>', '<a href="#" class="alert-link" data-post-url="' . e(route(PendingChangesRejectRecord::class, ['tree' => $source->tree()->name(), 'xref' => $source->xref()])) . '">' . I18N::translateContext('You should review the changes and then accept or reject them.', 'reject') . '</a>') . ' ' . FunctionsPrint::helpLink('pending_changes')]) ?> <?php elseif (Auth::isEditor($source->tree())) : ?> <?= view('components/alert-warning-dismissible', ['alert' => I18N::translate('This source has been edited. The changes need to be reviewed by a moderator.') . ' ' . FunctionsPrint::helpLink('pending_changes')]) ?> <?php endif ?> |
