. */ 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\Validator; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; 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; /** * @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 = Validator::attributes($request)->tree(); $n = Validator::queryParams($request)->integer('n', self::MAX_CHANGES); $default_url = route(TreePage::class, ['tree' => $tree->name()]); $url = Validator::queryParams($request)->isLocalUrl()->string('url', $default_url); $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, ]); } }