diff --git a/core/attributedef.class.inc.php b/core/attributedef.class.inc.php
index fac45c133..f03e666b9 100644
--- a/core/attributedef.class.inc.php
+++ b/core/attributedef.class.inc.php
@@ -5184,7 +5184,7 @@ class AttributeEnum extends AttributeString
*
* @return \ormStyle|null
*/
- protected function GetStyle(?string $sValue): ?ormStyle
+ public function GetStyle(?string $sValue): ?ormStyle
{
if ($this->IsParam('styled_values')) {
$aStyles = $this->Get('styled_values');
diff --git a/core/metamodel.class.php b/core/metamodel.class.php
index 722675e2c..39be94e85 100644
--- a/core/metamodel.class.php
+++ b/core/metamodel.class.php
@@ -7518,8 +7518,7 @@ abstract class MetaModel
$sKey = self::DBGetKey($sClass);
$sRootKey = self::DBGetKey($sRootClass);
$sRootField = self::DBGetClassField($sRootClass);
- if ($sTable != $sRootTable)
- {
+ if ($sTable != $sRootTable) {
// Copy the finalclass of the root table
$sRequest = "UPDATE `$sTable`,`$sRootTable` SET `$sTable`.`$sField` = `$sRootTable`.`$sRootField` WHERE `$sTable`.`$sKey` = `$sRootTable`.`$sRootKey`";
$aRequests[] = $sRequest;
@@ -7528,6 +7527,26 @@ abstract class MetaModel
return $aRequests;
}
+
+ /**
+ * @param string $sClass
+ * @param string $sAttCode
+ * @param string $sValue
+ *
+ * @return \ormStyle|null
+ * @throws \Exception
+ * @throws \CoreException
+ */
+ public static function GetEnumStyle(string $sClass, string $sAttCode, string $sValue = ''): ?ormStyle
+ {
+ $oAttDef = self::GetAttributeDef($sClass, $sAttCode);
+ if (!$oAttDef instanceof AttributeEnum) {
+ throw new CoreException("MetaModel::GetEnumStyle() Attribute $sAttCode of class $sClass is not an AttributeEnum\n");
+ }
+
+ /** @var AttributeEnum $oAttDef */
+ return $oAttDef->GetStyle($sValue);
+ }
}
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 cf18574d0..e232dcb6e 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
@@ -121,6 +121,11 @@
+
+ #2B6CB0
+ #FFFFFF
+
+
status
new
false
diff --git a/setup/compiler.class.inc.php b/setup/compiler.class.inc.php
index 79343d139..3dbd40aa8 100644
--- a/setup/compiler.class.inc.php
+++ b/setup/compiler.class.inc.php
@@ -1379,8 +1379,10 @@ CSS;
}
$sValues = '"'.implode(',', $aValues).'"';
$aParameters['allowed_values'] = "new ValueSetEnum($sValues)";
- $sStyledValues = "[".implode(',', $aStyledValues)."]";
- $aParameters['styled_values'] = "$sStyledValues";
+ if (count($aStyledValues) > 0) {
+ $sStyledValues = "[".implode(',', $aStyledValues)."]";
+ $aParameters['styled_values'] = "$sStyledValues";
+ }
$oStyleNode = $oField->GetOptionalElement('default_style');
if ($oStyleNode) {
$sMainColor = $this->GetMandatoryPropString($oStyleNode, 'main_color');
@@ -1440,8 +1442,10 @@ CSS;
}
// new style... $sValues = 'array('.implode(', ', $aValues).')';
$sValues = '"'.implode(',', $aValues).'"';
- $sStyledValues = "[".implode(',', $aStyledValues)."]";
- $aParameters['styled_values'] = "$sStyledValues";
+ if (count($aStyledValues) > 0) {
+ $sStyledValues = "[".implode(',', $aStyledValues)."]";
+ $aParameters['styled_values'] = "$sStyledValues";
+ }
$oStyleNode = $oField->GetOptionalElement('default_style');
if ($oStyleNode) {
$sMainColor = $this->GetMandatoryPropString($oStyleNode, 'main_color');
diff --git a/test/core/MetaModelTest.php b/test/core/MetaModelTest.php
index f59c845dc..093500ea2 100644
--- a/test/core/MetaModelTest.php
+++ b/test/core/MetaModelTest.php
@@ -4,6 +4,7 @@
namespace Combodo\iTop\Test\UnitTest\Core;
use Combodo\iTop\Test\UnitTest\ItopDataTestCase;
+use CoreException;
use MetaModel;
/**
@@ -255,8 +256,7 @@ class MetaModelTest extends ItopDataTestCase
$m_PluginManager->GetPlugins($interface, $className);
$pluginInstance = $m_PluginManager->GetPlugins($interface, $className);
- if (sizeof($expectedResults)==0)
- {
+ if (sizeof($expectedResults) == 0) {
$this->assertNull($pluginInstance);
return;
}
@@ -265,16 +265,56 @@ class MetaModelTest extends ItopDataTestCase
$this->assertTrue(is_a($pluginInstance, $expectedResults[0]));
}
- public function getPluginsProvider(){
+ public function getPluginsProvider()
+ {
$aInterfaces = [
- "empty conf" => [ 0, [], [], [], 'Wizzard', Gryffindor::class],
- "simple instance retrieval" => [ 1, [Gryffindor::class], [ 'Wizzard' => [ Gryffindor::class]], [], 'Wizzard', Gryffindor::class],
- "check instanceof parameter" => [ 1, [Gryffindor::class], [ 'Wizzard' => [ Gryffindor::class, Slytherin::class]], [], 'Wizzard', Gryffindor::class],
- "try to retrieve a non instanciable object" => [ 1, [Gryffindor::class], [ 'Wizzard' => [ Gryffindor::class, Muggle::class]], [], 'Wizzard', Gryffindor::class ],
+ "empty conf" => [0, [], [], [], 'Wizzard', Gryffindor::class],
+ "simple instance retrieval" => [1, [Gryffindor::class], ['Wizzard' => [Gryffindor::class]], [], 'Wizzard', Gryffindor::class],
+ "check instanceof parameter" => [1, [Gryffindor::class], ['Wizzard' => [Gryffindor::class, Slytherin::class]], [], 'Wizzard', Gryffindor::class],
+ "try to retrieve a non instanciable object" => [1, [Gryffindor::class], ['Wizzard' => [Gryffindor::class, Muggle::class]], [], 'Wizzard', Gryffindor::class],
];
return $aInterfaces;
}
+
+ /**
+ * @dataProvider GetEnumStyleProvider
+ */
+ public function testGetEnumStyle($sClass, $sAttCode, $sValue, $sAwaitedCSSClass)
+ {
+ $oStyle = MetaModel::GetEnumStyle($sClass, $sAttCode, $sValue);
+
+ if (is_null($sAwaitedCSSClass)) {
+ self::assertNull($oStyle);
+ return;
+ }
+
+ self::assertInstanceOf('ormStyle', $oStyle);
+
+ self::assertEquals($sAwaitedCSSClass, $oStyle->GetStyleClass());
+ }
+
+ public function GetEnumStyleProvider()
+ {
+ return [
+ 'status-new' => ['UserRequest', 'status', 'new', 'ibo-enum--UserRequest-status-new'],
+ 'status-default' => ['UserRequest', 'status', '', 'ibo-enum--UserRequest-status'],
+ 'urgency' => ['UserRequest', 'origin', 'mail', null],
+ ];
+ }
+
+ public function testGetEnumStyleException()
+ {
+ try {
+ MetaModel::GetEnumStyle('Contact', 'name', '');
+ } catch (CoreException $e) {
+ self::assertContains('AttributeEnum', $e->getMessage());
+ return;
+ }
+
+ // Should not get here
+ assertTrue(false);
+ }
}
abstract class Wizzard