diff --git a/lib/composer/autoload_classmap.php b/lib/composer/autoload_classmap.php index e8f743513..87063bf75 100644 --- a/lib/composer/autoload_classmap.php +++ b/lib/composer/autoload_classmap.php @@ -542,6 +542,7 @@ return array( 'Combodo\\iTop\\Forms\\FormBuilder\\DependencyMap' => $baseDir . '/sources/Forms/FormBuilder/DependencyMap.php', 'Combodo\\iTop\\Forms\\FormBuilder\\FormBuilder' => $baseDir . '/sources/Forms/FormBuilder/FormBuilder.php', 'Combodo\\iTop\\Forms\\FormBuilder\\FormBuilderException' => $baseDir . '/sources/Forms/FormBuilder/FormBuilderException.php', + 'Combodo\\iTop\\Forms\\FormBuilder\\FormFactoryBuilderService' => $baseDir . '/sources/Forms/FormBuilder/FormFactoryBuilderService.php', 'Combodo\\iTop\\Forms\\FormBuilder\\FormHelper' => $baseDir . '/sources/Forms/FormBuilder/FormHelper.php', 'Combodo\\iTop\\Forms\\FormBuilder\\FormTypeExtension' => $baseDir . '/sources/Forms/FormBuilder/FormTypeExtension.php', 'Combodo\\iTop\\Forms\\FormBuilder\\ResolvedFormType' => $baseDir . '/sources/Forms/FormBuilder/ResolvedFormType.php', @@ -661,6 +662,7 @@ return array( 'Combodo\\iTop\\Service\\Router\\Exception\\RouteNotFoundException' => $baseDir . '/sources/Service/Router/Exception/RouteNotFoundException.php', 'Combodo\\iTop\\Service\\Router\\Exception\\RouterException' => $baseDir . '/sources/Service/Router/Exception/RouterException.php', 'Combodo\\iTop\\Service\\Router\\Router' => $baseDir . '/sources/Service/Router/Router.php', + 'Combodo\\iTop\\Service\\ServiceLocator\\NotFoundException' => $baseDir . '/sources/Service/ServiceLocator/NotFoundException.php', 'Combodo\\iTop\\Service\\ServiceLocator\\ServiceLocator' => $baseDir . '/sources/Service/ServiceLocator/ServiceLocator.php', 'Combodo\\iTop\\Service\\ServiceLocator\\ServiceLocatorException' => $baseDir . '/sources/Service/ServiceLocator/ServiceLocatorException.php', 'Combodo\\iTop\\Service\\SummaryCard\\SummaryCardService' => $baseDir . '/sources/Service/SummaryCard/SummaryCardService.php', diff --git a/lib/composer/autoload_static.php b/lib/composer/autoload_static.php index 506c3aa9f..e96f52bb2 100644 --- a/lib/composer/autoload_static.php +++ b/lib/composer/autoload_static.php @@ -928,6 +928,7 @@ class ComposerStaticInit7f81b4a2a468a061c306af5e447a9a9f 'Combodo\\iTop\\Forms\\FormBuilder\\DependencyMap' => __DIR__ . '/../..' . '/sources/Forms/FormBuilder/DependencyMap.php', 'Combodo\\iTop\\Forms\\FormBuilder\\FormBuilder' => __DIR__ . '/../..' . '/sources/Forms/FormBuilder/FormBuilder.php', 'Combodo\\iTop\\Forms\\FormBuilder\\FormBuilderException' => __DIR__ . '/../..' . '/sources/Forms/FormBuilder/FormBuilderException.php', + 'Combodo\\iTop\\Forms\\FormBuilder\\FormFactoryBuilderService' => __DIR__ . '/../..' . '/sources/Forms/FormBuilder/FormFactoryBuilderService.php', 'Combodo\\iTop\\Forms\\FormBuilder\\FormHelper' => __DIR__ . '/../..' . '/sources/Forms/FormBuilder/FormHelper.php', 'Combodo\\iTop\\Forms\\FormBuilder\\FormTypeExtension' => __DIR__ . '/../..' . '/sources/Forms/FormBuilder/FormTypeExtension.php', 'Combodo\\iTop\\Forms\\FormBuilder\\ResolvedFormType' => __DIR__ . '/../..' . '/sources/Forms/FormBuilder/ResolvedFormType.php', @@ -1047,6 +1048,7 @@ class ComposerStaticInit7f81b4a2a468a061c306af5e447a9a9f 'Combodo\\iTop\\Service\\Router\\Exception\\RouteNotFoundException' => __DIR__ . '/../..' . '/sources/Service/Router/Exception/RouteNotFoundException.php', 'Combodo\\iTop\\Service\\Router\\Exception\\RouterException' => __DIR__ . '/../..' . '/sources/Service/Router/Exception/RouterException.php', 'Combodo\\iTop\\Service\\Router\\Router' => __DIR__ . '/../..' . '/sources/Service/Router/Router.php', + 'Combodo\\iTop\\Service\\ServiceLocator\\NotFoundException' => __DIR__ . '/../..' . '/sources/Service/ServiceLocator/NotFoundException.php', 'Combodo\\iTop\\Service\\ServiceLocator\\ServiceLocator' => __DIR__ . '/../..' . '/sources/Service/ServiceLocator/ServiceLocator.php', 'Combodo\\iTop\\Service\\ServiceLocator\\ServiceLocatorException' => __DIR__ . '/../..' . '/sources/Service/ServiceLocator/ServiceLocatorException.php', 'Combodo\\iTop\\Service\\SummaryCard\\SummaryCardService' => __DIR__ . '/../..' . '/sources/Service/SummaryCard/SummaryCardService.php', diff --git a/sources/Application/Dashboard/Controller/DashboardController.php b/sources/Application/Dashboard/Controller/DashboardController.php index c74d4ece4..b49429787 100644 --- a/sources/Application/Dashboard/Controller/DashboardController.php +++ b/sources/Application/Dashboard/Controller/DashboardController.php @@ -111,7 +111,7 @@ class DashboardController extends Controller // Get the form block from the service (and the compiler) $oRequest = $this->getRequest(); $oFormBlock = $this->oFormBlockService->GetFormBlockById('DashboardGrid', 'Dashboard'); - $oBuilder = $this->GetFormBuilder($oFormBlock, $aViewData); + $oBuilder = $this->oFormFactoryBuilderService->GetFormBuilder($oFormBlock, $aViewData); $oForm = $oBuilder->getForm(); $oForm->handleRequest($oRequest); // We are in the submit action, so we submit the form with the provided values diff --git a/sources/Application/TwigBase/Controller/Controller.php b/sources/Application/TwigBase/Controller/Controller.php index 3e2126865..569f1f88f 100644 --- a/sources/Application/TwigBase/Controller/Controller.php +++ b/sources/Application/TwigBase/Controller/Controller.php @@ -30,6 +30,7 @@ use Combodo\iTop\Application\WebPage\WebPage; use Combodo\iTop\Controller\AbstractController; use Combodo\iTop\Forms\Block\AbstractFormBlock; use Combodo\iTop\Forms\Block\Base\FormBlock; +use Combodo\iTop\Forms\FormBuilder\FormFactoryBuilderService; use Combodo\iTop\Forms\Forms; use Combodo\iTop\Forms\FormType\FormTypeHelper; use Combodo\iTop\Service\InterfaceDiscovery\InterfaceDiscovery; @@ -106,8 +107,7 @@ abstract class Controller extends AbstractController /** @var Request Request (from Symfony http_foundation component @link https://symfony.com/doc/current/components/http_foundation.html) */ private Request $oRequest; - /** @var FormFactoryBuilderInterface Factory form builder (from Symfony form component @link https://symfony.com/doc/current/components/form.html) */ - private FormFactoryBuilderInterface $oFormFactoryBuilder; + protected FormFactoryBuilderService $oFormFactoryBuilderService; /** @var CsrfTokenManager Csrf manager (from Symfony form component @link https://symfony.com/doc/current/security/csrf.html) */ private CsrfTokenManager $oCsrfTokenManager; @@ -191,12 +191,10 @@ abstract class Controller extends AbstractController $this->bDebugForced = $this->oRequest->query->has('debug'); // Initialize the CSRF token manager - $this->oCsrfTokenManager = new CsrfTokenManager(); + $this->oCsrfTokenManager = MetaModel::GetService('CsrfTokenManager'); // Initialize the form factory builder to handle Request objects - $this->oFormFactoryBuilder = Forms::createFormFactoryBuilder() - ->addExtension(new HttpFoundationExtension()) - ->addExtension(new CsrfExtension($this->oCsrfTokenManager)); + $this->oFormFactoryBuilderService = MetaModel::GetService('FormFactoryBuilderService'); } /** @@ -826,23 +824,6 @@ abstract class Controller extends AbstractController return $this->oRequest; } - /** - * Get a form builder. - * This form builder can be used to create a form or to add fields to an existing form. - * - * @api - * - * @param \Combodo\iTop\Forms\Block\AbstractFormBlock $oFormBlock - * @param mixed|null $data - * - * @return \Symfony\Component\Form\FormBuilderInterface - * @since 3.3.0 - */ - public function GetFormBuilder(AbstractFormBlock $oFormBlock, mixed $data = null): FormBuilderInterface - { - return $this->oFormFactoryBuilder->getFormFactory()->createNamedBuilder($oFormBlock->GetName(), $oFormBlock->GetFormType(), $data, $oFormBlock->GetOptions()); - } - /** * @param array $aParams * @param string $sName diff --git a/sources/Application/UI/Base/Component/TurboForm/TurboFormUIBlockFactory.php b/sources/Application/UI/Base/Component/TurboForm/TurboFormUIBlockFactory.php index 6621f3a3d..2b34c80e1 100644 --- a/sources/Application/UI/Base/Component/TurboForm/TurboFormUIBlockFactory.php +++ b/sources/Application/UI/Base/Component/TurboForm/TurboFormUIBlockFactory.php @@ -62,8 +62,8 @@ class TurboFormUIBlockFactory extends AbstractUIBlockFactory { $oFormBlockService = MetaModel::GetService('FormBlockService'); $oBlockForm = $oFormBlockService->GetFormBlockById($sDashletClass, 'Dashlet'); - $oController = new FormsController(); - $oBuilder = $oController->GetFormBuilder($oBlockForm, $aData); + $oFormFactoryBuilderService = MetaModel::GetService('FormFactoryBuilderService'); + $oBuilder = $oFormFactoryBuilderService->GetFormBuilder($oBlockForm, $aData); $oForm = $oBuilder->getForm(); $oTurboForm = new TurboForm($oForm->createView(), $sId); diff --git a/sources/Forms/Controller/FormsController.php b/sources/Forms/Controller/FormsController.php index 34edf085f..aa41122fc 100644 --- a/sources/Forms/Controller/FormsController.php +++ b/sources/Forms/Controller/FormsController.php @@ -36,7 +36,7 @@ class FormsController extends Controller // Get the form block from the service (and the compiler) $oFormBlock = $this->oFormBlockService->GetFormBlockById($sDashletClass, 'Dashlet'); - $oBuilder = $this->GetFormBuilder($oFormBlock, []); + $oBuilder = $this->oFormFactoryBuilderService->GetFormBuilder($oFormBlock, []); $oForm = $oBuilder->getForm(); $oForm->handleRequest($oRequest); diff --git a/sources/Forms/FormBuilder/FormFactoryBuilderService.php b/sources/Forms/FormBuilder/FormFactoryBuilderService.php new file mode 100644 index 000000000..d346f8ddf --- /dev/null +++ b/sources/Forms/FormBuilder/FormFactoryBuilderService.php @@ -0,0 +1,55 @@ +oCsrfTokenManager = MetaModel::GetService('CsrfTokenManager'); + + // Initialize the form factory builder to handle Request objects + $this->oFormFactoryBuilder = Forms::createFormFactoryBuilder() + ->addExtension(new HttpFoundationExtension()) + ->addExtension(new CsrfExtension($this->oCsrfTokenManager)); + } + + /** + * Get a form builder. + * This form builder can be used to create a form or to add fields to an existing form. + * + * @api + * + * @param \Combodo\iTop\Forms\Block\AbstractFormBlock $oFormBlock + * @param mixed|null $data + * + * @return \Symfony\Component\Form\FormBuilderInterface + */ + public function GetFormBuilder(AbstractFormBlock $oFormBlock, mixed $data = null): FormBuilderInterface + { + return $this->oFormFactoryBuilder->getFormFactory()->createNamedBuilder($oFormBlock->GetName(), $oFormBlock->GetFormType(), $data, $oFormBlock->GetOptions()); + } +} diff --git a/sources/Service/ServiceLocator/ServiceLocator.php b/sources/Service/ServiceLocator/ServiceLocator.php index fa95fca65..4277d0bb9 100644 --- a/sources/Service/ServiceLocator/ServiceLocator.php +++ b/sources/Service/ServiceLocator/ServiceLocator.php @@ -79,7 +79,7 @@ class ServiceLocator implements ContainerInterface final public function Init(string $sRelativeConfigFileName = null): void { if (is_null($sRelativeConfigFileName)) { - $sConfigFile = APPROOT."sources/Service/ServiceLocator/service-locator-runtime-config.php"; + $sConfigFile = APPROOT."sources/Service/ServiceLocator/service-locator-runtime.php"; } else { $sConfigFile = APPROOT.$sRelativeConfigFileName; } diff --git a/sources/Service/ServiceLocator/service-locator-runtime-config.php b/sources/Service/ServiceLocator/service-locator-runtime.php similarity index 72% rename from sources/Service/ServiceLocator/service-locator-runtime-config.php rename to sources/Service/ServiceLocator/service-locator-runtime.php index 7d5cba649..9dad7bba4 100644 --- a/sources/Service/ServiceLocator/service-locator-runtime-config.php +++ b/sources/Service/ServiceLocator/service-locator-runtime.php @@ -7,8 +7,10 @@ use Combodo\iTop\Application\Dashlet\Service\DashletService; use Combodo\iTop\Forms\Block\FormBlockService; +use Combodo\iTop\Forms\FormBuilder\FormFactoryBuilderService; use Combodo\iTop\PropertyType\PropertyTypeService; use Combodo\iTop\Service\Cache\DataModelDependantCache; +use Symfony\Component\Security\Csrf\CsrfTokenManager; return [ 'ModelReflection' => ModelReflectionRuntime::class, @@ -16,4 +18,6 @@ return [ 'PropertyTypeService' => PropertyTypeService::class, 'DataModelDependantCache' => DataModelDependantCache::class, 'FormBlockService' => FormBlockService::class, + 'CsrfTokenManager' => CsrfTokenManager::class, + 'FormFactoryBuilderService' => FormFactoryBuilderService::class, ];