diff --git a/frontends/php/include/classes/api/services/CEvent.php b/frontends/php/include/classes/api/services/CEvent.php index bce56a474b..779f539a41 100644 --- a/frontends/php/include/classes/api/services/CEvent.php +++ b/frontends/php/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/frontends/php/include/classes/api/services/CProblem.php b/frontends/php/include/classes/api/services/CProblem.php index 86c04883ea..b7bebfb237 100644 --- a/frontends/php/include/classes/api/services/CProblem.php +++ b/frontends/php/include/classes/api/services/CProblem.php @@ -186,27 +186,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']); } } @@ -216,17 +218,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']); } } @@ -236,21 +238,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