summaryrefslogtreecommitdiff
path: root/app/Http/RequestHandlers/RedirectNotePhp.php
diff options
context:
space:
mode:
authorGreg Roach <fisharebest@webtrees.net>2019-12-10 10:03:03 +0000
committerGreg Roach <fisharebest@webtrees.net>2019-12-10 10:03:03 +0000
commitd7bd16c38a9d165a6b3a05952c462b06c032818b (patch)
tree72c15b5f05b142d66cfc35cba0498c1554da8dd4 /app/Http/RequestHandlers/RedirectNotePhp.php
parentd78d61f772a114484f08a67ef32ea95ad658d79e (diff)
downloadwebtrees-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.php34
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();
}
}