From 47399f083c42c93be693e122f0eef6108c6f694e Mon Sep 17 00:00:00 2001 From: Molkobain Date: Mon, 13 Mar 2023 16:24:53 +0100 Subject: [PATCH] =?UTF-8?q?N=C2=B06041=20-=20Improve=20readability=20of=20?= =?UTF-8?q?the=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/applicationextension.inc.php | 16 +- .../Bootstrap/BsFieldRendererMappings.php | 138 +++++++++--------- .../Console/ConsoleFieldRendererMappings.php | 60 ++++---- sources/Renderer/FormRenderer.php | 10 +- 4 files changed, 118 insertions(+), 106 deletions(-) diff --git a/application/applicationextension.inc.php b/application/applicationextension.inc.php index 8a8a2b7ce..ec3f9ceaa 100644 --- a/application/applicationextension.inc.php +++ b/application/applicationextension.inc.php @@ -1653,16 +1653,22 @@ abstract class AbstractPortalUIExtension implements iPortalUIExtension interface iFieldRendererMappingsExtension { /** - * @return array {string, string, string} List of field renderer mapping: FQCN field class, FQCN Form Renderer class, FQCN Field Renderer class + * @return array { + * array: { + * field: string, + * form_renderer: string, + * field_renderer: 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'], + * ['field' => 'FQCN\FieldA', 'form_renderer' => 'Combodo\iTop\Renderer\Console\ConsoleFormRenderer', 'field_renderer' => 'FQCN\FieldRendererA'], + * ['field' => 'FQCN\FieldB', 'form_renderer' => 'Combodo\iTop\Renderer\Console\ConsoleFormRenderer', 'field_renderer' => 'FQCN\FieldRendererB'], + * ['field' => 'FQCN\FieldA', 'form_renderer' => 'Combodo\iTop\Renderer\Bootstrap\BsFormRenderer', 'field_renderer' => 'FQCN\FieldRendererA'], + * ['field' => 'FQCN\FieldB', 'form_renderer' => 'Combodo\iTop\Renderer\Bootstrap\BsFormRenderer', 'field_renderer' => 'FQCN\FieldRendererB'], * ] * ``` */ diff --git a/sources/Renderer/Bootstrap/BsFieldRendererMappings.php b/sources/Renderer/Bootstrap/BsFieldRendererMappings.php index 31e46a932..5d5cc2f28 100644 --- a/sources/Renderer/Bootstrap/BsFieldRendererMappings.php +++ b/sources/Renderer/Bootstrap/BsFieldRendererMappings.php @@ -54,119 +54,119 @@ class BsFieldRendererMappings implements iFieldRendererMappingsExtension { return [ [ - HiddenField::class, - BsFormRenderer::class, - BsSimpleFieldRenderer::class, + 'field' => HiddenField::class, + 'form_renderer' => BsFormRenderer::class, + 'field_renderer' => BsSimpleFieldRenderer::class, ], [ - LabelField::class, - BsFormRenderer::class, - BsSimpleFieldRenderer::class, + 'field' => LabelField::class, + 'form_renderer' => BsFormRenderer::class, + 'field_renderer' => BsSimpleFieldRenderer::class, ], [ - PasswordField::class, - BsFormRenderer::class, - BsSimpleFieldRenderer::class, + 'field' => PasswordField::class, + 'form_renderer' => BsFormRenderer::class, + 'field_renderer' => BsSimpleFieldRenderer::class, ], [ - StringField::class, - BsFormRenderer::class, - BsSimpleFieldRenderer::class, + 'field' => StringField::class, + 'form_renderer' => BsFormRenderer::class, + 'field_renderer' => BsSimpleFieldRenderer::class, ], [ - UrlField::class, - BsFormRenderer::class, - BsSimpleFieldRenderer::class, + 'field' => UrlField::class, + 'form_renderer' => BsFormRenderer::class, + 'field_renderer' => BsSimpleFieldRenderer::class, ], [ - EmailField::class, - BsFormRenderer::class, - BsSimpleFieldRenderer::class, + 'field' => EmailField::class, + 'form_renderer' => BsFormRenderer::class, + 'field_renderer' => BsSimpleFieldRenderer::class, ], [ - PhoneField::class, - BsFormRenderer::class, - BsSimpleFieldRenderer::class, + 'field' => PhoneField::class, + 'form_renderer' => BsFormRenderer::class, + 'field_renderer' => BsSimpleFieldRenderer::class, ], [ - TextAreaField::class, - BsFormRenderer::class, - BsSimpleFieldRenderer::class, + 'field' => TextAreaField::class, + 'form_renderer' => BsFormRenderer::class, + 'field_renderer' => BsSimpleFieldRenderer::class, ], [ - CaseLogField::class, - BsFormRenderer::class, - BsSimpleFieldRenderer::class, + 'field' => CaseLogField::class, + 'form_renderer' => BsFormRenderer::class, + 'field_renderer' => BsSimpleFieldRenderer::class, ], [ - SelectField::class, - BsFormRenderer::class, - BsSimpleFieldRenderer::class, + 'field' => SelectField::class, + 'form_renderer' => BsFormRenderer::class, + 'field_renderer' => BsSimpleFieldRenderer::class, ], [ - MultipleSelectField::class, - BsFormRenderer::class, - BsSimpleFieldRenderer::class, + 'field' => MultipleSelectField::class, + 'form_renderer' => BsFormRenderer::class, + 'field_renderer' => BsSimpleFieldRenderer::class, ], [ - RadioField::class, - BsFormRenderer::class, - BsSimpleFieldRenderer::class, + 'field' => RadioField::class, + 'form_renderer' => BsFormRenderer::class, + 'field_renderer' => BsSimpleFieldRenderer::class, ], [ - CheckboxField::class, - BsFormRenderer::class, - BsSimpleFieldRenderer::class, + 'field' => CheckboxField::class, + 'form_renderer' => BsFormRenderer::class, + 'field_renderer' => BsSimpleFieldRenderer::class, ], [ - SubFormField::class, - BsFormRenderer::class, - BsSubFormFieldRenderer::class, + 'field' => SubFormField::class, + 'form_renderer' => BsFormRenderer::class, + 'field_renderer' => BsSubFormFieldRenderer::class, ], [ - SelectObjectField::class, - BsFormRenderer::class, - BsSelectObjectFieldRenderer::class, + 'field' => SelectObjectField::class, + 'form_renderer' => BsFormRenderer::class, + 'field_renderer' => BsSelectObjectFieldRenderer::class, ], [ - LinkedSetField::class, - BsFormRenderer::class, - BsLinkedSetFieldRenderer::class, + 'field' => LinkedSetField::class, + 'form_renderer' => BsFormRenderer::class, + 'field_renderer' => BsLinkedSetFieldRenderer::class, ], [ - SetField::class, - BsFormRenderer::class, - BsSetFieldRenderer::class, + 'field' => SetField::class, + 'form_renderer' => BsFormRenderer::class, + 'field_renderer' => BsSetFieldRenderer::class, ], [ - TagSetField::class, - BsFormRenderer::class, - BsSetFieldRenderer::class, + 'field' => TagSetField::class, + 'form_renderer' => BsFormRenderer::class, + 'field_renderer' => BsSetFieldRenderer::class, ], [ - DateTimeField::class, - BsFormRenderer::class, - BsSimpleFieldRenderer::class, + 'field' => DateTimeField::class, + 'form_renderer' => BsFormRenderer::class, + 'field_renderer' => BsSimpleFieldRenderer::class, ], [ - DurationField::class, - BsFormRenderer::class, - BsSimpleFieldRenderer::class, + 'field' => DurationField::class, + 'form_renderer' => BsFormRenderer::class, + 'field_renderer' => BsSimpleFieldRenderer::class, ], [ - FileUploadField::class, - BsFormRenderer::class, - BsFileUploadFieldRenderer::class, + 'field' => FileUploadField::class, + 'form_renderer' => BsFormRenderer::class, + 'field_renderer' => BsFileUploadFieldRenderer::class, ], [ - BlobField::class, - BsFormRenderer::class, - BsSimpleFieldRenderer::class, + 'field' => BlobField::class, + 'form_renderer' => BsFormRenderer::class, + 'field_renderer' => BsSimpleFieldRenderer::class, ], [ - ImageField::class, - BsFormRenderer::class, - BsSimpleFieldRenderer::class, + 'field' => ImageField::class, + 'form_renderer' => BsFormRenderer::class, + 'field_renderer' => BsSimpleFieldRenderer::class, ], ]; } diff --git a/sources/Renderer/Console/ConsoleFieldRendererMappings.php b/sources/Renderer/Console/ConsoleFieldRendererMappings.php index 41e7daaec..55e2e8c6c 100644 --- a/sources/Renderer/Console/ConsoleFieldRendererMappings.php +++ b/sources/Renderer/Console/ConsoleFieldRendererMappings.php @@ -38,54 +38,54 @@ class ConsoleFieldRendererMappings implements iFieldRendererMappingsExtension { return [ [ - HiddenField::class, - ConsoleFormRenderer::class, - ConsoleSimpleFieldRenderer::class, + 'field' => HiddenField::class, + 'form_renderer' => ConsoleFormRenderer::class, + 'field_renderer' => ConsoleSimpleFieldRenderer::class, ], [ - LabelField::class, - ConsoleFormRenderer::class, - ConsoleSimpleFieldRenderer::class, + 'field' => LabelField::class, + 'form_renderer' => ConsoleFormRenderer::class, + 'field_renderer' => ConsoleSimpleFieldRenderer::class, ], [ - StringField::class, - ConsoleFormRenderer::class, - ConsoleSimpleFieldRenderer::class, + 'field' => StringField::class, + 'form_renderer' => ConsoleFormRenderer::class, + 'field_renderer' => ConsoleSimpleFieldRenderer::class, ], [ - SelectField::class, - ConsoleFormRenderer::class, - ConsoleSimpleFieldRenderer::class, + 'field' => SelectField::class, + 'form_renderer' => ConsoleFormRenderer::class, + 'field_renderer' => ConsoleSimpleFieldRenderer::class, ], [ - TextAreaField::class, - ConsoleFormRenderer::class, - ConsoleSimpleFieldRenderer::class, + 'field' => TextAreaField::class, + 'form_renderer' => ConsoleFormRenderer::class, + 'field_renderer' => ConsoleSimpleFieldRenderer::class, ], [ - RadioField::class, - ConsoleFormRenderer::class, - ConsoleSimpleFieldRenderer::class, + 'field' => RadioField::class, + 'form_renderer' => ConsoleFormRenderer::class, + 'field_renderer' => ConsoleSimpleFieldRenderer::class, ], [ - DurationField::class, - ConsoleFormRenderer::class, - ConsoleSimpleFieldRenderer::class, + 'field' => DurationField::class, + 'form_renderer' => ConsoleFormRenderer::class, + 'field_renderer' => ConsoleSimpleFieldRenderer::class, ], [ - SelectObjectField::class, - ConsoleFormRenderer::class, - ConsoleSelectObjectFieldRenderer::class, + 'field' => SelectObjectField::class, + 'form_renderer' => ConsoleFormRenderer::class, + 'field_renderer' => ConsoleSelectObjectFieldRenderer::class, ], [ - SubFormField::class, - ConsoleFormRenderer::class, - ConsoleSubFormFieldRenderer::class, + 'field' => SubFormField::class, + 'form_renderer' => ConsoleFormRenderer::class, + 'field_renderer' => ConsoleSubFormFieldRenderer::class, ], [ - DateTimeField::class, - ConsoleFormRenderer::class, - ConsoleSimpleFieldRenderer::class, + 'field' => DateTimeField::class, + 'form_renderer' => ConsoleFormRenderer::class, + 'field_renderer' => ConsoleSimpleFieldRenderer::class, ], ]; } diff --git a/sources/Renderer/FormRenderer.php b/sources/Renderer/FormRenderer.php index 222902f75..3b4508894 100644 --- a/sources/Renderer/FormRenderer.php +++ b/sources/Renderer/FormRenderer.php @@ -61,8 +61,14 @@ abstract class FormRenderer /** @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) { + // For each mapping we need to check if it can be registered for the current form renderer or not + foreach ($aFieldRendererMappings as $aFieldRendererMapping) { + $sFieldClass = $aFieldRendererMapping['field']; + $sFormRendererClass = $aFieldRendererMapping['form_renderer']; + $sFieldRendererClass = $aFieldRendererMapping['field_renderer']; + + // Mapping not concerning current form renderer, skip it + if (false === is_a(static::class, $sFormRendererClass, true)) { continue; }