mirror of
https://github.com/Combodo/iTop.git
synced 2026-04-24 11:08:45 +02:00
N°6667 - Ignore trigger on state entering with auto-dispatch
This commit is contained in:
@@ -3574,7 +3574,8 @@ abstract class DBObject implements iDisplay
|
|||||||
$oKPI->ComputeStatsForExtension($this, 'AfterUpdate');
|
$oKPI->ComputeStatsForExtension($this, 'AfterUpdate');
|
||||||
|
|
||||||
// - TriggerOnObjectUpdate
|
// - TriggerOnObjectUpdate
|
||||||
$aParams = array('class_list' => MetaModel::EnumParentClasses(get_class($this), ENUM_PARENT_CLASSES_ALL));
|
$aClassList = MetaModel::EnumParentClasses(get_class($this), ENUM_PARENT_CLASSES_ALL);
|
||||||
|
$aParams = array('class_list' => $aClassList);
|
||||||
$oSet = new DBObjectSet(DBObjectSearch::FromOQL('SELECT TriggerOnObjectUpdate AS t WHERE t.target_class IN (:class_list)'),
|
$oSet = new DBObjectSet(DBObjectSearch::FromOQL('SELECT TriggerOnObjectUpdate AS t WHERE t.target_class IN (:class_list)'),
|
||||||
array(), $aParams);
|
array(), $aParams);
|
||||||
while ($oTrigger = $oSet->Fetch()) {
|
while ($oTrigger = $oSet->Fetch()) {
|
||||||
@@ -3588,6 +3589,44 @@ abstract class DBObject implements iDisplay
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$sClass = get_class($this);
|
||||||
|
if (MetaModel::HasLifecycle($sClass))
|
||||||
|
{
|
||||||
|
$sStateAttCode = MetaModel::GetStateAttributeCode($sClass);
|
||||||
|
if (isset($this->m_aPreviousValuesForUpdatedAttributes[$sStateAttCode])) {
|
||||||
|
$sPreviousState = $this->m_aPreviousValuesForUpdatedAttributes[$sStateAttCode];
|
||||||
|
// Change state triggers...
|
||||||
|
$aParams = array(
|
||||||
|
'class_list' => MetaModel::EnumParentClasses($sClass, ENUM_PARENT_CLASSES_ALL),
|
||||||
|
'previous_state' => $sPreviousState,
|
||||||
|
'new_state' => $this->Get($sStateAttCode),
|
||||||
|
);
|
||||||
|
$oSet = new DBObjectSet(DBObjectSearch::FromOQL('SELECT TriggerOnStateLeave AS t WHERE t.target_class IN (:class_list) AND t.state=:previous_state'), array(), $aParams);
|
||||||
|
while ($oTrigger = $oSet->Fetch()) {
|
||||||
|
/** @var \TriggerOnStateLeave $oTrigger */
|
||||||
|
try {
|
||||||
|
$oTrigger->DoActivate($this->ToArgs('this'));
|
||||||
|
}
|
||||||
|
catch (Exception $e) {
|
||||||
|
$oTrigger->LogException($e, $this);
|
||||||
|
utils::EnrichRaisedException($oTrigger, $e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$oSet = new DBObjectSet(DBObjectSearch::FromOQL('SELECT TriggerOnStateEnter AS t WHERE t.target_class IN (:class_list) AND t.state=:new_state'), array(), $aParams);
|
||||||
|
while ($oTrigger = $oSet->Fetch()) {
|
||||||
|
/** @var \TriggerOnStateEnter $oTrigger */
|
||||||
|
try {
|
||||||
|
$oTrigger->DoActivate($this->ToArgs('this'));
|
||||||
|
}
|
||||||
|
catch (Exception $e) {
|
||||||
|
$oTrigger->LogException($e, $this);
|
||||||
|
utils::EnrichRaisedException($oTrigger, $e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Activate any existing trigger
|
// Activate any existing trigger
|
||||||
// - TriggerOnObjectMention
|
// - TriggerOnObjectMention
|
||||||
// Forgotten by the fix of N°3245
|
// Forgotten by the fix of N°3245
|
||||||
@@ -4283,36 +4322,6 @@ abstract class DBObject implements iDisplay
|
|||||||
$this->DBWrite();
|
$this->DBWrite();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Change state triggers...
|
|
||||||
$aParams = array(
|
|
||||||
'class_list' => MetaModel::EnumParentClasses($sClass, ENUM_PARENT_CLASSES_ALL),
|
|
||||||
'previous_state' => $sPreviousState,
|
|
||||||
'new_state' => $sNewState,
|
|
||||||
);
|
|
||||||
$oSet = new DBObjectSet(DBObjectSearch::FromOQL("SELECT TriggerOnStateLeave AS t WHERE t.target_class IN (:class_list) AND t.state=:previous_state"), array(), $aParams);
|
|
||||||
while ($oTrigger = $oSet->Fetch()) {
|
|
||||||
/** @var \TriggerOnStateLeave $oTrigger */
|
|
||||||
try {
|
|
||||||
$oTrigger->DoActivate($this->ToArgs('this'));
|
|
||||||
}
|
|
||||||
catch (Exception $e) {
|
|
||||||
$oTrigger->LogException($e, $this);
|
|
||||||
utils::EnrichRaisedException($oTrigger, $e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$oSet = new DBObjectSet(DBObjectSearch::FromOQL("SELECT TriggerOnStateEnter AS t WHERE t.target_class IN (:class_list) AND t.state=:new_state"), array(), $aParams);
|
|
||||||
while ($oTrigger = $oSet->Fetch()) {
|
|
||||||
/** @var \TriggerOnStateEnter $oTrigger */
|
|
||||||
try {
|
|
||||||
$oTrigger->DoActivate($this->ToArgs('this'));
|
|
||||||
}
|
|
||||||
catch (Exception $e) {
|
|
||||||
$oTrigger->LogException($e, $this);
|
|
||||||
utils::EnrichRaisedException($oTrigger, $e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->FireEvent(EVENT_DB_AFTER_APPLY_STIMULUS, $aEventData);
|
$this->FireEvent(EVENT_DB_AFTER_APPLY_STIMULUS, $aEventData);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
Reference in New Issue
Block a user