]> git.wh0rd.org - tt-rss.git/blobdiff - include/functions.php
implement one time passwords using TOTP
[tt-rss.git] / include / functions.php
index ac0276fc7607b180ece39b616d8d9d1af1d675ba..2924d17962fb64b70ed96a30cc6e27e160da3880 100644 (file)
@@ -1,6 +1,6 @@
 <?php
        define('EXPECTED_CONFIG_VERSION', 26);
-       define('SCHEMA_VERSION', 96);
+       define('SCHEMA_VERSION', 97);
 
        $fetch_last_error = false;
 
                }
        }
 
-       function getFeedTitle($link, $id) {
-               if ($id == -1) {
+       function getFeedTitle($link, $id, $cat = false) {
+               if ($cat) {
+                       return getCategoryTitle($link, $id);
+               } else if ($id == -1) {
                        return __("Starred articles");
                } else if ($id == -2) {
                        return __("Published articles");
                        }
 
                        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 = "";
                        }
                                $query_strategy_part = "ttrss_entries.id > 0";
                                $vfeed_query_part = "ttrss_feeds.title AS feed_title,";
                        /* tags */
-                       } else if (preg_match("/^-?[0-9][0-9]*$/", $feed) == false) {
+                       } else if (!is_numeric($feed)) {
                                $query_strategy_part = "ttrss_entries.id > 0";
                                $vfeed_query_part = "(SELECT title FROM ttrss_feeds WHERE
                                        id = feed_id) as feed_title,";
 
                        $content_query_part = "content as content_preview,";
 
-                       if (preg_match("/^-?[0-9][0-9]*$/", $feed) != false) {
+                       if (is_numeric($feed)) {
 
                                if ($feed >= 0) {
                                        $feed_kind = "Feeds";
        function load_filters($link, $feed_id, $owner_uid, $action_id = false) {
                $filters = array();
 
-               $cat_id = getFeedCategory($link, $feed_id);
+               $cat_id = (int)getFeedCategory($link, $feed_id);
 
                $result = db_query($link, "SELECT * FROM ttrss_filters2 WHERE
                        owner_uid = $owner_uid AND enabled = true");
        }
 
        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";
+                       if ($regexp_valid) {
 
-                       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":
+                               $rule['reg_exp'] = db_escape_string($rule['reg_exp']);
 
-                                       if ($filter["filter_param"] == "before")
-                                               $cmp_qpart = "<";
-                                       else
-                                               $cmp_qpart = ">=";
-
-                                       $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"]) && $rule["feed_id"] > 0) {
+                                       $qpart .= " AND feed_id = " . db_escape_string($rule["feed_id"]);
+                               }
 
-                       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)";
                }
        }