Warning: session_start(): Session cannot be started after headers have already been sent in /home/tvrreohg/public_html/manga.php on line 13
 'Legal preparation', 'credit' => 'Credit readiness', 'housing' => 'Housing / mortgage', 'attorney_packet' => 'Attorney packet', 'financial' => 'Financial preparation', 'general' => 'General organization', ]; public function index(Request $request) { $cases = $request->user()->cases()->withCount(['documents', 'suggestions'])->latest()->paginate(12); return view('cases.index', compact('cases')); } public function create() { return view('cases.form', ['caseRecord' => new CaseRecord, 'categories' => self::CATEGORIES]); } public function store(Request $request) { $plan = $request->user()->activeSubscription()->with('plan')->first()?->plan ?? \App\Models\Plan::where('slug', 'starter')->first(); if ($plan?->case_limit && $request->user()->cases()->whereNot('status', 'closed')->count() >= $plan->case_limit) { return back()->withInput()->withErrors([ 'plan' => "Your {$plan->name} package supports {$plan->case_limit} active case(s). Close a case or choose another package.", ]); } $case = $request->user()->cases()->create($this->validated($request)); return redirect()->route('cases.show', $case)->with('success', 'Your case has been created.'); } public function show(Request $request, CaseRecord $caseRecord) { $this->ensureAccess($request, $caseRecord); $caseRecord->load(['documents', 'suggestions' => fn ($query) => $query->latest()]); return view('cases.show', ['caseRecord' => $caseRecord, 'categories' => self::CATEGORIES]); } public function edit(Request $request, CaseRecord $caseRecord) { $this->ensureAccess($request, $caseRecord); return view('cases.form', ['caseRecord' => $caseRecord, 'categories' => self::CATEGORIES]); } public function update(Request $request, CaseRecord $caseRecord) { $this->ensureAccess($request, $caseRecord); $caseRecord->update($this->validated($request)); return redirect()->route('cases.show', $caseRecord)->with('success', 'Case details updated.'); } public function submit(Request $request, CaseRecord $caseRecord) { $this->ensureAccess($request, $caseRecord); $caseRecord->update(['status' => 'submitted', 'submitted_at' => now()]); return back()->with('success', 'Case submitted for review.'); } public function destroy(Request $request, CaseRecord $caseRecord) { $this->ensureAccess($request, $caseRecord); foreach ($caseRecord->documents as $document) { \Storage::disk($document->disk)->delete($document->path); } $caseRecord->delete(); return redirect()->route('cases.index')->with('success', 'Case deleted.'); } private function validated(Request $request): array { return $request->validate([ 'title' => ['required', 'string', 'max:180'], 'category' => ['required', Rule::in(array_keys(self::CATEGORIES))], 'summary' => ['nullable', 'string', 'max:10000'], 'timeline' => ['nullable', 'string', 'max:20000'], 'people_involved' => ['nullable', 'string', 'max:10000'], 'questions' => ['nullable', 'string', 'max:10000'], 'concerns' => ['nullable', 'string', 'max:10000'], ]); } private function ensureAccess(Request $request, CaseRecord $caseRecord): void { abort_unless($request->user()->isAdmin() || $caseRecord->user_id === $request->user()->id, 403); } }