Esempio n. 1
0
 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;
 }
Esempio n. 2
0
 /**
  * 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);
 }