From a3a896a127b90548d404d347f3665a7e6ac90f40 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Mon, 25 Mar 2013 19:46:43 +0400 Subject: let us rejoice on being able to create double negative filters (refs #631) --- include/functions.php | 18 +++++++++++++----- include/rssfuncs.php | 6 ++++++ 2 files changed, 19 insertions(+), 5 deletions(-) (limited to 'include') diff --git a/include/functions.php b/include/functions.php index b52531f66..9a855a9bc 100644 --- a/include/functions.php +++ b/include/functions.php @@ -1,6 +1,6 @@ 0) { - return "(" . join($filter["match_any_rule"] ? "OR" : "AND", $query) . ")"; + $fullquery = "(" . join($filter["match_any_rule"] ? "OR" : "AND", $query) . ")"; } else { - return "(false)"; + $fullquery = "(false)"; } + + if ($filter['inverse']) $fullquery = "(NOT $fullquery)"; + + return $fullquery; } if (!function_exists('gzdecode')) { diff --git a/include/rssfuncs.php b/include/rssfuncs.php index 92bfaa023..11aa0e4ba 100644 --- a/include/rssfuncs.php +++ b/include/rssfuncs.php @@ -1165,11 +1165,13 @@ foreach ($filters as $filter) { $match_any_rule = $filter["match_any_rule"]; + $inverse = $filter["inverse"]; $filter_match = false; foreach ($filter["rules"] as $rule) { $match = false; $reg_exp = $rule["reg_exp"]; + $rule_inverse = $rule["inverse"]; if (!$reg_exp) continue; @@ -1202,6 +1204,8 @@ break; } + if ($rule_inverse) $match = !$match; + if ($match_any_rule) { if ($match) { $filter_match = true; @@ -1215,6 +1219,8 @@ } } + if ($inverse) $filter_match = !$filter_match; + if ($filter_match) { foreach ($filter["actions"] AS $action) { array_push($matches, $action); -- cgit v1.2.3-54-g00ecf