From 7d01030d7c5c992ee24602cae11698545e9b61ac Mon Sep 17 00:00:00 2001 From: Molkobain Date: Thu, 9 Mar 2023 10:30:17 +0100 Subject: [PATCH] =?UTF-8?q?N=C2=B06041=20-=20Introduce=20new=20\iFieldRend?= =?UTF-8?q?ererMapping=20interface=20to=20register=20mapping=20between=20F?= =?UTF-8?q?ield=20/=20FormRenderer=20(console,=20bootstrap,=20...)=20/=20F?= =?UTF-8?q?ieldRenderer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/applicationextension.inc.php | 26 ++++++++++++++++++++++++ sources/Renderer/FormRenderer.php | 15 ++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/application/applicationextension.inc.php b/application/applicationextension.inc.php index bd8f897bc..8a8a2b7ce 100644 --- a/application/applicationextension.inc.php +++ b/application/applicationextension.inc.php @@ -1643,6 +1643,32 @@ abstract class AbstractPortalUIExtension implements iPortalUIExtension } } +/** + * Implement this interface to register a new field renderer mapping to either: + * - Add the rendering of a new attribute type + * - Overload the default rendering of an attribute type + * + * @since 3.1.0 N°6041 + */ +interface iFieldRendererMappingsExtension +{ + /** + * @return array {string, string, string} List of field renderer mapping: FQCN field class, FQCN Form Renderer class, FQCN Field Renderer class + * + * Example: + * + * ```php + * [ + * ['FQCN\FieldA', 'Combodo\iTop\Renderer\Console\ConsoleFormRenderer', 'FQCN\FieldRendererA'], + * ['FQCN\FieldB', 'Combodo\iTop\Renderer\Console\ConsoleFormRenderer', 'FQCN\FieldRendererB'], + * ['FQCN\FieldA', 'Combodo\iTop\Renderer\Bootstrap\BsFormRenderer', 'FQCN\FieldRendererA'], + * ['FQCN\FieldB', 'Combodo\iTop\Renderer\Bootstrap\BsFormRenderer', 'FQCN\FieldRendererB'], + * ] + * ``` + */ + public static function RegisterSupportedFields(): array; +} + /** * Implement this interface to add new operations to the REST/JSON web service * diff --git a/sources/Renderer/FormRenderer.php b/sources/Renderer/FormRenderer.php index cb34d9c53..222902f75 100644 --- a/sources/Renderer/FormRenderer.php +++ b/sources/Renderer/FormRenderer.php @@ -23,6 +23,8 @@ namespace Combodo\iTop\Renderer; use Exception; use Combodo\iTop\Form\Form; use Combodo\iTop\Form\Field\Field; +use iFieldRendererMappingsExtension; +use utils; /** * Description of FormRenderer @@ -52,8 +54,21 @@ abstract class FormRenderer { $this->oForm = $oForm; } + $this->aSupportedFields = []; $this->sBaseLayout = ''; $this->InitOutputs(); + + /** @var \iFieldRendererMappingsExtension $sImplementingClass */ + foreach (utils::GetClassesForInterface(iFieldRendererMappingsExtension::class, '', ['[\\\\/]lib[\\\\/]', '[\\\\/]node_modules[\\\\/]', '[\\\\/]test[\\\\/]', '[\\\\/]tests[\\\\/]']) as $sImplementingClass) { + $aFieldRendererMappings = $sImplementingClass::RegisterSupportedFields(); + foreach ($aFieldRendererMappings as list($sFieldClass, $sFormRendererClass, $sFieldRendererClass)) { + if ($sFormRendererClass !== static::class) { + continue; + } + + $this->AddSupportedField($sFieldClass, $sFieldRendererClass); + } + } } /**