mirror of
https://github.com/Combodo/iTop.git
synced 2026-04-23 02:28:44 +02:00
N°6041 - Introduce new \iFieldRendererMapping interface to register mapping between Field / FormRenderer (console, bootstrap, ...) / FieldRenderer
This commit is contained in:
@@ -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
|
||||
*
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user