mirror of
https://github.com/Combodo/iTop.git
synced 2026-02-13 07:24:13 +01:00
N°7995 - Allow to redefine portal twig template for all bricks in a portal (#686)
* N°7995 - Allow to redefine portal twig template for all bricks in a portal * Apply modifications from code review * Fix variable name * Apply changes from code review
This commit is contained in:
@@ -659,4 +659,38 @@ abstract class AbstractBrick
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load brick configuration that is not part of the brick definition but is part of the portal global properties.
|
||||
*
|
||||
* @param $aPortalProperties
|
||||
*
|
||||
* @return void
|
||||
* @throws \DOMFormatException
|
||||
* @since 3.2.1
|
||||
*/
|
||||
public function LoadFromPortalProperties($aPortalProperties)
|
||||
{
|
||||
// Get the bricks templates
|
||||
$aBricksTemplates = $aPortalProperties['templates']['bricks'];
|
||||
$sClassFQCN = get_class($this);
|
||||
|
||||
// Get the current brick templates
|
||||
$aCurrentBricksTemplates = array_key_exists($sClassFQCN, $aBricksTemplates) ? $aBricksTemplates[$sClassFQCN] : [];
|
||||
foreach($aCurrentBricksTemplates as $sTemplateKey => $sTemplate) {
|
||||
// Clean the template id
|
||||
$sTemplateId = str_ireplace($sClassFQCN.':', '', $sTemplateKey);
|
||||
|
||||
// Call the set method for the template
|
||||
$sSetTemplateMethodName = 'Set'.$sTemplateId.'TemplatePath';
|
||||
|
||||
if(method_exists($this, $sSetTemplateMethodName)) {
|
||||
$this->{$sSetTemplateMethodName}($sTemplate);
|
||||
}
|
||||
else {
|
||||
throw new DOMFormatException(
|
||||
'Template "'.$sTemplateId.'" is not a valid template for brick ' . $sClassFQCN,
|
||||
null, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@ namespace Combodo\iTop\Portal\Brick;
|
||||
|
||||
use DOMFormatException;
|
||||
use Exception;
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
use UserRights;
|
||||
use ModuleDesign;
|
||||
use Combodo\iTop\Portal\Helper\ApplicationHelper;
|
||||
@@ -47,15 +48,21 @@ class BrickCollection
|
||||
private $aHomeOrdering;
|
||||
/** @var array $aNavigationMenuOrdering */
|
||||
private $aNavigationMenuOrdering;
|
||||
/** @var \array $aCombodoPortalInstanceConf
|
||||
* @since 3.2.1
|
||||
*/
|
||||
private $aCombodoPortalInstanceConf;
|
||||
|
||||
/**
|
||||
* BrickCollection constructor.
|
||||
*
|
||||
* @param \ModuleDesign $oModuleDesign
|
||||
* @param $aCombodoPortalInstanceConf
|
||||
*
|
||||
* @throws \Exception
|
||||
* @since 3.2.1 Added $aCombodoPortalInstanceConf parameter
|
||||
*/
|
||||
public function __construct(ModuleDesign $oModuleDesign)
|
||||
public function __construct(ModuleDesign $oModuleDesign, $aCombodoPortalInstanceConf)
|
||||
{
|
||||
$this->oModuleDesign = $oModuleDesign;
|
||||
$this->aAllowedBricks = null;
|
||||
@@ -63,6 +70,7 @@ class BrickCollection
|
||||
$this->iDisplayedInNavigationMenu = 0;
|
||||
$this->aHomeOrdering = array();
|
||||
$this->aNavigationMenuOrdering = array();
|
||||
$this->aCombodoPortalInstanceConf = $aCombodoPortalInstanceConf;
|
||||
|
||||
$this->Load();
|
||||
}
|
||||
@@ -196,6 +204,11 @@ class BrickCollection
|
||||
{
|
||||
/** @var \Combodo\iTop\Portal\Brick\PortalBrick $oBrick */
|
||||
$oBrick = new $sBrickClass();
|
||||
|
||||
// Load the portal properties that are common to all bricks of this type
|
||||
$oBrick->LoadFromPortalProperties($this->aCombodoPortalInstanceConf['properties']);
|
||||
|
||||
// Load the brick specific properties from its XML definition
|
||||
$oBrick->LoadFromXml($oBrickNode);
|
||||
|
||||
$aBricks[] = $oBrick;
|
||||
|
||||
@@ -85,6 +85,7 @@ class Basic extends AbstractConfiguration
|
||||
'templates' => array(
|
||||
'layout' => 'itop-portal-base/portal/templates/layout.html.twig',
|
||||
'home' => 'itop-portal-base/portal/templates/home/layout.html.twig',
|
||||
'bricks' => array(),
|
||||
),
|
||||
'urlmaker_class' => null,
|
||||
'triggers_query' => null,
|
||||
@@ -185,6 +186,14 @@ class Basic extends AbstractConfiguration
|
||||
$aPortalConf['properties']['templates'][$sNodeId] = $oSubNode->GetText(null);
|
||||
break;
|
||||
default:
|
||||
// Try to accept the value as a global brick template, brick id format is "FQCN:page"
|
||||
[$sBrickFQCN, $sPage] = explode(':', $sNodeId);
|
||||
if (utils::IsNotNullOrEmptyString($sBrickFQCN) && utils::IsNotNullOrEmptyString($sPage))
|
||||
{
|
||||
$aPortalConf['properties']['templates']['bricks'][$sBrickFQCN][$sPage] = $oSubNode->GetText(null);
|
||||
break;
|
||||
}
|
||||
|
||||
throw new DOMFormatException(
|
||||
'Value "'.$sNodeId.'" is not handled for template[@id]',
|
||||
null, null, $oSubNode
|
||||
|
||||
Reference in New Issue
Block a user