authorizeResource(PreregistrationPage::class, 'page'); } public function index(Request $request): View { $query = PreregistrationPage::query() ->withCount('subscribers') ->orderByDesc('start_date'); if (! $request->user()?->isSuperadmin()) { $query->where('user_id', $request->user()->id); } else { $query->with('user'); } $pages = $query->get(); return view('admin.pages.index', compact('pages')); } public function create(): View { return view('admin.pages.create'); } public function store(StorePreregistrationPageRequest $request): RedirectResponse { $validated = $request->validated(); $background = $request->file('background_image'); $logo = $request->file('logo_image'); unset($validated['background_image'], $validated['logo_image']); $validated['slug'] = (string) Str::uuid(); $validated['user_id'] = $request->user()->id; $page = DB::transaction(function () use ($validated, $background, $logo): PreregistrationPage { $page = PreregistrationPage::create($validated); $paths = []; if ($background !== null) { $paths['background_image'] = $background->store("preregister/pages/{$page->id}", 'public'); } if ($logo !== null) { $paths['logo_image'] = $logo->store("preregister/pages/{$page->id}", 'public'); } if ($paths !== []) { $page->update($paths); } return $page->fresh(); }); return redirect() ->route('admin.pages.index') ->with('status', __('Page created. Public URL: :url', ['url' => url('/r/'.$page->slug)])); } public function show(PreregistrationPage $page): RedirectResponse { return redirect()->route('admin.pages.edit', $page); } public function edit(PreregistrationPage $page): View { return view('admin.pages.edit', compact('page')); } public function update(UpdatePreregistrationPageRequest $request, PreregistrationPage $page): RedirectResponse { $validated = $request->validated(); $background = $request->file('background_image'); $logo = $request->file('logo_image'); unset($validated['background_image'], $validated['logo_image']); DB::transaction(function () use ($validated, $background, $logo, $page): void { if ($background !== null) { if ($page->background_image !== null) { Storage::disk('public')->delete($page->background_image); } $validated['background_image'] = $background->store("preregister/pages/{$page->id}", 'public'); } if ($logo !== null) { if ($page->logo_image !== null) { Storage::disk('public')->delete($page->logo_image); } $validated['logo_image'] = $logo->store("preregister/pages/{$page->id}", 'public'); } $page->update($validated); }); return redirect() ->route('admin.pages.index') ->with('status', __('Page updated.')); } public function destroy(PreregistrationPage $page): RedirectResponse { DB::transaction(function () use ($page): void { if ($page->background_image !== null) { Storage::disk('public')->delete($page->background_image); } if ($page->logo_image !== null) { Storage::disk('public')->delete($page->logo_image); } $page->delete(); }); return redirect() ->route('admin.pages.index') ->with('status', __('Page deleted.')); } }