diff --git a/CHANGELOG.md b/CHANGELOG.md index 6ea8bf5..2f0be78 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ * feat(collection): add delete_attr, add_attr options * feat(builder): allow to add block between children * feat(builder): improve UI to add new block +* feat(settings): allow to edit a setting in plain page ## [v1.26.0] - 2025-03-17 ### Added diff --git a/src/core/Controller/Setting/NavigationSettingAdminController.php b/src/core/Controller/Setting/NavigationSettingAdminController.php index 4a3be8f..74bbb68 100644 --- a/src/core/Controller/Setting/NavigationSettingAdminController.php +++ b/src/core/Controller/Setting/NavigationSettingAdminController.php @@ -35,6 +35,8 @@ class NavigationSettingAdminController extends AdminController $session = $request->getSession(); $lastRequestId = sprintf('setting_request_%s_%s', get_class($entity), $entity->getId()); $lastRequest = $session->get($lastRequestId); + $options = $entity->getOptions(); + $optionView = $options['view'] ?? 'modal'; if (null !== $lastRequest && !$request->isMethod('POST')) { $fakeRequest = Request::create( @@ -64,17 +66,19 @@ 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()) - )); + if ($optionView === 'modal') { + 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'], + 'options' => $options, 'redirectTo' => $redirectTo, ]); } diff --git a/src/core/Controller/Setting/SettingAdminController.php b/src/core/Controller/Setting/SettingAdminController.php index 317fe77..707a19e 100644 --- a/src/core/Controller/Setting/SettingAdminController.php +++ b/src/core/Controller/Setting/SettingAdminController.php @@ -55,6 +55,8 @@ class SettingAdminController extends AdminController $session = $request->getSession(); $lastRequestId = sprintf('setting_request_%s_%s', get_class($entity), $entity->getId()); $lastRequest = $session->get($lastRequestId); + $options = $entity->getOptions(); + $optionView = $options['view'] ?? 'modal'; if (null !== $lastRequest && !$request->isMethod('POST')) { $fakeRequest = Request::create( @@ -82,11 +84,13 @@ class SettingAdminController 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()) - )); + if ($optionView === 'modal') { + return $this->redirect(sprintf( + '%s?data-modal=%s', + $redirectTo, + urlencode($request->getUri()) + )); + } } return $this->render('@Core/setting/setting_admin/edit.html.twig', [ diff --git a/src/core/Entity/NavigationSetting.php b/src/core/Entity/NavigationSetting.php index bfaa2ac..8adfb36 100644 --- a/src/core/Entity/NavigationSetting.php +++ b/src/core/Entity/NavigationSetting.php @@ -26,6 +26,9 @@ class NavigationSetting implements EntityInterface #[ORM\Column(type: 'text', nullable: true)] protected $value; + #[ORM\Column(type: 'text', nullable: true)] + protected $options; + #[ORM\ManyToOne(targetEntity: Navigation::class, inversedBy: 'navigationSettings')] #[ORM\JoinColumn(nullable: false, onDelete: 'CASCADE')] protected $navigation; @@ -94,4 +97,16 @@ class NavigationSetting implements EntityInterface return $this; } + + public function getOptions() + { + return json_decode($this->options, true) ?? []; + } + + public function setOptions(?array $options): self + { + $this->options = json_encode($options ?? []); + + return $this; + } } diff --git a/src/core/Entity/Setting.php b/src/core/Entity/Setting.php index d4a1036..032e74a 100644 --- a/src/core/Entity/Setting.php +++ b/src/core/Entity/Setting.php @@ -25,6 +25,9 @@ class Setting implements EntityInterface #[ORM\Column(type: 'text', nullable: true)] protected $value; + #[ORM\Column(type: 'text', nullable: true)] + protected $options; + public function getId(): ?int { return $this->id; @@ -77,4 +80,16 @@ class Setting implements EntityInterface return $this; } + + public function getOptions() + { + return json_decode($this->options, true) ?? []; + } + + public function setOptions(?array $options): self + { + $this->options = json_encode($options ?? []); + + return $this; + } } diff --git a/src/core/Resources/views/admin/layout.html.twig b/src/core/Resources/views/admin/layout.html.twig index f6195ed..fd97838 100644 --- a/src/core/Resources/views/admin/layout.html.twig +++ b/src/core/Resources/views/admin/layout.html.twig @@ -1,4 +1,5 @@ {% apply spaceless %} +{% block html %}
@@ -62,4 +63,5 @@ {% endblock %} +{% endblock %} {% endapply %} 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 6e7c2a3..52a9aff 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 @@ -1,20 +1,77 @@ - +{% extends '@Core/admin/layout.html.twig' %} +{% set view = entity.options['view']|default('modal') %} + +{% block html %} + {% if view == 'modal' %} + + {% else %} + {{ parent() }} + {% endif %} +{% endblock %} + +{% block body_class %}has-form{% endblock %} + +{% block title %}{{ entity.label }}{% endblock %} + +{% block body %} + {% block header %} +