public static function save_with_token($member_id, $email) { if (!($obj = Model_MemberEmailPre::get4member_id($member_id))) { $obj = Model_MemberEmailPre::forge(); } $obj->member_id = $member_id; $obj->email = $email; $obj->token = Security::generate_token(); $obj->code = Util_String::get_random_code(static::$_properties['code']['form']['validation']['exact_length'][0]); if (!$obj->save()) { return false; } return $obj; }
/** * Execute register email. * * @access public * @return Response */ public function action_register($mode = null) { Util_security::check_method('POST'); Util_security::check_csrf(); list($mode, $is_registerd, $is_regist_mode, $action_name, $is_oauth_registerd_user) = $this->get_common_vals($mode); $this->set_validation_email($is_oauth_registerd_user); $this->set_validation_code(); $error_message = ''; $is_transaction_rollback = false; try { if (!$this->val_obj->run()) { throw new ValidationFailedException($this->val_obj->show_errors()); } $post = $this->val_obj->validated(); if (!$is_oauth_registerd_user && !$this->auth_instance->check_password()) { throw new ValidationFailedException(term('site.password') . 'が正しくありません'); } $member_email_pre = Model_MemberEmailPre::get4member_id($this->u->id); $code_error_message = sprintf('%sが正しくないか、%sが過ぎてます。再度%sを%sしてください。', term('form.confirm', 'site.code'), term('form.enabled', 'common.timelimit'), term('form.for_confirm', 'site.mail'), term('form.send')); $this->check_email_registered($member_email_pre ? $member_email_pre->email : $post['email'], $mode, $code_error_message, true); if (!$member_email_pre || !self::check_confirmation_code($member_email_pre, $post['code'])) { throw new ValidationFailedException($code_error_message); } $email = $member_email_pre->email; $values = array('email' => $email); if (!$is_oauth_registerd_user) { $values['password'] = $post['password']; $values['old_password'] = $post['password']; } DB::start_transaction(); if (!$this->auth_instance->update_user($values, $this->u->id)) { throw new FuelException('Change email error.'); } $member_email_pre->delete(); // 仮登録情報の削除 DB::commit_transaction(); $this->set_current_user(); $mail = new Site_Mail('memberRegisterEmailConfirm'); $mail->send($email, array('to_name' => $this->u->name)); Session::set_flash('message', sprintf('%sを%sしました。', term('site.email'), $action_name)); Response::redirect('member/setting'); } catch (ValidationFailedException $e) { $error_message = $e->getMessage(); } catch (EmailValidationFailedException $e) { Util_Toolkit::log_error('send mail error: ' . __METHOD__ . ' validation error'); $error_message = 'メール送信エラー'; } catch (EmailSendingFailedException $e) { Util_Toolkit::log_error('send mail error: ' . __METHOD__ . ' sending error'); $error_message = 'メール送信エラー'; } catch (\Auth\SimpleUserUpdateException $e) { $is_transaction_rollback = true; $error_message = term('site.email') . 'の変更に失敗しました。'; } catch (\Database_Exception $e) { $is_transaction_rollback = true; $error_message = \Site_Controller::get_error_message($e, true); } catch (FuelException $e) { $is_transaction_rollback = true; if (!($error_message = $e->getMessage())) { $error_message = sprintf('%sの%sに失敗しました。', term('site.email'), $action_name); } } if ($error_message) { if ($is_transaction_rollback && DB::in_transaction()) { DB::rollback_transaction(); } Session::set_flash('error', $error_message); } $this->action_register_confirm($mode); }