summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2011-04-18 13:04:24 +0400
committerAndrew Dolgov <[email protected]>2011-04-18 13:04:24 +0400
commit361840203b217b03eca1839bfe11a172a5cccd40 (patch)
tree1ea690a4ad721db46de0ec187077fc29c3a03498
parent452a329b97694da92bb011ec176f03787e40c42b (diff)
filter_test: proper implementation using queryFeedHeadlines
-rw-r--r--functions.php65
-rw-r--r--modules/pref-filters.php53
2 files changed, 85 insertions, 33 deletions
diff --git a/functions.php b/functions.php
index b99744373..43e0e715c 100644
--- a/functions.php
+++ b/functions.php
@@ -2338,7 +2338,7 @@
}
function sql_bool_to_bool($s) {
- if ($s == "t" || $s == "1") {
+ if ($s == "t" || $s == "1" || $s == "true") {
return true;
} else {
return false;
@@ -3369,7 +3369,7 @@
return $search_query_part;
}
- function queryFeedHeadlines($link, $feed, $limit, $view_mode, $cat_view, $search, $search_mode, $match_on, $override_order = false, $offset = 0, $owner_uid = 0) {
+ function queryFeedHeadlines($link, $feed, $limit, $view_mode, $cat_view, $search, $search_mode, $match_on, $override_order = false, $offset = 0, $owner_uid = 0, $filter = false) {
if (!$owner_uid) $owner_uid = $_SESSION["uid"];
@@ -3394,6 +3394,12 @@
$search_query_part = "";
}
+ if ($filter) {
+ $filter_query_part = filter_to_sql($filter);
+ } else {
+ $filter_query_part = "";
+ }
+
$view_query_part = "";
if ($view_mode == "adaptive" || $view_query_part == "noscores") {
@@ -3623,6 +3629,7 @@
ttrss_user_entries.ref_id = ttrss_entries.id AND
ttrss_user_entries.owner_uid = '$owner_uid' AND
$search_query_part
+ $filter_query_part
$view_query_part
$query_strategy_part ORDER BY $order_by
$limit_query_part $offset_query_part";
@@ -7245,4 +7252,58 @@
return $result;
}
+ function filter_to_sql($filter) {
+ $query = "";
+
+ 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 ($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;
+ }
+
+ if ($filter["inverse"])
+ $query = "NOT ($query)";
+
+ if ($query)
+ $query .= " AND ";
+
+ return $query;
+ }
?>
diff --git a/modules/pref-filters.php b/modules/pref-filters.php
index bba4ff71e..860d18f1a 100644
--- a/modules/pref-filters.php
+++ b/modules/pref-filters.php
@@ -12,10 +12,10 @@
$filter["reg_exp"] = $reg_exp;
$filter["action"] = $action_name;
-
+ $filter["type"] = $type_name;
$filter["action_param"] = $action_param;
$filter["filter_param"] = $filter_param;
- $filter["inverse"] = sql_bool_to_bool($inverse);
+ $filter["inverse"] = $inverse;
$filters[$type_name] = array($filter);
@@ -27,8 +27,8 @@
$feed_title = getFeedTitle($link, $feed);
$qfh_ret = queryFeedHeadlines($link, $feed,
- 300, "", false, false, false,
- false, "date_entered DESC", 0, $_SESSION["uid"]);
+ 30, "", false, false, false,
+ false, "date_entered DESC", 0, $_SESSION["uid"], $filter);
$result = $qfh_ret[0];
@@ -45,43 +45,34 @@
$entry_timestamp = strtotime($line["updated"]);
$entry_tags = get_article_tags($link, $line["id"], $_SESSION["uid"]);
- $article_filters = get_article_filters($filters, $line["title"],
- $line["content_preview"], $line["link"],
- $entry_timestamp, $line["author"], $entry_tags);
-
- if (count($article_filters) != 0) {
-
- $content_preview = truncate_string(
- strip_tags($line["content_preview"]), 100, '...');
+ $content_preview = truncate_string(
+ strip_tags($line["content_preview"]), 100, '...');
- if ($line["feed_title"])
- $feed_title = $line["feed_title"];
+ if ($line["feed_title"])
+ $feed_title = $line["feed_title"];
- print "<tr>";
+ print "<tr>";
- print "<td width='5%' align='center'><input
- dojoType=\"dijit.form.CheckBox\" checked=\"1\"
- disabled=\"1\" type=\"checkbox\"></td>";
- print "<td>";
+ print "<td width='5%' align='center'><input
+ dojoType=\"dijit.form.CheckBox\" checked=\"1\"
+ disabled=\"1\" type=\"checkbox\"></td>";
+ print "<td>";
- print $line["title"];
- print "&nbsp;(";
- print "<b>" . $feed_title . "</b>";
- print "):&nbsp;";
- print "<span class=\"insensitive\">" . $content_preview . "</span>";
+ print $line["title"];
+ print "&nbsp;(";
+ print "<b>" . $feed_title . "</b>";
+ print "):&nbsp;";
+ print "<span class=\"insensitive\">" . $content_preview . "</span>";
+ print $line["date_entered"];
- print "</td></tr>";
-
- $found++;
- }
+ print "</td></tr>";
- if ($found >= 30)
- break;
+ $found++;
}
if ($found == 0) {
print "<tr><td align='center'>" .
- __("No recent articles matching this filter has been found.") . "</td></tr>";
+ __("No articles matching this filter has been found.") . "</td></tr>";
}
print "</table>";