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
-
+
+
+