feat: Phase 2 - page CRUD, subscriber management, user management
This commit is contained in:
@@ -5,43 +5,128 @@ declare(strict_types=1);
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\Admin\StorePreregistrationPageRequest;
|
||||
use App\Http\Requests\Admin\UpdatePreregistrationPageRequest;
|
||||
use App\Models\PreregistrationPage;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\View\View;
|
||||
|
||||
class PageController extends Controller
|
||||
{
|
||||
public function index(): \Illuminate\View\View
|
||||
public function __construct()
|
||||
{
|
||||
return view('admin.pages.index');
|
||||
$this->authorizeResource(PreregistrationPage::class, 'page');
|
||||
}
|
||||
|
||||
public function create(): \Illuminate\View\View
|
||||
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(Request $request): \Illuminate\Http\RedirectResponse
|
||||
public function store(StorePreregistrationPageRequest $request): RedirectResponse
|
||||
{
|
||||
return redirect()->route('admin.pages.index');
|
||||
$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): \Illuminate\View\View
|
||||
public function show(PreregistrationPage $page): RedirectResponse
|
||||
{
|
||||
return view('admin.pages.show', compact('page'));
|
||||
return redirect()->route('admin.pages.edit', $page);
|
||||
}
|
||||
|
||||
public function edit(PreregistrationPage $page): \Illuminate\View\View
|
||||
public function edit(PreregistrationPage $page): View
|
||||
{
|
||||
return view('admin.pages.edit', compact('page'));
|
||||
}
|
||||
|
||||
public function update(Request $request, PreregistrationPage $page): \Illuminate\Http\RedirectResponse
|
||||
public function update(UpdatePreregistrationPageRequest $request, PreregistrationPage $page): RedirectResponse
|
||||
{
|
||||
return redirect()->route('admin.pages.index');
|
||||
$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): \Illuminate\Http\RedirectResponse
|
||||
public function destroy(PreregistrationPage $page): RedirectResponse
|
||||
{
|
||||
return redirect()->route('admin.pages.index');
|
||||
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.'));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user