diff --git a/application/dashlet.class.inc.php b/application/dashlet.class.inc.php
index 0de3572aa..01c74a723 100644
--- a/application/dashlet.class.inc.php
+++ b/application/dashlet.class.inc.php
@@ -903,10 +903,10 @@ class DashletObjectList extends Dashlet
{
$sTitle = $this->aProperties['title'];
$sShowMenu = $this->aProperties['menu'] ? '1' : '0';
-
- $oPanel = PanelFactory::MakeNeutral(Dict::S($sTitle));
-
$oFilter = $this->GetDBSearch($aExtraParams);
+ $sClass = $oFilter->GetClass();
+ $oPanel = PanelFactory::MakeForClass($sClass, Dict::S($sTitle));
+
$oBlock = new DisplayBlock($oFilter, 'list');
$aParams = array(
'menu' => $sShowMenu,
@@ -1241,7 +1241,7 @@ abstract class DashletGroupBy extends Dashlet
break;
}
- $oPanel = PanelFactory::MakeNeutral(Dict::S($sTitle));
+ $oPanel = PanelFactory::MakeForClass($sClass, Dict::S($sTitle));
$sBlockId = 'block_'.$this->sId.($bEditMode ? '_edit' : ''); // make a unique id (edition occurring in the same DOM)
@@ -2054,6 +2054,8 @@ class DashletHeaderDynamic extends Dashlet
$aQueryParams = array();
}
$oFilter = DBObjectSearch::FromOQL($sQuery, $aQueryParams);
+ $sClass = $oFilter->GetClass();
+ PanelFactory::SetClassColor($sClass, $oPanel);
$oBlock = new DisplayBlock($oFilter, 'summary');
$sBlockId = 'block_'.$this->sId.($bEditMode ? '_edit' : ''); // make a unique id (edition occuring in the same DOM)
$oBlock->DisplayIntoContentBlock($oPanel, $oPage, $sBlockId, array_merge($aExtraParams, $aParams));
diff --git a/core/metamodel.class.php b/core/metamodel.class.php
index 39be94e85..f97524e39 100644
--- a/core/metamodel.class.php
+++ b/core/metamodel.class.php
@@ -454,8 +454,10 @@ abstract class MetaModel
self::_check_subclass($sClass);
$sIcon = '';
- if (array_key_exists('icon', self::$m_aClassParams[$sClass])) {
- $sIcon = self::$m_aClassParams[$sClass]['icon'];
+ if (array_key_exists('style', self::$m_aClassParams[$sClass])) {
+ /** @var ormStyle $oStyle */
+ $oStyle = self::$m_aClassParams[$sClass]['style'];
+ $sIcon = $oStyle->GetIcon();
}
if (strlen($sIcon) == 0) {
$sParentClass = self::GetParentPersistentClass($sClass);
@@ -471,6 +473,29 @@ abstract class MetaModel
return $sIcon;
}
+ /**
+ * @param string $sClass
+ *
+ * @return ormStyle|null
+ * @throws \CoreException
+ *
+ * @since 3.0
+ */
+ final public static function GetClassStyle($sClass)
+ {
+ self::_check_subclass($sClass);
+
+ if (array_key_exists('style', self::$m_aClassParams[$sClass])) {
+ return self::$m_aClassParams[$sClass]['style'];
+ }
+ $sParentClass = self::GetParentPersistentClass($sClass);
+ if (strlen($sParentClass) > 0) {
+ return self::GetClassStyle($sParentClass);
+ }
+
+ return null;
+ }
+
/**
* @param string $sClass
*
diff --git a/core/ormStyle.class.inc.php b/core/ormStyle.class.inc.php
index 187db199e..e435200af 100644
--- a/core/ormStyle.class.inc.php
+++ b/core/ormStyle.class.inc.php
@@ -1,10 +1,14 @@
sMainColor = $sMainColor;
$this->sComplementaryColor = $sComplementaryColor;
@@ -43,17 +47,17 @@ class ormStyle
/**
* @return string
*/
- public function GetMainColor(): string
+ public function GetMainColor(): ?string
{
return $this->sMainColor;
}
/**
- * @param string $sMainColor
+ * @param string|null $sMainColor
*
* @return $this
*/
- public function SetMainColor(string $sMainColor)
+ public function SetMainColor(?string $sMainColor)
{
$this->sMainColor = $sMainColor;
return $this;
@@ -62,17 +66,17 @@ class ormStyle
/**
* @return string
*/
- public function GetComplementaryColor(): string
+ public function GetComplementaryColor(): ?string
{
return $this->sComplementaryColor;
}
/**
- * @param string $sComplementaryColor
+ * @param string|null $sComplementaryColor
*
* @return $this
*/
- public function SetComplementaryColor(string $sComplementaryColor)
+ public function SetComplementaryColor(?string $sComplementaryColor)
{
$this->sComplementaryColor = $sComplementaryColor;
return $this;
@@ -119,17 +123,17 @@ class ormStyle
/**
* @return string
*/
- public function GetDecorationClasses(): string
+ public function GetDecorationClasses(): ?string
{
return $this->sDecorationClasses;
}
/**
- * @param string $sDecorationClasses
+ * @param string|null $sDecorationClasses
*
* @return $this
*/
- public function SetDecorationClasses(string $sDecorationClasses)
+ public function SetDecorationClasses(?string $sDecorationClasses)
{
$this->sDecorationClasses = $sDecorationClasses;
return $this;
@@ -138,17 +142,17 @@ class ormStyle
/**
* @return string
*/
- public function GetIcon(): string
+ public function GetIcon(): ?string
{
return $this->sIcon;
}
/**
- * @param string $sIcon
+ * @param string|null $sIcon
*
* @return $this
*/
- public function SetIcon(string $sIcon)
+ public function SetIcon(?string $sIcon)
{
$this->sIcon = $sIcon;
return $this;
diff --git a/datamodels/2.x/itop-change-mgmt-itil/datamodel.itop-change-mgmt-itil.xml b/datamodels/2.x/itop-change-mgmt-itil/datamodel.itop-change-mgmt-itil.xml
index 6d5b495d7..9a82a24eb 100755
--- a/datamodels/2.x/itop-change-mgmt-itil/datamodel.itop-change-mgmt-itil.xml
+++ b/datamodels/2.x/itop-change-mgmt-itil/datamodel.itop-change-mgmt-itil.xml
@@ -22,9 +22,11 @@
- status
+ status
- images/change.png
+
@@ -277,17 +279,23 @@
-
1
HIGHLIGHT_CLASS_NONE
- images/change-approved.png
+
-
2
HIGHLIGHT_CLASS_NONE
- images/change-rejected.png
+
-
3
HIGHLIGHT_CLASS_NONE
- images/change-closed.png
+
@@ -1288,7 +1296,9 @@
- images/change.png
+
@@ -2084,7 +2094,9 @@
- images/change.png
+
@@ -3085,7 +3097,9 @@
- images/change.png
+
@@ -3778,7 +3792,9 @@
- images/change.png
+
@@ -4638,14 +4654,37 @@
-
- id)]]>
+ id)
+ ]]>
Tickets:Related:OpenChanges
- itop-change-mgmt-itil/images/change-ongoing.png
+
-
- id) AND (C.end_date < NOW() AND C.end_date > DATE_SUB(NOW(), INTERVAL 3 DAY ))]]>
+ id)
+ AND (C.end_date < NOW() AND C.end_date > DATE_SUB(NOW(), INTERVAL 3 DAY ))
+ ]]>
Tickets:Related:RecentChanges
- itop-change-mgmt-itil/images/change-done.png
+
@@ -4656,14 +4695,37 @@
-
- id)]]>
+ id)
+ ]]>
Tickets:Related:OpenChanges
- itop-change-mgmt-itil/images/change-ongoing.png
+
-
- id) AND (C.end_date < NOW() AND C.end_date > DATE_SUB(NOW(), INTERVAL 3 DAY ))]]>
+ id)
+ AND (C.end_date < NOW() AND C.end_date > DATE_SUB(NOW(), INTERVAL 3 DAY ))
+ ]]>
Tickets:Related:RecentChanges
- itop-change-mgmt-itil/images/change-done.png
+
@@ -4674,14 +4736,37 @@
-
- id)]]>
+ id)
+ ]]>
Tickets:Related:OpenChanges
- itop-change-mgmt-itil/images/change-ongoing.png
+
-
- id) AND (C.end_date < NOW() AND C.end_date > DATE_SUB(NOW(), INTERVAL 3 DAY ))]]>
+ id)
+ AND (C.end_date < NOW() AND C.end_date > DATE_SUB(NOW(), INTERVAL 3 DAY ))
+ ]]>
Tickets:Related:RecentChanges
- itop-change-mgmt-itil/images/change-done.png
+
@@ -4696,28 +4781,70 @@
-
-
+
Tickets:Related:OpenChanges
- itop-change-mgmt-itil/images/change-ongoing.png
+
-
- DATE_SUB(NOW(), INTERVAL 3 DAY ))]]>
+ DATE_SUB(NOW(), INTERVAL 3 DAY ))
+ ]]>
Tickets:Related:RecentChanges
- itop-change-mgmt-itil/images/change-done.png
+
-
-
+
Tickets:Related:OpenChanges
- itop-change-mgmt-itil/images/change-ongoing.png
+
-
- DATE_SUB(NOW(), INTERVAL 3 DAY ))]]>
+ DATE_SUB(NOW(), INTERVAL 3 DAY ))
+ ]]>
Tickets:Related:RecentChanges
- itop-change-mgmt-itil/images/change-done.png
+
diff --git a/datamodels/2.x/itop-change-mgmt/datamodel.itop-change-mgmt.xml b/datamodels/2.x/itop-change-mgmt/datamodel.itop-change-mgmt.xml
index 9c14e9735..b113b8831 100755
--- a/datamodels/2.x/itop-change-mgmt/datamodel.itop-change-mgmt.xml
+++ b/datamodels/2.x/itop-change-mgmt/datamodel.itop-change-mgmt.xml
@@ -24,7 +24,9 @@
status
- images/change.png
+
@@ -208,17 +210,23 @@
-
1
HIGHLIGHT_CLASS_NONE
- images/change-approved.png
+
-
2
HIGHLIGHT_CLASS_NONE
- images/change-rejected.png
+
-
3
HIGHLIGHT_CLASS_NONE
- images/change-closed.png
+
@@ -902,16 +910,39 @@
-
- id)]]>
+ id)
+ ]]>
Tickets:Related:OpenChanges
- itop-change-mgmt/images/change-ongoing.png
+
yes
-
- id)AND (C.end_date < NOW() AND C.end_date > DATE_SUB(NOW(), INTERVAL 3 DAY ))]]>
+ id)
+ AND (C.end_date < NOW() AND C.end_date > DATE_SUB(NOW(), INTERVAL 3 DAY ))
+ ]]>
Tickets:Related:RecentChanges
- itop-change-mgmt/images/change-done.png
+
no
@@ -924,16 +955,39 @@
-
- id)]]>
+ id)
+ ]]>
Tickets:Related:OpenChanges
- itop-change-mgmt/images/change-ongoing.png
+
yes
-
- id)AND (C.end_date < NOW() AND C.end_date > DATE_SUB(NOW(), INTERVAL 3 DAY ))]]>
+ id)
+ AND (C.end_date < NOW() AND C.end_date > DATE_SUB(NOW(), INTERVAL 3 DAY ))
+ ]]>
Tickets:Related:RecentChanges
- itop-change-mgmt/images/change-done.png
+
no
@@ -946,16 +1000,39 @@
-
- id)]]>
+ id)
+ ]]>
Tickets:Related:OpenChanges
- itop-change-mgmt/images/change-ongoing.png
+
yes
-
- id)AND (C.end_date < NOW() AND C.end_date > DATE_SUB(NOW(), INTERVAL 3 DAY ))]]>
+ id)
+ AND (C.end_date < NOW() AND C.end_date > DATE_SUB(NOW(), INTERVAL 3 DAY ))
+ ]]>
Tickets:Related:RecentChanges
- itop-change-mgmt/images/change-done.png
+
no
@@ -972,16 +1049,37 @@
-
-
+
Tickets:Related:OpenChanges
- itop-change-mgmt/images/change-ongoing.png
+
yes
-
- DATE_SUB(NOW(), INTERVAL 3 DAY ))]]>
+ DATE_SUB(NOW(), INTERVAL 3 DAY ))
+ ]]>
Tickets:Related:RecentChanges
- itop-change-mgmt/images/change-done.png
+
no
@@ -990,16 +1088,37 @@
-
-
+
Tickets:Related:OpenChanges
- itop-change-mgmt/images/change-ongoing.png
+
yes
-
- DATE_SUB(NOW(), INTERVAL 3 DAY ))]]>
+ DATE_SUB(NOW(), INTERVAL 3 DAY ))
+ ]]>
Tickets:Related:RecentChanges
- itop-change-mgmt/images/change-done.png
+
no
diff --git a/datamodels/2.x/itop-config-mgmt/datamodel.itop-config-mgmt.xml b/datamodels/2.x/itop-config-mgmt/datamodel.itop-config-mgmt.xml
index 09f705a3e..3bc6e2e49 100755
--- a/datamodels/2.x/itop-config-mgmt/datamodel.itop-config-mgmt.xml
+++ b/datamodels/2.x/itop-config-mgmt/datamodel.itop-config-mgmt.xml
@@ -15,7 +15,9 @@
- images/server.png
+
@@ -265,7 +267,9 @@
status
- images/server.png
+
@@ -510,7 +514,9 @@
- images/server.png
+
@@ -676,7 +682,9 @@
- images/server.png
+
@@ -960,7 +968,9 @@
- images/switch.png
+
@@ -1233,7 +1243,9 @@
- images/server.png
+
@@ -1536,7 +1548,9 @@
status
- images/solution.png
+
@@ -1694,7 +1708,9 @@
status
- images/business-process.png
+
@@ -1822,7 +1838,9 @@
status
- images/application.png
+
@@ -2016,7 +2034,9 @@
- images/middleware.png
+
@@ -2143,7 +2163,9 @@
- images/database.png
+
@@ -2270,7 +2292,9 @@
- images/webserver.png
+
@@ -2397,7 +2421,9 @@
- images/application.png
+
@@ -2503,7 +2529,9 @@
- images/application.png
+
@@ -2608,7 +2636,9 @@
- images/middleware.png
+
@@ -2725,7 +2755,9 @@
- images/database-schema.png
+
@@ -2840,7 +2872,9 @@
- images/webapp.png
+
@@ -2965,7 +2999,9 @@
- images/software.png
+
@@ -3131,7 +3167,9 @@
- images/patch.png
+
@@ -3217,7 +3255,9 @@
- images/patch.png
+
@@ -3304,7 +3344,9 @@
- images/patch.png
+
@@ -3391,7 +3433,9 @@
- images/licence.png
+
@@ -3575,7 +3619,9 @@
- images/licence.png
+
@@ -3712,7 +3758,9 @@
- images/licence.png
+
@@ -4867,7 +4915,9 @@
- images/subnet.png
+
@@ -5061,7 +5111,9 @@
- images/vlan.png
+
@@ -5263,7 +5315,9 @@
- images/interface.png
+
@@ -5324,7 +5378,9 @@
- images/interface.png
+
@@ -5467,7 +5523,9 @@
- images/interface.png
+
@@ -6097,7 +6155,9 @@
status
- images/group.png
+
@@ -6495,7 +6555,9 @@
0
Menu:ConfigManagement:AllDevices
- itop-config-mgmt/images/server.png
+
Menu_ConfigManagement_AllDevices
@@ -6514,7 +6576,9 @@
0
Menu:ConfigManagement:SWAndApps
- itop-config-mgmt/images/application.png
+
1
@@ -6564,7 +6628,9 @@
0
Menu:ConfigManagement:Misc
- itop-config-mgmt/images/subnet.png
+
1
diff --git a/datamodels/2.x/itop-datacenter-mgmt/datamodel.itop-datacenter-mgmt.xml b/datamodels/2.x/itop-datacenter-mgmt/datamodel.itop-datacenter-mgmt.xml
index 4f9dd7edc..c7ea4a714 100755
--- a/datamodels/2.x/itop-datacenter-mgmt/datamodel.itop-datacenter-mgmt.xml
+++ b/datamodels/2.x/itop-datacenter-mgmt/datamodel.itop-datacenter-mgmt.xml
@@ -15,7 +15,9 @@
- images/rack.png
+
@@ -197,7 +199,9 @@
- images/enclosure.png
+
@@ -386,7 +390,9 @@
- images/power-connection.png
+
@@ -552,7 +558,9 @@
- images/power-connection.png
+
@@ -711,7 +719,9 @@
- images/pdu.png
+
diff --git a/datamodels/2.x/itop-endusers-devices/datamodel.itop-enduser-devices.xml b/datamodels/2.x/itop-endusers-devices/datamodel.itop-enduser-devices.xml
index a486e0535..72a70989e 100644
--- a/datamodels/2.x/itop-endusers-devices/datamodel.itop-enduser-devices.xml
+++ b/datamodels/2.x/itop-endusers-devices/datamodel.itop-enduser-devices.xml
@@ -15,7 +15,9 @@
- images/mobile-phone.png
+
@@ -167,7 +169,9 @@
- images/phone.png
+
@@ -318,7 +322,9 @@
- images/mobile-phone.png
+
@@ -492,7 +498,9 @@
- images/ipphone.png
+
@@ -643,7 +651,9 @@
- images/tablet.png
+
@@ -791,7 +801,9 @@
- images/laptop.png
+
@@ -1045,7 +1057,9 @@
- images/printer.png
+
@@ -1229,7 +1243,9 @@
- images/peripherals.png
+
@@ -1374,7 +1390,9 @@
0
Menu:ConfigManagement:EndUsers
- itop-config-mgmt/images/team.png
+
1
diff --git a/datamodels/2.x/itop-faq-light/datamodel.itop-faq-light.xml b/datamodels/2.x/itop-faq-light/datamodel.itop-faq-light.xml
index e5addbabd..403bf9213 100755
--- a/datamodels/2.x/itop-faq-light/datamodel.itop-faq-light.xml
+++ b/datamodels/2.x/itop-faq-light/datamodel.itop-faq-light.xml
@@ -15,7 +15,9 @@
- images/faq.png
+
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 baf797e16..c7b7342c4 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
@@ -21,10 +21,12 @@
-
- status
-
- images/incident.png
+
+ status
+
+
@@ -480,17 +482,23 @@
-
1
HIGHLIGHT_CLASS_WARNING
- images/incident-deadline.png
+
-
2
HIGHLIGHT_CLASS_CRITICAL
- images/incident-escalated.png
+
-
3
HIGHLIGHT_CLASS_NONE
- images/incident-closed.png
+
@@ -1940,9 +1948,19 @@
-
- id)]]>
+ id)
+ ]]>
Tickets:Related:OpenIncidents
- itop-incident-mgmt-itil/images/incident-red.png
+
yes
@@ -1954,9 +1972,19 @@
-
- id)]]>
+ id)
+ ]]>
Tickets:Related:OpenIncidents
- itop-incident-mgmt-itil/images/incident-red.png
+
yes
@@ -1968,9 +1996,19 @@
-
- id)]]>
+ id)
+ ]]>
Tickets:Related:OpenIncidents
- itop-incident-mgmt-itil/images/incident-red.png
+
yes
@@ -1986,9 +2024,18 @@
-
-
+
Tickets:Related:OpenIncidents
- itop-incident-mgmt-itil/images/incident-red.png
+
yes
@@ -1996,9 +2043,18 @@
-
-
+
Tickets:Related:OpenIncidents
- itop-incident-mgmt-itil/images/incident-red.png
+
yes
diff --git a/datamodels/2.x/itop-knownerror-light/datamodel.itop-knownerror-light.xml b/datamodels/2.x/itop-knownerror-light/datamodel.itop-knownerror-light.xml
index a59719723..651f1b6e9 100755
--- a/datamodels/2.x/itop-knownerror-light/datamodel.itop-knownerror-light.xml
+++ b/datamodels/2.x/itop-knownerror-light/datamodel.itop-knownerror-light.xml
@@ -18,7 +18,9 @@
- images/known-error.png
+
diff --git a/datamodels/2.x/itop-portal-base/portal/src/Controller/ManageBrickController.php b/datamodels/2.x/itop-portal-base/portal/src/Controller/ManageBrickController.php
index 615e272f5..9ca1f9bd7 100644
--- a/datamodels/2.x/itop-portal-base/portal/src/Controller/ManageBrickController.php
+++ b/datamodels/2.x/itop-portal-base/portal/src/Controller/ManageBrickController.php
@@ -23,6 +23,7 @@ namespace Combodo\iTop\Portal\Controller;
use AttributeDate;
use AttributeDateTime;
use AttributeDefinition;
+use AttributeEnum;
use AttributeExternalKey;
use AttributeImage;
use AttributeSet;
@@ -47,7 +48,6 @@ use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use UnaryExpression;
use URLButtonItem;
-use VariableExpression;
/**
* Class ManageBrickController
@@ -716,15 +716,14 @@ class ManageBrickController extends BrickController
/** @var \AttributeTagSet $oAttDef */
$sValue = $oAttDef->GenerateViewHtmlForValues($aCodes, '', false);
$sSortValue = implode(' ', $aCodes);
- }
- elseif ($oAttDef instanceof AttributeSet)
- {
+ } elseif ($oAttDef instanceof AttributeSet) {
$oAttDef->SetDisplayLink(false);
$sValue = $oAttDef->GetAsHTML($oCurrentRow->Get($sItemAttr));
$sSortValue = "".$oCurrentRow->Get($sItemAttr);
- }
- else
- {
+ } elseif ($oAttDef instanceof AttributeEnum) {
+ $sValue = $oAttDef->GetAsPlainText($oCurrentRow->Get($sItemAttr));
+ $sSortValue = $oCurrentRow->Get($sItemAttr);
+ } else {
$sValue = $oAttDef->GetAsHTML($oCurrentRow->Get($sItemAttr));
$sSortValue = $oCurrentRow->Get($sItemAttr);
}
diff --git a/datamodels/2.x/itop-problem-mgmt/datamodel.itop-problem-mgmt.xml b/datamodels/2.x/itop-problem-mgmt/datamodel.itop-problem-mgmt.xml
index 36e2050a2..f0f271c8f 100755
--- a/datamodels/2.x/itop-problem-mgmt/datamodel.itop-problem-mgmt.xml
+++ b/datamodels/2.x/itop-problem-mgmt/datamodel.itop-problem-mgmt.xml
@@ -24,7 +24,9 @@
status
- images/problem.png
+
diff --git a/datamodels/2.x/itop-request-mgmt-itil/datamodel.itop-request-mgmt-itil.xml b/datamodels/2.x/itop-request-mgmt-itil/datamodel.itop-request-mgmt-itil.xml
index e5a22862d..6e590316e 100755
--- a/datamodels/2.x/itop-request-mgmt-itil/datamodel.itop-request-mgmt-itil.xml
+++ b/datamodels/2.x/itop-request-mgmt-itil/datamodel.itop-request-mgmt-itil.xml
@@ -21,10 +21,13 @@
-
- status
-
- images/user-request.png
+
+ status
+
+
@@ -523,17 +526,23 @@
-
1
HIGHLIGHT_CLASS_WARNING
- images/user-request-deadline.png
+
-
2
HIGHLIGHT_CLASS_CRITICAL
- images/user-request-escalated.png
+
-
3
HIGHLIGHT_CLASS_NONE
- images/user-request-closed.png
+
@@ -1858,19 +1867,21 @@
- 10
-
-
- 0
- Organization:Overview:UserRequests
- itop-welcome-itil/images/user-request-deadline.png
- Menu:UserRequest:OpenRequests
- SELECT UserRequest WHERE status != "closed" AND org_id=:this->id
- status
- new,assigned,escalated_tto,escalated_ttr,resolved
-
-
- |
+ 10
+
+
+ 0
+ Organization:Overview:UserRequests
+
+ Menu:UserRequest:OpenRequests
+ SELECT UserRequest WHERE status != "closed" AND org_id=:this->id
+ status
+ new,assigned,escalated_tto,escalated_ttr,resolved
+
+
+
30
@@ -1910,7 +1921,9 @@
0
Menu:RequestManagement
- itop-welcome-itil/images/user-request-deadline.png
+
Menu:UserRequest:OpenRequests
SELECT UserRequest WHERE status != "closed"
status
diff --git a/datamodels/2.x/itop-request-mgmt/datamodel.itop-request-mgmt.xml b/datamodels/2.x/itop-request-mgmt/datamodel.itop-request-mgmt.xml
index e232dcb6e..aee66d483 100755
--- a/datamodels/2.x/itop-request-mgmt/datamodel.itop-request-mgmt.xml
+++ b/datamodels/2.x/itop-request-mgmt/datamodel.itop-request-mgmt.xml
@@ -24,7 +24,10 @@
status
- images/user-request.png
+
@@ -562,17 +565,23 @@
-
1
HIGHLIGHT_CLASS_WARNING
- images/user-request-deadline.png
+
-
2
HIGHLIGHT_CLASS_CRITICAL
- images/user-request-escalated.png
+
-
3
HIGHLIGHT_CLASS_NONE
- images/user-request-closed.png
+
@@ -1910,18 +1919,20 @@
|
- 10
-
-
- 0
- Organization:Overview:UserRequests
- itop-welcome-itil/images/user-request-deadline.png
- Menu:UserRequest:OpenRequests
- SELECT UserRequest WHERE status != "closed" AND org_id=:this->id
- status
- new,assigned,escalated_tto,escalated_ttr,resolved
-
-
+ 10
+
+
+ 0
+ Organization:Overview:UserRequests
+
+ Menu:UserRequest:OpenRequests
+ SELECT UserRequest WHERE status != "closed" AND org_id=:this->id
+ status
+ new,assigned,escalated_tto,escalated_ttr,resolved
+
+
|
30
@@ -1962,7 +1973,9 @@
0
Menu:RequestManagement
- itop-welcome-itil/images/user-request-deadline.png
+
Menu:UserRequest:OpenRequests
SELECT UserRequest WHERE status != "closed"
status
@@ -2125,9 +2138,20 @@
-
- id)]]>
+ id)
+ ]]>
Tickets:Related:OpenIncidents
- itop-request-mgmt/images/incident-red.png
+
yes
@@ -2140,9 +2164,20 @@
-
- id)]]>
+ id)
+ ]]>
Tickets:Related:OpenIncidents
- itop-request-mgmt/images/incident-red.png
+
yes
@@ -2159,9 +2194,19 @@
-
-
+
Tickets:Related:OpenIncidents
- itop-request-mgmt/images/incident-red.png
+
yes
@@ -2170,9 +2215,19 @@
-
-
+
Tickets:Related:OpenIncidents
- itop-request-mgmt/images/incident-red.png
+
yes
diff --git a/datamodels/2.x/itop-service-mgmt-provider/data.sample.servicefamilies.xml b/datamodels/2.x/itop-service-mgmt-provider/data.sample.servicefamilies.xml
index d35b9a072..388b8ab8f 100644
--- a/datamodels/2.x/itop-service-mgmt-provider/data.sample.servicefamilies.xml
+++ b/datamodels/2.x/itop-service-mgmt-provider/data.sample.servicefamilies.xml
@@ -2,6 +2,14 @@
IT Services
-image/pngrepair-white-390h.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
+
\ No newline at end of file
diff --git a/datamodels/2.x/itop-service-mgmt-provider/data.sample.services.xml b/datamodels/2.x/itop-service-mgmt-provider/data.sample.services.xml
index ac6a045b8..ca6a9e24f 100755
--- a/datamodels/2.x/itop-service-mgmt-provider/data.sample.services.xml
+++ b/datamodels/2.x/itop-service-mgmt-provider/data.sample.services.xml
@@ -6,22 +6,46 @@
3
Ordering of new hardware (Desktop computer, laptop computer, monitor, mouse, keyboard...) and support in case of hardware failure.
production
-image/pnglaptop-white-390h.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
-
-
-Software
-1
-3
-Management of computer software and applications. Installation, upgrade, troubleshooting and removal of software.
-production
-image/pngsoftware-white-390h.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
-
-
-Telecom and connectivity
-1
-3
-Ordering and configuration of new mobile phones, computer connectivity requests, cabling, etc...
-production
-image/pngip-white-390h.pngiVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAN1klEQVR4Xu3df2zU933H8df76/PZ3LnhRAhBgTmRA4XSyGKoQlM3qdHaqFFKlK5rq5F00bpqaddk3Y8O9Y+oi9puk7KJ0mxDGq1QlaTZsqBNytpN3UZRhFJUTVUEWQqIIAshkxBEjME/zj7f9/PeHzaRi7A/xvh8Z3+eD4k/4F4fY477vu7z+d7Xn68EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACaz2IBXF9XVzkbHh4J7v6MpFtieSy8gYGBPevXr3/DzMLo6GgsjuugAObI3W9x93vffvvtnxeLxa3lcnmLmX2js7OzFBuLxsjzfLS/v//F7u7ul83stKTVki6Y2cnYWEyiAObo2LFjq3p7e/fX6/XVeZ7/WkdHRyE2BovqpKRw5cqVR26//fajY2NjsTxEAUR1dXVlQ0NDm939fjPbHcujudz93yTtq1QqBzVZCLEhSctigZQVi8XszJkz6yUd4OBfGszsU2Z2YGBg4LNbtmxhlhbBDGAGWZZleZ5vlvQfku6KxNGC3P3zbW1tz0kK7h6LJ4kZwHUUi8Wsv7+/293/VRz8S9kz4+PjD+/YsaMYC6aKGcA1BgcHO1euXPmopF2SNsTyWBK+FkJ4ZXx8/OelUinEwimhAKYJIXS6+11Zlp2IZbG0uPs3JT2TZdlALJsSlgDTmNnWLMv+K5bD0mNmfyHp92K51FAAU9x9jaT3i6v6li0z+6C7d7s7r/spLAGmhBAeM7N9sRyWvB9LesjMarFgCmhCSXmebzl//vyFWA5LX19f38mdO3fGYslgBiDJ3XslHdDkEgDL3/vMbDgWSgEzgEndku6IhbBscFXnFApgUkVSVyyEZYOyn5L8EiCEsNfMPi1pTSyLZWNU0nlJm8ysHgsvZ8wAJg98Dv60lCT1xEIpSL4AzOzxWAbL0h+5e9Lv/hIFIElcGpqmwSzj5c8zACSMAgASRgEACaMAgIRRAEDCKAAgYRQAkDAKAEgYBQAkjAIAEkYBAAnj1kktxN3fMLMvTvujlyWNSVo/w5CF9lVJP4uFbkCXpKclbZV0QVJRk3svoEVQAK3jsJn9i5kdufoHIYQ/zrLsn6buUPSpWcbeFHevm9l3JP3IzE7F8nMVQthmZgclHZS0T9LaEMLeLMt6I0OBxeHuBW+ud919h7uvneV7/KG7D83+ZebtWXffNtPfvdDGx8e3u/u2EMIxn/y3N8vnYt9rCjgH0HxHJR0xs/OzZHa5+5lZHr8ZL5vZa7HQQuno6PhfM3vNzP5K0m9L+m5sDBqHAmiuvhDCU3mex/aob9QedrvyPD8TCzWCmb1kZq8cPnz4TyX95djY2GhsDLDgvLlLgF/Evr+rQghZ7IvNw+/E/t7F0t/ff6xWq03EvuEFxBJAzADQItasWfPg0aNHf/Xy5ctvxLJYOHwKgJZQLBbPSlJfX9+ZlStX3hPLY2EwA0BLufPOO/9gYmLim86GnYuCAkBL2bhx4/mNGzd+S9LfxbK4eSwBMCfu/ueSvhbLXVWtVo+XSqWPVCoVDQ4OxuLv6evrk6S6pNWS3lLjPgGBmAFg7kqaPCjn9CuEcMebb775t7t3797s7o/O8DVnZGZPuzs38GwwZgBoiHK5vKGnp+fPenp6npD0irt/xswejI2bpjh1WXKPeJ02DDMANEw2qVPS/ZI+FkJ4PoSwITZOkszsqJk96O7fjmUxfxQAFkunmX3OzHbEgtOlfvPORqMAsKjyPP/WpUuX9rv7XbGsJE1MTAzleX5EaAgKAIuqra2tq1KprHH3K7GsJLW3t/+gra0tFsM8UQBohh1mttndi7Ggu2+V9OFYDvNDAaBZfirpyVgIjUUBoCmGh4fPSHo2ljOzWr1eP+vusSjmgc9X0RTlcrlmZn2xnJn9t6Q73T0Xb1gLjicUSBgzALS0er1+Rwih4O4ys1gcN4gZAJrCzLrd/bFYLsuy3kKh8D/itdoQPKloihDCsKR1sZykgpm9n3f/xmAJgGa46O6PaHJH5FmZ2bCkQXFDkYZgBoBF5+6n2tra3jCzC7Gsmb0i6T9jOcwPBYBF5e5HJiYmPi9pIJaVpBMnTjx24cKFLbEc5oclABbTq6Ojoztvu+22t6rVaoiFi8V2bdq06S0z2xrLYn4oACwKdz9y5cqVhyqVypze+afZGwtg/igANNTIyMhouVz+d3f/3rp16+a8OWAIYbOZPS72BGwoCgBz4u5nzOxQLDdNFkIYHh0d/WK5XB7IsiyMjIxEp/3TrHf3e8yM12gD8eRiTrIse07Sc7HcVe6emdkDq1atGjSzsVh+umKxKEkfNbN7I1HcJAoADWFmQdKPYrlrufuq0dHRtZJueCdh3Dg+BkRLuXTpUrFYLP6hJrcXR4MxA0BLGB4eLg4NDXVWKpWHzezL4s1pUVAAaLpyuaxSqfT3pVKpe2rdz8G/SCgANJW7V+r1+npJJ8ws+tOBWFgUAJrC3bNz584VQggbCoXC85K6Y2Ow8CgALCp375L0WUnH161b96SkbeJin6ahANBwU9t/dw0NDY2FELqzLNsv6XVJvZGhaDAKAHPi7h+StD2Wm87dT2ZZdsjde83sQFdX1xkzuzrV5+BvARQA5uoBSd+IhaYzswvuflKaPNnHlX2thwJAI62Z+sWGni2Kz1uBhFEAQMIoACBhFACQMAoASBgFACSMAgASRgEACaMAgIRRAEDCKAAgYRQAkDAKAEgYBQAkjAIAEkYBAAmjAICEUQBAwigAIGEUAJAwCgBIGAUAJIwCABJGAQAJowCAhFEATRRCyA4dOlTJ83zWOzSFED5WrVafmC0zH0NDQ4U8z1fHcnme76vVanfHclh6KIAmCiGs3bZt2/fNbO1sOTPrKpVKz8yWmY88z79gZrtiuSzLtheLxUdjOSw9FEATFQqFysqVK+tnz569smLFihlzP/nJoePDwyOvzxiYp0qlcq+7v1wozDwByfP8w+Pj4zM+jqWNm4M236e7u7tPSXry2gfcfYuk0tRjDbmddpZl369Wq5+5++67Xz979uwvPebuj7p7f0dHxx0zDMcSl/wtW929IGkilmuw+tjY2D+2t7f/X5Zl792C28y+K+lPJN0y89Cb5+4XT58+/YWNGzc+7u5Xi+bHkj5kZndJ6ppx8NL1u2b2g1houaMAWqMAsPgoAHEOAEgaBQAkjAIAEkYBAAmjAICEUQBAwigAIGEUAJAwCgBIGAUAJIwCABKWfAG4+2p3D7Eclp3V7h7LLHvJ/zBQCOGAuz+QZVkplsWy025m9VhoOUt+BiBJHPxIVfIbgpjZAU0+D5+MZbFsnJL0oqTkl34UgNlL7j4s6TfV4I030DIOmtlTsVAKkj8HcJW7/1DSjlgOy8L7zGw4FkoB5wAkuftviHf/VPS5+5djoVRQAJLM7NUXXnjh45JeimWxpJ26fPnyb3V2dv5NLJgKlgBTisWixsfHf1/S/lgWS5O7H+zs7LxPkmq1WiyeBGYAU6ZeEEcknYxEsXTtr9VqHPzTUADTlMvlk++888597k4JLC+DtVpt5549e1jiXYMlwDU6OjqyarX6JTPbG8tiyXi1o6PjI+4eJibYAX46CuA63L3g7rvN7CuxLFrecXf/aJZl52PBFFEAM3D3kqTvSXo4lkXL6pP0CTNjSTcDzgHMwMxG3f0Rd/+HWBatJc/zMDY29pqkX+fgn13ylwLPJssyhRD2uPsaTd4nryc2Bk1Xd/dvT0xMvLNixQqm/REsAeagVCppaGjonizLnpfUI64abEnuftjMDnd1dX19ZGQkFocogDlz9y53XyvpaU1eLLRX0nozYxbVJFMbuQxLesrMNkl6XtJFMzs1+0jgJhQKBZ07d25DtVr9hbs/++677/40z/PcsSiq1eold9+X5/mJo0ePbm9vb4/9l2EGzADmKc/zW8xsq5n97OLFi1+59dZbv2pmrXBSdZUad25nQFLTd9Cp1WoDHR0dHwgh9IYQBgqFQn9sDK6PAlhm3P2YpN5Ybp4+wFn15aUV3rEANAkFACSMAgASRgEACaMAgIRRAEDCKAAgYRQAkDAKAEgYBQAkjAIAEkYBAAmjAICEUQBAwigAIGEUAJAwCgBIGAUAJIwCABJGAQAJowCAhFEAQMIoACBhFACQMAoASBgFACSMAgASRgEACaMAgIRRAMvPfZK+EwvdoD5JvyLpdCyIpaVR95FHk5jZBXf/Z3d/M5adKzMbNLP+WA4AAAAAAAAAAAAAAAAA0AQWC6A1hBAkaXUs12xmdsXMarEcWgMFsESEEDIzy2O5FrDTzF6MhdAa+GEgIGEUAJAwCgBIGAUAJIwCABJGAQAJowCAhFEAQMIogCYyM5lxLRaa55c2BXX3L0n64AxZLDB3f7utre2vY7nlKs/z+7Ms+0QshwW1y8zGrv7m2l2BH5J0v7AozOy4uydbAFmWbZf0RCyHBfV1Se8VAEsAIGEUAJAwCgBIGAUAJIwCABJGAQAJowCAhFEAQMIoACBhFACQMAoASBgFACSMAgASRgEACaMAgIRRAEDCKAAgYRQAkLBrtwQ76e63XDeJRjhjZnL3WG5Zcvd+SUdiOSyo+vTfsCVtE13dEXguBcDtwdEI184AsIjmcuADjcQ5ACBhFACQMAoASBgFACSMAgASRgEACaMAgIRRAEDCuBBo6Qju/vFYqNnM7PVYBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwHf8P7Artm01KeP0AAAAASUVORK5CYII=
+
+
+ Software
+ 1
+ 3
+ Management of computer software and applications. Installation, upgrade, troubleshooting and removal of software.
+ production
+
+
+
+ Telecom and connectivity
+ 1
+ 3
+ Ordering and configuration of new mobile phones, computer connectivity requests, cabling, etc...
+ production
+
+
diff --git a/datamodels/2.x/itop-service-mgmt-provider/datamodel.itop-service-mgmt-provider.xml b/datamodels/2.x/itop-service-mgmt-provider/datamodel.itop-service-mgmt-provider.xml
index 3f93d882d..42789d20d 100755
--- a/datamodels/2.x/itop-service-mgmt-provider/datamodel.itop-service-mgmt-provider.xml
+++ b/datamodels/2.x/itop-service-mgmt-provider/datamodel.itop-service-mgmt-provider.xml
@@ -61,9 +61,11 @@
|
- status
+ status
- images/contract.png
+
@@ -407,7 +409,9 @@ public function PrefillSearchForm(&$aContextParam)
- images/contract.png
+
@@ -579,7 +583,9 @@ public function PrefillSearchForm(&$aContextParam)
- images/contract.png
+
@@ -918,9 +924,11 @@ public function PrefillSearchForm(&$aContextParam)
- icon
+ icon
- images/service.png
+
@@ -1003,10 +1011,12 @@ public function PrefillSearchForm(&$aContextParam)
- icon
- status
+ icon
+ status
- images/service.png
+
@@ -1362,9 +1372,11 @@ public function PrefillSearchForm(&$aContextParam)
- status
+ status
- images/service.png
+
@@ -1526,7 +1538,9 @@ public function PrefillSearchForm(&$aContextParam)
- images/sla.png
+
@@ -1665,7 +1679,9 @@ public function PrefillSearchForm(&$aContextParam)
- images/slt.png
+
@@ -2206,7 +2222,9 @@ public function PrefillSearchForm(&$aContextParam)
- images/service.png
+
diff --git a/datamodels/2.x/itop-service-mgmt/data.sample.servicefamilies.xml b/datamodels/2.x/itop-service-mgmt/data.sample.servicefamilies.xml
index 35ff4a85a..29c0a1cad 100644
--- a/datamodels/2.x/itop-service-mgmt/data.sample.servicefamilies.xml
+++ b/datamodels/2.x/itop-service-mgmt/data.sample.servicefamilies.xml
@@ -2,7 +2,15 @@
IT Services
-image/pngrepair-white-390h.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
+
diff --git a/datamodels/2.x/itop-service-mgmt/data.sample.services.xml b/datamodels/2.x/itop-service-mgmt/data.sample.services.xml
index ac6a045b8..ca6a9e24f 100755
--- a/datamodels/2.x/itop-service-mgmt/data.sample.services.xml
+++ b/datamodels/2.x/itop-service-mgmt/data.sample.services.xml
@@ -6,22 +6,46 @@
3
Ordering of new hardware (Desktop computer, laptop computer, monitor, mouse, keyboard...) and support in case of hardware failure.
production
-image/pnglaptop-white-390h.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
-
-
-Software
-1
-3
-Management of computer software and applications. Installation, upgrade, troubleshooting and removal of software.
-production
-image/pngsoftware-white-390h.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
-
-
-Telecom and connectivity
-1
-3
-Ordering and configuration of new mobile phones, computer connectivity requests, cabling, etc...
-production
-image/pngip-white-390h.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II=
+
+
+ Software
+ 1
+ 3
+ Management of computer software and applications. Installation, upgrade, troubleshooting and removal of software.
+ production
+
+
+
+ Telecom and connectivity
+ 1
+ 3
+ Ordering and configuration of new mobile phones, computer connectivity requests, cabling, etc...
+ production
+
+
diff --git a/datamodels/2.x/itop-service-mgmt/datamodel.itop-service-mgmt.xml b/datamodels/2.x/itop-service-mgmt/datamodel.itop-service-mgmt.xml
index 26694e584..ac03db44f 100755
--- a/datamodels/2.x/itop-service-mgmt/datamodel.itop-service-mgmt.xml
+++ b/datamodels/2.x/itop-service-mgmt/datamodel.itop-service-mgmt.xml
@@ -60,10 +60,12 @@
-
- status
-
- images/contract.png
+
+ status
+
+
@@ -407,7 +409,9 @@ public function PrefillSearchForm(&$aContextParam)
- images/contract.png
+
@@ -554,7 +558,9 @@ public function PrefillSearchForm(&$aContextParam)
- images/contract.png
+
@@ -892,7 +898,9 @@ public function PrefillSearchForm(&$aContextParam)
icon
- images/service.png
+
@@ -978,7 +986,9 @@ public function PrefillSearchForm(&$aContextParam)
icon
status
- images/service.png
+
@@ -1355,10 +1365,12 @@ public function PrefillSearchForm(&$aContextParam)
-
- status
-
- images/service.png
+
+ status
+
+
@@ -1520,7 +1532,9 @@ public function PrefillSearchForm(&$aContextParam)
- images/sla.png
+
@@ -1659,7 +1673,9 @@ public function PrefillSearchForm(&$aContextParam)
- images/slt.png
+
@@ -2120,7 +2136,9 @@ public function PrefillSearchForm(&$aContextParam)
- images/service.png
+
diff --git a/datamodels/2.x/itop-storage-mgmt/datamodel.itop-storage-mgmt.xml b/datamodels/2.x/itop-storage-mgmt/datamodel.itop-storage-mgmt.xml
index cf41d4fa6..18767118f 100644
--- a/datamodels/2.x/itop-storage-mgmt/datamodel.itop-storage-mgmt.xml
+++ b/datamodels/2.x/itop-storage-mgmt/datamodel.itop-storage-mgmt.xml
@@ -15,7 +15,9 @@
- images/storageArea.png
+
@@ -264,7 +266,9 @@
- images/switch-san.png
+
@@ -510,7 +514,9 @@
- images/tapelibrary.png
+
@@ -756,7 +762,9 @@
- images/nas.png
+
@@ -1002,7 +1010,9 @@
- images/tape.png
+
@@ -1094,7 +1104,9 @@
- images/filesystem.png
+
@@ -1201,7 +1213,9 @@
- images/fc-interface.png
+
@@ -1309,7 +1323,9 @@
- images/volume.png
+
diff --git a/datamodels/2.x/itop-structure/datamodel.itop-structure.xml b/datamodels/2.x/itop-structure/datamodel.itop-structure.xml
index f6cecf0ad..66948ab8c 100644
--- a/datamodels/2.x/itop-structure/datamodel.itop-structure.xml
+++ b/datamodels/2.x/itop-structure/datamodel.itop-structure.xml
@@ -21,10 +21,12 @@
-
- status
-
- images/building.png
+
+ status
+
+
@@ -94,7 +96,9 @@
0
Organization:Overview:FunctionalCIs
- itop-config-mgmt/images/server.png
+
Organization:Overview:FunctionalCIs:subtitle
SELECT FunctionalCI WHERE org_id=:this->id
finalclass
@@ -198,10 +202,12 @@
-
- status
-
- images/location.png
+
+ status
+
+
@@ -381,10 +387,14 @@
-
- status
-
- images/team.png
+
+ status
+
+
@@ -569,10 +579,12 @@
-
- picture
-
- images/person.png
+
+ picture
+
+
@@ -889,7 +901,9 @@
- images/team.png
+
@@ -1154,10 +1168,12 @@
-
- status
-
- images/document.png
+
+ status
+
+
@@ -1312,7 +1328,9 @@
- images/document.png
+
@@ -1425,7 +1443,9 @@
- images/document.png
+
@@ -1519,7 +1539,9 @@
- images/document.png
+
@@ -1743,7 +1765,9 @@
1
Menu:Contact
- itop-structure/images/team.png
+
Menu:Contact:Count
SELECT Contact
status
@@ -1797,7 +1821,9 @@
0
Menu:ConfigManagement:Typology
- itop-structure/images/typology.png
+
8
diff --git a/datamodels/2.x/itop-tickets/datamodel.itop-tickets.xml b/datamodels/2.x/itop-tickets/datamodel.itop-tickets.xml
index dc9df8816..c6ef3bd70 100755
--- a/datamodels/2.x/itop-tickets/datamodel.itop-tickets.xml
+++ b/datamodels/2.x/itop-tickets/datamodel.itop-tickets.xml
@@ -502,10 +502,12 @@
-
- status
-
- images/workorder.png
+
+ status
+
+
diff --git a/datamodels/2.x/itop-virtualization-mgmt/datamodel.itop-virtualization-mgmt.xml b/datamodels/2.x/itop-virtualization-mgmt/datamodel.itop-virtualization-mgmt.xml
index 6487b9f04..ca77f8230 100644
--- a/datamodels/2.x/itop-virtualization-mgmt/datamodel.itop-virtualization-mgmt.xml
+++ b/datamodels/2.x/itop-virtualization-mgmt/datamodel.itop-virtualization-mgmt.xml
@@ -269,14 +269,16 @@
- images/hypervisor.png
+
-
-
+
+
@@ -416,7 +418,9 @@
- images/cluster.png
+
@@ -541,7 +545,9 @@
- images/virtualmachine.png
+
@@ -551,7 +557,7 @@
-
+
@@ -773,7 +779,9 @@
- images/interface.png
+
@@ -782,7 +790,7 @@
- virtualmachine_id_obsolescence_flag
+ virtualmachine_id_obsolescence_flag
@@ -893,7 +901,9 @@
0
Menu:ConfigManagement:virtualization
- itop-virtualization-mgmt/images/hypervisor-sw.png
+
1
diff --git a/datamodels/2.x/itop-welcome-itil/datamodel.itop-welcome-itil.xml b/datamodels/2.x/itop-welcome-itil/datamodel.itop-welcome-itil.xml
index 98f96fd17..5a2528a9a 100644
--- a/datamodels/2.x/itop-welcome-itil/datamodel.itop-welcome-itil.xml
+++ b/datamodels/2.x/itop-welcome-itil/datamodel.itop-welcome-itil.xml
@@ -12,10 +12,12 @@
0
- 0
- Menu:ConfigManagementCI
- itop-welcome-itil/images/database.png
-
+ 0
+ Menu:ConfigManagementCI
+
+
3
Contact
diff --git a/setup/compiler.class.inc.php b/setup/compiler.class.inc.php
index 99f110d9e..10ff2625d 100644
--- a/setup/compiler.class.inc.php
+++ b/setup/compiler.class.inc.php
@@ -1051,7 +1051,7 @@ EOF
// State attribute (for XML v1.7- the lifecycle/attribute node should have been migrated in this one)
$oStateAttribute = $oFieldsSemantic->GetOptionalElement('state_attribute');
- if($oStateAttribute) {
+ if ($oStateAttribute) {
$sStateAttCode = $oStateAttribute->GetText();
}
}
@@ -1059,61 +1059,62 @@ EOF
$aClassParams['state_attcode'] = "'$sStateAttCode'";
// Reconcialiation
- if ($oReconciliation = $oProperties->GetOptionalElement('reconciliation'))
- {
+ if ($oReconciliation = $oProperties->GetOptionalElement('reconciliation')) {
$oReconcAttributes = $oReconciliation->getElementsByTagName('attribute');
$aReconcAttCodes = array();
- foreach($oReconcAttributes as $oAttribute)
- {
+ foreach ($oReconcAttributes as $oAttribute) {
$aReconcAttCodes[] = $oAttribute->getAttribute('id');
}
- if (empty($aReconcAttCodes))
- {
- $sReconcKeys = "array()";
- }
- else
- {
- $sReconcKeys = "array('".implode("', '", $aReconcAttCodes)."')";
- }
- }
- else
- {
+ if (empty($aReconcAttCodes)) {
+ $sReconcKeys = "array()";
+ } else {
+ $sReconcKeys = "array('".implode("', '", $aReconcAttCodes)."')";
+ }
+ } else {
$sReconcKeys = "array()";
}
$aClassParams['reconc_keys'] = $sReconcKeys;
-
+
$aClassParams['db_table'] = $this->GetPropString($oProperties, 'db_table', '');
$aClassParams['db_key_field'] = $this->GetPropString($oProperties, 'db_key_field', 'id');
- if (array_key_exists($sClass, $this->aRootClasses))
- {
+ if (array_key_exists($sClass, $this->aRootClasses)) {
$sDefaultFinalClass = 'finalclass';
- }
- else
- {
+ } else {
$sDefaultFinalClass = '';
}
$aClassParams['db_finalclass_field'] = $this->GetPropString($oProperties, 'db_final_class_field', $sDefaultFinalClass);
-
+
$this->CompileFiles($oProperties, $sTempTargetDir.'/'.$sModuleRelativeDir, $sFinalTargetDir.'/'.$sModuleRelativeDir, '');
- if (($sIcon = $oProperties->GetChildText('icon')) && (strlen($sIcon) > 0))
- {
- $sIcon = $sModuleRelativeDir.'/'.$sIcon;
- $aClassParams['icon'] = "utils::GetAbsoluteUrlModulesRoot().'$sIcon'";
+
+ // Style
+ if ($oStyle = $oProperties->GetOptionalElement('style')) {
+ $sMainColor = $oStyle->GetChildText('main_color');
+ $sComplementaryColor = $oStyle->GetChildText('complementary_color');
+// $bHasMainColor = (strlen($sMainColor) > 0);
+// $bHasComplementaryColor = (strlen($sComplementaryColor) > 0);
+// if ($bHasMainColor xor $bHasComplementaryColor) {
+// throw new DOMFormatException("Tags 'main_color' and 'complementary_color' must be set or empty together in node 'style' of class $sClass");
+// }
+ $sStyleCSSClass = "ibo-class-style--$sClass";
+ $sStyleCSSAltClass = "ibo-class-style-alt--$sClass";
+ if (($sIcon = $oStyle->GetChildText('icon')) && (strlen($sIcon) > 0)) {
+ $sIcon = $sModuleRelativeDir.'/'.$sIcon;
+ $sIcon = ", utils::GetAbsoluteUrlModulesRoot().'$sIcon'";
+ }
+ $aClassParams['style'] = "new ormStyle('$sStyleCSSClass', '$sStyleCSSAltClass', '$sMainColor', '$sComplementaryColor', null $sIcon)";
}
+
$oOrder = $oProperties->GetOptionalElement('order');
- if ($oOrder)
- {
+ if ($oOrder) {
$oColumnsNode = $oOrder->GetUniqueElement('columns');
$oColumns = $oColumnsNode->getElementsByTagName('column');
$aSortColumns = array();
- foreach($oColumns as $oColumn)
- {
+ foreach ($oColumns as $oColumn) {
$aSortColumns[] = "'".$oColumn->getAttribute('id')."' => ".(($oColumn->getAttribute('ascending') == 'true') ? 'true' : 'false');
}
- if (count($aSortColumns) > 0)
- {
+ if (count($aSortColumns) > 0) {
$aClassParams['order_by_default'] = "array(".implode(", ", $aSortColumns).")";
}
}
diff --git a/setup/itopdesignformat.class.inc.php b/setup/itopdesignformat.class.inc.php
index e1f7c1db3..48bb0cad3 100644
--- a/setup/itopdesignformat.class.inc.php
+++ b/setup/itopdesignformat.class.inc.php
@@ -801,10 +801,9 @@ class iTopDesignFormat
// New Enum values format
$oNodeList = $oXPath->query("/itop_design/classes//class/fields/field[@xsi:type='AttributeEnum']/values/value");
foreach ($oNodeList as $oNode) {
- $oNode->textContent = '';
-
$oCodeNode = $oNode->ownerDocument->createElement("enum_code", $oNode->textContent);
$oNode->appendChild($oCodeNode);
+ $oNode->textContent = '';
}
// MetaEnum
@@ -827,12 +826,28 @@ class iTopDesignFormat
$sTestRedBannerBackgroundColorPath = '/itop_design/branding/themes/theme[@id="test-red"]/variables/variable[@id="backoffice-environment-banner-background-color"]';
$this->SetNodeAttribute($sTestRedBannerBackgroundColorPath, 'id', 'ibo-page-banner-background-color');
-
+
$sTestRedBannerTextColorPath = '/itop_design/branding/themes/theme[@id="test-red"]/variables/variable[@id="backoffice-environment-banner-text-color"]';
$this->SetNodeAttribute($sTestRedBannerTextColorPath, 'id', 'ibo-page-banner-text-color');
-
+
$sTestRedBannerTextContentPath = '/itop_design/branding/themes/theme[@id="test-red"]/variables/variable[@id="backoffice-environment-banner-text-content"]';
$this->SetNodeAttribute($sTestRedBannerTextContentPath, 'id', 'ibo-page-banner-text-content');
+
+ // Add Class Style
+ $oNodeList = $oXPath->query("/itop_design/classes//class");
+ foreach ($oNodeList as $oNode) {
+ // Move "icon" node under "style" node
+ $oIconNode = $oXPath->query('icon', $oNode)->item(0);
+ if ($oIconNode) {
+ $sIcon = $oIconNode->textContent;
+ $this->DeleteNode($oIconNode);
+
+ $oStyleNode = $oNode->ownerDocument->createElement("style");
+ $oNode->appendChild($oStyleNode);
+ $oIconNode = $oNode->ownerDocument->createElement("icon", $sIcon);
+ $oStyleNode->appendChild($oIconNode);
+ }
+ }
}
/**
@@ -863,8 +878,7 @@ class iTopDesignFormat
foreach ($oNodeList as $oNode) {
// Move node under lifecycle only if there is such a node
$oLifecycleNode = $oXPath->query("../../../lifecycle", $oNode)->item(0);
- if($oLifecycleNode !== null)
- {
+ if ($oLifecycleNode !== null) {
// Create attribute node
$oAttributeNode = $oLifecycleNode->ownerDocument->createElement("attribute", $oNode->nodeValue);
$oLifecycleNode->appendChild($oAttributeNode);
@@ -881,10 +895,13 @@ class iTopDesignFormat
$oNodeList = $oXPath->query("/itop_design/classes//class/fields/field[@xsi:type='AttributeEnum']/values/value");
foreach ($oNodeList as $oNode) {
$oCodeNode = $oXPath->query('enum_code', $oNode)->item(0);
- $oNode->textContent = $oCodeNode->textContent;
+ $sCode = $oCodeNode->textContent;
$this->DeleteNode($oCodeNode);
$oStyleNode = $oXPath->query('style', $oNode)->item(0);
- $this->DeleteNode($oStyleNode);
+ if ($oStyleNode) {
+ $this->DeleteNode($oStyleNode);
+ }
+ $oNode->textContent = $sCode;
}
$sPath = "/itop_design/classes//class/fields/field[@xsi:type='AttributeEnum']/default_style";
@@ -894,15 +911,18 @@ class iTopDesignFormat
$oNodeList = $oXPath->query("/itop_design/classes//class/fields/field[@xsi:type='AttributeMetaEnum']/values/value");
foreach ($oNodeList as $oNode) {
$oCodeNode = $oXPath->query('enum_code', $oNode)->item(0);
- $oNode->textContent = $oCodeNode->textContent;
+ $sCode = $oCodeNode->textContent;
$this->DeleteNode($oCodeNode);
$oStyleNode = $oXPath->query('style', $oNode)->item(0);
- $this->DeleteNode($oStyleNode);
+ if ($oStyleNode) {
+ $this->DeleteNode($oStyleNode);
+ }
+ $oNode->textContent = $sCode;
}
$sPath = "/itop_design/classes//class/fields/field[@xsi:type='AttributeMetaEnum']/default_style";
$this->RemoveNodeFromXPath($sPath);
-
+
// N°3516 Bring back legacy themes
// Update test-red theme
$sTestRedBannerBackgroundColorPath = '/itop_design/branding/themes/theme[@id="test-red"]/variables/variable[@id="ibo-page-banner-background-color"]';
@@ -913,6 +933,23 @@ class iTopDesignFormat
$sTestRedBannerTextContentPath = '/itop_design/branding/themes/theme[@id="test-red"]/variables/variable[@id="ibo-page-banner-text-content"]';
$this->SetNodeAttribute($sTestRedBannerTextContentPath, 'id', 'backoffice-environment-banner-text-content');
+
+ // Remove class style
+ $oNodeList = $oXPath->query("/itop_design/classes//class");
+ foreach ($oNodeList as $oNode) {
+ $oStyleNode = $oXPath->query('style', $oNode)->item(0);
+ if ($oStyleNode) {
+ $oIconNode = $oXPath->query('icon', $oStyleNode)->item(0);
+ if ($oIconNode) {
+ // Move back the "icon" node to the class
+ $sIcon = $oIconNode->textContent;
+ $oNewIconNode = $oNode->ownerDocument->createElement("icon", $sIcon);
+ $oNode->appendChild($oNewIconNode);
+ $this->DeleteNode($oIconNode);
+ }
+ $this->DeleteNode($oStyleNode);
+ }
+ }
}
/**
diff --git a/sources/application/UI/Base/Component/FieldBadge/FieldBadgeFactory.php b/sources/application/UI/Base/Component/FieldBadge/FieldBadgeFactory.php
index ef467168e..7a9a10040 100644
--- a/sources/application/UI/Base/Component/FieldBadge/FieldBadgeFactory.php
+++ b/sources/application/UI/Base/Component/FieldBadge/FieldBadgeFactory.php
@@ -20,19 +20,21 @@ class FieldBadgeFactory
*/
public static function MakeForField(string $sValue, ?ormStyle $oStyle)
{
+ $oBadge = null;
if ($oStyle) {
$sStyleClass = $oStyle->GetStyleClass();
$sPrimaryColor = $oStyle->GetMainColor();
- $oBadge = new FieldBadge(null, $sStyleClass.' ibo-field-badge');
$sComplementaryColor = $oStyle->GetComplementaryColor();
- $sDecorationClasses = $oStyle->GetDecorationClasses();
- if ($sDecorationClasses != '') {
- $oBadge->AddHtml(" ");
- }
- $oBadge->AddHtml("$sValue");
- // Add custom style
- // TODO 3.0 To be removed when compilation supports generated CSS
- $oBadge->AddHtml(<<GetDecorationClasses();
+ if (!is_null($sDecorationClasses)) {
+ $oBadge->AddHtml(" ");
+ }
+ $oBadge->AddHtml("$sValue");
+ // Add custom style
+ // TODO 3.0 To be removed when compilation supports generated CSS
+ $oBadge->AddHtml(<<
.$sStyleClass {
color: $sComplementaryColor;
@@ -40,8 +42,10 @@ class FieldBadgeFactory
}
HTML
- );
- } else {
+ );
+ }
+ }
+ if (!$oBadge) {
$oBadge = new FieldBadge();
$oBadge->AddHtml("$sValue");
}
diff --git a/sources/application/UI/Base/Component/Panel/PanelFactory.php b/sources/application/UI/Base/Component/Panel/PanelFactory.php
index 6b7de75ef..49de22a62 100644
--- a/sources/application/UI/Base/Component/Panel/PanelFactory.php
+++ b/sources/application/UI/Base/Component/Panel/PanelFactory.php
@@ -19,6 +19,9 @@
namespace Combodo\iTop\Application\UI\Base\Component\Panel;
+use MetaModel;
+use ormStyle;
+
/**
* Class PanelFactory
*
@@ -163,8 +166,7 @@ class PanelFactory
public static function MakeForClass(string $sClass, string $sTitle)
{
$oPanel = new Panel($sTitle);
- // TODO 3.0.0: Change this to class color when done
- $oPanel->SetColor(Panel::ENUM_COLOR_BLUE);
+ self::SetClassColor($sClass, $oPanel);
return $oPanel;
}
@@ -185,4 +187,24 @@ class PanelFactory
return $oPanel;
}
+
+ /**
+ * @param string $sClass
+ * @param \Combodo\iTop\Application\UI\Base\Component\Panel\Panel $oPanel
+ *
+ * @throws \CoreException
+ */
+ public static function SetClassColor(string $sClass, Panel $oPanel): void
+ {
+ /** @var ormStyle $oStyle */
+ $sColor = null;
+ $oStyle = MetaModel::GetClassStyle($sClass);
+ if ($oStyle) {
+ $sColor = $oStyle->GetMainColor();
+ }
+ if (strlen($sColor) == 0) {
+ $sColor = Panel::ENUM_COLOR_BLUE;
+ }
+ $oPanel->SetColor($sColor);
+ }
}
\ No newline at end of file
diff --git a/sources/application/UI/Helper/UIHelper.php b/sources/application/UI/Helper/UIHelper.php
index e1b0cf533..e1a9b8e6c 100644
--- a/sources/application/UI/Helper/UIHelper.php
+++ b/sources/application/UI/Helper/UIHelper.php
@@ -15,6 +15,19 @@ class UIHelper
{
public static function GetColorFromStatus(string $sClass, ?string $sStateCode): string
{
+ // Example on how to get the color for the current status of a class
+// $sStatusColor = 'neutral';
+// $sStateAttCode = MetaModel::GetStateAttributeCode($sClass);
+// if (strlen($sStateAttCode) == 0) {
+// return $sStatusColor;
+// }
+//
+// $oStyle = MetaModel::GetEnumStyle($sClass, $sStateAttCode, $sStateCode);
+// if ($oStyle) {
+// $sStatusColor = $oStyle->GetMainColor();
+// }
+// return $sStatusColor;
+
$sRootClass = MetaModel::GetRootClass($sClass);
switch ($sRootClass) {
case 'Ticket':