/** * Update the specified user in storage. * @param string $username * @param GenericRequest $request * @return \Illuminate\Http\Response */ public function update($username, GenericRequest $request) { $user = User::where('username', $username)->firstOrFail(); $ownAccount = $user->id == $this->user->id; // If performing a general save then validate the inputs and perform the // update, setting the account type as necessary. If updating the active // user, the restricted attributes will be set to their current values. if ($request->get('action') == 'save') { $data = $request->stripped('name', 'username', 'nickname', 'email', 'phone', 'dob', 'address', 'tool_colours', 'type') + ['show_email' => $request->has('show_email'), 'show_phone' => $request->has('show_phone'), 'show_address' => $request->has('show_address'), 'show_age' => $request->has('show_age')]; $data['dob'] = $data['dob'] ?: null; if ($ownAccount) { $data['username'] = $user->username; $data['type'] = $user->type; } $validator = Validator::make($data, $user->getProfileValidationRules(), $user->getProfileValidationMessages()); if ($validator->fails()) { return redirect()->back()->withInput($data)->withErrors($validator); } else { if ($user->update($data)) { Flash::success('User updated'); return redirect(route('user.index')); } else { Flash::error('Something went wrong while updating the user'); return redirect(route('user.edit', $username)); } } } else { if ($request->get('action') == 'archive') { if ($ownAccount) { Flash::warning('You cannot archive your own account'); } else { if ($user->archive()) { Flash::success('User archived'); } else { Flash::error('Something went wrong when archiving the user'); } } return redirect(route('user.edit', $username)); } else { if ($request->get('action') == 'unarchive') { if ($user->update(['status' => true])) { Flash::success('User unarchived'); } else { Flash::error('Something went wrong when unarchiving the user'); } return redirect(route('user.edit', $username)); } else { if ($request->get('action') == 'change-pic') { $file = $request->file('avatar'); if (!$file) { Flash::warning('Please select an image to use'); } else { $user->setAvatar($file); Flash::success('Profile picture changed'); } return redirect(route('user.edit', $username)); } else { if ($request->get('action') == 'remove-pic') { if ($user->hasAvatar()) { $path = base_path('public') . $user->getAvatarUrl(); if (is_writeable($path)) { unlink($path); Flash::success("Profile picture removed"); } else { Flash::error("The user's picture is not writeable"); } } return redirect(route('user.edit', $username)); } else { if ($request->get('action') == 'reset-password') { $password = str_random(15); $user->update(['password' => bcrypt($password)]); Flash::success('New password sent'); Mail::queue('emails.users.reset_password', ['name' => $user->forename, 'password' => $password], function ($message) use($user) { $message->subject('Your new password')->to($user->email, $user->name); }); return redirect(route('user.edit', $username)); } else { return redirect(route('user.edit', $username)); } } } } } } }
/** * Validate a event crew form submission. * @param \App\Http\Requests\GenericRequest $request * @param \App\Event $event * @param bool $validateUser */ private function validateCrew(GenericRequest $request, Event $event, $validateUser = true) { if ($request->has('guest') && $event->isSocial()) { $this->validate($request, ['guest_name' => 'required'], ['guest_name.required' => 'Please enter the guest\'s name']); } else { $this->validate($request, ['user_id' => 'required' . ($validateUser ? '|exists:users,id' : ''), 'name' => 'required_if:core,1'], ['user_id.required' => 'Please select a member', 'user_id.exists' => 'Please select a member', 'name.required_if' => 'Please enter a role title']); } }