diff --git a/datamodels/2.x/itop-incident-mgmt-itil/datamodel.itop-incident-mgmt-itil.xml b/datamodels/2.x/itop-incident-mgmt-itil/datamodel.itop-incident-mgmt-itil.xml index 5ac5f7e67..ebbabceb1 100755 --- a/datamodels/2.x/itop-incident-mgmt-itil/datamodel.itop-incident-mgmt-itil.xml +++ b/datamodels/2.x/itop-incident-mgmt-itil/datamodel.itop-incident-mgmt-itil.xml @@ -1769,10 +1769,18 @@ true - 3.5 + + 3.5 + 8 true - Portal:CreateNewIncidentItil + + <default>Portal:CreateNewIncidentItil</default> + + Un deux trois nous irons au bois, quatre cinq six cueillir des cerises. Sept huit neuf, das un panier neuf. + + fa fa-plus fa-2x + Incident diff --git a/datamodels/2.x/itop-knownerror-mgmt/datamodel.itop-knownerror-mgmt.xml b/datamodels/2.x/itop-knownerror-mgmt/datamodel.itop-knownerror-mgmt.xml index 8be97561e..de528cdfd 100755 --- a/datamodels/2.x/itop-knownerror-mgmt/datamodel.itop-knownerror-mgmt.xml +++ b/datamodels/2.x/itop-knownerror-mgmt/datamodel.itop-knownerror-mgmt.xml @@ -604,9 +604,17 @@ true - 7 + + 7 + 4 - Brick:Portal:FAQ:Title + + <default>Brick:Portal:FAQ:Title</default> + + Un deux trois nous irons au bois, quatre cinq six cueillir des cerises. Sept huit neuf, das un panier neuf. + + fa fa-map fa-2x + FAQCategory diff --git a/datamodels/2.x/itop-portal-base/portal/src/entities/abstractbrick.class.inc.php b/datamodels/2.x/itop-portal-base/portal/src/entities/abstractbrick.class.inc.php index 72f2b3e33..e16275dc2 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/entities/abstractbrick.class.inc.php +++ b/datamodels/2.x/itop-portal-base/portal/src/entities/abstractbrick.class.inc.php @@ -42,6 +42,7 @@ abstract class AbstractBrick const ENUM_DATA_LOADING_AUTO = 'auto'; const DEFAULT_MANDATORY = true; const DEFAULT_ACTIVE = true; + const DEFAULT_VISIBLE = true; const DEFAULT_RANK = 1.0; const DEFAULT_PAGE_TEMPLATE_PATH = null; const DEFAULT_TITLE = ''; @@ -53,6 +54,7 @@ abstract class AbstractBrick protected $sId; protected $bMandatory; protected $bActive; + protected $bVisible; protected $fRank; protected $sPageTemplatePath; protected $sTitle; @@ -80,6 +82,7 @@ abstract class AbstractBrick { $this->bMandatory = static::DEFAULT_MANDATORY; $this->bActive = static::DEFAULT_ACTIVE; + $this->bVisible = static::DEFAULT_VISIBLE; $this->fRank = static::DEFAULT_RANK; $this->sPageTemplatePath = static::DEFAULT_PAGE_TEMPLATE_PATH; $this->sTitle = static::DEFAULT_TITLE; @@ -121,6 +124,16 @@ abstract class AbstractBrick return $this->bActive; } + /** + * Returns if brick is visible + * + * @return boolean + */ + public function GetVisible() + { + return $this->bVisible; + } + /** * Returns the brick rank * @@ -233,6 +246,17 @@ abstract class AbstractBrick return $this; } + /** + * Sets if the brick is visible + * + * @param boolean $bVisible + */ + public function SetVisible($bVisible) + { + $this->bVisible = $bVisible; + return $this; + } + /** * Sets if the brick is active * @@ -512,7 +536,11 @@ abstract class AbstractBrick $this->SetActive(($oBrickSubNode->GetText() === 'false') ? false : true ); break; case 'rank': - $this->SetRank((float) $oBrickSubNode->GetText(static::DEFAULT_RANK)); + $oOptionalNode = $oBrickSubNode->GetOptionalElement('default'); + if ($oOptionalNode !== null) + { + $this->SetRank((float) $oOptionalNode->GetText(static::DEFAULT_RANK)); + } break; case 'templates': $oTemplateNodeList = $oBrickSubNode->GetNodes('template[@id=' . ModuleDesign::XPathQuote('page') . ']'); @@ -522,7 +550,11 @@ abstract class AbstractBrick } break; case 'title': - $this->SetTitle($oBrickSubNode->GetText(static::DEFAULT_TITLE)); + $oOptionalNode = $oBrickSubNode->GetOptionalElement('default'); + if ($oOptionalNode !== null) + { + $this->SetTitle($oOptionalNode->GetText(static::DEFAULT_TITLE)); + } break; case 'description': $this->SetDescription($oBrickSubNode->GetText(static::DEFAULT_DESCRIPTION)); diff --git a/datamodels/2.x/itop-portal-base/portal/src/entities/browsebrick.class.inc.php b/datamodels/2.x/itop-portal-base/portal/src/entities/browsebrick.class.inc.php index c35541dd8..b19177e1c 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/entities/browsebrick.class.inc.php +++ b/datamodels/2.x/itop-portal-base/portal/src/entities/browsebrick.class.inc.php @@ -30,6 +30,8 @@ use \Combodo\iTop\Portal\Brick\PortalBrick; */ class BrowseBrick extends PortalBrick { + const DEFAULT_HOME_ICON_CLASS = 'fa fa-map'; + const DEFAULT_NAVIGATION_MENU_ICON_CLASS = 'fa fa-map fa-2x'; const ENUM_BROWSE_MODE_LIST = 'list'; const ENUM_BROWSE_MODE_TREE = 'tree'; const ENUM_ACTION_VIEW = 'view'; diff --git a/datamodels/2.x/itop-portal-base/portal/src/entities/createbrick.class.inc.php b/datamodels/2.x/itop-portal-base/portal/src/entities/createbrick.class.inc.php index ddb11d77a..cbbe2d5f5 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/entities/createbrick.class.inc.php +++ b/datamodels/2.x/itop-portal-base/portal/src/entities/createbrick.class.inc.php @@ -30,6 +30,8 @@ use \Combodo\iTop\Portal\Brick\PortalBrick; */ class CreateBrick extends PortalBrick { + const DEFAULT_HOME_ICON_CLASS = 'fa fa-plus'; + const DEFAULT_NAVIGATION_MENU_ICON_CLASS = 'fa fa-plus fa-2x'; const DEFAULT_CLASS = ''; static $sRouteName = 'p_create_brick'; 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 c6e3206ff..cd26a746e 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 @@ -32,6 +32,8 @@ use MetaModel; */ class ManageBrick extends PortalBrick { + const DEFAULT_HOME_ICON_CLASS = 'fa fa-pencil-square'; + const DEFAULT_NAVIGATION_MENU_ICON_CLASS = 'fa fa-pencil-square fa-2x'; const ENUM_ACTION_VIEW = 'view'; const ENUM_ACTION_EDIT = 'edit'; const DEFAULT_PAGE_TEMPLATE_PATH = 'itop-portal-base/portal/src/views/bricks/manage/layout.html.twig'; 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 e0a269445..722e95e26 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 @@ -37,6 +37,8 @@ abstract class PortalBrick extends AbstractBrick const DEFAULT_MODAL = false; const DEFAULT_VISIBLE_HOME = true; const DEFAULT_VISIBLE_NAVIGATION_MENU = true; + 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'; static $sRouteName = null; @@ -45,7 +47,14 @@ abstract class PortalBrick extends AbstractBrick protected $bModal; protected $bVisibleHome; protected $bVisibleNavigationMenu; + protected $sDecorationClassHome; + protected $sDecorationClassNavigationMenu; protected $sTileTemplatePath; + // Vars below are itemization from parent class + protected $fRankHome; + protected $fRankNavigationMenu; + protected $sTitleHome; + protected $sTitleNavigationMenu; static function GetRouteName() { @@ -64,6 +73,8 @@ abstract class PortalBrick extends AbstractBrick $this->bModal = static::DEFAULT_MODAL; $this->bVisibleHome = static::DEFAULT_VISIBLE_HOME; $this->bVisibleNavigationMenu = static::DEFAULT_VISIBLE_NAVIGATION_MENU; + $this->sDecorationClassHome = static::DEFAULT_DECORATION_CLASS_HOME; + $this->sDecorationClassNavigationMenu = static::DEFAULT_DECORATION_CLASS_NAVIGATION_MENU; $this->sTileTemplatePath = static::DEFAULT_TILE_TEMPLATE_PATH; } @@ -117,6 +128,66 @@ abstract class PortalBrick extends AbstractBrick return $this->bVisibleNavigationMenu; } + /** + * Returns if the brick's rank on the portal's home page + * + * @return int + */ + public function GetRankHome() + { + return $this->bRankHome; + } + + /** + * Returns if the brick's rank on the portal's navigation menu + * + * @return int + */ + public function GetRankNavigationMenu() + { + return $this->bRankNavigationMenu; + } + + /** + * Return the css class that will be applied to the brick's decoration in its home tile + * + * @return string + */ + public function GetDecorationClassHome() + { + return $this->sDecorationClassHome; + } + + /** + * Return the css class that will be applied to the brick's decoration in its navigation menu item + * + * @return string + */ + public function GetDecorationClassNavigationMenu() + { + return $this->sDecorationClassNavigationMenu; + } + + /** + * Return the brick's title on the home page + * + * @return string + */ + public function GetTitleHome() + { + return $this->sTitleHome; + } + + /** + * Return the brick's title on the navigation menu + * + * @return string + */ + public function GetTitleNavigationMenu() + { + return $this->sTitleNavigationMenu; + } + /** * Returns the brick tile template path * @@ -182,6 +253,72 @@ abstract class PortalBrick extends AbstractBrick return $this; } + /** + * Sets if the brick's rank on the portal's home + * + * @param boolean $fRank + */ + public function SetRankHome($fRankHome) + { + $this->fRankHome = $fRankHome; + return $this; + } + + /** + * Sets if the brick's rank on the portal's navigation menu + * + * @param boolean $fRank + */ + public function SetRankNavigationMenu($fRankNavigationMenu) + { + $this->fRankNavigationMenu = $fRankNavigationMenu; + return $this; + } + + /** + * Sets if the brick's decoration class on the portal's home + * + * @param boolean $sDecorationClassHome + */ + public function SetDecorationClassHome($sDecorationClassHome) + { + $this->sDecorationClassHome = $sDecorationClassHome; + return $this; + } + + /** + * Sets if the brick's decoration class on the portal's navigation menu + * + * @param boolean $sDecorationClassNavigationMenu + */ + public function SetDecorationClassNavigationMenu($sDecorationClassNavigationMenu) + { + $this->sDecorationClassNavigationMenu = $sDecorationClassNavigationMenu; + return $this; + } + + /** + * Sets if the brick's title on the portal's home + * + * @param boolean $sTitleHome + */ + public function SetTitleHome($sTitleHome) + { + $this->sTitleHome = $sTitleHome; + return $this; + } + + /** + * Sets if the brick's title on the portal's navigation menu + * + * @param boolean $sTitleNavigationMenu + */ + public function SetTitleNavigationMenu($sTitleNavigationMenu) + { + $this->sTitleNavigationMenu = $sTitleNavigationMenu; + return $this; + } + /** * Sets the brick tile template path * @@ -219,11 +356,29 @@ abstract class PortalBrick extends AbstractBrick $bModal = ($oBrickSubNode->GetText(static::DEFAULT_MODAL) === 'true'); $this->SetModal($bModal); break; - case 'visible_home': - $this->SetVisibleHome(($oBrickSubNode->GetText() === 'false') ? false : true ); - break; - case 'visible_navigation_menu': - $this->SetVisibleNavigationMenu(($oBrickSubNode->GetText() === 'false') ? false : true ); + case 'visible': + // Default value + $oOptionalNode = $oBrickSubNode->GetOptionalElement('default'); + if ($oOptionalNode !== null) + { + $optionalNodeValue = ($oOptionalNode->GetText() === 'false') ? false : true; + $this->SetVisibleHome($optionalNodeValue); + $this->SetVisibleNavigationMenu($optionalNodeValue); + } + // Home value + $oOptionalNode = $oBrickSubNode->GetOptionalElement('home'); + if ($oOptionalNode !== null) + { + $optionalNodeValue = ($oOptionalNode->GetText() === 'false') ? false : true; + $this->SetVisibleHome($optionalNodeValue); + } + // Navigation menu value + $oOptionalNode = $oBrickSubNode->GetOptionalElement('navigation_menu'); + if ($oOptionalNode !== null) + { + $optionalNodeValue = ($oOptionalNode->GetText() === 'false') ? false : true; + $this->SetVisibleNavigationMenu($optionalNodeValue); + } break; case 'templates': $oTemplateNodeList = $oBrickSubNode->GetNodes('template[@id=' . ModuleDesign::XPathQuote('tile') . ']'); @@ -232,6 +387,87 @@ abstract class PortalBrick extends AbstractBrick $this->SetTileTemplatePath($oTemplateNodeList->item(0)->GetText(static::DEFAULT_TILE_TEMPLATE_PATH)); } break; + case 'rank': + // Setting value from parent attribute + $this->SetRankHome($this->fRank); + $this->SetRankNavigationMenu($this->fRank); + // Default value + $oOptionalNode = $oBrickSubNode->GetOptionalElement('default'); + if ($oOptionalNode !== null) + { + $optionalNodeValue = $oOptionalNode->GetText(static::DEFAULT_RANK); + $this->SetRankHome($optionalNodeValue); + $this->SetRankNavigationMenu($optionalNodeValue); + } + // Home value + $oOptionalNode = $oBrickSubNode->GetOptionalElement('home'); + if ($oOptionalNode !== null) + { + $optionalNodeValue = $oOptionalNode->GetText(static::DEFAULT_RANK); + $this->SetRankHome($optionalNodeValue); + } + // Navigation menu value + $oOptionalNode = $oBrickSubNode->GetOptionalElement('navigation_menu'); + if ($oOptionalNode !== null) + { + $optionalNodeValue = $oOptionalNode->GetText(static::DEFAULT_RANK); + $this->SetRankNavigationMenu($optionalNodeValue); + } + break; + case 'title': + // Setting value from parent attribute + $this->SetTitleHome($this->sTitle); + $this->SetTitleNavigationMenu($this->sTitle); + // Default value + $oOptionalNode = $oBrickSubNode->GetOptionalElement('default'); + if ($oOptionalNode !== null) + { + $optionalNodeValue = $oOptionalNode->GetText(static::DEFAULT_TITLE); + $this->SetTitleHome($optionalNodeValue); + $this->SetTitleNavigationMenu($optionalNodeValue); + } + // Home value + $oOptionalNode = $oBrickSubNode->GetOptionalElement('home'); + if ($oOptionalNode !== null) + { + $optionalNodeValue = $oOptionalNode->GetText(static::DEFAULT_TITLE); + $this->SetTitleHome($optionalNodeValue); + } + // Navigation menu value + $oOptionalNode = $oBrickSubNode->GetOptionalElement('navigation_menu'); + if ($oOptionalNode !== null) + { + $optionalNodeValue = $oOptionalNode->GetText(static::DEFAULT_TITLE); + $this->SetTitleNavigationMenu($optionalNodeValue); + } + break; + case 'decoration_class': + // Setting value from parent attribute + $this->SetDecorationClassHome(static::DEFAULT_DECORATION_CLASS_HOME); + $this->SetDecorationClassNavigationMenu(static::DEFAULT_DECORATION_CLASS_NAVIGATION_MENU); + // Default value + $oOptionalNode = $oBrickSubNode->GetOptionalElement('default'); + if ($oOptionalNode !== null) + { + $optionalNodeValue = $oOptionalNode->GetText(static::DEFAULT_DECORATION_CLASS_NAVIGATION_MENU); + $this->SetDecorationClassHome($optionalNodeValue); + $this->SetDecorationClassNavigationMenu($optionalNodeValue); + } + // Home value + $oOptionalNode = $oBrickSubNode->GetOptionalElement('home'); + if ($oOptionalNode !== null) + { + $optionalNodeValue = $oOptionalNode->GetText(static::DEFAULT_DECORATION_CLASS_HOME); + $this->SetDecorationClassHome($optionalNodeValue); + } + // Navigation menu value + $oOptionalNode = $oBrickSubNode->GetOptionalElement('navigation_menu'); + if ($oOptionalNode !== null) + { + $optionalNodeValue = $oOptionalNode->GetText(static::DEFAULT_DECORATION_CLASS_NAVIGATION_MENU); + $this->SetDecorationClassNavigationMenu($optionalNodeValue); + } + break; } } diff --git a/datamodels/2.x/itop-portal-base/portal/src/entities/userprofilebrick.class.inc.php b/datamodels/2.x/itop-portal-base/portal/src/entities/userprofilebrick.class.inc.php index 8af0388a1..bb8bf0206 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/entities/userprofilebrick.class.inc.php +++ b/datamodels/2.x/itop-portal-base/portal/src/entities/userprofilebrick.class.inc.php @@ -34,6 +34,8 @@ class UserProfileBrick extends PortalBrick const DEFAULT_VISIBLE_NAVIGATION_MENU = false; const DEFAULT_VISIBLE_HOME = false; const DEFAUT_TITLE = 'Brick:Portal:UserProfile:Title'; + const DEFAULT_HOME_ICON_CLASS = 'glyphicon glyphicon-user'; + const DEFAULT_NAVIGATION_MENU_ICON_CLASS = 'glyphicon glyphicon-user'; static $sRouteName = 'p_user_profile_brick'; protected $aForm; diff --git a/datamodels/2.x/itop-portal-base/portal/src/helpers/applicationhelper.class.inc.php b/datamodels/2.x/itop-portal-base/portal/src/helpers/applicationhelper.class.inc.php index b88171e74..93d5f83da 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/helpers/applicationhelper.class.inc.php +++ b/datamodels/2.x/itop-portal-base/portal/src/helpers/applicationhelper.class.inc.php @@ -290,7 +290,7 @@ class ApplicationHelper 'properties' => array( 'id' => PORTAL_ID, 'name' => 'Page:DefaultTitle', - 'logo' => (file_exists(MODULESROOT . 'branding/portal-logo.png')) ? utils::GetAbsoluteUrlModulesRoot() . 'branding/portal-logo.png' : '../images/itop-logo.png', + 'logo' => (file_exists(MODULESROOT . 'branding/portal-logo.png')) ? utils::GetAbsoluteUrlModulesRoot() . 'branding/portal-logo.png' : '../images/logo-itop-dark-bg.svg', 'themes' => array( 'bootstrap' => $oApp['combodo.portal.base.absolute_url'] . 'css/bootstrap-theme.min.css', 'portal' => $oApp['combodo.portal.base.absolute_url'] . 'css/portal.css', @@ -623,7 +623,7 @@ class ApplicationHelper { return $a->GetRank() > $b->GetRank(); }); - + return $aPortalConf; } diff --git a/datamodels/2.x/itop-portal-base/portal/src/views/bricks/tile.html.twig b/datamodels/2.x/itop-portal-base/portal/src/views/bricks/tile.html.twig index a0c598657..6f56b5c93 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/views/bricks/tile.html.twig +++ b/datamodels/2.x/itop-portal-base/portal/src/views/bricks/tile.html.twig @@ -25,9 +25,12 @@ {% if app['combodo.portal.instance.routes'][brick.GetRouteName]['navigation_menu_attr'] is defined %}{% for key, value in app['combodo.portal.instance.routes'][brick.GetRouteName]['navigation_menu_attr'] %} {{ key }}="{{ value }}"{% endfor %}{% endif %} {% if brick.GetModal %}data-toggle="modal" data-target="#modal-for-all"{% endif %} class="tile vertical-center" id="brick-{{ brick.GetId }}" data-brick-id="{{ brick.GetId }}"> -
+
+ + +
-
{{ brick.GetTitle|dict_s }}
+
{{ brick.GetTitleHome|dict_s }}
{% if brick.HasDescription %}
{{ brick.GetDescription }}
{% endif %} diff --git a/datamodels/2.x/itop-portal-base/portal/src/views/layout.html.twig b/datamodels/2.x/itop-portal-base/portal/src/views/layout.html.twig index 4f03d9268..4d026b518 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/views/layout.html.twig +++ b/datamodels/2.x/itop-portal-base/portal/src/views/layout.html.twig @@ -6,6 +6,7 @@ {% set sUserFullname = app['combodo.current_user'].Get('first_name') ~ ' ' ~ app['combodo.current_user'].Get('last_name') %} {% set sUserEmail = app['combodo.current_user'].Get('email') %} {% set sUserPhotoUrl = app['combodo.portal.base.absolute_url'] ~ 'img/user-profile-default-256px.png' %} + {% set sUserPhotoUrl = 'https://scontent-fra3-1.xx.fbcdn.net/v/t1.0-9/11050099_10153305298138954_7206181025917413544_n.jpg?oh=728b8e7b1f073b81a2e6b43858c795f8&oe=57E2B0D3' %} {% else %} {% set bUserConnected = false %} {% set sUserFullname = '' %} @@ -33,6 +34,8 @@ + {# - Font awesome #} + {# - Misc libs #} @@ -115,8 +118,9 @@