Index: includes/alerts.inc.php =================================================================== --- includes/alerts.inc.php (revision 7719) +++ includes/alerts.inc.php (working copy) @@ -604,8 +604,9 @@ // Short circuit this check if the device is either disabled or ignored. if ($ignore && ($device['disable'] == 1 || $device['ignore'] == 1)) { return FALSE; } - $sql = "SELECT COUNT(*) FROM `devices`"; - $sql .= " WHERE `device_id` = ?"; + $sel = "SELECT COUNT(*) FROM `devices` d"; + $join = ""; + $sql = " WHERE d.`device_id` = ?"; $param = array($device['device_id']); foreach ($attributes as $attrib) @@ -614,24 +615,24 @@ { case 'ge': case '>=': - $sql .= ' AND `' . $attrib['attrib'] . '` >= ?'; + $sql .= ' AND d.`' . $attrib['attrib'] . '` >= ?'; $param[] = $attrib['value']; break; case 'le': case '<=': - $sql .= ' AND `' . $attrib['attrib'] . '` <= ?'; + $sql .= ' AND d.`' . $attrib['attrib'] . '` <= ?'; $param[] = $attrib['value']; break; case 'gt': case 'greater': case '>': - $sql .= ' AND `' . $attrib['attrib'] . '` > ?'; + $sql .= ' AND d.`' . $attrib['attrib'] . '` > ?'; $param[] = $attrib['value']; break; case 'lt': case 'less': case '<': - $sql .= ' AND `' . $attrib['attrib'] . '` < ?'; + $sql .= ' AND d.`' . $attrib['attrib'] . '` < ?'; $param[] = $attrib['value']; break; case 'notequals': @@ -638,7 +639,7 @@ case 'isnot': case 'ne': case '!=': - $sql .= ' AND `' . $attrib['attrib'] . '` != ?'; + $sql .= ' AND d.`' . $attrib['attrib'] . '` != ?'; $param[] = $attrib['value']; break; case 'equals': @@ -646,7 +647,7 @@ case 'is': case '==': case '=': - $sql .= ' AND `' . $attrib['attrib'] . '` = ?'; + $sql .= ' AND d.`' . $attrib['attrib'] . '` = ?'; $param[] = $attrib['value']; break; case 'match': @@ -653,7 +654,7 @@ case 'matches': $attrib['value'] = str_replace('*', '%', $attrib['value']); $attrib['value'] = str_replace('?', '_', $attrib['value']); - $sql .= ' AND IFNULL(`' . $attrib['attrib'] . '`, "") LIKE ?'; + $sql .= ' AND IFNULL(d.`' . $attrib['attrib'] . '`, "") LIKE ?'; $param[] = $attrib['value']; break; case 'notmatches': @@ -661,12 +662,12 @@ case '!match': $attrib['value'] = str_replace('*', '%', $attrib['value']); $attrib['value'] = str_replace('?', '_', $attrib['value']); - $sql .= ' AND IFNULL(`'. $attrib['attrib'] . '`, "") NOT LIKE ?'; + $sql .= ' AND IFNULL(d.`'. $attrib['attrib'] . '`, "") NOT LIKE ?'; $param[] = $attrib['value']; break; case 'regexp': case 'regex': - $sql .= ' AND IFNULL(`' . $attrib['attrib'] . '`, "") REGEXP ?'; + $sql .= ' AND IFNULL(d.`' . $attrib['attrib'] . '`, "") REGEXP ?'; $param[] = $attrib['value']; break; case 'notregexp': @@ -673,30 +674,35 @@ case 'notregex': case '!regexp': case '!regex': - $sql .= ' AND IFNULL(`' . $attrib['attrib'] . '`, "") NOT REGEXP ?'; + $sql .= ' AND IFNULL(d.`' . $attrib['attrib'] . '`, "") NOT REGEXP ?'; $param[] = $attrib['value']; break; case 'in': case 'list': - $sql .= generate_query_values(explode(',', $attrib['value']), $attrib['attrib']); + $sql .= generate_query_values(explode(',', $attrib['value']), "d.".$attrib['attrib']); break; case '!in': case '!list': case 'notin': case 'notlist': - $sql .= generate_query_values(explode(',', $attrib['value']), $attrib['attrib'], '!='); + $sql .= generate_query_values(explode(',', $attrib['value']), "d.".$attrib['attrib'], '!='); break; - case 'include': // FIXME, what is this? + case 'include': + case 'includes': // FIXME, what is this? switch($attrib['attrib']) { - case 'group': - - break; + case 'group': + $join .= " INNER JOIN `group_table` gt on d.`device_id`=gt.`device_id`"; + $join .= " INNER JOIN `groups` g on g.`group_id`=gt.`group_id`"; + $sql .= " AND g.`group_name` = ?"; + $param[] = $attrib['value']; + break; } break; } } + $sql = $sel . $join . $sql; $device_count = dbFetchCell($sql, $param); if ($device_count == 0)