Example #1
0
 public function action_change_password()
 {
     Util_security::check_method('POST');
     Util_security::check_csrf();
     $form = $this->form_setting_password();
     $val = $form->validation();
     if (!$val->run()) {
         Session::set_flash('error', $val->show_errors());
         $this->action_password();
         return;
     }
     $post = $val->validated();
     $error_message = '';
     $is_transaction_rollback = false;
     try {
         DB::start_transaction();
         $this->change_password($post['old_password'], $post['password']);
         DB::commit_transaction();
         $mail = new Site_Mail('memberSettingPassword');
         $mail->send($this->u->member_auth->email, array('to_name' => $this->u->name));
         Session::set_flash('message', term('site.password') . 'を変更しました。');
         Response::redirect('member/setting');
     } 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 (WrongPasswordException $e) {
         $is_transaction_rollback = true;
         $error_message = sprintf('現在の%sが正しくありません。', term('site.password'));
     } catch (\Auth\SimpleUserUpdateException $e) {
         $is_transaction_rollback = true;
         $error_message = term('site.password') . 'の変更に失敗しました。';
     } catch (Database_Exception $e) {
         $is_transaction_rollback = true;
         $error_message = Site_Controller::get_error_message($e, true);
     } catch (FuelException $e) {
         $is_transaction_rollback = true;
         $error_message = $e->getMessage();
     }
     if ($error_message) {
         if ($is_transaction_rollback && DB::in_transaction()) {
             DB::rollback_transaction();
         }
         Session::set_flash('error', $error_message);
     }
     $this->action_password();
 }
Example #2
0
 /**
  * Mmeber leave
  * 
  * @access  public
  * @return  Response
  */
 public function action_index()
 {
     $val = self::get_validation_object();
     if (\Input::method() == 'POST') {
         \Util_security::check_csrf();
         $success_message = sprintf('%sを%sしました。', term('form.invite', 'site.mail'), term('form.post'));
         $error_message = '';
         $is_transaction_rollback = false;
         try {
             if (!$val->run()) {
                 throw new ValidationFailedException($val->show_errors());
             }
             $post = $val->validated();
             if (Model_MemberPre::get_one4invite_member_id_and_email($this->u->id, $post['email'])) {
                 throw new ValidationFailedException(sprintf('その%sは既に%sです。', term('site.email'), term('form.invited')));
             }
             DB::start_transaction();
             $token = Model_MemberPre::save_with_token($post['email'], null, $this->u->id);
             DB::commit_transaction();
             $mail = new Site_Mail('memberInvite');
             $mail->send($post['email'], array('register_url' => sprintf('%s?token=%s', Uri::create('member/register'), $token), 'invite_member_name' => $this->u->name, 'invite_message' => $post['message']));
             Session::set_flash('message', $success_message);
             Response::redirect('member/invite');
         } catch (ValidationFailedException $e) {
             $error_message = Site_Controller::get_error_message($e);
         } 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 (\Database_Exception $e) {
             $is_transaction_rollback = true;
             $error_message = Site_Controller::get_error_message($e, true);
         } catch (FuelException $e) {
             $is_transaction_rollback = true;
             $error_message = Site_Controller::get_error_message($e);
         }
         if ($is_transaction_rollback && DB::in_transaction()) {
             DB::rollback_transaction();
         }
         if ($error_message) {
             Session::set_flash('error', $error_message);
         }
     }
     $this->set_title_and_breadcrumbs(term('form.invite_friend'), null, $this->u);
     $this->template->content = \View::forge('member/invite', array('val' => $val, 'member_pres' => Model_MemberPre::get4invite_member_id($this->u->id)));
 }
Example #3
0
 public static function delete($member_id)
 {
     if (!($member = Model_Member::query()->related('member_auth')->where('id', $member_id)->get_one())) {
         throw new FuelException('Member not exists.');
     }
     $name = $member->name;
     $email = !empty($member->member_auth->email) ? $member->member_auth->email : '';
     if (is_enabled('timeline')) {
         \Timeline\Site_NoOrmModel::delete_timeline4member_id($member_id);
     }
     if (is_enabled('album')) {
         \Album\Site_NoOrmModel::delete_album4member_id($member_id);
     }
     if (is_enabled('note')) {
         \Note\Site_NoOrmModel::delete_note4member_id($member_id);
     }
     static::delete_file_all4member_id($member_id);
     static::delete_file_all4member_id($member_id, true);
     DB::start_transaction();
     if (!$member->delete()) {
         throw new FuelException('Delete user error. user_id:' . $member_id);
     }
     DB::commit_transaction();
     if ($name && $email) {
         $mail = new Site_Mail('memberLeave');
         $mail->send($email, array('to_name' => $name));
     }
 }
Example #4
0
 /**
  * Execute confirm signup
  * 
  * @access  public
  * @return  Response
  */
 public function action_confirm_signup()
 {
     Util_security::check_method('POST');
     Util_security::check_csrf();
     if (!($form = Fieldset::instance('confirm_signup'))) {
         $form = $this->get_form_signup_confirm();
     }
     $val = $form->validation();
     $val->fieldset()->field('email')->delete_rule('unique');
     $redirect_uri = conf('login_uri.site');
     $success_message = '仮登録が完了しました。受信したメール内に記載された URL より本登録を完了してください。';
     $error_message = '';
     $is_transaction_rollback = false;
     try {
         if (!$val->run()) {
             throw new \FuelException($val->show_errors());
         }
         $post = $val->validated();
         if (Model_MemberAuth::get4email($post['email'])) {
             if (conf('member.register.email.hideUniqueCheck')) {
                 Session::set_flash('message', $success_message);
                 Response::redirect($redirect_uri);
             }
             throw new FuelException('その' . term('site.email') . 'は登録できません。');
         }
         DB::start_transaction();
         $token = Model_MemberPre::save_with_token($post['email'], $post['password']);
         DB::commit_transaction();
         $mail = new Site_Mail('memberSignup');
         $mail->send($post['email'], array('register_url' => sprintf('%s?token=%s', Uri::create('member/register'), $token)));
         Session::set_flash('message', $success_message);
         Response::redirect($redirect_uri);
     } 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 (\Database_Exception $e) {
         $is_transaction_rollback = true;
         $error_message = \Site_Controller::get_error_message($e, true);
     } catch (FuelException $e) {
         $is_transaction_rollback = true;
         $error_message = $e->getMessage();
     }
     if ($is_transaction_rollback && DB::in_transaction()) {
         DB::rollback_transaction();
     }
     Session::set_flash('error', $error_message);
     $this->action_signup();
 }
Example #5
0
 /**
  * Execute reset password.
  * 
  * @access  public
  * @return  Response
  */
 public function action_reset_password()
 {
     // Already logged in
     Auth::check() and Response::redirect('member');
     $member_password_pre = Model_MemberPasswordPre::get4token(Input::param('token'));
     if (!$member_password_pre || !Site_Util::check_token_lifetime($member_password_pre->updated_at, conf('member.recover.password.token_lifetime'))) {
         Session::set_flash('error', sprintf('URLが%sです。', term('form.disabled')));
         throw new HttpNotFoundException();
     }
     $form = $this->form_reset_password();
     $val = $form->validation();
     if (Input::method() == 'POST') {
         Util_security::check_csrf();
         $auth = Auth::instance();
         $error_message = '';
         $is_transaction_rollback = false;
         try {
             if (!$val->run()) {
                 throw new FuelException($val->show_errors() ?: term('site.password') . 'が正しくありません');
             }
             $post = $val->validated();
             $to_email = $member_password_pre->email;
             $to_name = $member_password_pre->member->name;
             DB::start_transaction();
             $auth->change_password_simple($member_password_pre->member_id, $post['password']);
             $member_password_pre->delete();
             // 仮登録情報の削除
             DB::commit_transaction();
             $mail = new Site_Mail('memberResetPassword');
             $mail->send($to_email, array('to_name' => $to_name));
             $auth->login($to_email, $post['password']);
             Session::set_flash('message', term('site.password') . 'を登録しました。');
             Response::redirect('member');
         } 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.password') . 'の登録に失敗しました。';
         } catch (\Database_Exception $e) {
             $is_transaction_rollback = true;
             $error_message = \Site_Controller::get_error_message($e, true);
         } catch (FuelException $e) {
             $is_transaction_rollback = true;
             $error_message = $e->getMessage();
         }
         if ($error_message) {
             if ($is_transaction_rollback && DB::in_transaction()) {
                 DB::rollback_transaction();
             }
             Session::set_flash('error', $error_message);
         }
     }
     $this->set_title_and_breadcrumbs(term('site.password') . 'の再登録');
     $data = array('val' => $val, 'member_password_pre' => $member_password_pre);
     $this->template->content = View::forge('member/recover/reset_password', $data);
     $this->template->content->set_safe('html_form', $form->build('member/recover/reset_password'));
     // form の action に入る
 }
Example #6
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);
 }