Add UIBlocks to twig (generic parser and node)

# Conflicts:
#	pages/run_query.php
#	test/VisualTest/Backoffice/RenderAllUiBlocks.php
This commit is contained in:
Eric
2021-01-18 12:09:07 +01:00
parent 2aae6cd744
commit 21740123f4
59 changed files with 712 additions and 1182 deletions

View File

@@ -8,31 +8,40 @@
namespace Combodo\iTop\Application\TwigBase\UI;
use Combodo\iTop\Application\TwigBase\UI\Component\UIAlertParser;
use Combodo\iTop\Application\TwigBase\UI\Component\UIContentBlockParser;
use Combodo\iTop\Application\TwigBase\UI\Component\UIDataTableParser;
use Combodo\iTop\Application\TwigBase\UI\Component\UIFieldParser;
use Combodo\iTop\Application\TwigBase\UI\Component\UIFieldSetParser;
use Combodo\iTop\Application\TwigBase\UI\Component\UIFormParser;
use Combodo\iTop\Application\TwigBase\UI\Component\UIHtmlParser;
use Combodo\iTop\Application\TwigBase\UI\Component\UIInputParser;
use Combodo\iTop\Application\TwigBase\UI\Component\UITitleParser;
use Exception;
use ReflectionClass;
use Twig\Extension\AbstractExtension;
class UIBlockExtension extends AbstractExtension
{
private static $aFactoryClasses = null;
public function getTokenParsers()
{
return [
new UIHtmlParser(),
new UIContentBlockParser(),
new UIFieldSetParser(),
new UIFieldParser(),
new UIAlertParser(),
new UITitleParser(),
new UIDataTableParser(),
new UIFormParser(),
new UIInputParser(),
];
$aParsers = [new UIHtmlParser()];
$aClassMap = include APPROOT.'lib/composer/autoload_classmap.php';
if (is_null(self::$aFactoryClasses)) {
self::$aFactoryClasses = [];
$sInterface = "Combodo\\iTop\\Application\\UI\\Base\\iUIBlockFactory";
foreach ($aClassMap as $sPHPClass => $sPHPFile) {
if (strpos($sPHPClass, 'UIBlockFactory') !== false) {
try {
$oRefClass = new ReflectionClass($sPHPClass);
if ($oRefClass->implementsInterface($sInterface) && $oRefClass->isInstantiable()) {
self::$aFactoryClasses[] = $sPHPClass;
}
} catch (Exception $e) {
}
}
}
}
foreach (self::$aFactoryClasses as $sFactoryClass) {
$aParsers[] = new UIBlockParser($sFactoryClass);
}
return $aParsers;
}
}