diff --git a/sources/Application/DataModel/TriggerAndAction/TriggerOnObjectUpdate.php b/sources/Application/DataModel/TriggerAndAction/TriggerOnObjectUpdate.php new file mode 100644 index 000000000..562f9ea72 --- /dev/null +++ b/sources/Application/DataModel/TriggerAndAction/TriggerOnObjectUpdate.php @@ -0,0 +1,86 @@ + "grant_by_profile,core/cmdb,application", + "key_type" => "autoincrement", + "name_attcode" => "description", + "complementary_name_attcode" => ['finalclass', 'complement'], + "state_attcode" => "", + "reconc_keys" => ['description'], + "db_table" => "priv_trigger_onobjupdate", + "db_key_field" => "id", + "db_finalclass_field" => "", + ); + MetaModel::Init_Params($aParams); + MetaModel::Init_InheritAttributes(); + MetaModel::Init_AddAttribute(new AttributeClassAttCodeSet('target_attcodes', array("allowed_values" => null, "class_field" => "target_class", "sql" => "target_attcodes", "default_value" => null, "is_null_allowed" => true, "max_items" => 20, "min_items" => 0, "attribute_definition_exclusion_list" => "AttributeDashboard,AttributeExternalField,AttributeFinalClass,AttributeFriendlyName,AttributeObsolescenceDate,AttributeObsolescenceFlag,AttributeSubItem", "attribute_definition_list" => null, "depends_on" => array('target_class')))); + + // Display lists + MetaModel::Init_SetZListItems('details', array('description', 'context', 'target_class', 'filter', 'target_attcodes', 'subscription_policy', 'action_list')); // Attributes to be displayed for the complete details + MetaModel::Init_SetZListItems('list', array('finalclass', 'target_class')); // Attributes to be displayed for a list + // Search criteria + MetaModel::Init_SetZListItems('standard_search', array('description', 'target_class')); // Criteria of the std search form + } + + public function IsTargetObject($iObjectId, $aChanges = array()) + { + if (!parent::IsTargetObject($iObjectId, $aChanges)) { + return false; + } + + // Check the attribute + $oAttCodeSet = $this->Get('target_attcodes'); + $aAttCodes = $oAttCodeSet->GetValues(); + if (empty($aAttCodes)) { + return true; + } + + foreach ($aAttCodes as $sAttCode) { + if (array_key_exists($sAttCode, $aChanges)) { + return true; + } + } + return false; + } + + public function ComputeValues() + { + parent::ComputeValues(); + + // Remove unwanted attribute codes + $aChanges = $this->ListChanges(); + if (isset($aChanges['target_attcodes'])) { + $oAttDef = MetaModel::GetAttributeDef(get_class($this), 'target_attcodes'); + $aArgs = array('this' => $this); + $aAllowedValues = $oAttDef->GetAllowedValues($aArgs); + + /** @var \ormSet $oValue */ + $oValue = $this->Get('target_attcodes'); + $aValues = $oValue->GetValues(); + $bChanged = false; + foreach ($aValues as $key => $sValue) { + if (!isset($aAllowedValues[$sValue])) { + unset($aValues[$key]); + $bChanged = true; + } + } + if ($bChanged) { + $oValue->SetValues($aValues); + $this->Set('target_attcodes', $oValue); + } + } + } + +} \ No newline at end of file