<?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)";
}
}