From d4aeb4b157006bb0323c661bfaa2f7c7580784a3 Mon Sep 17 00:00:00 2001 From: Eric Date: Wed, 6 Jan 2021 13:57:46 +0100 Subject: [PATCH] =?UTF-8?q?N=C2=B02677=20-=20Add=20style=20definition=20fo?= =?UTF-8?q?r=20classes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/dashlet.class.inc.php | 10 +- core/metamodel.class.php | 29 ++- core/ormStyle.class.inc.php | 42 ++-- .../datamodel.itop-change-mgmt-itil.xml | 185 +++++++++++++++--- .../datamodel.itop-change-mgmt.xml | 167 +++++++++++++--- .../datamodel.itop-config-mgmt.xml | 132 +++++++++---- .../datamodel.itop-datacenter-mgmt.xml | 20 +- .../datamodel.itop-enduser-devices.xml | 36 +++- .../datamodel.itop-faq-light.xml | 4 +- .../datamodel.itop-incident-mgmt-itil.xml | 90 +++++++-- .../datamodel.itop-knownerror-light.xml | 4 +- .../src/Controller/ManageBrickController.php | 13 +- .../datamodel.itop-problem-mgmt.xml | 4 +- .../datamodel.itop-request-mgmt-itil.xml | 55 ++++-- .../datamodel.itop-request-mgmt.xml | 105 +++++++--- .../data.sample.servicefamilies.xml | 10 +- .../data.sample.services.xml | 58 ++++-- .../datamodel.itop-service-mgmt-provider.xml | 46 +++-- .../data.sample.servicefamilies.xml | 10 +- .../data.sample.services.xml | 58 ++++-- .../datamodel.itop-service-mgmt.xml | 48 +++-- .../datamodel.itop-storage-mgmt.xml | 32 ++- .../datamodel.itop-structure.xml | 80 +++++--- .../itop-tickets/datamodel.itop-tickets.xml | 10 +- .../datamodel.itop-virtualization-mgmt.xml | 28 ++- .../datamodel.itop-welcome-itil.xml | 10 +- setup/compiler.class.inc.php | 67 +++---- setup/itopdesignformat.class.inc.php | 59 ++++-- .../FieldBadge/FieldBadgeFactory.php | 26 +-- .../UI/Base/Component/Panel/PanelFactory.php | 26 ++- sources/application/UI/Helper/UIHelper.php | 13 ++ 31 files changed, 1105 insertions(+), 372 deletions(-) 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.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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-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.pngiVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAUW0lEQVR4Xu3df6xfdX3H8ef7hDRNQxhpWEeapmm6xhhiGHHE4KYUKQPlh4JYEXSa4RZkCMZszGy6EEbIYiYhEX8h4IaMoVSEWrHCbPmpQ8DrpVy6qgwZccw0pJqudh0hn9f+OOfiBe/9fu6P7/l+z4/XI+kfvfd129v0ft7nfT7nnPcBMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxuNyAXMmkYSwLKZH4uIF2dP2yAuANZIKaXVEXHKHJ9eDlw/4/f7gI/OkX08InbP8bnecwGwsUopHQ4UEbEBuHrGp1YCb5j9q+ZP0p6IeLb67S5JM/+O/UVRzPJV/eECYGORUnpnRBwFXAGszuVrcjHwUkTcmAt2lQuAjYSkIynP268CNlAe3Q8f+EWjkYD7Jb0YER8AUkS8kPsiM5sHScskXSbpR2qH/5F0WUppXF3JSLkDsKGTtAI4CjhR0qURseRz+VGTNAXsj4iPA5MR8cvc17SRC4ANlaQzgfOBC3LZFtkJnNfFUwMXABsKSUcDJ0u6LiJW5vIttAe4GfiXiHguF24LFwBbMkl/CbwXOC6X7YDngc0R8b1csA1cAGzRJB0j6aKI+DDQpwvqeyX9XlEUP88Fm65P/2k2RJJOB74fEZfRv5+jVRHxvlyoDfr2H2dLJGmNpAuA22jGdfxxOScXaIPDcgGzaZJWA3cwhFt0O+CWXKANvAdg8yJpLbCVfmz05TwDvDEi9uaCTedTAMuStArYghc/wHPAuV1Y/OACYBmS1gH34Lb/AHAv8EcRMZkLt4VPAWxOKaW/iYhzgONz2R64NCI+kwu1jQuAzUrSnwPX0e8u8Rlgp6SPRMShiEi5L2gbXwWw36Dy0d0P0u/F/3eSthZFMZELtpk7AHsFSespd/tfl8t21IPALZJu7MO0IBcAe5mkI4AH6N9uf5J0sBoI8nBXdvjnwwXAgPLIL+nOiDg2l+2YBFwSEV/IBbvIBcCQtAx4DOjT4j8k6WHg2qIovpULd5U3AQ1Jp/TsyP9PwPVFUTySC3adC0DPSXo7cFMu1xEvAF8EroiIl3LhPvApQM9J5Wt2Ou554OvAX0fEgVy4T9wB9FRKaXlEXJXLtdyLwF7gvRHxYC7cR+4AekrS2cCduVyLPQxsiYhP54J95gLQU5KeAo7J5VpoH+VdjI9EROtHdtXNpwA9VG38vSaXa6EvSbq1KIqduaCV3AH0jKQ3AduAI3PZltgH7AIuAZ6JiEOZvM3gDqB/PkhHFn91++75EXFvLmuzcwfQM5J+QfsLwNOSvh4Rn49fv/rbFsEdQI9IeiewPJdrsCTpcuCuoiieyYUtzwWgJ1JKRwIfoL0F4GHgmqIo7soFbf5cAHoiIo4D3p7LNY3Kt/R+PiK+0MWJPOPmPYCekPQTYEMu1zC7gY3RwbfyNkX3R54YAJLa+Bafa7z46+UC0AMppU9GxKpczvrHBaAHImI5/r+2WfiHouMknQB8OJezfnIB6L4C/z/bHPyD0X235gLWXy4AZj3mAtBhKaXjgTZe/rMRcQHosIjYDByVy1l/uQCY9ZgLgFmPuQB0lKRVwPG5nPWbC0B3rQZOzoWs31wAzHrMBcCsx1wAzHrMBcCsx1wAzHrMBaC7uvjmHxsyF4DuujIXMHMBMOsxFwCzhkgprU8p3ZBSukHSibm82ZwknaD2uzD37+wCSSdJulXSr6b/4Sml/00p1V4E3AF0l9+S23CSVku6BdgKXACsmP5cRCyPiNtUvs25Ni4AZiMm6aSU0i3AfwLvA46YI7oaWD/H54bCrwYzGxFJBXC6pJsjYmUuPwruAMxqllJallK6AHgK2NaUxQ/uAMxqIwlJp0fEpcBbc/lxcAEwq0FKaT1wakR8PpcdJ58CdNczwO25UMP9haS/l7RSUi7bCJKWSboqIrYCS138L1a/zBZO0ifVHR+WVOuO+FJJOkXSDZl/x0Jsz/2dS+VTAGuL64CLJJ0maV9RFI25z0HSkcBXgeOAVr2F2acA1iavA/4LuC6ldEouPAoppQ9VR+pTadniB4hcwNpL0hrgMeDoXLaF9gK7gIuA5yNipB2Bynb/6oh4PfV10r8fERO50FK4AHScpJ8C63K5lvtURFyeCw2DpKOBC4GPMfcdfEMh6beKotifyy2FTwG67/lcoAMuk/SEpDNVvg9h6FJKyyVdCTwEXE3Ni5/y/y3lQkvlDqDjJJ0A/Fsu1yEPA7dFxOdywfmSdKKk8yPiQ7nsEF0UEV/MhZbKHUD3HaQ8X+6LNwHXppR+pCU+Uy9plaTtku4Y8eI/IOmFXGgYXAA6LiJ2AV/J5TpmWUS8BvhqSumTkhbcrqeUPkR5ae+tETHqNyw/WhTF13OhYXAB6If/oJ93lB0dEX8F/HtK6UpJx+S+QNIxKaUrI+Ja4KRcviZP5wLD4j2Ankgp/XdEdPFy4EI8B9wFXB4RryiIkpYB/wCcDayd5WtH6XciYiSnbe4AeiIiducyPbAWuAzYJulkSUX162RgW/W5cS/+jwMjOf+H+m5gsOa5Cr8teNqp1a8bq9//6YDsqB2IiNov/03zKUBPpJQOi4jrKW9isQaS9GhEvPnVpyd18ilATxRF8ZKkGygvC1oDRcR1o1z84ALQCZI2SLo7lyuK4hH6eTWgDaaAb+dCw+YC0HIqh2VsAU6U9J5cHvh0LmBjcXNEjGzzb5oLQItJ2gB8NyKOAw4Hzlf5bPogd1BOC7LmmIiIT+VCdXABaKmU0krKxfzaGR9+O5nLWNWdgedK8qlAc1yTC9TFBaCFUkobIuIB4NhZPn3SLB97hYiYjIiduZyNxCQwtv8LF4CWSSmtjIg7Kafj/AZJl0haPtvnXuU6vCE4bs8B50bEz3PBurgAtIikDRFxH3MsfoDqIZgtub2AiPgWcPGgjNVL0l0RMdb9GN8I1BKSVgLf5ZXn/IO8MSIeyYUk/QLIbRza8P0zcHFEHMgF6+QOoAWq6/w7mP/ih3nOpJf0Fkb49JkBsJ9yaMlYFz+4ADSepKMkba0u9S3EayS9PxcqimISOCeXs6G6uDoFGzsXgAZT+SKMeyIi+xz7LFZIOl/zG4axR1IjfiB74FHgwVxoVLwH0FAqp8/uABaz+F8m6faiKM6bR24lcD3wrlzWFm0SOCMiGjOo1R1AA0laB9zNEhc/QET8gcrBoLncPuCPgW/msrYojwLvaNLiB3cAjaPyZR7bGXCpbxH2Uh55Hs8Fq8uH1wPvzmVt3iaB02JEU34Wwh1Ag0haC8x5k88SrKIcd5UVEb8E/gR3AsPyOHBOExc/uAA0RrX47waOz2UX6QRJn5CUnQIVEQeBW4CxX6ZqM0kHJb0tIp7NZccl+8Ng9ZO0RuXs+WEf+WdaTjkWbD/zeCQ4Im6XBOW+wJmZuP2miYi4aRyP+C6E9wDGrNrw28bw2/65PCrpHUVRzOv+c0krgH/EewILMQW8uTqdajSfAoxRdanvDka3+AHeEBG3zedUAF4+HbgI7wnM1yTlbn/jFz+4AIxNSmk95XX+1+eyNTgJ2F4VoKzqh3kz8LVcts8k7QI2jvsBn4XwKcAYqHyD7XbGs/hnejAiNuZC01SOH7slIk7PZXvoYuDeNi1+cAEYOZVjvLYyhJt8hmSnpPcuYE/gMMqHku4ENmTiffCCpA8A3yqK9jXULgAjVN1uuwNY6IM9ddsZEZtyoZlSSsdFOZugz48S/5Okm4uiuD8XbCoXgBFR+UjvtohYyCO9o/QgcF4scDqNpAspHz1elst2yKSkTUVR7MsFm84FYASqI/99zD7Dr0m+A7wtIl7KBWeSdDpwqaSTI6LLheAl4FLgOxHRiRkKLgA1q87567i9ty73Szp/vnsCM0k6jvKy5vpctoW+AdwUEd/IBdvEBaBG1a75AzXf4VeHR4Fbgc8tohs4FjiX8k27y4AVg7+i0Q5RDu78iKSHi6LwrdE2P9U5/xNqt0/k/p2DpJROkHRT7i9pqK2S3pn7N7adO4AaVKO7H6I5l/oW6xDwCHD5fB4lnk31VuI3AX8r6ZiIWEkzNwyTpL3A1RExJWmyKIpW3M23FC4AQ5ZS2gBsiYXP8GuyvZS3t2anDOdIugz4XeA9lI8pj1sCPiPpUFEUH8uFu8YFYIgkHQU8QPuP/LP5maTvRcSfRcT+XDhH5V7BCsrXYq2mfFpxXrcmL8EhYHpz87PAwwDDKGxt5QIwJCoHeG5h/Lf31krStyPitoj4ci67EConIV0640PrGM4TiDsph3IA/CQibhwU7hsXgCHQkAZ4tshB4MeU97/vqePJN5XTjOe6nLic8hHlaVdQfj+zeT4aOo2nCVwAlqgvR/4BvglsjohDuaA1jwvAEkhaDdxDe27yqYWkH0fEZ4H7gefq6AisHi4AiyRprcoxXnXN8Gurb1C+9uoruaCNnwvAIujXAzx7feQf4ADlrIEzckEbr/Y9wDxm1W71qMd4tYqkp4GP5HI2fu4AFkCjH+DZRnuAP4zyTUPWcO4A5qna8PORf7BdwFle/O3hDmAeqkt9W/HiH2RK0sYuDMnoE3cAGSoHeG7Bi3+QKUnnePG3jzuAAdS8AZ5NtEvSW7z428kFYA4qh3ns6NhTfcO2h/KcvxPjsfrIBWAW1ZF/G+X4a5uFpMmI2OQNv3ZzAXgVtWeA59hI2h0R7/CRv/28CThDNczjIbz4B5mIiI1e/N3gDqBSHfkfwLv9g+ymPOdv1euvbG7uAHj5nP8+vPgHmQA2efF3S+87gGq3/6GI8KW+uU1RHvmfzQWtXXrdAVRH/h1e/AM9Tvm2oGdzQWuf3nYA6vYAz2GZAs6IiOdyQWunXnYA1b399+DFPydJj+PF33m96wB6OMBzMaYo2/6f5YLWbr3qACStl3Q3XvyDTFBu+Hnx90BvOgAP8JyX3ZSX+hb8ZmBrp150AJLWSfIkn8EmJJ3lxd8vne8AUkprI8IDPAfbDbzFL9Don053AJLWRITHeA02SfniTy/+HupsB5BSWgdsiwgv/jlI2hMRHuDZY53sACStjog7vPgH2hURHuDZc53rADzAc16mgI1e/NapDsADPPMkTQHnePEbdKgDSCltiAgP8BxsF+Vuvxe/AR3pAFJKKyNiC178g+wGzvXit5la3wF4gGeepElgk0d326u1ugOohnlswYt/kN3AZi9+m01rOwD5pR3zMQGcFhEv5ILWT60sANU5vwd4DuYBnpbVulMASRu8+LM8wNPmpVUdQDW6+yHc9g8yRXlvvxe/ZbWmA5C0QZIn+QxQjfE6zYvf5qsVHUB1zv9dvNs/iAd42oI1vgOo7vDbgRf/IB7gaYvS6A6gurf/Ptz2D+IBnrZoje0Aqqf6tuPFP4gHeNqSNLID8ADPeZmi3PB7Phc0m0vjOoDpST548Q8yQXmpz4vflqRRHYCkNZK2e5LPQB7gaUPTmA4gpbQWuNOLf27VU30e4GlD04gOQNI63Pbn7AE8wNOGauwdgKTVkjy6e7BdlLv9Xvw2VGMtANWlvnsi4vW57BL8GPiMpN+e5dcZwM7cHzBm0+f8T+eCZq0h6eiU0g9Uo5TSTyUN7CwkFSmlGwb/SWPzZEppw6Dv36x1VL6l96ncT/8SXZlSWpH7XgBSSodJWpX7A0fsCZVPP5rVZuSnAJKOohzdXecdfj8DthRFcTAXBCiK4iVJ+yTdmMuOgiQP8LTuUflIb91HfqWUjs19L7ORVEjakfvza/ZD+chvIzKyDqD6oa77yA/wNeDZXGg2EZEkXZPL1Wg3sNlHfhuVkRQAlUf+h4Djctkh2FMUxf5caIBHc4GaTFC+rsu7/TYytRcASQBvjYi6j/xtNn3k9/ReG6naCwBwNnBdLtRXkjzA08am1gIgaTlwSS7XY1MRsTkifp4LmtWh1gIAvBs4JRfqo+rI7wGeNla1FYDq3H8cl7Per/LhokWJiCtymSGYiohz/Ty/jVttBQBYBlybC9VgLWXnsWAqbxs+NZdbosclnRERz+aCZq0ladlsd7mMyK8kXZj7HmdKKa2onh2oTUrpSUlrct+L2agclgu01ArgfElExJdyYZVH/s3Aukx0KSYob+/1AE9rjNoGgkhaBvxfLlezg8CVwO2ztdwppSOAdRFxN1DnkdkDPK2Rul4Apj0HfHmWj78WeNcsHx+mCcqbfLzbb43TlwIwLh7gaY1W51WAvpuU5AGe1mhd3QQctz2SNhVF4af6rNHcAQyZytHdZ3nxWxvUWQBepH/PAeyOiE1+pNfaorYCEBEAB3K5DpmifGmHj/zWGrVdBYBy2GZ1jb3u22vHbUrSRrf91ja1dQBQDtuk+7MAdgPnePFbG9VaAAAkfRO4OJdro2rD780+57e2qr0AFEUBcC/l6626ZE81zMNHfmutWvcAZpJ0BLADOD6XbYFJX+e3Lqi9A5gWEfslnUf7O4HdkjZ78VsXjKwDmJZSWkn5QtA2dgITwNt8e691xcg6gGlFUeyLiM3AZC7bMFOUT/V58VtnjLwDmCZpFbANeEMu2wATwFl+nt+6ZuQdwLTqSNr4TkDSlCQP8DSrg6TVKaXvq5kek2f4mdVL0hqVb8VtkidTSmtz37uZDYGkNU3pBFJKP9AS3i1gZosgabXG3wk8KWl17ns1sxpIWitpLJ1AdeRfn/sezaxGklZp9J3AU5KOzn1vZjYCktallB7Lrdoh8ZHfrGlSSislPZFbvUv0lKSjct+LmY1BSmm9yuvxdfihpA2578HMxkjSERpyJ5BSekrSOF5fbmYLJWm9ynP1YXhCPvKbtUtKaYWkMyXdk1ngc/lXSWdLWpH7u8z6YGxPAy5FNW34AuBw4LO5PPBRYB/lW4IP5cJmfdHKAjBNEsCyXA54sXpPgZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ2Rj8P38yMXitRpLlAAAAAElFTkSuQmCC + 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':