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

Этот коммит содержится в:
hmhealey
2015-07-10 15:51:45 -04:00
родитель 8dbf03bd10
Коммит b620960cde
2 изменённых файлов: 26 добавлений и 17 удалений

Просмотреть файл

@@ -47,10 +47,14 @@ func (us SqlUserStore) UpgradeSchemaIfNeeded() {
us.CreateColumnIfNotExists("Users", "LastName", "FirstName", "varchar(64)", "") us.CreateColumnIfNotExists("Users", "LastName", "FirstName", "varchar(64)", "")
// infer values of first and last name by splitting the previous full name // infer values of first and last name by splitting the previous full name
if _, err := us.GetMaster().Exec("UPDATE Users SET " + if _, err := us.GetMaster().Exec("UPDATE Users SET FirstName = SUBSTRING_INDEX(SUBSTRING_INDEX(Nickname, ' ', 1), ' ', -1)"); err != nil {
"FirstName = SUBSTRING_INDEX(SUBSTRING_INDEX(Nickname, ' ', 1), ' ', -1), " + panic("Failed to set first name from nickname " + err.Error())
"LastName = SUBSTRING(Nickname, INSTR(Nickname, ' ') + 1)"); err != nil { }
panic("Failed to set first and last name columns 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())
} }
} }
} }

Просмотреть файл

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