Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions app/Http/RequestHandlers/RenumberTreeAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
use Fisharebest\Webtrees\Auth;

use function redirect;
use function route;
Expand Down Expand Up @@ -69,7 +70,13 @@ public function __construct(AdminService $admin_service, TimeoutService $timeout
public function handle(ServerRequestInterface $request): ResponseInterface
{
$tree = Validator::attributes($request)->tree();
if ($tree->hasPendingEdit()) {
FlashMessages::addMessage(I18N::translate('Renumber XREFs') . ' — ' . e($tree->title()) . '<br>' . I18N::translate('There are pending changes for you to moderate.'), 'warning');
return redirect(route(PendingChanges::class, ['tree' => $tree->name()]));
}

$xrefs = $this->admin_service->duplicateXrefs($tree);
$changes = [];

foreach ($xrefs as $old_xref => $type) {
$new_xref = Registry::xrefFactory()->make($type);
Expand Down Expand Up @@ -546,13 +553,27 @@ public function handle(ServerRequestInterface $request): ResponseInterface

unset($xrefs[$old_xref]);

if (!array_key_exists($type, $changes)) {
$changes[$type] = [];
}
$changes[$type][$old_xref] = $new_xref;

// How much time do we have left?
if ($this->timeout_service->isTimeNearlyUp()) {
FlashMessages::addMessage(I18N::translate('The server’s time limit has been reached.'), 'warning');
break;
}
}

DB::table('change')->insert([
'gedcom_id' => $tree->id(),
'xref' => '__renumbering__',
'old_gedcom' => '',
'new_gedcom' => json_encode($changes),
'status' => 'accepted',
'user_id' => Auth::id(),
]);

$url = route(RenumberTreePage::class, ['tree' => $tree->name()]);

return redirect($url);
Expand Down
35 changes: 20 additions & 15 deletions resources/views/admin/trees-renumber.phtml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ declare(strict_types=1);
use Fisharebest\Webtrees\Http\RequestHandlers\ControlPanel;
use Fisharebest\Webtrees\Http\RequestHandlers\ManageTrees;
use Fisharebest\Webtrees\Http\RequestHandlers\RenumberTreeAction;
use Fisharebest\Webtrees\Http\RequestHandlers\PendingChanges;
use Fisharebest\Webtrees\I18N;
use Fisharebest\Webtrees\Tree;

Expand Down Expand Up @@ -33,19 +34,23 @@ use Fisharebest\Webtrees\Tree;
</p>

<?php if (!empty($xrefs)) : ?>
<p>
<?= I18N::translate('You can renumber this family tree.') ?>
</p>

<form method="post" action="<?= e(route(RenumberTreeAction::class, ['tree' => $tree->name()])) ?>">
<button type="submit" class="btn btn-primary">
<?= view('icons/save') ?>
<?= /* I18N: A button label. */
I18N::translate('continue') ?>
</button>

<?= I18N::translate('Caution! This may take a long time. Be patient.') ?>

<?= csrf_field() ?>
</form>
<?php if (!$tree->hasPendingEdit()): ?>
<p>
<?= I18N::translate('You can renumber this family tree.') ?>
</p>

<form method="post" action="<?= e(route(RenumberTreeAction::class, ['tree' => $tree->name()])) ?>">
<button type="submit" class="btn btn-primary">
<?= view('icons/save') ?>
<?= /* I18N: A button label. */
I18N::translate('continue') ?>
</button>

<?= I18N::translate('Caution! This may take a long time. Be patient.') ?>

<?= csrf_field() ?>
</form>
<?php else: ?>
<p><a href="<?= e(route(PendingChanges::class, ['tree' => $tree->name()])) ?>"><?= I18N::translate('There are pending changes for you to moderate.') ?></a></p>
<?php endif ?>
<?php endif ?>