This commit is contained in:
Lunny Xiao 2017-02-25 22:53:57 +08:00 committed by GitHub
parent ddb0287bf6
commit e8e56da9ac
2 changed files with 28 additions and 13 deletions

View File

@ -821,21 +821,26 @@ func ChangeUserName(u *User, newUserName string) (err error) {
return os.Rename(UserPath(u.Name), UserPath(newUserName)) return os.Rename(UserPath(u.Name), UserPath(newUserName))
} }
// checkDupEmail checks whether there are the same email with the user
func checkDupEmail(e Engine, u *User) error {
u.Email = strings.ToLower(u.Email)
has, err := e.
Where("id!=?", u.ID).
And("type=?", u.Type).
And("email=?", u.Email).
Get(new(User))
if err != nil {
return err
} else if has {
return ErrEmailAlreadyUsed{u.Email}
}
return nil
}
func updateUser(e Engine, u *User) error { func updateUser(e Engine, u *User) error {
// Organization does not need email // Organization does not need email
u.Email = strings.ToLower(u.Email)
if !u.IsOrganization() { if !u.IsOrganization() {
u.Email = strings.ToLower(u.Email)
has, err := e.
Where("id!=?", u.ID).
And("type=?", u.Type).
And("email=?", u.Email).
Get(new(User))
if err != nil {
return err
} else if has {
return ErrEmailAlreadyUsed{u.Email}
}
if len(u.AvatarEmail) == 0 { if len(u.AvatarEmail) == 0 {
u.AvatarEmail = u.Email u.AvatarEmail = u.Email
} }
@ -857,6 +862,16 @@ func UpdateUser(u *User) error {
return updateUser(x, u) return updateUser(x, u)
} }
// UpdateUserSetting updates user's settings.
func UpdateUserSetting(u *User) error {
if !u.IsOrganization() {
if err := checkDupEmail(x, u); err != nil {
return err
}
}
return updateUser(x, u)
}
// deleteBeans deletes all given beans, beans should contain delete conditions. // deleteBeans deletes all given beans, beans should contain delete conditions.
func deleteBeans(e Engine, beans ...interface{}) (err error) { func deleteBeans(e Engine, beans ...interface{}) (err error) {
for i := range beans { for i := range beans {

View File

@ -104,7 +104,7 @@ func SettingsPost(ctx *context.Context, form auth.UpdateProfileForm) {
ctx.User.KeepEmailPrivate = form.KeepEmailPrivate ctx.User.KeepEmailPrivate = form.KeepEmailPrivate
ctx.User.Website = form.Website ctx.User.Website = form.Website
ctx.User.Location = form.Location ctx.User.Location = form.Location
if err := models.UpdateUser(ctx.User); err != nil { if err := models.UpdateUserSetting(ctx.User); err != nil {
if _, ok := err.(models.ErrEmailAlreadyUsed); ok { if _, ok := err.(models.ErrEmailAlreadyUsed); ok {
ctx.Flash.Error(ctx.Tr("form.email_been_used")) ctx.Flash.Error(ctx.Tr("form.email_been_used"))
ctx.Redirect(setting.AppSubURL + "/user/settings") ctx.Redirect(setting.AppSubURL + "/user/settings")