diff options
-rw-r--r-- | store/sql_user_store.go | 12 | ||||
-rw-r--r-- | web/react/components/user_settings.jsx | 31 |
2 files changed, 26 insertions, 17 deletions
diff --git a/store/sql_user_store.go b/store/sql_user_store.go index 728c6b243..d8ab4482e 100644 --- a/store/sql_user_store.go +++ b/store/sql_user_store.go @@ -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()) } } } diff --git a/web/react/components/user_settings.jsx b/web/react/components/user_settings.jsx index c1ea367f2..e6eb2b451 100644 --- a/web/react/components/user_settings.jsx +++ b/web/react/components/user_settings.jsx @@ -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");}} /> ); |