diff --git a/ui/include/classes/api/services/CEvent.php b/ui/include/classes/api/services/CEvent.php index 694f4396dc..7b1b119a3b 100644 --- a/ui/include/classes/api/services/CEvent.php +++ b/ui/include/classes/api/services/CEvent.php @@ -333,27 +333,29 @@ class CEvent extends CApiService { } } + $sub_sql_parts = []; + // groupids if ($options['groupids'] !== null) { zbx_value2array($options['groupids']); // triggers if ($options['object'] == EVENT_OBJECT_TRIGGER) { - $sqlParts['from']['f'] = 'functions f'; - $sqlParts['from']['i'] = 'items i'; - $sqlParts['from']['hg'] = 'hosts_groups hg'; - $sqlParts['where']['e-f'] = 'e.objectid=f.triggerid'; - $sqlParts['where']['f-i'] = 'f.itemid=i.itemid'; - $sqlParts['where']['i-hg'] = 'i.hostid=hg.hostid'; - $sqlParts['where']['hg'] = dbConditionInt('hg.groupid', $options['groupids']); + $sub_sql_parts['from']['f'] = 'functions f'; + $sub_sql_parts['from']['i'] = 'items i'; + $sub_sql_parts['from']['hg'] = 'hosts_groups hg'; + $sub_sql_parts['where']['e-f'] = 'e.objectid=f.triggerid'; + $sub_sql_parts['where']['f-i'] = 'f.itemid=i.itemid'; + $sub_sql_parts['where']['i-hg'] = 'i.hostid=hg.hostid'; + $sub_sql_parts['where']['hg'] = dbConditionInt('hg.groupid', $options['groupids']); } // lld rules and items elseif ($options['object'] == EVENT_OBJECT_LLDRULE || $options['object'] == EVENT_OBJECT_ITEM) { - $sqlParts['from']['i'] = 'items i'; - $sqlParts['from']['hg'] = 'hosts_groups hg'; - $sqlParts['where']['e-i'] = 'e.objectid=i.itemid'; - $sqlParts['where']['i-hg'] = 'i.hostid=hg.hostid'; - $sqlParts['where']['hg'] = dbConditionInt('hg.groupid', $options['groupids']); + $sub_sql_parts['from']['i'] = 'items i'; + $sub_sql_parts['from']['hg'] = 'hosts_groups hg'; + $sub_sql_parts['where']['e-i'] = 'e.objectid=i.itemid'; + $sub_sql_parts['where']['i-hg'] = 'i.hostid=hg.hostid'; + $sub_sql_parts['where']['hg'] = dbConditionInt('hg.groupid', $options['groupids']); } } @@ -363,17 +365,17 @@ class CEvent extends CApiService { // triggers if ($options['object'] == EVENT_OBJECT_TRIGGER) { - $sqlParts['from']['f'] = 'functions f'; - $sqlParts['from']['i'] = 'items i'; - $sqlParts['where']['e-f'] = 'e.objectid=f.triggerid'; - $sqlParts['where']['f-i'] = 'f.itemid=i.itemid'; - $sqlParts['where']['i'] = dbConditionInt('i.hostid', $options['hostids']); + $sub_sql_parts['from']['f'] = 'functions f'; + $sub_sql_parts['from']['i'] = 'items i'; + $sub_sql_parts['where']['e-f'] = 'e.objectid=f.triggerid'; + $sub_sql_parts['where']['f-i'] = 'f.itemid=i.itemid'; + $sub_sql_parts['where']['i'] = dbConditionInt('i.hostid', $options['hostids']); } // lld rules and items elseif ($options['object'] == EVENT_OBJECT_LLDRULE || $options['object'] == EVENT_OBJECT_ITEM) { - $sqlParts['from']['i'] = 'items i'; - $sqlParts['where']['e-i'] = 'e.objectid=i.itemid'; - $sqlParts['where']['i'] = dbConditionInt('i.hostid', $options['hostids']); + $sub_sql_parts['from']['i'] = 'items i'; + $sub_sql_parts['where']['e-i'] = 'e.objectid=i.itemid'; + $sub_sql_parts['where']['i'] = dbConditionInt('i.hostid', $options['hostids']); } } @@ -383,21 +385,29 @@ class CEvent extends CApiService { // triggers if ($options['object'] == EVENT_OBJECT_TRIGGER) { - $sqlParts['from']['f'] = 'functions f'; - $sqlParts['from']['ia'] = 'items_applications ia'; - $sqlParts['where']['e-f'] = 'e.objectid=f.triggerid'; - $sqlParts['where']['f-ia'] = 'f.itemid=ia.itemid'; - $sqlParts['where']['ia'] = dbConditionInt('ia.applicationid', $options['applicationids']); + $sub_sql_parts['from']['f'] = 'functions f'; + $sub_sql_parts['from']['ia'] = 'items_applications ia'; + $sub_sql_parts['where']['e-f'] = 'e.objectid=f.triggerid'; + $sub_sql_parts['where']['f-ia'] = 'f.itemid=ia.itemid'; + $sub_sql_parts['where']['ia'] = dbConditionInt('ia.applicationid', $options['applicationids']); } // items elseif ($options['object'] == EVENT_OBJECT_ITEM) { - $sqlParts['from']['ia'] = 'items_applications ia'; - $sqlParts['where']['e-ia'] = 'e.objectid=ia.itemid'; - $sqlParts['where']['ia'] = dbConditionInt('ia.applicationid', $options['applicationids']); + $sub_sql_parts['from']['ia'] = 'items_applications ia'; + $sub_sql_parts['where']['e-ia'] = 'e.objectid=ia.itemid'; + $sub_sql_parts['where']['ia'] = dbConditionInt('ia.applicationid', $options['applicationids']); } // ignore this filter for lld rules } + if ($sub_sql_parts) { + $sqlParts['where'][] = 'EXISTS ('. + 'SELECT NULL'. + ' FROM '.implode(',', $sub_sql_parts['from']). + ' WHERE '.implode(' AND ', array_unique($sub_sql_parts['where'])). + ')'; + } + // severities if ($options['severities'] !== null) { // triggers diff --git a/ui/include/classes/api/services/CProblem.php b/ui/include/classes/api/services/CProblem.php index f1571398c5..dfe1ee9245 100644 --- a/ui/include/classes/api/services/CProblem.php +++ b/ui/include/classes/api/services/CProblem.php @@ -187,27 +187,29 @@ class CProblem extends CApiService { $sqlParts['where'][] = dbConditionInt('p.objectid', $options['objectids']); } + $sub_sql_parts = []; + // groupids if ($options['groupids'] !== null) { zbx_value2array($options['groupids']); // triggers if ($options['object'] == EVENT_OBJECT_TRIGGER) { - $sqlParts['from']['f'] = 'functions f'; - $sqlParts['from']['i'] = 'items i'; - $sqlParts['from']['hg'] = 'hosts_groups hg'; - $sqlParts['where']['p-f'] = 'p.objectid=f.triggerid'; - $sqlParts['where']['f-i'] = 'f.itemid=i.itemid'; - $sqlParts['where']['i-hg'] = 'i.hostid=hg.hostid'; - $sqlParts['where']['hg'] = dbConditionInt('hg.groupid', $options['groupids']); + $sub_sql_parts['from']['f'] = 'functions f'; + $sub_sql_parts['from']['i'] = 'items i'; + $sub_sql_parts['from']['hg'] = 'hosts_groups hg'; + $sub_sql_parts['where']['p-f'] = 'p.objectid=f.triggerid'; + $sub_sql_parts['where']['f-i'] = 'f.itemid=i.itemid'; + $sub_sql_parts['where']['i-hg'] = 'i.hostid=hg.hostid'; + $sub_sql_parts['where']['hg'] = dbConditionInt('hg.groupid', $options['groupids']); } // lld rules and items elseif ($options['object'] == EVENT_OBJECT_LLDRULE || $options['object'] == EVENT_OBJECT_ITEM) { - $sqlParts['from']['i'] = 'items i'; - $sqlParts['from']['hg'] = 'hosts_groups hg'; - $sqlParts['where']['p-i'] = 'p.objectid=i.itemid'; - $sqlParts['where']['i-hg'] = 'i.hostid=hg.hostid'; - $sqlParts['where']['hg'] = dbConditionInt('hg.groupid', $options['groupids']); + $sub_sql_parts['from']['i'] = 'items i'; + $sub_sql_parts['from']['hg'] = 'hosts_groups hg'; + $sub_sql_parts['where']['p-i'] = 'p.objectid=i.itemid'; + $sub_sql_parts['where']['i-hg'] = 'i.hostid=hg.hostid'; + $sub_sql_parts['where']['hg'] = dbConditionInt('hg.groupid', $options['groupids']); } } @@ -217,17 +219,17 @@ class CProblem extends CApiService { // triggers if ($options['object'] == EVENT_OBJECT_TRIGGER) { - $sqlParts['from']['f'] = 'functions f'; - $sqlParts['from']['i'] = 'items i'; - $sqlParts['where']['p-f'] = 'p.objectid=f.triggerid'; - $sqlParts['where']['f-i'] = 'f.itemid=i.itemid'; - $sqlParts['where']['i'] = dbConditionInt('i.hostid', $options['hostids']); + $sub_sql_parts['from']['f'] = 'functions f'; + $sub_sql_parts['from']['i'] = 'items i'; + $sub_sql_parts['where']['p-f'] = 'p.objectid=f.triggerid'; + $sub_sql_parts['where']['f-i'] = 'f.itemid=i.itemid'; + $sub_sql_parts['where']['i'] = dbConditionInt('i.hostid', $options['hostids']); } // lld rules and items elseif ($options['object'] == EVENT_OBJECT_LLDRULE || $options['object'] == EVENT_OBJECT_ITEM) { - $sqlParts['from']['i'] = 'items i'; - $sqlParts['where']['p-i'] = 'p.objectid=i.itemid'; - $sqlParts['where']['i'] = dbConditionInt('i.hostid', $options['hostids']); + $sub_sql_parts['from']['i'] = 'items i'; + $sub_sql_parts['where']['p-i'] = 'p.objectid=i.itemid'; + $sub_sql_parts['where']['i'] = dbConditionInt('i.hostid', $options['hostids']); } } @@ -237,21 +239,29 @@ class CProblem extends CApiService { // triggers if ($options['object'] == EVENT_OBJECT_TRIGGER) { - $sqlParts['from']['f'] = 'functions f'; - $sqlParts['from']['ia'] = 'items_applications ia'; - $sqlParts['where']['p-f'] = 'p.objectid=f.triggerid'; - $sqlParts['where']['f-ia'] = 'f.itemid=ia.itemid'; - $sqlParts['where']['ia'] = dbConditionInt('ia.applicationid', $options['applicationids']); + $sub_sql_parts['from']['f'] = 'functions f'; + $sub_sql_parts['from']['ia'] = 'items_applications ia'; + $sub_sql_parts['where']['p-f'] = 'p.objectid=f.triggerid'; + $sub_sql_parts['where']['f-ia'] = 'f.itemid=ia.itemid'; + $sub_sql_parts['where']['ia'] = dbConditionInt('ia.applicationid', $options['applicationids']); } // items elseif ($options['object'] == EVENT_OBJECT_ITEM) { - $sqlParts['from']['ia'] = 'items_applications ia'; - $sqlParts['where']['p-ia'] = 'p.objectid=ia.itemid'; - $sqlParts['where']['ia'] = dbConditionInt('ia.applicationid', $options['applicationids']); + $sub_sql_parts['from']['ia'] = 'items_applications ia'; + $sub_sql_parts['where']['p-ia'] = 'p.objectid=ia.itemid'; + $sub_sql_parts['where']['ia'] = dbConditionInt('ia.applicationid', $options['applicationids']); } // ignore this filter for lld rules } + if ($sub_sql_parts) { + $sqlParts['where'][] = 'EXISTS ('. + 'SELECT NULL'. + ' FROM '.implode(',', $sub_sql_parts['from']). + ' WHERE '.implode(' AND ', array_unique($sub_sql_parts['where'])). + ')'; + } + // severities if ($options['severities'] !== null) { // triggers