mirror of
https://github.com/Combodo/iTop.git
synced 2026-02-13 07:24:13 +01:00
N°1839 Update TriggerOnThresholdReached to select attribute from a set of valid attributes instead of typing it manually
This commit is contained in:
@@ -9170,6 +9170,8 @@ class AttributeClassAttCodeSet extends AttributeSet
|
||||
{
|
||||
const SEARCH_WIDGET_TYPE = self::SEARCH_WIDGET_TYPE_STRING;
|
||||
|
||||
const DEFAULT_PARAM_INCLUDE_CHILD_CLASSES_ATTRIBUTES = false;
|
||||
|
||||
public function __construct($sCode, array $aParams)
|
||||
{
|
||||
parent::__construct($sCode, $aParams);
|
||||
@@ -9186,69 +9188,111 @@ class AttributeClassAttCodeSet extends AttributeSet
|
||||
return max(255, 15 * $this->GetMaxItems());
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $aArgs
|
||||
* @param string $sContains
|
||||
*
|
||||
* @return array|null
|
||||
* @throws \CoreException
|
||||
*/
|
||||
public function GetAllowedValues($aArgs = array(), $sContains = '')
|
||||
{
|
||||
if (isset($aArgs['this']))
|
||||
if (!isset($aArgs['this']))
|
||||
{
|
||||
$oHostObj = $aArgs['this'];
|
||||
$sTargetClass = $this->Get('class_field');
|
||||
$sClass = $oHostObj->Get($sTargetClass);
|
||||
|
||||
$aAllowedAttributes = array();
|
||||
if (empty($sClass))
|
||||
{
|
||||
$aAllAttributes = array();
|
||||
}
|
||||
else
|
||||
{
|
||||
$aAllAttributes = MetaModel::GetAttributesList($sClass);
|
||||
}
|
||||
$sAttDefExclusionList = $this->Get('attribute_definition_exclusion_list');
|
||||
$aExcludeDefs = array();
|
||||
if (!empty($sAttDefExclusionList))
|
||||
{
|
||||
foreach(explode(',', $sAttDefExclusionList) as $sAttDefName)
|
||||
{
|
||||
$sAttDefName = trim($sAttDefName);
|
||||
$aExcludeDefs[$sAttDefName] = $sAttDefName;
|
||||
}
|
||||
}
|
||||
|
||||
$sAttDefList = $this->Get('attribute_definition_list');
|
||||
if (!empty($sAttDefList))
|
||||
{
|
||||
$aAllowedDefs = array();
|
||||
foreach(explode(',', $sAttDefList) as $sAttDefName)
|
||||
{
|
||||
$sAttDefName = trim($sAttDefName);
|
||||
$aAllowedDefs[$sAttDefName] = $sAttDefName;
|
||||
}
|
||||
foreach($aAllAttributes as $sAttCode)
|
||||
{
|
||||
$oAttDef = MetaModel::GetAttributeDef($sClass, $sAttCode);
|
||||
$sAttDef = get_class($oAttDef);
|
||||
if (isset($aAllowedDefs[$sAttDef]) && !isset($aExcludeDefs[$sAttDef]))
|
||||
{
|
||||
$aAllowedAttributes[$sAttCode] = $sAttCode.' ('.MetaModel::GetLabel($sClass, $sAttCode).')';
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach($aAllAttributes as $sAttCode)
|
||||
{
|
||||
$oAttDef = MetaModel::GetAttributeDef($sClass, $sAttCode);
|
||||
$sAttDef = get_class($oAttDef);
|
||||
if (!isset($aExcludeDefs[$sAttDef]))
|
||||
{
|
||||
$aAllowedAttributes[$sAttCode] = $sAttCode.' ('.MetaModel::GetLabel($sClass, $sAttCode).')';
|
||||
}
|
||||
}
|
||||
}
|
||||
return $aAllowedAttributes;
|
||||
return null;
|
||||
}
|
||||
|
||||
return null;
|
||||
$oHostObj = $aArgs['this'];
|
||||
$sTargetClass = $this->Get('class_field');
|
||||
$sRootClass = $oHostObj->Get($sTargetClass);
|
||||
$bIncludeChildClasses = $this->GetOptional('include_child_classes_attributes', static::DEFAULT_PARAM_INCLUDE_CHILD_CLASSES_ATTRIBUTES);
|
||||
|
||||
$aExcludeDefs = array();
|
||||
$sAttDefExclusionList = $this->Get('attribute_definition_exclusion_list');
|
||||
if (!empty($sAttDefExclusionList))
|
||||
{
|
||||
foreach(explode(',', $sAttDefExclusionList) as $sAttDefName)
|
||||
{
|
||||
$sAttDefName = trim($sAttDefName);
|
||||
$aExcludeDefs[$sAttDefName] = $sAttDefName;
|
||||
}
|
||||
}
|
||||
|
||||
$aAllowedDefs = array();
|
||||
$sAttDefList = $this->Get('attribute_definition_list');
|
||||
if (!empty($sAttDefList))
|
||||
{
|
||||
foreach(explode(',', $sAttDefList) as $sAttDefName)
|
||||
{
|
||||
$sAttDefName = trim($sAttDefName);
|
||||
$aAllowedDefs[$sAttDefName] = $sAttDefName;
|
||||
}
|
||||
}
|
||||
|
||||
$aAllAttributes = array();
|
||||
if (!empty($sRootClass))
|
||||
{
|
||||
$aClasses = array($sRootClass);
|
||||
if($bIncludeChildClasses === true)
|
||||
{
|
||||
$aClasses = $aClasses + MetaModel::EnumChildClasses($sRootClass, ENUM_CHILD_CLASSES_EXCLUDETOP);
|
||||
}
|
||||
|
||||
foreach($aClasses as $sClass)
|
||||
{
|
||||
foreach(MetaModel::GetAttributesList($sClass) as $sAttCode)
|
||||
{
|
||||
// Add attribute only if not already there (can be in leaf classes but not the root)
|
||||
if(!array_key_exists($sAttCode, $aAllAttributes))
|
||||
{
|
||||
$oAttDef = MetaModel::GetAttributeDef($sClass, $sAttCode);
|
||||
$sAttDefClass = get_class($oAttDef);
|
||||
|
||||
// Skip excluded attdefs
|
||||
if(isset($aExcludeDefs[$sAttDefClass]))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
// Skip not allowed attdefs only if list specified
|
||||
if(!empty($aAllowedDefs) && !isset($aAllowedDefs[$sAttDefClass]))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$aAllAttributes[$sAttCode] = array(
|
||||
'classes' => array($sClass),
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$aAllAttributes[$sAttCode]['classes'][] = $sClass;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$aAllowedAttributes = array();
|
||||
foreach($aAllAttributes as $sAttCode => $aAttData)
|
||||
{
|
||||
$iAttClassesCount = count($aAttData['classes']);
|
||||
$sAttFirstClass = $aAttData['classes'][0];
|
||||
$sAttLabel = MetaModel::GetLabel($sAttFirstClass, $sAttCode);
|
||||
|
||||
if($sAttFirstClass === $sRootClass)
|
||||
{
|
||||
$sLabel = Dict::Format('Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromClass', $sAttCode, $sAttLabel);
|
||||
}
|
||||
elseif($iAttClassesCount === 1)
|
||||
{
|
||||
$sLabel = Dict::Format('Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromOneChildClass', $sAttCode, $sAttLabel, MetaModel::GetName($sAttFirstClass));
|
||||
}
|
||||
else
|
||||
{
|
||||
$sLabel = Dict::Format('Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromSeveralChildClasses', $sAttCode, $sAttLabel);
|
||||
}
|
||||
$aAllowedAttributes[$sAttCode] = $sLabel;
|
||||
}
|
||||
return $aAllowedAttributes;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -9338,7 +9382,19 @@ class AttributeClassAttCodeSet extends AttributeSet
|
||||
{
|
||||
try
|
||||
{
|
||||
$aLocalizedValues[] = '<span class="attribute-set-item" data-code="'.$sAttCode.'" data-label="'.MetaModel::GetLabel($sClass, $sAttCode)." ($sAttCode)".'" data-description="">'.$sAttCode.'</span>';
|
||||
$sAttClass = $sClass;
|
||||
|
||||
// Look for the first class (current or children) that have this attcode
|
||||
foreach(MetaModel::EnumChildClasses($sClass, ENUM_CHILD_CLASSES_ALL) as $sChildClass)
|
||||
{
|
||||
if(MetaModel::IsValidAttCode($sChildClass, $sAttCode))
|
||||
{
|
||||
$sAttClass = $sChildClass;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$aLocalizedValues[] = '<span class="attribute-set-item" data-code="'.$sAttCode.'" data-label="'.MetaModel::GetLabel($sAttClass, $sAttCode)." ($sAttCode)".'" data-description="">'.$sAttCode.'</span>';
|
||||
} catch (Exception $e)
|
||||
{
|
||||
// Ignore bad values
|
||||
|
||||
@@ -595,7 +595,7 @@ class TriggerOnThresholdReached extends TriggerOnObject
|
||||
MetaModel::Init_Params($aParams);
|
||||
MetaModel::Init_InheritAttributes();
|
||||
|
||||
MetaModel::Init_AddAttribute(new AttributeString("stop_watch_code", array("allowed_values" => null, "sql" => "stop_watch_code", "default_value" => null, "is_null_allowed" => false, "depends_on" => array())));
|
||||
MetaModel::Init_AddAttribute(new AttributeClassAttCodeSet('stop_watch_code', array("allowed_values" => null, "class_field" => "target_class", "sql" => "stop_watch_code", "default_value" => null, "is_null_allowed" => false, "max_items" => 1, "min_items" => 1, "attribute_definition_exclusion_list" => null, "attribute_definition_list" => "AttributeStopWatch", "include_child_classes_attributes" => true, "depends_on" => array('target_class'))));
|
||||
MetaModel::Init_AddAttribute(new AttributeString("threshold_index", array("allowed_values" => null, "sql" => "threshold_index", "default_value" => null, "is_null_allowed" => false, "depends_on" => array())));
|
||||
|
||||
// Display lists
|
||||
@@ -606,5 +606,3 @@ class TriggerOnThresholdReached extends TriggerOnObject
|
||||
// MetaModel::Init_SetZListItems('advanced_search', array('name')); // Criteria of the advanced search form
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
@@ -47,6 +47,9 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', array(
|
||||
'Core:AttributeTagSet' => 'List of tags~~',
|
||||
'Core:AttributeTagSet+' => '~~',
|
||||
'Core:AttributeSet:placeholder' => 'click to add~~',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromClass' => '%1$s (%2$s)~~',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromOneChildClass' => '%1$s (%2$s from %3$s)~~',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromSeveralChildClasses' => '%1$s (%2$s from child classes)~~',
|
||||
|
||||
'Core:AttributeCaseLog' => 'Log~~',
|
||||
'Core:AttributeCaseLog+' => '~~',
|
||||
|
||||
@@ -45,6 +45,9 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
|
||||
'Core:AttributeTagSet' => 'List of tags~~',
|
||||
'Core:AttributeTagSet+' => '~~',
|
||||
'Core:AttributeSet:placeholder' => 'click to add~~',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromClass' => '%1$s (%2$s)~~',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromOneChildClass' => '%1$s (%2$s from %3$s)~~',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromSeveralChildClasses' => '%1$s (%2$s from child classes)~~',
|
||||
|
||||
'Core:AttributeCaseLog' => 'Log~~',
|
||||
'Core:AttributeCaseLog+' => '~~',
|
||||
|
||||
@@ -44,6 +44,9 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
|
||||
'Core:AttributeTagSet' => 'Liste von Tags',
|
||||
'Core:AttributeTagSet+' => 'List von Tags',
|
||||
'Core:AttributeSet:placeholder' => 'Zum Hinzufügen klicken',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromClass' => '%1$s (%2$s)~~',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromOneChildClass' => '%1$s (%2$s from %3$s)~~',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromSeveralChildClasses' => '%1$s (%2$s from child classes)~~',
|
||||
|
||||
'Core:AttributeCaseLog' => 'Log',
|
||||
'Core:AttributeCaseLog+' => '',
|
||||
|
||||
@@ -45,6 +45,9 @@ Dict::Add('EN US', 'English', 'English', array(
|
||||
'Core:AttributeTagSet' => 'List of tags',
|
||||
'Core:AttributeTagSet+' => '',
|
||||
'Core:AttributeSet:placeholder' => 'click to add',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromClass' => '%1$s (%2$s)',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromOneChildClass' => '%1$s (%2$s from %3$s)',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromSeveralChildClasses' => '%1$s (%2$s from child classes)',
|
||||
|
||||
'Core:AttributeCaseLog' => 'Log',
|
||||
'Core:AttributeCaseLog+' => '',
|
||||
|
||||
@@ -45,6 +45,9 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellaño', array(
|
||||
'Core:AttributeTagSet' => 'List of tags~~',
|
||||
'Core:AttributeTagSet+' => '~~',
|
||||
'Core:AttributeSet:placeholder' => 'click to add~~',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromClass' => '%1$s (%2$s)~~',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromOneChildClass' => '%1$s (%2$s from %3$s)~~',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromSeveralChildClasses' => '%1$s (%2$s from child classes)~~',
|
||||
|
||||
'Core:AttributeCaseLog' => 'Log~~',
|
||||
'Core:AttributeCaseLog+' => '~~',
|
||||
|
||||
@@ -43,6 +43,9 @@ Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Core:AttributeTagSet' => 'Liste d\'étiquettes',
|
||||
'Core:AttributeTagSet+' => '',
|
||||
'Core:AttributeSet:placeholder' => 'cliquer pour ajouter',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromClass' => '%1$s (%2$s)',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromOneChildClass' => '%1$s (%2$s de la classe %3$s)',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromSeveralChildClasses' => '%1$s (%2$s from child classes)~~',
|
||||
|
||||
'Core:AttributeCaseLog' => 'Log~~',
|
||||
'Core:AttributeCaseLog+' => '~~',
|
||||
|
||||
@@ -43,6 +43,9 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
'Core:AttributeTagSet' => 'List of tags~~',
|
||||
'Core:AttributeTagSet+' => '~~',
|
||||
'Core:AttributeSet:placeholder' => 'click to add~~',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromClass' => '%1$s (%2$s)~~',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromOneChildClass' => '%1$s (%2$s from %3$s)~~',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromSeveralChildClasses' => '%1$s (%2$s from child classes)~~',
|
||||
|
||||
'Core:AttributeCaseLog' => 'Log~~',
|
||||
'Core:AttributeCaseLog+' => '~~',
|
||||
|
||||
@@ -45,6 +45,9 @@ Dict::Add('IT IT', 'Italian', 'Italiano', array(
|
||||
'Core:AttributeTagSet' => 'List of tags~~',
|
||||
'Core:AttributeTagSet+' => '~~',
|
||||
'Core:AttributeSet:placeholder' => 'click to add~~',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromClass' => '%1$s (%2$s)~~',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromOneChildClass' => '%1$s (%2$s from %3$s)~~',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromSeveralChildClasses' => '%1$s (%2$s from child classes)~~',
|
||||
|
||||
'Core:AttributeCaseLog' => 'Log~~',
|
||||
'Core:AttributeCaseLog+' => '~~',
|
||||
|
||||
@@ -43,6 +43,9 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
|
||||
'Core:AttributeTagSet' => 'List of tags~~',
|
||||
'Core:AttributeTagSet+' => '~~',
|
||||
'Core:AttributeSet:placeholder' => 'click to add~~',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromClass' => '%1$s (%2$s)~~',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromOneChildClass' => '%1$s (%2$s from %3$s)~~',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromSeveralChildClasses' => '%1$s (%2$s from child classes)~~',
|
||||
|
||||
'Core:AttributeCaseLog' => 'Log~~',
|
||||
'Core:AttributeCaseLog+' => '~~',
|
||||
|
||||
@@ -51,6 +51,9 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
|
||||
'Core:AttributeTagSet' => 'Lijst van tags',
|
||||
'Core:AttributeTagSet+' => '',
|
||||
'Core:AttributeSet:placeholder' => 'klik om toe te voegen',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromClass' => '%1$s (%2$s)~~',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromOneChildClass' => '%1$s (%2$s from %3$s)~~',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromSeveralChildClasses' => '%1$s (%2$s from child classes)~~',
|
||||
|
||||
'Core:AttributeCaseLog' => 'Log',
|
||||
'Core:AttributeCaseLog+' => '',
|
||||
|
||||
@@ -45,6 +45,9 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
|
||||
'Core:AttributeTagSet' => 'List of tags~~',
|
||||
'Core:AttributeTagSet+' => '~~',
|
||||
'Core:AttributeSet:placeholder' => 'click to add~~',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromClass' => '%1$s (%2$s)~~',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromOneChildClass' => '%1$s (%2$s from %3$s)~~',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromSeveralChildClasses' => '%1$s (%2$s from child classes)~~',
|
||||
|
||||
'Core:AttributeCaseLog' => 'Log~~',
|
||||
'Core:AttributeCaseLog+' => '~~',
|
||||
|
||||
@@ -32,6 +32,9 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Core:AttributeTagSet' => 'Список тегов',
|
||||
'Core:AttributeTagSet+' => '',
|
||||
'Core:AttributeSet:placeholder' => 'нажмите, чтобы добавить',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromClass' => '%1$s (%2$s)~~',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromOneChildClass' => '%1$s (%2$s from %3$s)~~',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromSeveralChildClasses' => '%1$s (%2$s from child classes)~~',
|
||||
|
||||
'Core:AttributeCaseLog' => 'Журнал',
|
||||
'Core:AttributeCaseLog+' => '',
|
||||
|
||||
@@ -53,6 +53,9 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Core:AttributeTagSet' => 'List of tags~~',
|
||||
'Core:AttributeTagSet+' => '~~',
|
||||
'Core:AttributeSet:placeholder' => 'click to add~~',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromClass' => '%1$s (%2$s)~~',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromOneChildClass' => '%1$s (%2$s from %3$s)~~',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromSeveralChildClasses' => '%1$s (%2$s from child classes)~~',
|
||||
|
||||
'Core:AttributeCaseLog' => 'Log~~',
|
||||
'Core:AttributeCaseLog+' => '~~',
|
||||
|
||||
@@ -45,6 +45,9 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Core:AttributeTagSet' => 'List of tags~~',
|
||||
'Core:AttributeTagSet+' => '~~',
|
||||
'Core:AttributeSet:placeholder' => 'click to add~~',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromClass' => '%1$s (%2$s)~~',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromOneChildClass' => '%1$s (%2$s from %3$s)~~',
|
||||
'Core:AttributeClassAttCodeSet:ItemLabel:AttributeFromSeveralChildClasses' => '%1$s (%2$s from child classes)~~',
|
||||
|
||||
'Core:AttributeCaseLog' => 'Log~~',
|
||||
'Core:AttributeCaseLog+' => '~~',
|
||||
|
||||
Reference in New Issue
Block a user