Просмотр исходного кода

Customer portal : Added possibility to give a controller action for a brick tile. This allows to use some logic in order to make a specific render relying for example on DB dataobjects

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@4300 a333f486-631f-4898-b8df-5754b55c2be0
glajarige 9 лет назад
Родитель
Сommit
1d25adc7d6

+ 11 - 2
datamodels/2.x/itop-portal-base/portal/src/controllers/defaultcontroller.class.inc.php

@@ -37,8 +37,17 @@ class DefaultController
 			// 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);
+				$aControllerActionParts = explode('::', $oBrick->GetTileControllerAction());
+				if (count($aControllerActionParts) !== 2)
+				{
+					$oApp->abort(500, 'Tile controller action must be of form "\Namespace\ControllerClass::FunctionName" for brick "' . $oBrick->GetId() . '"');
+				}
+
+				$sControllerName = $aControllerActionParts[0];
+				$sControllerAction = $aControllerActionParts[1];
+
+				$oController = new $sControllerName($oRequest, $oApp, $oBrick->GetId());
+				$aData['aTilesRendering'][$oBrick->GetId()] = $oController->$sControllerAction($oRequest, $oApp, $oBrick->GetId());
 			}
 		}
 

+ 3 - 0
datamodels/2.x/itop-portal-base/portal/src/entities/portalbrick.class.inc.php

@@ -493,6 +493,9 @@ abstract class PortalBrick extends AbstractBrick
 						$this->SetDecorationClassNavigationMenu($optionalNodeValue);
 					}
 					break;
+				case 'tile_controller_action':
+					$this->SetTileControllerAction($oBrickSubNode->GetText(static::DEFAULT_TILE_CONTROLLER_ACTION));
+					break;
 			}
 		}