diff --git a/src/core/Controller/Setting/NavigationSettingAdminController.php b/src/core/Controller/Setting/NavigationSettingAdminController.php index ec2e141..bc431f6 100644 --- a/src/core/Controller/Setting/NavigationSettingAdminController.php +++ b/src/core/Controller/Setting/NavigationSettingAdminController.php @@ -31,11 +31,28 @@ class NavigationSettingAdminController extends AdminController $eventDispatcher->dispatch($event, NavigationSettingEvent::FORM_INIT_EVENT); $form = $builder->getForm(); + $redirectTo = $request->query->get('redirectTo'); + $session = $request->getSession(); + $lastRequestId = sprintf('setting_request_%s_%s', get_class($entity), $entity->getId()); + $lastRequest = $session->get($lastRequestId); + + if ($lastRequest !== null && !$request->isMethod('POST')) { + $fakeRequest = Request::create( + uri: $request->getUri(), + method: 'POST', + parameters: [$form->getName() => $lastRequest] + ); + + $form->handleRequest($fakeRequest); + $session->remove($lastRequestId); + } if ($request->isMethod('POST')) { $form->handleRequest($request); if ($form->isValid()) { + $entityManager->update($entity); + $session->remove($lastRequestId); $entityManager->update($entity); $this->addFlash('success', 'The data has been saved.'); @@ -44,13 +61,21 @@ class NavigationSettingAdminController extends AdminController ]); } + $session->set($lastRequestId, $request->request->get('form')); $this->addFlash('warning', 'The form is not valid.'); + + return $this->redirect(sprintf( + '%s?data-modal=%s', + $redirectTo, + urlencode($request->getUri()) + )); } return $this->render('@Core/setting/navigation_setting_admin/edit.html.twig', [ 'form' => $form->createView(), 'entity' => $entity, 'options' => $event->getData()['options'], + 'redirectTo' => $redirectTo, ]); } diff --git a/src/core/Controller/Setting/SettingAdminController.php b/src/core/Controller/Setting/SettingAdminController.php index a795f32..91f0490 100644 --- a/src/core/Controller/Setting/SettingAdminController.php +++ b/src/core/Controller/Setting/SettingAdminController.php @@ -51,24 +51,49 @@ class SettingAdminController extends AdminController $eventDispatcher->dispatch($event, SettingEvent::FORM_INIT_EVENT); $form = $builder->getForm(); + $redirectTo = $request->query->get('redirectTo'); + $session = $request->getSession(); + $lastRequestId = sprintf('setting_request_%s_%s', get_class($entity), $entity->getId()); + $lastRequest = $session->get($lastRequestId); + + if ($lastRequest !== null && !$request->isMethod('POST')) { + $fakeRequest = Request::create( + uri: $request->getUri(), + method: 'POST', + parameters: [$form->getName() => $lastRequest] + ); + + $form->handleRequest($fakeRequest); + $session->remove($lastRequestId); + } if ($request->isMethod('POST')) { $form->handleRequest($request); if ($form->isValid()) { + $entityManager->update($entity); + $session->remove($lastRequestId); $entityManager->update($entity); $this->addFlash('success', 'The data has been saved.'); return $this->redirectToRoute('admin_setting_index'); } + $session->set($lastRequestId, $request->request->get('form')); $this->addFlash('warning', 'The form is not valid.'); + + return $this->redirect(sprintf( + '%s?data-modal=%s', + $redirectTo, + urlencode($request->getUri()) + )); } return $this->render('@Core/setting/setting_admin/edit.html.twig', [ 'form' => $form->createView(), 'entity' => $entity, 'options' => $event->getData()['options'], + 'redirectTo' => $redirectTo, ]); } diff --git a/src/core/Resources/views/admin/crud/inline_edit.html.twig b/src/core/Resources/views/admin/crud/inline_edit.html.twig index 6cf7401..1c2e218 100644 --- a/src/core/Resources/views/admin/crud/inline_edit.html.twig +++ b/src/core/Resources/views/admin/crud/inline_edit.html.twig @@ -7,7 +7,7 @@ diff --git a/src/core/Resources/views/setting/navigation_setting_admin/edit.html.twig b/src/core/Resources/views/setting/navigation_setting_admin/edit.html.twig index 4a05a3a..6e7c2a3 100644 --- a/src/core/Resources/views/setting/navigation_setting_admin/edit.html.twig +++ b/src/core/Resources/views/setting/navigation_setting_admin/edit.html.twig @@ -7,7 +7,7 @@ diff --git a/src/core/Resources/views/setting/setting_admin/edit.html.twig b/src/core/Resources/views/setting/setting_admin/edit.html.twig index c134587..4bce97d 100644 --- a/src/core/Resources/views/setting/setting_admin/edit.html.twig +++ b/src/core/Resources/views/setting/setting_admin/edit.html.twig @@ -7,7 +7,7 @@ diff --git a/src/core/Resources/views/setting/setting_admin/index.html.twig b/src/core/Resources/views/setting/setting_admin/index.html.twig index 19110cc..7bf6c28 100644 --- a/src/core/Resources/views/setting/setting_admin/index.html.twig +++ b/src/core/Resources/views/setting/setting_admin/index.html.twig @@ -22,11 +22,11 @@ {% for item in pager %} - {% set edit = path('admin_setting_edit', {entity: item.id}) %} + {% set edit = path('admin_setting_edit', {entity: item.id, redirectTo: app.request.pathInfo}) %} - + {{ item.label|trans }} @@ -34,7 +34,7 @@ {{ item.section|trans }} - +