@@ -1072,18 +1072,46 @@ func validateUser(u *User) error {
1072
1072
return ValidateEmail (u .Email )
1073
1073
}
1074
1074
1075
- func updateUser (e Engine , u * User ) error {
1075
+ func updateUser (e Engine , u * User , changePrimaryEmail bool ) error {
1076
1076
if err := validateUser (u ); err != nil {
1077
1077
return err
1078
1078
}
1079
1079
1080
+ if changePrimaryEmail {
1081
+ var emailAddress EmailAddress
1082
+ has , err := e .Where ("lower_email=?" , strings .ToLower (u .Email )).Get (& emailAddress )
1083
+ if err != nil {
1084
+ return err
1085
+ }
1086
+ if ! has {
1087
+ // 1. Update old primary email
1088
+ if _ , err = e .Where ("uid=? AND is_primary=?" , u .ID , true ).Cols ("is_primary" ).Update (& EmailAddress {
1089
+ IsPrimary : false ,
1090
+ }); err != nil {
1091
+ return err
1092
+ }
1093
+
1094
+ emailAddress .Email = u .Email
1095
+ emailAddress .UID = u .ID
1096
+ emailAddress .IsActivated = true
1097
+ emailAddress .IsPrimary = true
1098
+ if _ , err := e .Insert (& emailAddress ); err != nil {
1099
+ return err
1100
+ }
1101
+ } else if _ , err := e .ID (emailAddress ).Cols ("is_primary" ).Update (& EmailAddress {
1102
+ IsPrimary : true ,
1103
+ }); err != nil {
1104
+ return err
1105
+ }
1106
+ }
1107
+
1080
1108
_ , err := e .ID (u .ID ).AllCols ().Update (u )
1081
1109
return err
1082
1110
}
1083
1111
1084
1112
// UpdateUser updates user's information.
1085
- func UpdateUser (u * User ) error {
1086
- return updateUser (x , u )
1113
+ func UpdateUser (u * User , changePrimaryEmail bool ) error {
1114
+ return updateUser (x , u , changePrimaryEmail )
1087
1115
}
1088
1116
1089
1117
// UpdateUserCols update user according special columns
@@ -1112,7 +1140,7 @@ func UpdateUserSetting(u *User) (err error) {
1112
1140
return err
1113
1141
}
1114
1142
}
1115
- if err = updateUser (sess , u ); err != nil {
1143
+ if err = updateUser (sess , u , false ); err != nil {
1116
1144
return err
1117
1145
}
1118
1146
return sess .Commit ()
0 commit comments