From e674690b3c82fdd042736fe9090229e3d6172dcb Mon Sep 17 00:00:00 2001 From: Antoine Leclaire <104761460+Ate-lcr@users.noreply.github.com> Date: Fri, 13 Jan 2023 14:41:41 +0100 Subject: [PATCH 01/24] Refactorisation PageController.php --- Controller/PageController.php | 244 -------------------- Http/Action/Page/CreatePageAction.php | 45 ++++ Http/Action/Page/CreateUniquePageAction.php | 53 +++++ Http/Action/Page/DeletePageAction.php | 39 ++++ Http/Action/Page/EditPageAction.php | 53 +++++ Http/Action/Page/IndexPageAction.php | 34 +++ Http/Action/Page/StatusPageAction.php | 20 ++ Http/Form/Page/FormFactory.php | 31 +++ Repository/PageRepository.php | 19 ++ Resources/config/routing.yml | 24 +- Resources/config/services.yml | 4 + 11 files changed, 320 insertions(+), 246 deletions(-) delete mode 100644 Controller/PageController.php create mode 100644 Http/Action/Page/CreatePageAction.php create mode 100644 Http/Action/Page/CreateUniquePageAction.php create mode 100644 Http/Action/Page/DeletePageAction.php create mode 100644 Http/Action/Page/EditPageAction.php create mode 100644 Http/Action/Page/IndexPageAction.php create mode 100644 Http/Action/Page/StatusPageAction.php create mode 100644 Http/Form/Page/FormFactory.php diff --git a/Controller/PageController.php b/Controller/PageController.php deleted file mode 100644 index c72ff51..0000000 --- a/Controller/PageController.php +++ /dev/null @@ -1,244 +0,0 @@ -parameterBag = $parameterBag; - $this->formFactory = $formFactory; - - $entities = $parameterBag->get('aropixel_page.entities'); - $forms = $parameterBag->get('aropixel_page.forms'); - - $this->model = $entities[PageInterface::class]; -// $this->form = $forms[PageInterface::class]; - } - - - /** - * @Route("/{type}/list", name="aropixel_page_index", methods={"GET","POST"}) - */ - public function index(PageRepository $pageRepository, $type): Response - { - // - $pages = $pageRepository->findBy(['type' => $type], ['title' => 'ASC']); - - // - $delete_forms = array(); - foreach ($pages as $entity) { - $deleteForm = $this->createDeleteForm($entity); - $delete_forms[$entity->getId()] = $deleteForm->createView(); - } - - // - return $this->render('@AropixelPage/index.html.twig', [ - 'type' => $type, - 'pages' => $pages, - 'delete_forms' => $delete_forms, - ]); - } - - - /** - * @Route("/{type}/page", name="aropixel_page", methods={"GET","POST"}) - */ - public function page(Request $request, $type): Response - { - $em = $this->getDoctrine()->getManager(); - $page = $em->getRepository($this->model)->findOneBy(['type' => $type]); - - if (!$page) { - - /** @var PageInterface $page */ - $page = new $this->model(); - $page->setStatus(Publishable::STATUS_ONLINE); - $page->setType($type); - - } - - $form = $this->formFactory->createForm($page); - $form->handleRequest($request); - - if ($form->isSubmitted() && $form->isValid()) { - - $em = $this->getDoctrine()->getManager(); - $em->persist($page); - $em->flush(); - - $this->addFlash('notice', 'La page a bien été enregistrée.'); - return $this->redirectToRoute('aropixel_page', array('type' => $type)); - } - - - return $this->render($this->getTemplatePath().'/'.$type.'/form.html.twig', [ - 'page' => $page, - 'form' => $form->createView(), - ]); - } - - - /** - * @Route("/{type}/new", name="aropixel_page_new", methods={"GET","POST"}) - */ - public function new(Request $request, $type): Response - { - /** @var PageInterface $page */ - $page = new $this->model(); - $page->setType($type); - - $form = $this->formFactory->createForm($page); - $form->handleRequest($request); - - if ($form->isSubmitted() && $form->isValid()) { - - $em = $this->getDoctrine()->getManager(); - $em->persist($page); - $em->flush(); - - $this->addFlash('notice', 'La page a bien été enregistrée.'); - return $this->redirectToRoute('aropixel_page_edit', array('type' => $page->getType(), 'id' => $page->getId())); - } - - - return $this->render($this->getTemplatePath().'/'.$type.'/form.html.twig', [ - 'page' => $page, - 'form' => $form->createView(), - ]); - } - - - /** - * @Route("/{type}/{id}/edit", name="aropixel_page_edit", methods={"GET","POST"}) - */ - public function edit(Request $request, $id): Response - { - - $em = $this->getDoctrine()->getManager(); - $page = $em->getRepository($this->model)->find($id); - if (!$page) { - throw $this->createNotFoundException(); - } - - $auth_checker = $this->get('security.authorization_checker'); - $isRoleAdmin = $auth_checker->isGranted('ROLE_HYPER_ADMIN'); - - $deleteForm = $this->createDeleteForm($page); - $form = $this->formFactory->createForm($page); - $form->handleRequest($request); - - if ($form->isSubmitted() && $form->isValid()) { - - $this->addFlash('notice', 'La page a bien été enregistrée.'); - $this->getDoctrine()->getManager()->flush(); - - return $this->redirectToRoute('aropixel_page_edit', array('type' => $page->getType(), 'id' => $page->getId())); - - } - - return $this->render($this->getTemplatePath().'/'.$page->getType().'/form.html.twig', [ - 'page' => $page, - 'form' => $form->createView(), - 'delete_form' => ((!$page->getType() == 'default' || $isRoleAdmin) ? $deleteForm->createView() : false) - ]); - } - - - /** - * @Route("/{id}/status", name="aropixel_page_status", methods={"GET"}) - */ - public function status(Page $page, Status $status) - { - return $status->changeStatus($page); - - } - - - /** - * @Route("/{id}", name="aropixel_page_delete", methods={"DELETE"}) - */ - public function delete(Request $request, $id): Response - { - - /** @var Page $page */ - $em = $this->getDoctrine()->getManager(); - $page = $em->getRepository($this->model)->find($id); - $type = $page->getType(); - if (!$page) { - throw $this->createNotFoundException(); - } - - $titre = $page->getTitle(); - $form = $this->createDeleteForm($page); - $form->handleRequest($request); - - if ($form->isSubmitted() && $form->isValid()) { - - $em = $this->getDoctrine()->getManager(); - $em->remove($page); - $em->flush(); - - $this->get('session')->getFlashBag()->add('notice', 'La page "'.$titre.'" a bien été supprimé.'); - } - - return $this->redirectToRoute('aropixel_page_index', ['type' => $type]); - } - - /** - * Creates a form to delete the entity. - * @return FormInterface The form - */ - private function createDeleteForm(Page $page) - { - return $this->createFormBuilder() - ->setAction($this->generateUrl('aropixel_page_delete', array('id' => $page->getId()))) - ->setMethod('DELETE') - ->getForm() - ; - } - - private function getTemplatePath() - { - $formsConfig = $this->getParameter('aropixel_page.forms'); - return $formsConfig['template_path']; - } -} diff --git a/Http/Action/Page/CreatePageAction.php b/Http/Action/Page/CreatePageAction.php new file mode 100644 index 0000000..e5b4e62 --- /dev/null +++ b/Http/Action/Page/CreatePageAction.php @@ -0,0 +1,45 @@ +model(); + $page->setType($type); + + $form = $this->factory->createForm($page); + $form->handleRequest($this->request->getMainRequest()); + + if ($form->isSubmitted() && $form->isValid()) { + $this->pageRepository->add($page, true); + + $this->addFlash('notice', 'La page a bien été enregistrée.'); + return $this->redirectToRoute('aropixel_page_edit', array('type' => $page->getType(), 'id' => $page->getId())); + } + + return $this->render($this->formFactory->getTemplatePath().'/'.$type.'/form.html.twig', [ + 'page' => $page, + 'form' => $form->createView(), + ]); + } +} \ No newline at end of file diff --git a/Http/Action/Page/CreateUniquePageAction.php b/Http/Action/Page/CreateUniquePageAction.php new file mode 100644 index 0000000..c8bb5b0 --- /dev/null +++ b/Http/Action/Page/CreateUniquePageAction.php @@ -0,0 +1,53 @@ +pageRepository->findOneBy(['type' => $type]); + + if (!$page) { + /** @var PageInterface $page */ + $page = new $this->model(); + $page->setStatus(Publishable::STATUS_ONLINE); + $page->setType($type); + } + + $form = $this->factory->createForm($page); + $form->handleRequest($this->request->getMainRequest()); + + if ($form->isSubmitted() && $form->isValid()) { + $this->pageRepository->add($page, true); + + $this->addFlash('notice', 'La page a bien été enregistrée.'); + return $this->redirectToRoute('aropixel_page', array('type' => $page->getType(), 'id' => $page->getId())); + } + + return $this->render($this->formFactory->getTemplatePath().'/'.$type.'/form.html.twig', [ + 'page' => $page, + 'form' => $form->createView(), + ]); + + } +} \ No newline at end of file diff --git a/Http/Action/Page/DeletePageAction.php b/Http/Action/Page/DeletePageAction.php new file mode 100644 index 0000000..22b92a9 --- /dev/null +++ b/Http/Action/Page/DeletePageAction.php @@ -0,0 +1,39 @@ +pageRepository->find($id); + $type = $page->getType(); + $title = $page->getTitle(); + + $form = $this->formFactory->createDeleteForm($page); + $form->handleRequest($this->request->getMainRequest()); + + if ($form->isSubmitted() && $form->isValid()) { + $this->pageRepository->remove($page, true); + + $this->addFlash('notice', 'La page "'.$title.'" a bien été supprimé.'); + } + + return $this->redirectToRoute('aropixel_page_index', ['type' => $type]); + + } +} \ No newline at end of file diff --git a/Http/Action/Page/EditPageAction.php b/Http/Action/Page/EditPageAction.php new file mode 100644 index 0000000..f8add7f --- /dev/null +++ b/Http/Action/Page/EditPageAction.php @@ -0,0 +1,53 @@ +pageRepository->find($id); + + if (!$page) { + throw $this->createNotFoundException(); + } + + $isRoleAdmin = $this->security->isGranted('ROLE_HYPER_ADMIN'); + + $deleteForm = $this->formFactory->createDeleteForm($page); + $form = $this->factory->createForm($page); + $form->handleRequest($this->request->getMainRequest()); + + if ($form->isSubmitted() && $form->isValid()) { + $this->pageRepository->add($page, true); + + $this->addFlash('notice', 'La page a bien été enregistrée.'); + return $this->redirectToRoute('aropixel_page_edit', array('type' => $page->getType(), 'id' => $page->getId())); + } + return $this->render($this->formFactory->getTemplatePath().'/'.$page->getType().'/form.html.twig', [ + 'page' => $page, + 'form' => $form->createView(), + 'delete_form' => ((!$page->getType() == 'default' || $isRoleAdmin) ? $deleteForm->createView() : false) + ]); + + + + } +} \ No newline at end of file diff --git a/Http/Action/Page/IndexPageAction.php b/Http/Action/Page/IndexPageAction.php new file mode 100644 index 0000000..1bc87ff --- /dev/null +++ b/Http/Action/Page/IndexPageAction.php @@ -0,0 +1,34 @@ +pageRepository->findBy(['type' => $type], ['title' => 'ASC']); + + $delete_forms = array(); + foreach ($pages as $page) { + $deleteForm = $this->formFactory->createDeleteForm($page); + $delete_forms[$page->getId()] = $deleteForm->createView(); + } + + return $this->render('@AropixelPage/index.html.twig', [ + 'type' => $type, + 'pages' => $pages, + 'delete_forms' => $delete_forms, + ]); + } + +} \ No newline at end of file diff --git a/Http/Action/Page/StatusPageAction.php b/Http/Action/Page/StatusPageAction.php new file mode 100644 index 0000000..d350eb5 --- /dev/null +++ b/Http/Action/Page/StatusPageAction.php @@ -0,0 +1,20 @@ +status->changeStatus($page); + } + +} \ No newline at end of file diff --git a/Http/Form/Page/FormFactory.php b/Http/Form/Page/FormFactory.php new file mode 100644 index 0000000..df63389 --- /dev/null +++ b/Http/Form/Page/FormFactory.php @@ -0,0 +1,31 @@ +createFormBuilder() + ->setAction($this->generateUrl('aropixel_page_delete', array('id' => $page->getId()))) + ->setMethod('DELETE') + ->getForm() + ; + } + + public function getTemplatePath() + { + $formsConfig = $this->getParameter('aropixel_page.forms'); + return $formsConfig['template_path']; + } + + + +} \ No newline at end of file diff --git a/Repository/PageRepository.php b/Repository/PageRepository.php index 116986f..aebb828 100644 --- a/Repository/PageRepository.php +++ b/Repository/PageRepository.php @@ -51,6 +51,25 @@ public function findPages($type) ; } + public function add(Page $page, bool $flush = false): void + { + $this->getEntityManager()->persist($page); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + + public function remove(Page $page, bool $flush = false) : void + { + $this->getEntityManager()->remove($page); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + + /* public function findOneBySomeField($value): ?Page diff --git a/Resources/config/routing.yml b/Resources/config/routing.yml index 9b69398..cb60fa0 100644 --- a/Resources/config/routing.yml +++ b/Resources/config/routing.yml @@ -1,3 +1,23 @@ +aropixel_page_index: + path: /page/{type}/list + controller: Aropixel\PageBundle\Http\Action\Page\IndexPageAction + +aropixel_page_new: + path: /page/{type}/new + controller: Aropixel\PageBundle\Http\Action\Page\CreatePageAction + +aropixel_page_edit: + path: /page/{type}/{id}/edit + controller: Aropixel\PageBundle\Http\Action\Page\EditPageAction + +aropixel_page_delete: + path: /page/{id} + controller: Aropixel\PageBundle\Http\Action\Page\DeletePageAction + aropixel_page: - resource: "@AropixelPageBundle/Controller/PageController.php" - type: annotation + path: /page/{type}/page + controller: Aropixel\PageBundle\Http\Action\Page\CreateUniquePageAction + +aropixel_page_status: + path: /page/{id}/status + controller: Aropixel\PageBundle\Http\Action\Page\StatusPageAction diff --git a/Resources/config/services.yml b/Resources/config/services.yml index 2da187f..16ea3ee 100644 --- a/Resources/config/services.yml +++ b/Resources/config/services.yml @@ -26,6 +26,10 @@ services: resource: '../../Controller' tags: ['controller.service_arguments'] + Aropixel\PageBundle\Http\: + resource: '../../Http' + tags: [ 'controller.service_arguments' ] + aropixel.page.form.default: class: '%aropixel_page.form.default%' arguments: ['@security.authorization_checker', '@Aropixel\PageBundle\Form\DataMapper\PageFieldDataMapper', '@parameter_bag', '%aropixel_page.entities%'] From b6846ea6ef3d481d7eb0e83125f9ad3761ec6e3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=ABl=20Gomez=20Caballe?= Date: Tue, 24 Jan 2023 18:01:11 +0100 Subject: [PATCH 02/24] New form structure --- Resources/config/services.yml | 5 ---- Resources/views/base.html.twig | 12 +-------- Resources/views/default/form.html.twig | 37 +++++++------------------- Resources/views/index.html.twig | 2 +- 4 files changed, 12 insertions(+), 44 deletions(-) diff --git a/Resources/config/services.yml b/Resources/config/services.yml index 16ea3ee..9169ce6 100644 --- a/Resources/config/services.yml +++ b/Resources/config/services.yml @@ -20,11 +20,6 @@ services: Aropixel\PageBundle\Form\FormFactoryInterface: '@aropixel.page.form.factory' - # controllers are imported separately to make sure services can be injected - # as action arguments even if you don't extend any base controller class - Aropixel\PageBundle\Controller\: - resource: '../../Controller' - tags: ['controller.service_arguments'] Aropixel\PageBundle\Http\: resource: '../../Http' diff --git a/Resources/views/base.html.twig b/Resources/views/base.html.twig index b3196cb..233b5c5 100644 --- a/Resources/views/base.html.twig +++ b/Resources/views/base.html.twig @@ -1,17 +1,7 @@ {% extends '@AropixelAdmin/Form/base.html.twig' %} {% block header_title %}Pages{% endblock %} -{% block header_breadcrumb %} - {# #} -{% endblock %} +{% block header_breadcrumb %}{% endblock %} diff --git a/Resources/views/default/form.html.twig b/Resources/views/default/form.html.twig index c0d7f61..b490d0a 100644 --- a/Resources/views/default/form.html.twig +++ b/Resources/views/default/form.html.twig @@ -1,33 +1,19 @@ {% extends '@AropixelPage/base.html.twig' %} -{% block header_title %}Pages{% endblock %} -{% block header_breadcrumb %} -{# #} +{% block header_title %}Pages Créer une nouvelle page{% endblock %} +{% block header_breadcrumb %}{% endblock %} + +{% block tabbable %} + + {% endblock %} {% block mainPanel %} -
- -
- - -
-
+
-
+
@@ -42,16 +28,14 @@
-
+
-
+
{{ form_row(form.metaTitle) }} - {{ form_row(form.metaDescription) }} - {{ form_row(form.metaKeywords) }}
@@ -60,7 +44,6 @@
-
diff --git a/Resources/views/index.html.twig b/Resources/views/index.html.twig index 363b5d2..e87f417 100644 --- a/Resources/views/index.html.twig +++ b/Resources/views/index.html.twig @@ -1,6 +1,6 @@ {% extends '@AropixelAdmin/List/datatable.html.twig' %} -{% block header_title %}Pages{% endblock %} +{% block header_title %}Pages Administrez les pages de votre site{% endblock %} {% block header_breadcrumb %}