diff options
| author | Greg Roach <fisharebest@webtrees.net> | 2019-12-10 10:03:03 +0000 |
|---|---|---|
| committer | Greg Roach <fisharebest@webtrees.net> | 2019-12-10 10:03:03 +0000 |
| commit | d7bd16c38a9d165a6b3a05952c462b06c032818b (patch) | |
| tree | 72c15b5f05b142d66cfc35cba0498c1554da8dd4 /app/Http/RequestHandlers/RedirectNotePhp.php | |
| parent | d78d61f772a114484f08a67ef32ea95ad658d79e (diff) | |
| download | webtrees-d7bd16c38a9d165a6b3a05952c462b06c032818b.tar.gz webtrees-d7bd16c38a9d165a6b3a05952c462b06c032818b.tar.bz2 webtrees-d7bd16c38a9d165a6b3a05952c462b06c032818b.zip | |
Fix: double-redirect for legacy URLs.
Diffstat (limited to 'app/Http/RequestHandlers/RedirectNotePhp.php')
| -rw-r--r-- | app/Http/RequestHandlers/RedirectNotePhp.php | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/app/Http/RequestHandlers/RedirectNotePhp.php b/app/Http/RequestHandlers/RedirectNotePhp.php index 36de4dc2d6..0a1d1cb859 100644 --- a/app/Http/RequestHandlers/RedirectNotePhp.php +++ b/app/Http/RequestHandlers/RedirectNotePhp.php @@ -20,20 +20,32 @@ declare(strict_types=1); namespace Fisharebest\Webtrees\Http\RequestHandlers; use Fig\Http\Message\StatusCodeInterface; +use Fisharebest\Webtrees\Exceptions\NoteNotFoundException; +use Fisharebest\Webtrees\Note; +use Fisharebest\Webtrees\Services\TreeService; +use Fisharebest\Webtrees\Tree; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; -use function assert; -use function is_string; use function redirect; -use function route; /** * Redirect URLs created by webtrees 1.x (and PhpGedView). */ class RedirectNotePhp implements RequestHandlerInterface { + /** @var TreeService */ + private $tree_service; + + /** + * @param TreeService $tree_service + */ + public function __construct(TreeService $tree_service) + { + $this->tree_service = $tree_service; + } + /** * @param ServerRequestInterface $request * @@ -41,14 +53,18 @@ class RedirectNotePhp implements RequestHandlerInterface */ public function handle(ServerRequestInterface $request): ResponseInterface { - $tree = $request->getQueryParams()['ged']; - assert(is_string($tree)); + $ged = $request->getQueryParams()['ged'] ?? null; + $tree = $this->tree_service->all()->get($ged); - $xref = $request->getQueryParams()['nid'] ?? ''; - assert(is_string($xref)); + if ($tree instanceof Tree) { + $xref = $request->getQueryParams()['nid'] ?? ''; + $note = Note::getInstance($xref, $tree); - $url = route(NotePage::class, ['tree' => $tree, 'xref' => $xref]); + if ($note instanceof Note) { + return redirect($note->url(), StatusCodeInterface::STATUS_MOVED_PERMANENTLY); + } + } - return redirect($url, StatusCodeInterface::STATUS_MOVED_PERMANENTLY); + throw new NoteNotFoundException(); } } |
