Fix migration code so that LastName is populated correctly for users who only have one word in their FullName

This commit is contained in:
hmhealey
2015-07-10 15:51:45 -04:00
parent 8dbf03bd10
commit b620960cde
2 changed files with 26 additions and 17 deletions

View File

@@ -47,10 +47,14 @@ func (us SqlUserStore) UpgradeSchemaIfNeeded() {
us.CreateColumnIfNotExists("Users", "LastName", "FirstName", "varchar(64)", "")
// infer values of first and last name by splitting the previous full name
if _, err := us.GetMaster().Exec("UPDATE Users SET " +
"FirstName = SUBSTRING_INDEX(SUBSTRING_INDEX(Nickname, ' ', 1), ' ', -1), " +
"LastName = SUBSTRING(Nickname, INSTR(Nickname, ' ') + 1)"); err != nil {
panic("Failed to set first and last name columns from nickname " + err.Error())
if _, err := us.GetMaster().Exec("UPDATE Users SET FirstName = SUBSTRING_INDEX(SUBSTRING_INDEX(Nickname, ' ', 1), ' ', -1)"); err != nil {
panic("Failed to set first name from nickname " + err.Error())
}
// only set the last name from full names that are comprised of multiple words (ie that have at least one space in them)
if _, err := us.GetMaster().Exec("Update Users SET LastName = SUBSTRING(Nickname, INSTR(Nickname, ' ') + 1) " +
"WHERE CHAR_LENGTH(REPLACE(Nickname, ' ', '')) < CHAR_LENGTH(Nickname)"); err != nil {
panic("Failed to set last name from nickname " + err.Error())
}
}
}

View File

@@ -774,14 +774,13 @@ var GeneralTab = React.createClass({
var firstName = this.state.first_name.trim();
var lastName = this.state.last_name.trim();
var fullName = firstName + ' ' + lastName;
if (user.nickname === fullName) {
this.setState({client_error: "You must submit a new name"})
if (user.first_name === firstName && user.last_name === lastName) {
this.setState({client_error: "You must submit a new first or last name"})
return;
}
user.nickname = fullName;
user.first_name = firstName;
user.last_name = lastName;
this.submitUser(user);
},
@@ -879,11 +878,7 @@ var GeneralTab = React.createClass({
getInitialState: function() {
var user = this.props.user;
var splitStr = user.nickname.split(' ');
var firstName = splitStr.shift();
var lastName = splitStr.join(' ');
return { username: user.username, first_name: firstName, last_name: lastName, nickname: user.nickname,
return { username: user.username, first_name: user.first_name, last_name: user.last_name, nickname: user.nickname,
email: user.email, picture: null };
},
render: function() {
@@ -919,7 +914,7 @@ var GeneralTab = React.createClass({
nameSection = (
<SettingItemMax
title="Name"
title="Full Name"
inputs={inputs}
submit={this.submitName}
server_error={server_error}
@@ -928,10 +923,20 @@ var GeneralTab = React.createClass({
/>
);
} else {
var full_name = "";
if (user.first_name && user.last_name) {
full_name = user.first_name + " " + user.last_name;
} else if (user.first_name) {
full_name = user.first_name;
} else if (user.last_name) {
full_name = user.last_name;
}
nameSection = (
<SettingItemMin
title="Name"
describe={UserStore.getCurrentUser().nickname}
title="Full Name"
describe={full_name}
updateSection={function(){self.updateSection("name");}}
/>
);