Author: XE Developers (developers@xpressengine.com)
Inheritance: extends XpressengineException
 public function update($memberId, Request $request)
 {
     // basic validation
     $validate = Validator::make($request->all(), ['displayName' => 'required']);
     if ($validate->fails()) {
         $message = $validate->messages()->first();
         $e = new InvalidArgumentException();
         $e->setMessage($message);
         throw $e;
     }
     // member validation
     /** @var MemberEntityInterface $member */
     $member = $this->handler->findMember($memberId);
     if ($member === null) {
         throw new MemberNotFoundException();
     }
     $displayName = $request->get('displayName');
     $introduction = $request->get('introduction');
     // displayName validation
     if ($member->getDisplayName() !== trim($displayName)) {
         $this->handler->validateDisplayName($displayName);
     }
     // apply updated
     $member->displayName = $displayName;
     if ($introduction !== null) {
         $member->introduction = $introduction;
     }
     XeDB::beginTransaction();
     try {
         // resolve profile file
         if ($profileFile = $request->file('profileImgFile')) {
             /** @var MemberImageHandler $imageHandler */
             $imageHandler = app('xe.member.image');
             $member->profileImageId = $imageHandler->updateMemberProfileImage($member, $profileFile);
         }
         $this->handler->update($member);
     } catch (\Exception $e) {
         XeDB::rollback();
         throw $e;
     }
     XeDB::commit();
     return redirect()->route('member.profile', [$member->getId()])->with('alert', ['type' => 'success', 'message' => '변경되었습니다.']);
 }
 public function update($id, Request $request)
 {
     /** @var MemberEntityInterface $member */
     $member = $this->members->find($id, ['mails', 'groups']);
     if ($member === null) {
         $e = new InvalidArgumentHttpException();
         $e->setMessage('존재하지 않는 회원입니다.');
         throw $e;
     }
     // default validation
     $validate = Validator::make($request->all(), ['email' => 'email', 'displayName' => 'required', 'rating' => 'required', 'status' => 'required']);
     if ($validate->fails()) {
         $messages = $validate->messages();
         $message = $messages->first();
         $e = new InvalidArgumentException();
         $e->setMessage($message);
         throw $e;
     }
     // display name validation
     $displayName = trim($request->get('displayName'));
     if ($member->getDisplayName() !== $displayName) {
         $this->handler->validateDisplayName($displayName);
     }
     $memberData = $request->except('groupId', 'profileImgFile', '_token');
     // encrypt password
     if (!empty($memberData['password'])) {
         $memberData['password'] = Hash::make($memberData['password']);
     } else {
         unset($memberData['password']);
     }
     if ($profileFile = $request->file('profileImgFile')) {
         /** @var MemberImageHandler $imageHandler */
         $imageHandler = app('xe.member.image');
         $memberData['profileImageId'] = $imageHandler->updateMemberProfileImage($member, $profileFile);
     }
     $inputtedGroup = $request->get('groupId', []);
     $currentGroups = array_pluck($member->groups ?: [], 'id');
     $newGroups = array_diff($inputtedGroup, $currentGroups);
     $oldGroups = array_diff($currentGroups, $inputtedGroup);
     XeDB::beginTransaction();
     try {
         $member->fill($memberData);
         $member = $this->members->update($member);
         // join to new group
         $newGroups = $this->groups->findAll($newGroups);
         foreach ($newGroups as $group) {
             $this->groups->addMember($group, $member);
         }
         // remove from old groups
         if ($member->groups !== null) {
             foreach ($member->groups as $group) {
                 if (in_array($group->id, $oldGroups)) {
                     $this->groups->exceptMember($group, $member);
                 }
             }
         }
     } catch (Exception $e) {
         XeDB::rollBack();
         throw $e;
     }
     XeDB::commit();
     return redirect()->back()->with('alert', ['type' => 'success', 'message' => '수정되었습니다.']);
 }
 /**
  * 비밀번호에 대한 유효성 검사를 한다.
  *
  * @param string $password 유효성 검사를 할 비밀번호
  *
  * @return bool  유효성검사 결과, 통과할 경우 true, 실패할 경우 false
  */
 public function validatePassword($password)
 {
     $validate = $this->validator->make(['password' => $password], ['password' => ['password']]);
     if ($validate->fails()) {
         $messages = $validate->messages();
         $message = current($messages->get('password'));
         $e = new InvalidArgumentException();
         $e->setMessage($message);
         throw $e;
     }
     return true;
 }
 public function leave(Request $request)
 {
     $confirm = $request->get('confirm_leave');
     if ($confirm !== 'Y') {
         $e = new InvalidArgumentException();
         $e->setMessage('약관의 동의가 필요합니다.');
         throw $e;
     }
     $id = $this->member->getId();
     XeDB::beginTransaction();
     try {
         $this->handler->leave($id);
     } catch (\Exception $e) {
         XeDB::rollback();
         throw $e;
     }
     XeDB::commit();
     Auth::logout();
     return redirect()->to('/');
 }
 /**
  * Handle a login request to the application.
  *
  * @param  \Illuminate\Http\Request $request
  *
  * @return \Illuminate\Http\Response
  */
 public function postLogin(Request $request)
 {
     $validate = \Validator::make($request->all(), ['email' => 'required|email_prefix', 'password' => 'required']);
     if ($validate->fails()) {
         $e = new InvalidArgumentException();
         $e->setMessage($validate->errors()->first());
         throw $e;
     }
     $this->checkCaptcha('login');
     $credentials = $request->only('email', 'password');
     $credentials['status'] = Member::STATUS_ACTIVATED;
     try {
         if ($this->auth->attempt($credentials, $request->has('remember'))) {
             $this->redirectPath = $request->get('redirectUrl');
             return redirect()->intended($this->redirectPath());
         }
     } catch (NotFoundEmailException $e) {
         // by pass
     } catch (\Exception $e) {
         throw $e;
     }
     return redirect($this->loginPath())->withInput($request->only('email', 'remember'))->with('alert', ['type' => 'danger', 'message' => '입력한 정보에 해당하는 계정을 찾을 수 없거나 사용 중지 상태인 계정입니다.']);
 }