N°1839 Update TriggerOnThresholdReached to select attribute from a set of valid attributes instead of typing it manually

This commit is contained in:
Molkobain
2018-12-14 11:51:14 +01:00
parent 9b5d8b8a01
commit 6a88f622ad
16 changed files with 158 additions and 62 deletions

View File

@@ -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

View File

@@ -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
}
}
?>

View File

@@ -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+' => '~~',

View File

@@ -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+' => '~~',

View File

@@ -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+' => '',

View File

@@ -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+' => '',

View File

@@ -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+' => '~~',

View File

@@ -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+' => '~~',

View File

@@ -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+' => '~~',

View File

@@ -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+' => '~~',

View File

@@ -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+' => '~~',

View File

@@ -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+' => '',

View File

@@ -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+' => '~~',

View File

@@ -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+' => '',

View File

@@ -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+' => '~~',

View File

@@ -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+' => '~~',