create($node->getMenu()); $form = $this->createForm(EntityType::class, $entity); if ($request->isMethod('POST')) { $form->handleRequest($request); if ($form->isValid()) { $position = $form->get('position')->getData(); $parent = 'above' === $position ? $node : $node->getParent(); $entity->setParent($parent); if ('above' === $position) { $nodeRepository->persistAsLastChild($entity, $node); $entityManager->flush(); } else { if ('after' === $position) { $nodeRepository->persistAsNextSiblingOf($entity, $node); } elseif ('before' === $position) { $nodeRepository->persistAsPrevSiblingOf($entity, $node); } $entityManager->flush(); } $this->addFlash('success', 'Donnée enregistrée.'); } else { $this->addFlash('warning', 'Le formulaire est invalide.'); } return $this->redirectToRoute('admin_site_tree_navigation', [ 'navigation' => $node->getMenu()->getNavigation()->getId(), ]); } return $this->render('site/node_admin/new.html.twig', [ 'form' => $form->createView(), 'node' => $node, 'entity' => $entity, ]); } /** * @Route("/move/{entity}", name="admin_site_node_move") */ public function move( Entity $entity, EntityManager $entityManager, NodeRepository $nodeRepository, Request $request ): Response { $form = $this->createForm(NodeMoveType::class, null, [ 'menu' => $entity->getMenu(), ]); if ($request->isMethod('POST')) { $form->handleRequest($request); if ($form->get('node')->getData()->getId() === $entity->getId()) { $form->get('node')->addError(new FormError('Élement de référence invalide.')); } if ($form->isValid()) { $position = $form->get('position')->getData(); $node = $form->get('node')->getData(); $parent = 'above' === $position ? $node : $node->getParent(); $entity->setParent($parent); if ('above' === $position) { $nodeRepository->persistAsLastChild($entity, $node); $entityManager->flush(); } else { if ('after' === $position) { $nodeRepository->persistAsNextSiblingOf($entity, $node); } elseif ('before' === $position) { $nodeRepository->persistAsPrevSiblingOf($entity, $node); } $entityManager->flush(); } $this->addFlash('success', 'Donnée enregistrée.'); } else { $this->addFlash('warning', 'Le formulaire est invalide.'); } return $this->redirectToRoute('admin_site_tree_navigation', [ 'navigation' => $entity->getMenu()->getNavigation()->getId(), ]); } return $this->render('site/node_admin/move.html.twig', [ 'form' => $form->createView(), 'entity' => $entity, ]); } /** * @Route("/toggle/visibility/{entity}", name="admin_site_node_toggle_visibility", methods={"POST"}) */ public function toggleVisibility(Entity $entity, EntityManager $entityManager, Request $request): Response { if ($this->isCsrfTokenValid('toggle_visibility'.$entity->getId(), $request->request->get('_token'))) { $entity->setIsVisible(!$entity->getIsVisible()); $entityManager->update($entity); $this->addFlash('success', 'Donnée enregistrée.'); } return $this->redirectToRoute('admin_site_tree_navigation', [ 'navigation' => $entity->getMenu()->getNavigation()->getId(), ]); } /** * @Route("/delete/{entity}", name="admin_site_node_delete", methods={"DELETE"}) */ public function delete( Entity $entity, NodeRepository $nodeRepository, EventDispatcherInterface $eventDispatcher, Request $request ): Response { if ($this->isCsrfTokenValid('delete'.$entity->getId(), $request->request->get('_token'))) { $eventDispatcher->dispatch(new EntityManagerEvent($entity), EntityManagerEvent::PRE_DELETE_EVENT); $nodeRepository->removeFromTree($entity); $nodeRepository->reorder($entity->getMenu()->getRootNode()); $eventDispatcher->dispatch(new EntityManagerEvent($entity), EntityManagerEvent::DELETE_EVENT); $this->addFlash('success', 'Donnée supprimée.'); } return $this->redirectToRoute('admin_site_tree_navigation', [ 'navigation' => $entity->getMenu()->getNavigation()->getId(), ]); } public function getSection(): string { return ''; } }