mirror of
https://github.com/Combodo/iTop.git
synced 2026-03-06 09:34:13 +01:00
N°2677 - Add style definition for enums (MetaModel::GetEnumStyle() API)
This commit is contained in:
@@ -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');
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -121,6 +121,11 @@
|
||||
</style>
|
||||
</value>
|
||||
</values>
|
||||
<default_style>
|
||||
<main_color>#2B6CB0</main_color>
|
||||
<complementary_color>#FFFFFF</complementary_color>
|
||||
<decoration_classes/>
|
||||
</default_style>
|
||||
<sql>status</sql>
|
||||
<default_value>new</default_value>
|
||||
<is_null_allowed>false</is_null_allowed>
|
||||
|
||||
@@ -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');
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user