diff --git a/css/form-sdk/test.css b/css/form-sdk/test.css
new file mode 100644
index 000000000..90d181997
--- /dev/null
+++ b/css/form-sdk/test.css
@@ -0,0 +1,79 @@
+.layout-grow{
+ flex-grow: 1;
+}
+
+.custom-container{
+ position: relative;
+ border-radius: 10px;
+ padding: 20px;
+ /*margin-top: 25px;*/
+}
+
+.custom-container:before{
+ content: 'Custom Layout CSS';
+ font-weight: 500;
+ position: absolute;
+ left: 50%;
+ top: -10px;
+ transform: translateX(-50%);
+ /*border: 1px solid #9c21af;*/
+ background-color: white;
+ padding: 5px 15px;
+ border-radius: 10px;
+}
+
+.container-flower{
+ background-color: #f3deff;
+ background-size: 500px;
+ background-repeat: no-repeat;
+ background-position-x: right;
+ background-position-y: bottom;
+ background: linear-gradient( to right bottom, rgb(248 242 251) 50%, rgb(241 187 255) );
+}
+.container-flower fieldset{
+ position: relative;
+ z-index: 1;
+}
+.container-flower:after{
+ content: '';
+ width: 300px;
+ height: 200px;
+ background-image: url('../../sources/FormImplementation/Resources/6662396.png');
+ background-size: 300px;
+ position: absolute;
+ bottom: 0px;
+ right: 0px;
+ border-radius: 10px;
+}
+
+.container-flower .col-form-label{
+ color: #8d63b7;
+}
+.container-flower .form-layout-fieldset{
+ border: 1px solid #8d63b7;
+}
+
+.container-color{
+ position: relative;
+ border-radius: 10px;
+ padding: 20px;
+ background-color: #faf7ff;
+}
+
+.container-color .form-object-row{
+ background-color: #ebe4f6;
+ border: none;
+}
+
+
+.container-color2{
+ position: relative;
+ border-radius: 10px;
+ padding: 20px;
+ background-color: #f7f9ff;
+}
+
+.container-color2 .form-object-row{
+ background-color: #a7b4d9;
+ border: none;
+}
diff --git a/lib/composer/autoload_classmap.php b/lib/composer/autoload_classmap.php
index aefabc474..da3924076 100644
--- a/lib/composer/autoload_classmap.php
+++ b/lib/composer/autoload_classmap.php
@@ -413,6 +413,9 @@ return array(
'Combodo\\iTop\\FormSDK\\Service\\FormManager' => $baseDir . '/sources/FormSDK/Service/FormManager.php',
'Combodo\\iTop\\FormSDK\\Symfony\\SymfonyBridge' => $baseDir . '/sources/FormSDK/Symfony/SymfonyBridge.php',
'Combodo\\iTop\\FormSDK\\Symfony\\Type\\Compound\\FormObjectType' => $baseDir . '/sources/FormSDK/Symfony/Type/Compound/FormObjectType.php',
+ 'Combodo\\iTop\\FormSDK\\Symfony\\Type\\Layout\\ColumnType' => $baseDir . '/sources/FormSDK/Symfony/Type/Layout/ColumnType.php',
+ 'Combodo\\iTop\\FormSDK\\Symfony\\Type\\Layout\\FieldsetType' => $baseDir . '/sources/FormSDK/Symfony/Type/Layout/FieldsetType.php',
+ 'Combodo\\iTop\\FormSDK\\Symfony\\Type\\Layout\\RowType' => $baseDir . '/sources/FormSDK/Symfony/Type/Layout/RowType.php',
'Combodo\\iTop\\Form\\Field\\AbstractSimpleField' => $baseDir . '/sources/Form/Field/AbstractSimpleField.php',
'Combodo\\iTop\\Form\\Field\\BlobField' => $baseDir . '/sources/Form/Field/BlobField.php',
'Combodo\\iTop\\Form\\Field\\CaseLogField' => $baseDir . '/sources/Form/Field/CaseLogField.php',
diff --git a/lib/composer/autoload_static.php b/lib/composer/autoload_static.php
index fba35ca9d..3fe907901 100644
--- a/lib/composer/autoload_static.php
+++ b/lib/composer/autoload_static.php
@@ -822,6 +822,9 @@ class ComposerStaticInit7f81b4a2a468a061c306af5e447a9a9f
'Combodo\\iTop\\FormSDK\\Service\\FormManager' => __DIR__ . '/../..' . '/sources/FormSDK/Service/FormManager.php',
'Combodo\\iTop\\FormSDK\\Symfony\\SymfonyBridge' => __DIR__ . '/../..' . '/sources/FormSDK/Symfony/SymfonyBridge.php',
'Combodo\\iTop\\FormSDK\\Symfony\\Type\\Compound\\FormObjectType' => __DIR__ . '/../..' . '/sources/FormSDK/Symfony/Type/Compound/FormObjectType.php',
+ 'Combodo\\iTop\\FormSDK\\Symfony\\Type\\Layout\\ColumnType' => __DIR__ . '/../..' . '/sources/FormSDK/Symfony/Type/Layout/ColumnType.php',
+ 'Combodo\\iTop\\FormSDK\\Symfony\\Type\\Layout\\FieldsetType' => __DIR__ . '/../..' . '/sources/FormSDK/Symfony/Type/Layout/FieldsetType.php',
+ 'Combodo\\iTop\\FormSDK\\Symfony\\Type\\Layout\\RowType' => __DIR__ . '/../..' . '/sources/FormSDK/Symfony/Type/Layout/RowType.php',
'Combodo\\iTop\\Form\\Field\\AbstractSimpleField' => __DIR__ . '/../..' . '/sources/Form/Field/AbstractSimpleField.php',
'Combodo\\iTop\\Form\\Field\\BlobField' => __DIR__ . '/../..' . '/sources/Form/Field/BlobField.php',
'Combodo\\iTop\\Form\\Field\\CaseLogField' => __DIR__ . '/../..' . '/sources/Form/Field/CaseLogField.php',
diff --git a/lib/composer/installed.php b/lib/composer/installed.php
index 9a9090512..2392d0ca3 100644
--- a/lib/composer/installed.php
+++ b/lib/composer/installed.php
@@ -3,7 +3,7 @@
'name' => 'combodo/itop',
'pretty_version' => 'dev-develop',
'version' => 'dev-develop',
- 'reference' => '2bcc4d99896aab3e70ed0d7aa5f43d661b5bbeb5',
+ 'reference' => '75fde4c9a3fb4b46ae8765e961d0f590bdad199b',
'type' => 'project',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
@@ -22,7 +22,7 @@
'combodo/itop' => array(
'pretty_version' => 'dev-develop',
'version' => 'dev-develop',
- 'reference' => '2bcc4d99896aab3e70ed0d7aa5f43d661b5bbeb5',
+ 'reference' => '75fde4c9a3fb4b46ae8765e961d0f590bdad199b',
'type' => 'project',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
diff --git a/sources/FormImplementation/Helper/FormHelper.php b/sources/FormImplementation/Helper/FormHelper.php
index cc1104bf6..3dd8486c6 100644
--- a/sources/FormImplementation/Helper/FormHelper.php
+++ b/sources/FormImplementation/Helper/FormHelper.php
@@ -13,6 +13,8 @@ use Symfony\Component\Validator\Constraints\Regex;
class FormHelper
{
+ static private int $PERSON_COUNT = 5;
+
/**
* Create a sample form factory for demo purpose.
*
@@ -29,7 +31,7 @@ class FormHelper
$oFormFactory = $oFormManager->CreateFactory();
// add X person forms...
- for($i = 0 ; $i < 5 ; $i++){
+ for($i = 0 ; $i < self::$PERSON_COUNT ; $i++){
// retrieve person
$oPerson = MetaModel::GetObject('Person', $i+1);
@@ -52,7 +54,7 @@ class FormHelper
'label' => 'Tel',
'constraints' => new Regex(['pattern' => '/\+33\(\d\) \d\d \d\d \d\d \d\d/'], null, '+{33}(0) 00 00 00 00'),
'required' => false
- ], null);
+ ], '+33(6) 35 57 48 77');
// birthday - date
$oFormFactory->AddDateField('birthday', [
@@ -147,6 +149,27 @@ class FormHelper
]
], ['0', '2','4']);
+ // layout description
+ $oFormFactory->SetLayoutDescription([
+
+ 'row__1' => [
+ 'column__1' => [
+ 'css_classes' => 'custom-container container-flower layout-grow',
+ 'fieldset__1' => [ 'birthday', 'city', 'tel'],
+ ],
+ 'column__2' => [
+ 'css_classes' => 'custom-container container-color',
+ 'fieldset__2' => ['mode', 'interval', 'Person_2'],
+ ],
+
+ ],
+ 'row__2' => [
+ 'css_classes' => 'custom-container container-color2',
+ 'fieldset__1' => [ 'Person_1', 'Person_3'],
+ 'fieldset__2' => [ 'Person_1_name'],
+ ]
+ ]);
+
return $oFormFactory;
}
diff --git a/sources/FormImplementation/Resources/6662396.jpg b/sources/FormImplementation/Resources/6662396.jpg
new file mode 100644
index 000000000..68cb1509c
Binary files /dev/null and b/sources/FormImplementation/Resources/6662396.jpg differ
diff --git a/sources/FormImplementation/Resources/6662396.png b/sources/FormImplementation/Resources/6662396.png
new file mode 100644
index 000000000..6c0055715
Binary files /dev/null and b/sources/FormImplementation/Resources/6662396.png differ
diff --git a/sources/FormSDK/Service/FactoryAdapter/FormFactoryObjectAdapter.php b/sources/FormSDK/Service/FactoryAdapter/FormFactoryObjectAdapter.php
index 6862d76c6..b86f95a56 100644
--- a/sources/FormSDK/Service/FactoryAdapter/FormFactoryObjectAdapter.php
+++ b/sources/FormSDK/Service/FactoryAdapter/FormFactoryObjectAdapter.php
@@ -136,7 +136,21 @@ final class FormFactoryObjectAdapter implements FormFactoryAdapterInterface
*/
private function GetAttributeName(string $sAttributeCode) : string
{
- return $this->bGroup ? $sAttributeCode : $this->GetIdentifier() . '-' . $sAttributeCode;
+ return $this->bGroup ? $sAttributeCode : $this->GetIdentifier() . '_' . $sAttributeCode;
+ }
+
+ public function GetLayoutDescription()
+ {
+ return [
+ 'row__1' => [
+ 'column__1' => [
+ 'fieldset__1' => [ 'name'],
+ ],
+ 'column__2' => [
+ 'fieldset__2' => ['mobile_phone'],
+ ],
+ ],
+ ];
}
/** @inheritdoc */
diff --git a/sources/FormSDK/Service/FormFactoryBuilderTrait.php b/sources/FormSDK/Service/FormFactoryBuilderTrait.php
index a9179660e..cc621be25 100644
--- a/sources/FormSDK/Service/FormFactoryBuilderTrait.php
+++ b/sources/FormSDK/Service/FormFactoryBuilderTrait.php
@@ -56,6 +56,7 @@ trait FormFactoryBuilderTrait
*/
public function AddNumberField(string $sKey, array $aOptions, mixed $oData = null) : FormFactory
{
+// $aOptions['property_path'] = $sKey;
$this->aFieldsDescriptions[$sKey] = new FormFieldDescription($sKey, FormFieldTypeEnumeration::NUMBER, $aOptions);
$this->aFieldsData[$sKey] = $oData;
@@ -104,7 +105,6 @@ trait FormFactoryBuilderTrait
return $this;
}
-
/**
* Add duration field.
*
diff --git a/symfony/.env b/symfony/.env
index c4cb030ca..74f5e24f5 100644
--- a/symfony/.env
+++ b/symfony/.env
@@ -15,6 +15,6 @@
# https://symfony.com/doc/current/best_practices.html#use-environment-variables-for-infrastructure-configuration
###> symfony/framework-bundle ###
-#APP_ENV=dev
+APP_ENV=dev
#APP_SECRET=extracted from iTop general configuration in ./symfony/packages/itop_configuration_bridge.php
###< symfony/framework-bundle ###
diff --git a/templates/base.html.twig b/templates/base.html.twig
index 7e9085890..25795248a 100644
--- a/templates/base.html.twig
+++ b/templates/base.html.twig
@@ -11,6 +11,7 @@
{# internal #}
+
{% block stylesheets %}
{% endblock %}
{# lib #}