diff --git a/datamodels/2.x/itop-portal-base/portal/src/controllers/managebrickcontroller.class.inc.php b/datamodels/2.x/itop-portal-base/portal/src/controllers/managebrickcontroller.class.inc.php index c54301086..ef3dcd71c 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/controllers/managebrickcontroller.class.inc.php +++ b/datamodels/2.x/itop-portal-base/portal/src/controllers/managebrickcontroller.class.inc.php @@ -344,7 +344,7 @@ class ManageBrickController extends BrickController if ($sItemAttr === $sMainActionAttrCode) { // Checking if we can edit the object - if (SecurityHelper::IsActionAllowed($oApp, UR_ACTION_MODIFY, $sCurrentClass, $oCurrentRow->GetKey())) + if (SecurityHelper::IsActionAllowed($oApp, UR_ACTION_MODIFY, $sCurrentClass, $oCurrentRow->GetKey()) && ($oBrick->GetOpeningMode() === ManageBrick::ENUM_ACTION_EDIT)) { $sActionType = ManageBrick::ENUM_ACTION_EDIT; } diff --git a/datamodels/2.x/itop-portal-base/portal/src/entities/managebrick.class.inc.php b/datamodels/2.x/itop-portal-base/portal/src/entities/managebrick.class.inc.php index cd26a746e..6b80194ef 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/entities/managebrick.class.inc.php +++ b/datamodels/2.x/itop-portal-base/portal/src/entities/managebrick.class.inc.php @@ -38,12 +38,14 @@ class ManageBrick extends PortalBrick const ENUM_ACTION_EDIT = 'edit'; const DEFAULT_PAGE_TEMPLATE_PATH = 'itop-portal-base/portal/src/views/bricks/manage/layout.html.twig'; const DEFAULT_OQL = ''; + const DEFAULT_OPENING_MODE = self::ENUM_ACTION_EDIT; const DEFAULT_DATA_LOADING = self::ENUM_DATA_LOADING_LAZY; const DEFAULT_COUNT_PER_PAGE_LIST = 20; const DEFAULT_ZLIST_FIELDS = 'list'; static $sRouteName = 'p_manage_brick'; protected $sOql; + protected $sOpeningMode; protected $aGrouping; protected $aFields; @@ -52,6 +54,7 @@ class ManageBrick extends PortalBrick parent::__construct(); $this->sOql = static::DEFAULT_OQL; + $this->sOpeningMode = static::DEFAULT_OPENING_MODE; $this->aGrouping = array(); $this->aFields = array(); @@ -69,6 +72,16 @@ class ManageBrick extends PortalBrick return $this->sOql; } + /** + * Returns the brick's objects opening mode (edit or view) + * + * @return string + */ + public function GetOpeningMode() + { + return $this->sOpeningMode; + } + /** * Returns the brick grouping * @@ -93,6 +106,7 @@ class ManageBrick extends PortalBrick * Sets the oql of the brick * * @param string $sOql + * @return \Combodo\iTop\Portal\Brick\ManageBrick */ public function SetOql($sOql) { @@ -100,6 +114,18 @@ class ManageBrick extends PortalBrick return $this; } + /** + * Sets the brick's objects opening mode + * + * @param string $sOpeningMode + * @return \Combodo\iTop\Portal\Brick\ManageBrick + */ + public function SetOpeningMode($sOpeningMode) + { + $this->sOpeningMode = $sOpeningMode; + return $this; + } + /** * Sets the grouping of the brick * @@ -287,7 +313,7 @@ class ManageBrick extends PortalBrick $sClass = $oBrickSubNode->GetText(); if ($sClass === '') { - throw new DOMFormatException('BrowseBrick : class tag is empty. Must contain Classname', null, null, $oBrickSubNode); + throw new DOMFormatException('ManageBrick : class tag is empty. Must contain Classname', null, null, $oBrickSubNode); } $this->SetOql('SELECT ' . $sClass); @@ -297,12 +323,22 @@ class ManageBrick extends PortalBrick $sOql = $oBrickSubNode->GetText(); if ($sOql === '') { - throw new DOMFormatException('BrowseBrick : oql tag is empty. Must contain OQL statement', null, null, $oBrickSubNode); + throw new DOMFormatException('ManageBrick : oql tag is empty. Must contain OQL statement', null, null, $oBrickSubNode); } $this->SetOql($sOql); break; + case 'opening_mode': + $sOpeningMode = $oBrickSubNode->GetText(static::DEFAULT_OPENING_MODE); + if (!in_array($sOpeningMode, array(static::ENUM_ACTION_VIEW, static::ENUM_ACTION_EDIT))) + { + throw new DOMFormatException('ManageBrick : opening_mode tag value must be edit|view ("' . $sOpeningMode . '" given)', null, null, $oBrickSubNode); + } + + $this->SetOpeningMode($sOpeningMode); + break; + case 'fields': foreach ($oBrickSubNode->GetNodes('./field') as $oFieldNode) { diff --git a/datamodels/2.x/itop-tickets/datamodel.itop-tickets.xml b/datamodels/2.x/itop-tickets/datamodel.itop-tickets.xml index 3f9675c88..706d31fe3 100755 --- a/datamodels/2.x/itop-tickets/datamodel.itop-tickets.xml +++ b/datamodels/2.x/itop-tickets/datamodel.itop-tickets.xml @@ -1113,7 +1113,9 @@ fc fc-ongoing-request fc-2x - + + +