From 80e6ba2d96e439a81926d60a9ffd9d53ea317df4 Mon Sep 17 00:00:00 2001 From: Pierre Goiffon Date: Thu, 12 Apr 2018 14:13:28 +0000 Subject: [PATCH] =?UTF-8?q?N=C2=B01370=20Portal=20ManageBrick=20:=20add=20?= =?UTF-8?q?"display=5Fmodes"=20XML=20node=20to=20set=20the=20display=20mod?= =?UTF-8?q?es=20in=20brick=20tile=20and=20details=20views?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SVN:trunk[5643] --- .../src/entities/managebrick.class.inc.php | 100 +++++++++++++----- .../src/views/bricks/manage/layout.html.twig | 20 ++-- .../itop-tickets/datamodel.itop-tickets.xml | 12 +++ 3 files changed, 99 insertions(+), 33 deletions(-) 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 a7969245f..dc26f63a5 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 @@ -53,6 +53,9 @@ class ManageBrick extends PortalBrick protected $aFields; protected $aExportFields; protected $bShowTabCounts; + /** + * @var string default display mode for the brick's tile + */ protected $sDisplayType; protected $iGroupLimit; protected $bGroupShowOthers; @@ -62,38 +65,47 @@ class ManageBrick extends PortalBrick 'decorationCssClass' => 'fa fa-id-card-o fa-2x', 'tileTemplate' => 'itop-portal-base/portal/src/views/bricks/manage/tile-badge.html.twig', 'layoutTemplate' => 'itop-portal-base/portal/src/views/bricks/manage/layout-table.html.twig', - 'layoutDisplayType' => 'default', + 'layoutDisplayType' => ManageBrick::DISPLAY_MODE_TABLE, 'need_details' => true, ), 'top-list' => array( 'decorationCssClass' => 'fa fa-signal fa-rotate-270 fa-2x', 'tileTemplate' => 'itop-portal-base/portal/src/views/bricks/manage/tile-top-list.html.twig', 'layoutTemplate' => 'itop-portal-base/portal/src/views/bricks/manage/layout-table.html.twig', - 'layoutDisplayType' => 'default', + 'layoutDisplayType' => ManageBrick::DISPLAY_MODE_TABLE, 'need_details' => true, ), 'pie-chart' => array( 'decorationCssClass' => 'fa fa-pie-chart fa-2x', 'tileTemplate' => 'itop-portal-base/portal/src/views/bricks/manage/tile-chart.html.twig', 'layoutTemplate' => 'itop-portal-base/portal/src/views/bricks/manage/layout-chart.html.twig', - 'layoutDisplayType' => 'pie-chart', + 'layoutDisplayType' => ManageBrick::DISPLAY_MODE_PIE, 'need_details' => false, ), 'bar-chart' => array( 'decorationCssClass' => 'fa fa-bar-chart fa-2x', 'tileTemplate' => 'itop-portal-base/portal/src/views/bricks/manage/tile-chart.html.twig', 'layoutTemplate' => 'itop-portal-base/portal/src/views/bricks/manage/layout-chart.html.twig', - 'layoutDisplayType' => 'bar-chart', + 'layoutDisplayType' => ManageBrick::DISPLAY_MODE_BAR, 'need_details' => false, ), 'default' => array( 'decorationCssClass' => 'fa fa-pencil-square fa-2x', 'tileTemplate' => self::DEFAULT_TILE_TEMPLATE_PATH, 'layoutTemplate' => 'itop-portal-base/portal/src/views/bricks/manage/layout-table.html.twig', - 'layoutDisplayType' => 'default', + 'layoutDisplayType' => ManageBrick::DISPLAY_MODE_TABLE, 'need_details' => true, ), ); + protected $aAvailableDisplayModes = array(); + const DISPLAY_MODE_TABLE = 'default'; + const DISPLAY_MODE_PIE = 'pie-chart'; + const DISPLAY_MODE_BAR = 'bar-chart'; + const DISPLAY_MODES_ALLOWED = array( + ManageBrick::DISPLAY_MODE_TABLE, + ManageBrick::DISPLAY_MODE_PIE, + ManageBrick::DISPLAY_MODE_BAR + ); public function __construct() { @@ -217,20 +229,6 @@ class ManageBrick extends PortalBrick return $this->bGroupShowOthers; } - /** - * @return array - */ - public function ListLayoutDisplayTypes() - { - $aLayoutDisplayTypes = array(); - foreach ($this->aPresentationData as $aPresentationDatum) - { - $aLayoutDisplayTypes[$aPresentationDatum['layoutDisplayType']] = true; - } - - return array_keys($aLayoutDisplayTypes); - } - /** * Sets the oql of the brick * @@ -434,6 +432,19 @@ class ManageBrick extends PortalBrick return (isset($this->aGrouping['areas'])) ? $this->aGrouping['areas'] : false; } + public function AddAvailableDisplayMode($sModeId) + { + $this->aAvailableDisplayModes[] = $sModeId; + } + + /** + * @return string[] + */ + public function GetAvailablesDisplayModes() + { + return $this->aAvailableDisplayModes; + } + /** * Returns true is the groupings $sGroupingName properties exists and is of the form attribute => attribute_code. * This is supposed to be called by the IsGroupingTabsByDistinctValues / IsGroupingAreasByDistinctValues function. @@ -527,11 +538,39 @@ class ManageBrick extends PortalBrick $this->SetOpeningMode($sOpeningMode); break; - case 'display_type': - $this->sDisplayType = $oBrickSubNode->GetText(); - $aDisplayParameterForType = $this->GetPresentationDataForDisplayType($this->sDisplayType); - $this->SetTileTemplatePath($aDisplayParameterForType['tileTemplate']); - $this->SetPageTemplatePath($aDisplayParameterForType['layoutTemplate']); + case 'display_modes': + foreach ($oBrickSubNode->GetNodes('./*') as $oDisplayNode) + { + switch ($oDisplayNode->nodeName) + { + case 'availables'; + foreach ($oDisplayNode->childNodes as $oModeNode) + { + if (!$oModeNode->hasAttribute('id')) + { + throw new DOMFormatException('ManageBrick : display mode must have a unique ID attribute', + null, null, $oModeNode); + } + + $sModeId = $oModeNode->getAttribute('id'); + if (!in_array($sModeId, ManageBrick::DISPLAY_MODES_ALLOWED)) + { + throw new DOMFormatException('ManageBrick : display mode has an invalid value', + null, null, $oModeNode); + } + + $this->AddAvailableDisplayMode($sModeId); + } + break; + + case 'default'; + $this->sDisplayType = $oDisplayNode->nodeValue; + $aDisplayParameterForType = $this->GetPresentationDataForDisplayType($this->sDisplayType); + $this->SetTileTemplatePath($aDisplayParameterForType['tileTemplate']); + $this->SetPageTemplatePath($aDisplayParameterForType['layoutTemplate']); + break; + } + } break; case 'fields': @@ -653,6 +692,19 @@ class ManageBrick extends PortalBrick throw new DOMFormatException('BrowseBrick : must have a valid tag', null, null, $oMDElement); } + // Display modes : at least one selected + $sDefaultDetailDisplayMode = (isset($this->sDisplayType)) + ? $this->aPresentationData[$this->sDisplayType]['layoutDisplayType'] + : 'default'; + $bHasAvailableDisplayModes = (count($this->GetAvailablesDisplayModes()) > 0); + $bIsDefaultDisplayModeInAvailableModes = in_array($sDefaultDetailDisplayMode, + $this->GetAvailablesDisplayModes()); + if (!$bHasAvailableDisplayModes || (!$bIsDefaultDisplayModeInAvailableModes)) + { + // legacy : setting to default + $this->AddAvailableDisplayMode($sDefaultDetailDisplayMode); + } + // Checking if specified fields, if not we put those from the details zlist if (empty($this->aFields)) { diff --git a/datamodels/2.x/itop-portal-base/portal/src/views/bricks/manage/layout.html.twig b/datamodels/2.x/itop-portal-base/portal/src/views/bricks/manage/layout.html.twig index d58b6c36e..751a85c89 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/views/bricks/manage/layout.html.twig +++ b/datamodels/2.x/itop-portal-base/portal/src/views/bricks/manage/layout.html.twig @@ -4,14 +4,16 @@ {% block pMainHeaderTitle %}{{ oBrick.GetTitle()|dict_s }} ({{ iCount }}) {% endblock %} {% block pMainHeaderActions %} -
- {% for sDisplay in oBrick.ListLayoutDisplayTypes %} - - {{ ('Brick:Portal:Manage:DisplayType:' ~ sDisplay)|dict_s }} - - {% endfor %} -
+ {% if oBrick.GetAvailablesDisplayModes|length > 1 %} +
+ {% for sDisplay in oBrick.GetAvailablesDisplayModes %} + + {{ ('Brick:Portal:Manage:DisplayType:' ~ sDisplay)|dict_s }} + + {% endfor %} +
+ {% endif %} {% endblock %} diff --git a/datamodels/2.x/itop-tickets/datamodel.itop-tickets.xml b/datamodels/2.x/itop-tickets/datamodel.itop-tickets.xml index 8b6c7c609..7c41b0e9f 100755 --- a/datamodels/2.x/itop-tickets/datamodel.itop-tickets.xml +++ b/datamodels/2.x/itop-tickets/datamodel.itop-tickets.xml @@ -1173,6 +1173,12 @@ <default>Brick:Portal:OngoingRequests:Title</default> + + + + + default + Brick:Portal:OngoingRequests:Title+ fc fc-ongoing-request fc-2x @@ -1232,6 +1238,12 @@ <default>Brick:Portal:ClosedRequests:Title</default> + + + + + default + fc fc-closed-request fc-2x