diff --git a/src/applications/settings/application/PhabricatorSettingsApplication.php b/src/applications/settings/application/PhabricatorSettingsApplication.php index 4adf8ee19f..45a694fb59 100644 --- a/src/applications/settings/application/PhabricatorSettingsApplication.php +++ b/src/applications/settings/application/PhabricatorSettingsApplication.php @@ -36,6 +36,8 @@ final class PhabricatorSettingsApplication extends PhabricatorApplication { => 'PhabricatorSettingsMainController', 'builtin/(?Pglobal)/'.$panel_pattern => 'PhabricatorSettingsMainController', + 'panel/(?P[^/]+)/' + => 'PhabricatorSettingsMainController', 'adjust/' => 'PhabricatorSettingsAdjustController', 'timezone/(?P[^/]+)/' => 'PhabricatorSettingsTimezoneController', diff --git a/src/applications/settings/controller/PhabricatorSettingsMainController.php b/src/applications/settings/controller/PhabricatorSettingsMainController.php index 8c58772fe2..2a368d8650 100644 --- a/src/applications/settings/controller/PhabricatorSettingsMainController.php +++ b/src/applications/settings/controller/PhabricatorSettingsMainController.php @@ -30,6 +30,19 @@ final class PhabricatorSettingsMainController public function handleRequest(AphrontRequest $request) { $viewer = $this->getViewer(); + // Redirect "/panel/XYZ/" to the viewer's personal settings panel. This + // was the primary URI before global settings were introduced and allows + // generation of viewer-agnostic URIs for email. + $panel = $request->getURIData('panel'); + if ($panel) { + $panel = phutil_escape_uri($panel); + $username = $viewer->getUsername(); + + $panel_uri = "/user/{$username}/page/{$panel}/"; + $panel_uri = $this->getApplicationURI($panel_uri); + return id(new AphrontRedirectResponse())->setURI($panel_uri); + } + $username = $request->getURIData('username'); $builtin = $request->getURIData('builtin');