]> git.wh0rd.org - tt-rss.git/blobdiff - include/functions.php
implement filter testing
[tt-rss.git] / include / functions.php
index 2845acb226e234fb2e35f3f4964ec0ea179dc0ea..dd97522c4493b0f9b9a871e9e187339f94ae75eb 100644 (file)
                        }
 
                        if ($filter) {
-                               $filter_query_part = filter_to_sql($filter);
+
+                               if (DB_TYPE == "pgsql") {
+                                       $query_strategy_part .= " AND updated > NOW() - INTERVAL '14 days' ";
+                               } else {
+                                       $query_strategy_part .= " AND updated > DATE_SUB(NOW(), INTERVAL 14 DAY) ";
+                               }
+
+                               $override_order = "updated DESC";
+
+                               $filter_query_part = filter_to_sql($filter) . " AND";
                        } else {
                                $filter_query_part = "";
                        }
        }
 
        function filter_to_sql($filter) {
-               $query = "";
+               $query = array();
 
-               $regexp_valid = preg_match('/' . $filter['reg_exp'] . '/',
-                       $filter['reg_exp']) !== FALSE;
+               if (DB_TYPE == "pgsql")
+                       $reg_qpart = "~";
+               else
+                       $reg_qpart = "REGEXP";
 
-               if ($regexp_valid) {
+               foreach ($filter["rules"] AS $rule) {
+                       $regexp_valid = preg_match('/' . $rule['reg_exp'] . '/',
+                               $rule['reg_exp']) !== FALSE;
 
-                       if (DB_TYPE == "pgsql")
-                               $reg_qpart = "~";
-                       else
-                               $reg_qpart = "REGEXP";
-
-                       switch ($filter["type"]) {
-                               case "title":
-                                       $query = "LOWER(ttrss_entries.title) $reg_qpart LOWER('".
-                                               $filter['reg_exp'] . "')";
-                                       break;
-                               case "content":
-                                       $query = "LOWER(ttrss_entries.content) $reg_qpart LOWER('".
-                                               $filter['reg_exp'] . "')";
-                                       break;
-                               case "both":
-                                       $query = "LOWER(ttrss_entries.title) $reg_qpart LOWER('".
-                                               $filter['reg_exp'] . "') OR LOWER(" .
-                                               "ttrss_entries.content) $reg_qpart LOWER('" . $filter['reg_exp'] . "')";
-                                       break;
-                               case "tag":
-                                       $query = "LOWER(ttrss_user_entries.tag_cache) $reg_qpart LOWER('".
-                                               $filter['reg_exp'] . "')";
-                                       break;
-                               case "link":
-                                       $query = "LOWER(ttrss_entries.link) $reg_qpart LOWER('".
-                                               $filter['reg_exp'] . "')";
-                                       break;
-                               case "date":
+                       if ($regexp_valid) {
 
-                                       if ($filter["filter_param"] == "before")
-                                               $cmp_qpart = "<";
-                                       else
-                                               $cmp_qpart = ">=";
+                               $rule['reg_exp'] = db_escape_string($rule['reg_exp']);
 
-                                       $timestamp = date("Y-m-d H:N:s", strtotime($filter["reg_exp"]));
-                                       $query = "ttrss_entries.date_entered $cmp_qpart '$timestamp'";
-                                       break;
-                               case "author":
-                                       $query = "LOWER(ttrss_entries.author) $reg_qpart LOWER('".
-                                               $filter['reg_exp'] . "')";
-                                       break;
-                       }
+                               switch ($rule["type"]) {
+                                       case "title":
+                                               $qpart = "LOWER(ttrss_entries.title) $reg_qpart LOWER('".
+                                                       $rule['reg_exp'] . "')";
+                                               break;
+                                       case "content":
+                                               $qpart = "LOWER(ttrss_entries.content) $reg_qpart LOWER('".
+                                                       $rule['reg_exp'] . "')";
+                                               break;
+                                       case "both":
+                                               $qpart = "LOWER(ttrss_entries.title) $reg_qpart LOWER('".
+                                                       $rule['reg_exp'] . "') OR LOWER(" .
+                                                       "ttrss_entries.content) $reg_qpart LOWER('" . $rule['reg_exp'] . "')";
+                                               break;
+                                       case "tag":
+                                               $qpart = "LOWER(ttrss_user_entries.tag_cache) $reg_qpart LOWER('".
+                                                       $rule['reg_exp'] . "')";
+                                               break;
+                                       case "link":
+                                               $qpart = "LOWER(ttrss_entries.link) $reg_qpart LOWER('".
+                                                       $rule['reg_exp'] . "')";
+                                               break;
+                                       case "author":
+                                               $qpart = "LOWER(ttrss_entries.author) $reg_qpart LOWER('".
+                                                       $rule['reg_exp'] . "')";
+                                               break;
+                               }
 
-                       if ($filter["inverse"])
-                               $query = "NOT ($query)";
+                               if (isset($rule["feed_id"])) {
+                                       $qpart .= " AND feed_id " . ($rule["feed_id"] ? '= ' . $rule["feed_id"] : 'IS NULL');
+                               }
 
-                       if ($query) {
-                               if (DB_TYPE == "pgsql") {
-                                       $query = " ($query) AND ttrss_entries.date_entered > NOW() - INTERVAL '14 days'";
-                               } else {
-                                       $query = " ($query) AND ttrss_entries.date_entered > DATE_SUB(NOW(), INTERVAL 14 DAY)";
+                               if (isset($rule["cat_id"])) {
+                                       $qpart .= " AND cat_id " . ($rule["cat_id"] ? '= ' . $rule["cat_id"] : 'IS NULL');
                                }
-                               $query .= " AND ";
+
+                               array_push($query, "($qpart)");
+
                        }
+               }
 
-                       return $query;
+               if (count($query) > 0) {
+                       return "(" . join($filter["match_any_rule"] ? "OR" : "AND", $query) . ")";
                } else {
-                       return false;
+                       return "(false)";
                }
        }