query->get('page', 1); $total = Page::count(); $paginator = new Paginator($total, $perPage, $currentPage); $pages = Page::with(['creator', 'updater']) ->orderBy('created_at', 'desc') ->skip($paginator->getOffset()) ->take($perPage) ->get(); return $this->renderAdminView('@pagebuilder/admin/index.twig', [ 'pages' => $pages, 'paginator' => $paginator->toArray(), 'title' => 'Gerenciar Páginas' ]); } /** * Displays the page creation form. */ public function create(Request $request): Response { return $this->renderAdminView('@pagebuilder/admin/create.twig', [ 'title' => 'Criar Nova Página' ]); } /** * Stores a new page. */ public function store(Request $request): Response { $data = $request->request->all(); // Basic validation if (empty($data['title']) || empty($data['slug']) || empty($data['content'])) { $_SESSION['error'] = 'Preencha todos os campos obrigatórios (Título, Slug, Conteúdo).'; return new RedirectResponse(url('/admin/pages/create')); } // Check unique slug if (Page::where('pages_slug', $data['slug'])->exists()) { $_SESSION['error'] = 'Este slug já está sendo utilizado.'; return new RedirectResponse(url('/admin/pages/create')); } $data['slug'] = Str::slug($data['slug']); $data['created_by'] = $_SESSION['user_id'] ?? null; if (isset($data['is_published']) && $data['is_published']) { $data['published_at'] = date('Y-m-d H:i:s'); } else { $data['is_published'] = 0; } Page::create($data); $_SESSION['success'] = 'Página criada com sucesso!'; return new RedirectResponse(url('/admin/pages')); } /** * Displays the page edit form. */ public function edit(Request $request, int $id): Response { $page = Page::findOrFail($id); return $this->renderAdminView('@pagebuilder/admin/edit.twig', [ 'page' => $page, 'title' => 'Editar Página: ' . $page->title ]); } /** * Updates an existing page. */ public function update(Request $request, int $id): Response { $page = Page::findOrFail($id); $data = $request->request->all(); // Basic validation if (empty($data['title']) || empty($data['slug']) || empty($data['content'])) { $_SESSION['error'] = 'Preencha todos os campos obrigatórios.'; return new RedirectResponse(url("/admin/pages/{$id}/edit")); } // Check unique slug (ignoring the page itself) if (Page::where('pages_slug', $data['slug'])->where('pages_id', '!=', $id)->exists()) { $_SESSION['error'] = 'Este slug já está sendo utilizado.'; return new RedirectResponse(url("/admin/pages/{$id}/edit")); } $data['slug'] = Str::slug($data['slug']); $data['updated_by'] = $_SESSION['user_id'] ?? null; // Check if the page is being published now if (!$page->is_published && isset($data['is_published']) && $data['is_published']) { $data['published_at'] = date('Y-m-d H:i:s'); } if (!isset($data['is_published'])) { $data['is_published'] = 0; } $page->update($data); $_SESSION['success'] = 'Página atualizada com sucesso!'; return new RedirectResponse(url('/admin/pages')); } /** * Deletes a page. */ public function destroy(Request $request, int $id): Response { $page = Page::findOrFail($id); $page->delete(); $_SESSION['success'] = 'Página excluída com sucesso!'; return new RedirectResponse(url('/admin/pages')); } /** * Publishes a page. */ public function publish(Request $request, int $id): Response { $page = Page::findOrFail($id); $page->publish(); $_SESSION['success'] = 'Página publicada com sucesso!'; return new RedirectResponse($request->headers->get('referer', url('/admin/pages'))); } /** * Sets a page as draft. */ public function unpublish(Request $request, int $id): Response { $page = Page::findOrFail($id); $page->unpublish(); $_SESSION['success'] = 'Página definida como rascunho!'; return new RedirectResponse($request->headers->get('referer', url('/admin/pages'))); } }