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);
}
}