mirror of
https://github.com/discourse/discourse.git
synced 2025-03-24 11:35:46 +08:00
Fix to allow admins to change the case of a someone's username
This commit is contained in:
parent
2f95f60e40
commit
16cd3e2a53
app
assets/javascripts/discourse
controllers
spec/controllers
@ -26,7 +26,7 @@ Discourse.PreferencesUsernameController = Discourse.ObjectController.extend({
|
||||
this.set('errorMessage', null);
|
||||
if (this.blank('newUsername')) return;
|
||||
if (this.get('unchanged')) return;
|
||||
Discourse.User.checkUsername(this.get('newUsername')).then(function(result) {
|
||||
Discourse.User.checkUsername(this.get('newUsername'), undefined, this.get('content.id')).then(function(result) {
|
||||
if (result.errors) {
|
||||
preferencesUsernameController.set('errorMessage', result.errors.join(' '));
|
||||
} else if (result.available === false) {
|
||||
|
@ -331,9 +331,9 @@ Discourse.User.reopenClass({
|
||||
@param {String} username A username to check
|
||||
@param {String} email An email address to check
|
||||
**/
|
||||
checkUsername: function(username, email) {
|
||||
checkUsername: function(username, email, forUserId) {
|
||||
return Discourse.ajax('/users/check_username', {
|
||||
data: { username: username, email: email }
|
||||
data: { username: username, email: email, for_user_id: forUserId }
|
||||
});
|
||||
},
|
||||
|
||||
|
@ -102,8 +102,10 @@ class UsersController < ApplicationController
|
||||
def check_username
|
||||
params.require(:username)
|
||||
|
||||
target_user = params[:for_user_id] ? User.find(params[:for_user_id]) : current_user
|
||||
|
||||
# The special case where someone is changing the case of their own username
|
||||
return render(json: {available: true}) if current_user and params[:username].downcase == current_user.username.downcase
|
||||
return render(json: {available: true}) if target_user and params[:username].downcase == target_user.username.downcase
|
||||
|
||||
validator = UsernameValidator.new(params[:username])
|
||||
if !validator.valid_format?
|
||||
@ -117,12 +119,12 @@ class UsersController < ApplicationController
|
||||
else
|
||||
|
||||
# Contact the Discourse Hub server
|
||||
email_given = (params[:email].present? || current_user.present?)
|
||||
email_given = (params[:email].present? || target_user.present?)
|
||||
available_locally = User.username_available?(params[:username])
|
||||
global_match = false
|
||||
available_globally, suggestion_from_discourse_hub = begin
|
||||
if email_given
|
||||
global_match, available, suggestion = DiscourseHub.nickname_match?( params[:username], params[:email] || current_user.email )
|
||||
global_match, available, suggestion = DiscourseHub.nickname_match?( params[:username], params[:email] || target_user.email )
|
||||
[available || global_match, suggestion]
|
||||
else
|
||||
DiscourseHub.nickname_available?(params[:username])
|
||||
|
@ -802,6 +802,15 @@ describe UsersController do
|
||||
end
|
||||
include_examples 'when username is unavailable locally'
|
||||
end
|
||||
|
||||
context "an admin changing it for someone else" do
|
||||
let!(:user) { Fabricate(:user, username: 'hansolo') }
|
||||
before do
|
||||
log_in_user(Fabricate(:admin))
|
||||
xhr :get, :check_username, username: 'HanSolo', for_user_id: user.id
|
||||
end
|
||||
include_examples 'when username is available everywhere'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user