diff --git a/migration/adapt.php b/migration/adapt.php index a4dee979d6..bd3b54180c 100644 --- a/migration/adapt.php +++ b/migration/adapt.php @@ -1,597 +1,6 @@ 'applications/settings/controller/PhabricatorSettingsMainController.php', 'PhabricatorSettingsPanel' => 'applications/settings/panel/PhabricatorSettingsPanel.php', 'PhabricatorSettingsPanelAccount' => 'applications/settings/panel/PhabricatorSettingsPanelAccount.php', + 'PhabricatorSettingsPanelChangeUsername' => 'applications/settings/panel/PhabricatorSettingsPanelChangeUsername.php', 'PhabricatorSettingsPanelConduit' => 'applications/settings/panel/PhabricatorSettingsPanelConduit.php', 'PhabricatorSettingsPanelConpherencePreferences' => 'applications/settings/panel/PhabricatorSettingsPanelConpherencePreferences.php', 'PhabricatorSettingsPanelDeveloperPreferences' => 'applications/settings/panel/PhabricatorSettingsPanelDeveloperPreferences.php', @@ -4175,6 +4176,7 @@ phutil_register_library_map(array( 'PhabricatorSettingsAdjustController' => 'PhabricatorController', 'PhabricatorSettingsMainController' => 'PhabricatorController', 'PhabricatorSettingsPanelAccount' => 'PhabricatorSettingsPanel', + 'PhabricatorSettingsPanelChangeUsername' => 'PhabricatorSettingsPanel', 'PhabricatorSettingsPanelConduit' => 'PhabricatorSettingsPanel', 'PhabricatorSettingsPanelConpherencePreferences' => 'PhabricatorSettingsPanel', 'PhabricatorSettingsPanelDeveloperPreferences' => 'PhabricatorSettingsPanel', diff --git a/src/applications/auth/controller/PhabricatorAuthRegisterController.php b/src/applications/auth/controller/PhabricatorAuthRegisterController.php index fe4ebd7b95..5baeecdeb4 100644 --- a/src/applications/auth/controller/PhabricatorAuthRegisterController.php +++ b/src/applications/auth/controller/PhabricatorAuthRegisterController.php @@ -196,6 +196,14 @@ final class PhabricatorAuthRegisterController } } + // blender hack + $root = dirname(phutil_get_library_root('phabricator')); + require $root.'/migration/dedup.php'; + if (array_key_exists($request->getStr('username'), $migrate_dedup_users)) { + $e_username = pht('Duplicate'); + $errors[] = pht('Username is already reserved.'); + } + if (!$errors) { $image = $this->loadProfilePicture($account); if ($image) { diff --git a/src/applications/auth/provider/PhabricatorAuthProviderPassword.php b/src/applications/auth/provider/PhabricatorAuthProviderPassword.php index 489e1cf0d5..e941577010 100644 --- a/src/applications/auth/provider/PhabricatorAuthProviderPassword.php +++ b/src/applications/auth/provider/PhabricatorAuthProviderPassword.php @@ -116,6 +116,28 @@ final class PhabricatorAuthProviderPassword $errors[] = pht('Username or password are incorrect.'); } + if (true) { + // blender hack + $root = dirname(phutil_get_library_root('phabricator')); + require $root.'/migration/dedup.php'; + + $missing_username = $request->getStr('username'); + + $find_user = id(new PhabricatorUser())->loadOneWhere( + 'username = %s', + $missing_username); + + if (!$find_user && array_key_exists($missing_username, $migrate_dedup_users)) { + $errors = array(); + $errors[] = pht('This account was merged into account "' . + $migrate_dedup_users[$missing_username] . + '", because Phabricator does not support multiple accounts with the same email address. ' . + 'Please login with that account instead ' . + '(optionally recovering your password if you forgot it). ' . + 'After logging in you will be able to change your username in the User Settings.'); + } + } + if ($errors) { $errors = id(new AphrontErrorView())->setErrors($errors); } diff --git a/src/applications/settings/controller/PhabricatorSettingsMainController.php b/src/applications/settings/controller/PhabricatorSettingsMainController.php index 2b20285b73..ed3ac06dfe 100644 --- a/src/applications/settings/controller/PhabricatorSettingsMainController.php +++ b/src/applications/settings/controller/PhabricatorSettingsMainController.php @@ -12,7 +12,7 @@ final class PhabricatorSettingsMainController public function processRequest() { $request = $this->getRequest(); - $panels = $this->buildPanels(); + $panels = $this->buildPanels($request->getUser()); $nav = $this->renderSideNav($panels); $key = $nav->selectFilter($this->key, head($panels)->getPanelKey()); @@ -34,7 +34,7 @@ final class PhabricatorSettingsMainController )); } - private function buildPanels() { + private function buildPanels($user) { $panel_specs = id(new PhutilSymbolLoader()) ->setAncestorClass('PhabricatorSettingsPanel') ->setConcreteOnly(true) @@ -54,6 +54,9 @@ final class PhabricatorSettingsMainController if (!$panel->isEnabled()) { continue; } + if ($user && !$panel->isEnabledForUser($user)) { + continue; + } if (!empty($result[$key])) { throw new Exception(pht( "Two settings panels share the same panel key ('%s'): %s, %s.", @@ -87,7 +90,7 @@ final class PhabricatorSettingsMainController } public function buildApplicationMenu() { - $panels = $this->buildPanels(); + $panels = $this->buildPanels(null); return $this->renderSideNav($panels)->getMenu(); } diff --git a/src/applications/settings/panel/PhabricatorSettingsPanel.php b/src/applications/settings/panel/PhabricatorSettingsPanel.php index 630f80892b..cb9702aa6a 100644 --- a/src/applications/settings/panel/PhabricatorSettingsPanel.php +++ b/src/applications/settings/panel/PhabricatorSettingsPanel.php @@ -68,6 +68,9 @@ abstract class PhabricatorSettingsPanel { return true; } + public function isEnabledForUser($user) { + return true; + } /** * You can use this callback to generate multiple similar panels which all diff --git a/webroot/rsrc/custom/static/login.html b/webroot/rsrc/custom/static/login.html index 4ba9ca31fa..ec046a13f7 100644 --- a/webroot/rsrc/custom/static/login.html +++ b/webroot/rsrc/custom/static/login.html @@ -1,2 +1 @@ -

Welcome to the new Blender developer website! Accounts from projects.blender.org have been preserved, with one exception: if you had multiple accounts using the same e-mail address, they will now be merged into one account.

-

TODO: add a way to show the right account name if the wrong one is entered.

+

Welcome to the new Blender developer website! Accounts and passwords from projects.blender.org have been preserved and can still be used to log in.