$request->user(), 'member' => $request->user()->member, ]); } /** * Update the user's profile information. */ public function update(ProfileUpdateRequest $request): RedirectResponse { $validated = $request->validated(); $request->user()->fill($validated); if ($request->hasFile('profile_photo')) { $path = $request->file('profile_photo')->store('profile-photos', 'public'); if ($request->user()->profile_photo_path) { Storage::disk('public')->delete($request->user()->profile_photo_path); } $request->user()->profile_photo_path = $path; } if ($request->user()->isDirty('email')) { $request->user()->email_verified_at = null; } $request->user()->save(); $memberFields = [ 'phone', 'address_line_1', 'address_line_2', 'city', 'postal_code', 'emergency_contact_name', 'emergency_contact_phone', ]; $memberData = collect($validated) ->only($memberFields) ->filter(function ($value, $key) { return true; }); if ($memberData->isNotEmpty()) { $member = $request->user()->member; if ($member) { $member->fill($memberData->all()); $member->save(); } } return Redirect::route('profile.edit')->with('status', 'profile-updated'); } /** * Delete the user's account. */ public function destroy(Request $request): RedirectResponse { $request->validateWithBag('userDeletion', [ 'password' => ['required', 'current_password'], ]); $user = $request->user(); Auth::logout(); $user->delete(); $request->session()->invalidate(); $request->session()->regenerateToken(); return Redirect::to('/'); } /** * Upload disability certificate. */ public function uploadDisabilityCertificate(Request $request): RedirectResponse { $request->validate([ 'disability_certificate' => 'required|file|mimes:jpg,jpeg,png,pdf|max:10240', ]); $member = $request->user()->member; if (!$member) { return Redirect::route('profile.edit')->with('error', '請先建立會員資料'); } // Delete old certificate if exists if ($member->disability_certificate_path) { Storage::disk('private')->delete($member->disability_certificate_path); } // Upload new certificate $path = $request->file('disability_certificate')->store('disability-certificates', 'private'); // Update member record $member->update([ 'disability_certificate_path' => $path, 'disability_certificate_status' => Member::DISABILITY_STATUS_PENDING, 'disability_verified_by' => null, 'disability_verified_at' => null, 'disability_rejection_reason' => null, ]); return Redirect::route('profile.edit')->with('status', 'disability-certificate-uploaded'); } /** * View disability certificate. */ public function viewDisabilityCertificate(Request $request) { $member = $request->user()->member; if (!$member || !$member->disability_certificate_path) { abort(404, '找不到身心障礙手冊'); } if (!Storage::disk('private')->exists($member->disability_certificate_path)) { abort(404, '檔案不存在'); } return Storage::disk('private')->response($member->disability_certificate_path); } }