diff options
| author | Greg Roach <greg@subaqua.co.uk> | 2022-01-01 19:59:18 +0000 |
|---|---|---|
| committer | Greg Roach <greg@subaqua.co.uk> | 2022-01-02 13:23:34 +0000 |
| commit | 3340ecd27b8901a894bff51b7c40bfa2896a552b (patch) | |
| tree | 7982a655c0c7dd1e9d72f7848591b5098f321a2c /app/Http/RequestHandlers/RedirectModulePhp.php | |
| parent | 4ff9827fe54f1b543e74fb5571a9e44a9745865c (diff) | |
| download | webtrees-3340ecd27b8901a894bff51b7c40bfa2896a552b.tar.gz webtrees-3340ecd27b8901a894bff51b7c40bfa2896a552b.tar.bz2 webtrees-3340ecd27b8901a894bff51b7c40bfa2896a552b.zip | |
Fix: #4149 - legacy redirects fail when correpsonding module is disabled
Diffstat (limited to 'app/Http/RequestHandlers/RedirectModulePhp.php')
| -rw-r--r-- | app/Http/RequestHandlers/RedirectModulePhp.php | 64 |
1 files changed, 35 insertions, 29 deletions
diff --git a/app/Http/RequestHandlers/RedirectModulePhp.php b/app/Http/RequestHandlers/RedirectModulePhp.php index d477972565..87f003fc42 100644 --- a/app/Http/RequestHandlers/RedirectModulePhp.php +++ b/app/Http/RequestHandlers/RedirectModulePhp.php @@ -22,8 +22,10 @@ namespace Fisharebest\Webtrees\Http\RequestHandlers; use Fig\Http\Message\StatusCodeInterface; use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Individual; +use Fisharebest\Webtrees\Module\InteractiveTreeModule; use Fisharebest\Webtrees\Module\PedigreeMapModule; use Fisharebest\Webtrees\Registry; +use Fisharebest\Webtrees\Services\ModuleService; use Fisharebest\Webtrees\Services\TreeService; use Fisharebest\Webtrees\Site; use Fisharebest\Webtrees\Tree; @@ -32,24 +34,25 @@ use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; use function redirect; +use function route; /** * Redirect URLs created by webtrees 1.x (and PhpGedView). */ class RedirectModulePhp implements RequestHandlerInterface { - private TreeService $tree_service; + private ModuleService $module_service; - private PedigreeMapModule $pedigree_map_module; + private TreeService $tree_service; /** - * @param PedigreeMapModule $pedigree_map_module - * @param TreeService $tree_service + * @param ModuleService $module_service + * @param TreeService $tree_service */ - public function __construct(PedigreeMapModule $pedigree_map_module, TreeService $tree_service) + public function __construct(ModuleService $module_service, TreeService $tree_service) { - $this->pedigree_map_module = $pedigree_map_module; - $this->tree_service = $tree_service; + $this->tree_service = $tree_service; + $this->module_service = $module_service; } /** @@ -64,33 +67,36 @@ class RedirectModulePhp implements RequestHandlerInterface $mod = $query['mod'] ?? ''; $mod_action = $query['mod_action'] ?? ''; $rootid = $query['rootid'] ?? ''; - - $tree = $this->tree_service->all()->get($ged); + $tree = $this->tree_service->all()->get($ged); if ($tree instanceof Tree) { - switch ($mod . '/' . $mod_action) { - case 'googlemap/pedigree_map': - // Pedigree map: - $individual = Registry::individualFactory()->make($rootid, $tree); - if ($individual instanceof Individual) { - $url = $this->pedigree_map_module->chartUrl($individual, [ - 'generations' => $query['PEDIGREE_GENERATIONS'] ?? PedigreeMapModule::DEFAULT_GENERATIONS, - ]); + $individual = Registry::individualFactory()->make($rootid, $tree); + + if ($individual instanceof Individual) { + switch ($mod . '/' . $mod_action) { + case 'googlemap/pedigree_map': + $module = $this->module_service->findByInterface(PedigreeMapModule::class)->first(); + + if ($module instanceof PedigreeMapModule) { + $generations = $query['PEDIGREE_GENERATIONS'] ?? PedigreeMapModule::DEFAULT_GENERATIONS; + $url = $module->chartUrl($individual, ['generations' => $generations]); + + return redirect($url, StatusCodeInterface::STATUS_MOVED_PERMANENTLY); + } + + break; + + case 'tree/treeview': + $module = $this->module_service->findByInterface(InteractiveTreeModule::class)->first(); - return redirect($url, StatusCodeInterface::STATUS_MOVED_PERMANENTLY); - } - break; + if ($module instanceof InteractiveTreeModule) { + $url = $module->chartUrl($individual, []); - case 'tree/treeview': - // interactive tree: - $url = route('module', [ - 'module' => 'tree', - 'action' => 'Chart', - 'xref' => $rootid, - 'tree' => $tree->name(), - ]); + return redirect($url, StatusCodeInterface::STATUS_MOVED_PERMANENTLY); + } - return redirect($url, StatusCodeInterface::STATUS_MOVED_PERMANENTLY); + break; + } } } |
