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' => '입력한 정보에 해당하는 계정을 찾을 수 없거나 사용 중지 상태인 계정입니다.']); }