. */ declare(strict_types=1); namespace Fisharebest\Webtrees\Http\RequestHandlers; use Fisharebest\Webtrees\Http\ViewResponseTrait; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Services\PendingChangesService; use Fisharebest\Webtrees\Tree; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; use function assert; use function route; /** * Show all pending changes. */ class PendingChanges implements RequestHandlerInterface { use ViewResponseTrait; // Some servers may not have enough resources to show all the changes. private const MAX_CHANGES = 1000; private PendingChangesService $pending_changes_service; /** * PendingChanges constructor. * * @param PendingChangesService $pending_changes_service */ public function __construct(PendingChangesService $pending_changes_service) { $this->pending_changes_service = $pending_changes_service; } /** * @param ServerRequestInterface $request * * @return ResponseInterface */ public function handle(ServerRequestInterface $request): ResponseInterface { $tree = $request->getAttribute('tree'); assert($tree instanceof Tree); $n = (int) ($request->getQueryParams()['n'] ?? self::MAX_CHANGES); $url = $request->getQueryParams()['url'] ?? route(TreePage::class, ['tree' => $tree->name()]); $xrefs = $this->pending_changes_service->pendingXrefs($tree); $changes = $this->pending_changes_service->pendingChanges($tree, $n); $title = I18N::translate('Pending changes'); return $this->viewResponse('pending-changes-page', [ 'changes' => $changes, 'count' => $xrefs->count(), 'title' => $title, 'tree' => $tree, 'url' => $url, ]); } }