Files
iTop/sources/Forms/Block/AbstractFormBlock.php
Benjamin Dalsass 5582afe5ae N°8771 - Add Symfony form component to iTop core
- add licence info
2025-10-24 06:37:22 +02:00

115 lines
2.5 KiB
PHP

<?php
/*
* @copyright Copyright (C) 2010-2025 Combodo SARL
* @license http://opensource.org/licenses/AGPL-3.0
*/
namespace Combodo\iTop\Forms\Block;
abstract class AbstractFormBlock
{
private string $sName;
private array $aOptions = [];
private array $aSubFormBlocks = [];
private array $aFormInputs = [];
private array $aFormOutputs = [];
public function __construct(string $sName, array $aOptions = [])
{
$this->sName = $sName;
$this->aOptions = $aOptions;
$this->InitInputs();
$this->InitOutputs();
}
public function GetName(){
return $this->sName;
}
public function GetOptions(): array
{
return $this->aOptions;
}
public function AddSubFormBlock(AbstractFormBlock $oSubFormBlock): AbstractFormBlock
{
$this->aSubFormBlocks[] = $oSubFormBlock;
return $this;
}
public function GetSubFormBlocks(): array
{
return $this->aSubFormBlocks;
}
public function AddInput(FormInput $oFormInput): void
{
$this->aFormInputs[$oFormInput->GetName()] = $oFormInput;
}
public function GetInput(string $sName): FormInput
{
return $this->aFormInputs[$sName];
}
public function AddOutput(FormOutput $oFormOutput): void
{
$this->aFormOutputs[$oFormOutput->GetName()] = $oFormOutput;
}
public function GetOutput(string $sName): ?FormOutput
{
return $this->aFormOutputs[$sName];
}
/**
* @param string $sInputName
* @param string $sOutputBlockName
* @param string $sOutputName
*
* @return $this
* @throws \Combodo\iTop\Forms\Block\FormBlockException
*/
public function DependsOn(string $sInputName, string $sOutputBlockName, string $sOutputName): AbstractFormBlock
{
$oFormInput = $this->GetInput($sInputName);
if (is_null($oFormInput)) {
throw new FormBlockException('Missing input ' . $sInputName . ' for ' . $this->sName);
}
$oFormInput->Connect($sOutputBlockName, $sOutputName);
return $this;
}
public function HasConnections(): bool
{
foreach ($this->aFormInputs as $oFormInput) {
if ($oFormInput->HasConnections()) {
return true;
}
}
return false;
}
public function GetConnections(): array
{
$aConnections = [];
/** @var \Combodo\iTop\Forms\Block\FormInput $oFormInput */
foreach ($this->aFormInputs as $oFormInput) {
if ($oFormInput->HasConnections()) {
$aConnections[$oFormInput->GetName()] = $oFormInput->GetConnections();
}
}
return $aConnections;
}
abstract public function GetFormType(): string;
abstract public function InitInputs(): void;
abstract public function InitOutputs(): void;
}