mirror of
https://github.com/Combodo/iTop.git
synced 2026-02-13 07:24:13 +01:00
Notification were not working well with class hierarchy (not in Trac at that time)
SVN:trunk[734]
This commit is contained in:
@@ -238,14 +238,15 @@ abstract class cmdbAbstractObject extends CMDBObject
|
||||
// If any trigger has been found then display a tab with notifications
|
||||
//
|
||||
$sClass = get_class($this);
|
||||
$oTriggerSet = new CMDBObjectSet(DBObjectSearch::FromOQL("SELECT TriggerOnObject AS T WHERE T.target_class = '$sClass'"));
|
||||
$sClassList = implode("', '", MetaModel::EnumParentClasses($sClass, ENUM_PARENT_CLASSES_ALL));
|
||||
$oTriggerSet = new CMDBObjectSet(DBObjectSearch::FromOQL("SELECT TriggerOnObject AS T WHERE T.target_class IN ('$sClassList')"));
|
||||
if ($oTriggerSet->Count() > 0)
|
||||
{
|
||||
$oPage->SetCurrentTab(Dict::S('UI:NotificationsTab'));
|
||||
|
||||
// Display notifications regarding the object
|
||||
$iId = $this->GetKey();
|
||||
$oNotifSet = new CMDBObjectSet(DBObjectSearch::FromOQL("SELECT EventNotificationEmail AS Ev JOIN TriggerOnObject AS T ON Ev.trigger_id = T.id WHERE T.target_class = '$sClass' AND Ev.object_id = $iId"));
|
||||
$oNotifSet = new CMDBObjectSet(DBObjectSearch::FromOQL("SELECT EventNotificationEmail AS Ev JOIN TriggerOnObject AS T ON Ev.trigger_id = T.id WHERE T.target_class IN ('$sClassList') AND Ev.object_id = $iId"));
|
||||
self::DisplaySet($oPage, $oNotifSet);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1079,13 +1079,14 @@ abstract class DBObject
|
||||
|
||||
// Change state triggers...
|
||||
$sClass = get_class($this);
|
||||
$oSet = new DBObjectSet(DBObjectSearch::FromOQL("SELECT TriggerOnStateLeave AS t WHERE t.target_class='$sClass' AND t.state='$sPreviousState'"));
|
||||
$sClassList = implode("', '", MetaModel::EnumParentClasses($sClass, ENUM_PARENT_CLASSES_ALL));
|
||||
$oSet = new DBObjectSet(DBObjectSearch::FromOQL("SELECT TriggerOnStateLeave AS t WHERE t.target_class IN ('$sClassList') AND t.state='$sPreviousState'"));
|
||||
while ($oTrigger = $oSet->Fetch())
|
||||
{
|
||||
$oTrigger->DoActivate($this->ToArgs('this'));
|
||||
}
|
||||
|
||||
$oSet = new DBObjectSet(DBObjectSearch::FromOQL("SELECT TriggerOnStateEnter AS t WHERE t.target_class='$sClass' AND t.state='$sNewState'"));
|
||||
$oSet = new DBObjectSet(DBObjectSearch::FromOQL("SELECT TriggerOnStateEnter AS t WHERE t.target_class IN ('$sClassList') AND t.state='$sNewState'"));
|
||||
while ($oTrigger = $oSet->Fetch())
|
||||
{
|
||||
$oTrigger->DoActivate($this->ToArgs('this'));
|
||||
|
||||
@@ -47,6 +47,18 @@ define('ENUM_CHILD_CLASSES_EXCLUDETOP', 1);
|
||||
* @package iTopORM
|
||||
*/
|
||||
define('ENUM_CHILD_CLASSES_ALL', 2);
|
||||
/**
|
||||
* add some description here...
|
||||
*
|
||||
* @package iTopORM
|
||||
*/
|
||||
define('ENUM_PARENT_CLASSES_EXCLUDELEAF', 1);
|
||||
/**
|
||||
* add some description here...
|
||||
*
|
||||
* @package iTopORM
|
||||
*/
|
||||
define('ENUM_PARENT_CLASSES_ALL', 2);
|
||||
|
||||
/**
|
||||
* Specifies that this attribute is visible/editable.... normal (default config)
|
||||
@@ -1209,6 +1221,19 @@ abstract class MetaModel
|
||||
self::$m_aAttribOrigins[$sTargetClass] = array();
|
||||
}
|
||||
self::$m_aAttribDefs[$sTargetClass] = self::object_array_mergeclone(self::$m_aAttribDefs[$sTargetClass], self::$m_aAttribDefs[$sSourceClass]);
|
||||
// Note: while investigating on some issues related to attribute inheritance,
|
||||
// I found out that the notion of "host class" is unclear
|
||||
// For stability reasons, and also because a workaround has been found
|
||||
// I leave it unchanged, but later it could be a good thing to force
|
||||
// attribute host class to the new class (See code below)
|
||||
// In that case, we will have to review the attribute labels
|
||||
// (currently relying on host class => the original declaration
|
||||
// of the attribute)
|
||||
// See TRAC #148
|
||||
// foreach(self::$m_aAttribDefs[$sTargetClass] as $sAttCode => $oAttDef)
|
||||
// {
|
||||
// $oAttDef->SetHostClass($sTargetClass);
|
||||
// }
|
||||
self::$m_aAttribOrigins[$sTargetClass] = array_merge(self::$m_aAttribOrigins[$sTargetClass], self::$m_aAttribOrigins[$sSourceClass]);
|
||||
}
|
||||
// Build root class information
|
||||
@@ -1417,10 +1442,16 @@ abstract class MetaModel
|
||||
{
|
||||
return array_unique(self::$m_aRootClasses);
|
||||
}
|
||||
public static function EnumParentClasses($sClass)
|
||||
public static function EnumParentClasses($sClass, $iOption = ENUM_PARENT_CLASSES_EXCLUDELEAF)
|
||||
{
|
||||
self::_check_subclass($sClass);
|
||||
return self::$m_aParentClasses[$sClass];
|
||||
if ($iOption == ENUM_PARENT_CLASSES_EXCLUDELEAF)
|
||||
{
|
||||
return self::$m_aParentClasses[$sClass];
|
||||
}
|
||||
$aRes = self::$m_aParentClasses[$sClass];
|
||||
$aRes[] = $sClass;
|
||||
return $aRes;
|
||||
}
|
||||
public static function EnumChildClasses($sClass, $iOption = ENUM_CHILD_CLASSES_EXCLUDETOP)
|
||||
{
|
||||
|
||||
@@ -255,7 +255,8 @@ function DisplayLifecycle($oPage, $sClass)
|
||||
*/
|
||||
function DisplayTriggers($oPage, $sClass)
|
||||
{
|
||||
$oSet = new CMDBObjectSet(DBObjectSearch::FromOQL("SELECT TriggerOnStateChange WHERE target_class = '$sClass'"));
|
||||
$sClassList = implode("', '", MetaModel::EnumParentClasses($sClass, ENUM_PARENT_CLASSES_ALL));
|
||||
$oSet = new CMDBObjectSet(DBObjectSearch::FromOQL("SELECT TriggerOnObject WHERE target_class IN ('$sClassList')"));
|
||||
cmdbAbstractObject::DisplaySet($oPage, $oSet);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user