diff --git a/datamodels/2.x/itop-portal-base/portal/src/controllers/defaultcontroller.class.inc.php b/datamodels/2.x/itop-portal-base/portal/src/controllers/defaultcontroller.class.inc.php index 2f32a3688..9b9c49331 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/controllers/defaultcontroller.class.inc.php +++ b/datamodels/2.x/itop-portal-base/portal/src/controllers/defaultcontroller.class.inc.php @@ -21,6 +21,7 @@ namespace Combodo\iTop\Portal\Controller; use Silex\Application; use Symfony\Component\HttpFoundation\Request; +use Combodo\iTop\Portal\Brick\PortalBrick; class DefaultController { @@ -28,6 +29,20 @@ class DefaultController public function homeAction(Request $oRequest, Application $oApp) { $aData = array(); + + // Rendering tiles + $aData['aTilesRendering'] = array(); + foreach($oApp['combodo.portal.instance.conf']['bricks'] as $oBrick) + { + // Doing it only for tile visible on home page to avoid unnecessary rendering + if (($oBrick->GetVisibleHome() === true) && ($oBrick->GetTileControllerAction() !== null)) + { + $oController = new \Combodo\iTop\Portal\Controller\ManageBrickController($oRequest, $oApp); + $aData['aTilesRendering'][$oBrick->GetId()] = $oController->HomeAction($oRequest, $oApp); + } + } + + // Home page template $template = $oApp['combodo.portal.instance.conf']['properties']['templates']['home']; return $oApp['twig']->render($template, $aData); diff --git a/datamodels/2.x/itop-portal-base/portal/src/entities/portalbrick.class.inc.php b/datamodels/2.x/itop-portal-base/portal/src/entities/portalbrick.class.inc.php index 086ae10b5..670d93b88 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/entities/portalbrick.class.inc.php +++ b/datamodels/2.x/itop-portal-base/portal/src/entities/portalbrick.class.inc.php @@ -40,6 +40,7 @@ abstract class PortalBrick extends AbstractBrick const DEFAULT_DECORATION_CLASS_HOME = ''; const DEFAULT_DECORATION_CLASS_NAVIGATION_MENU = ''; const DEFAULT_TILE_TEMPLATE_PATH = 'itop-portal-base/portal/src/views/bricks/tile.html.twig'; + const DEFAULT_TILE_CONTROLLER_ACTION = null; static $sRouteName = null; protected $iWidth; @@ -50,6 +51,7 @@ abstract class PortalBrick extends AbstractBrick protected $sDecorationClassHome; protected $sDecorationClassNavigationMenu; protected $sTileTemplatePath; + protected $sTileControllerAction; // Vars below are itemization from parent class protected $fRankHome; protected $fRankNavigationMenu; @@ -76,6 +78,7 @@ abstract class PortalBrick extends AbstractBrick $this->sDecorationClassHome = static::DEFAULT_DECORATION_CLASS_HOME; $this->sDecorationClassNavigationMenu = static::DEFAULT_DECORATION_CLASS_NAVIGATION_MENU; $this->sTileTemplatePath = static::DEFAULT_TILE_TEMPLATE_PATH; + $this->sTileControllerAction = static::DEFAULT_TILE_CONTROLLER_ACTION; } /** @@ -188,6 +191,16 @@ abstract class PortalBrick extends AbstractBrick return $this->sTitleNavigationMenu; } + /** + * Returns the brick tile controller action + * + * @return string + */ + public function GetTileControllerAction() + { + return $this->sTileControllerAction; + } + /** * Returns the brick tile template path * @@ -330,6 +343,17 @@ abstract class PortalBrick extends AbstractBrick return $this; } + /** + * Sets the brick tile controller action + * + * @param boolean $sTileControllerAction + */ + public function SetTileControllerAction($sTileControllerAction) + { + $this->sTileControllerAction = $sTileControllerAction; + return $this; + } + /** * Load the brick's data from the xml passed as a ModuleDesignElement. * This is used to set all the brick attributes at once. diff --git a/datamodels/2.x/itop-portal-base/portal/src/views/home/layout.html.twig b/datamodels/2.x/itop-portal-base/portal/src/views/home/layout.html.twig index eaadf685d..8c94941d1 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/views/home/layout.html.twig +++ b/datamodels/2.x/itop-portal-base/portal/src/views/home/layout.html.twig @@ -27,7 +27,11 @@
{% for brick in app['combodo.portal.instance.conf'].bricks_ordering.home %} {% if brick.GetVisibleHome %} - {% include '' ~ brick.GetTileTemplatePath with {brick: brick} %} + {% if aTilesRendering[brick.GetId] is defined %} + {{ aTilesRendering[brick.GetId]|raw }} + {% else %} + {% include '' ~ brick.GetTileTemplatePath with {brick: brick} %} + {% endif %} {% endif %} {% endfor %}