+sub change_email {
+ my ($self, $user, $email) = @_;
+
+ if (!$user || $user->{uid}) {
+ $self->last_error("INVALID_USER");
+ return;
+ }
+
+ if (!$email || !Email::Valid->address($email)) {
+ $self->last_error("INVALID_EMAIL");
+ return;
+ }
+
+ # use users_param table to save temporary new email address
+
+ my $users = $self->app->model('users');
+ my $param = $users->param;
+
+ $param->start_transaction;
+ my $rs = $param->insert(uid => $user->{uid},
+ name => "new_email",
+ value => $email);
+
+ if (!$rs) {
+ $self->app->error("Users: update users_param table for change_email failed! uid: $user->{uid}");
+ $self->last_error($param->last_error);
+ $param->rollback;
+ return;
+ }
+
+ $rs = $param->insert(uid => $user->{uid},
+ name => "new_email_ts",
+ value => {function => "NOW()"});
+ if (!$rs) {
+ $self->app->error("Users: update users_param table for change_email failed! uid: $user->{uid}");
+ $self->last_error($param->last_error);
+ $param->rollback;
+ return;
+ }
+ $param->commit;
+
+ $self->app->event_que->emit("user", "change_email", $user->{uid}, $user->{uid}, 10);
+ return 1;
+}
+