N°8772 - Form dependencies manager implementation

- Form SDK implementation
- Basic Forms
- Dynamics Forms
- Basic Blocks + Data Model Block
- Form Compilation
- Turbo integration
This commit is contained in:
Benjamin Dalsass
2025-12-30 11:42:55 +01:00
committed by GitHub
parent 3955b4eb22
commit 4c1ad0f4f2
813 changed files with 115243 additions and 489 deletions

View File

@@ -0,0 +1,70 @@
<?php
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
namespace Combodo\iTop\Application\UI\Base\Component\TurboForm;
use Combodo\iTop\Application\UI\Base\Layout\UIContentBlock;
use Symfony\Component\Form\FormView;
class TurboForm extends UIContentBlock
{
// Overloaded constants
public const BLOCK_CODE = 'ibo-form';
public const DEFAULT_HTML_TEMPLATE_REL_PATH = 'base/components/turbo-form/layout';
/** @var string|null */
protected ?string $sOnSubmitJsCode;
/** @var string|null */
protected ?string $sAction;
private FormView $oFormView;
public function __construct(FormView $oFormView, string $sId = null)
{
parent::__construct($sId);
$this->oFormView = $oFormView;
$this->sOnSubmitJsCode = null;
$this->sAction = null;
}
public function SetOnSubmitJsCode(string $sJsCode)
{
$this->sOnSubmitJsCode = $sJsCode;
return $this;
}
/**
* @return string
*/
public function GetOnSubmitJsCode(): ?string
{
return $this->sOnSubmitJsCode;
}
/**
* @return string|null
*/
public function GetAction(): ?string
{
return $this->sAction;
}
/**
* @param string $sAction
*
* @return TurboForm
*/
public function SetAction(string $sAction): TurboForm
{
$this->sAction = $sAction;
return $this;
}
public function GetFormView(): FormView
{
return $this->oFormView;
}
}

View File

@@ -0,0 +1,72 @@
<?php
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
namespace Combodo\iTop\Application\UI\Base\Component\TurboForm;
use Combodo\iTop\Application\UI\Base\AbstractUIBlockFactory;
use Combodo\iTop\Forms\Block\FormBlockService;
use Combodo\iTop\Forms\Controller\FormsController;
use Symfony\Component\Form\FormView;
use utils;
/**
* Class TurboFormUIBlockFactory
*
* @api
* @since 3.3.0
* @package UIBlockAPI
*/
class TurboFormUIBlockFactory extends AbstractUIBlockFactory
{
/** @inheritDoc */
public const TWIG_TAG_NAME = 'UITurboForm';
/** @inheritDoc */
public const UI_BLOCK_CLASS_NAME = TurboForm::class;
/**
* @api
*
* @param \Symfony\Component\Form\FormView $oFormView
* @param string|null $sAction
* @param string|null $sId
*
* @return \Combodo\iTop\Application\UI\Base\Component\TurboForm\TurboForm An HTML form in which you can add UIBlocks
*/
public static function MakeStandard(FormView $oFormView, string $sAction = null, string $sId = null): TurboForm
{
$oTurboForm = new TurboForm($oFormView, $sId);
if (!is_null($sAction)) {
$oTurboForm->setAction($sAction);
}
return $oTurboForm;
}
/**
* For dashlet configuration forms
*
* @api
*
* @param string $sDashletId
* @param string|null $sId
*
* @return \Combodo\iTop\Application\UI\Base\Component\TurboForm\TurboForm
* @throws \Combodo\iTop\Forms\Block\FormBlockException
*/
public static function MakeForDashletConfiguration(string $sDashletId, array $aData = [], string $sId = null): TurboForm
{
$oBlockForm = FormBlockService::GetInstance()->GetFormBlockById($sDashletId, 'Dashlet');
$oController = new FormsController();
$oBuilder = $oController->GetFormBuilder($oBlockForm, $aData);
$oForm = $oBuilder->getForm();
$oTurboForm = new TurboForm($oForm->createView(), $sId);
$oTurboForm->SetAction(utils::GetAbsoluteUrlAppRoot().'pages/UI.php?route=forms.dashlet_configuration&dashlet_code='.urlencode($sDashletId));
return $oTurboForm;
}
}

View File

@@ -0,0 +1,35 @@
<?php
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
namespace Combodo\iTop\Application\UI\Base\Component\TurboUpdate;
use Combodo\iTop\Application\UI\Base\Layout\UIContentBlock;
class TurboStream extends UIContentBlock
{
// Overloaded constants
public const DEFAULT_HTML_TEMPLATE_REL_PATH = 'base/components/turbo-stream/layout';
private string $sTarget;
private string $sAction;
public function __construct(string $sTarget, string $sAction, string $sId = null)
{
parent::__construct($sId);
$this->sTarget = $sTarget;
$this->sAction = $sAction;
}
public function GetTarget(): string
{
return $this->sTarget;
}
public function GetAction(): string
{
return $this->sAction;
}
}

View File

@@ -0,0 +1,77 @@
<?php
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
namespace Combodo\iTop\Application\UI\Base\Component\TurboUpdate;
use Combodo\iTop\Application\UI\Base\AbstractUIBlockFactory;
/**
* Class TurboUpdateUIBlockFactory
*
* @api
* @since 3.3.0
* @package UIBlockAPI
*/
class TurboStreamUIBlockFactory extends AbstractUIBlockFactory
{
/** @inheritDoc */
public const TWIG_TAG_NAME = 'UITurboStream';
/** @inheritDoc */
public const UI_BLOCK_CLASS_NAME = TurboStream::class;
/**
* @api
*
* @param string $sTarget Id of the block to update
* @param string|null $sId
*
* @return \Combodo\iTop\Application\UI\Base\Component\TurboUpdate\TurboStream An HTML form in which you can add UIBlocks
*/
public static function MakeUpdate(string $sTarget, string $sId = null): TurboStream
{
return new TurboStream($sTarget, 'update', $sId);
}
/**
* @api
*
* @param string $sTarget Id of the block to update
* @param string|null $sId
*
* @return \Combodo\iTop\Application\UI\Base\Component\TurboUpdate\TurboStream An HTML form in which you can add UIBlocks
*/
public static function MakeReplace(string $sTarget, string $sId = null): TurboStream
{
return new TurboStream($sTarget, 'replace', $sId);
}
/**
* @api
*
* @param string $sTarget Id of the block to update
* @param string|null $sId
*
* @return \Combodo\iTop\Application\UI\Base\Component\TurboUpdate\TurboStream An HTML form in which you can add UIBlocks
*/
public static function MakePrepend(string $sTarget, string $sId = null): TurboStream
{
return new TurboStream($sTarget, 'prepend', $sId);
}
/**
* @api
*
* @param string $sTarget Id of the block to update
* @param string|null $sId
*
* @return \Combodo\iTop\Application\UI\Base\Component\TurboUpdate\TurboStream An HTML form in which you can add UIBlocks
*/
public static function MakeAppend(string $sTarget, string $sId = null): TurboStream
{
return new TurboStream($sTarget, 'append', $sId);
}
}