From d4248d231bedce85f752115fe553a11b6c05dc86 Mon Sep 17 00:00:00 2001 From: epriestley Date: Sun, 8 Jan 2017 07:52:34 -0800 Subject: [PATCH] Correct "Manage Password" link in Quickling in Diffusion Summary: Fixes T12080. This was missing a "/", but stop hard-coding these URIs. Test Plan: Clicked both links with Quickling as a logged-in and logged-out user, ended up in the right place. Reviewers: chad Reviewed By: chad Maniphest Tasks: T12080 Differential Revision: https://secure.phabricator.com/D17151 --- .../diffusion/view/DiffusionCloneURIView.php | 12 ++++++++++-- .../controller/PhabricatorSettingsMainController.php | 2 +- .../settings/panel/PhabricatorSettingsPanel.php | 11 +++++++++-- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/applications/diffusion/view/DiffusionCloneURIView.php b/src/applications/diffusion/view/DiffusionCloneURIView.php index fc861ed183..c9dae57563 100644 --- a/src/applications/diffusion/view/DiffusionCloneURIView.php +++ b/src/applications/diffusion/view/DiffusionCloneURIView.php @@ -35,6 +35,8 @@ final class DiffusionCloneURIView extends AphrontView { } public function render() { + $viewer = $this->getViewer(); + require_celerity_resource('diffusion-icons-css'); Javelin::initBehavior('select-content'); @@ -87,12 +89,18 @@ final class DiffusionCloneURIView extends AphrontView { case PhabricatorRepositoryURI::IO_READWRITE: switch ($uri->getBuiltinProtocol()) { case PhabricatorRepositoryURI::BUILTIN_PROTOCOL_SSH: - $auth_uri = '/settings/panel/ssh/'; + $auth_uri = id(new PhabricatorSSHKeysSettingsPanel()) + ->setViewer($viewer) + ->setUser($viewer) + ->getPanelURI(); $auth_tip = pht('Manage SSH Keys'); $auth_disabled = false; break; default: - $auth_uri = '/settings/panel/vcspassword'; + $auth_uri = id(new DiffusionSetPasswordSettingsPanel()) + ->setViewer($viewer) + ->setUser($viewer) + ->getPanelURI(); $auth_tip = pht('Manage Password'); $auth_disabled = false; break; diff --git a/src/applications/settings/controller/PhabricatorSettingsMainController.php b/src/applications/settings/controller/PhabricatorSettingsMainController.php index fada4a0937..841529a051 100644 --- a/src/applications/settings/controller/PhabricatorSettingsMainController.php +++ b/src/applications/settings/controller/PhabricatorSettingsMainController.php @@ -32,7 +32,7 @@ final class PhabricatorSettingsMainController // 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. + // generation of viewer-agnostic URIs for email and logged-out users. $panel = $request->getURIData('panel'); if ($panel) { $panel = phutil_escape_uri($panel); diff --git a/src/applications/settings/panel/PhabricatorSettingsPanel.php b/src/applications/settings/panel/PhabricatorSettingsPanel.php index 7d86eaf243..eea48e540f 100644 --- a/src/applications/settings/panel/PhabricatorSettingsPanel.php +++ b/src/applications/settings/panel/PhabricatorSettingsPanel.php @@ -229,8 +229,15 @@ abstract class PhabricatorSettingsPanel extends Phobject { $user = $this->getUser(); if ($user) { - $username = $user->getUsername(); - return "/settings/user/{$username}/page/{$key}/{$path}"; + if ($user->isLoggedIn()) { + $username = $user->getUsername(); + return "/settings/user/{$username}/page/{$key}/{$path}"; + } else { + // For logged-out users, we can't put their username in the URI. This + // page will prompt them to login, then redirect them to the correct + // location. + return "/settings/panel/{$key}/"; + } } else { $builtin = $this->getPreferences()->getBuiltinKey(); return "/settings/builtin/{$builtin}/page/{$key}/{$path}";