. */ declare(strict_types=1); namespace App\Controller; use Symfony\Component\Form\Extension\Core\Type\SubmitType; use App\Settings\AppSettings; use Jbtronics\SettingsBundle\Form\SettingsFormFactoryInterface; use Jbtronics\SettingsBundle\Manager\SettingsManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; use Symfony\Contracts\Cache\TagAwareCacheInterface; use function Symfony\Component\Translation\t; class SettingsController extends AbstractController { public function __construct(private readonly SettingsManagerInterface $settingsManager, private readonly SettingsFormFactoryInterface $settingsFormFactory) {} #[Route("/settings", name: "system_settings")] public function systemSettings(Request $request, TagAwareCacheInterface $cache): Response { $this->denyAccessUnlessGranted('@config.change_system_settings'); //Create a clone of the settings object $settings = $this->settingsManager->createTemporaryCopy(AppSettings::class); //Create a form builder for the settings object $builder = $this->settingsFormFactory->createSettingsFormBuilder($settings); //Add a submit button to the form $builder->add('submit', SubmitType::class, ['label' => 'save']); //Create the form $form = $builder->getForm(); $form->handleRequest($request); //If the form was submitted and is valid, save the settings if ($form->isSubmitted() && $form->isValid()) { $this->settingsManager->mergeTemporaryCopy($settings); $this->settingsManager->save($settings); //It might be possible, that the tree settings have changed, so clear the cache $cache->invalidateTags(['tree_tools', 'tree_treeview', 'sidebar_tree_update', 'synonyms']); $this->addFlash('success', t('settings.flash.saved')); } if ($form->isSubmitted() && !$form->isValid()) { $this->addFlash('error', t('settings.flash.invalid')); } //Render the form return $this->render('settings/settings.html.twig', [ 'form' => $form ]); } }