mirror of
https://git.tt-rss.org/git/tt-rss.git
synced 2025-12-23 02:51:29 +00:00
filter_test: proper implementation using queryFeedHeadlines
This commit is contained in:
@@ -2338,7 +2338,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function sql_bool_to_bool($s) {
|
function sql_bool_to_bool($s) {
|
||||||
if ($s == "t" || $s == "1") {
|
if ($s == "t" || $s == "1" || $s == "true") {
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
@@ -3369,7 +3369,7 @@
|
|||||||
return $search_query_part;
|
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"];
|
if (!$owner_uid) $owner_uid = $_SESSION["uid"];
|
||||||
|
|
||||||
@@ -3394,6 +3394,12 @@
|
|||||||
$search_query_part = "";
|
$search_query_part = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($filter) {
|
||||||
|
$filter_query_part = filter_to_sql($filter);
|
||||||
|
} else {
|
||||||
|
$filter_query_part = "";
|
||||||
|
}
|
||||||
|
|
||||||
$view_query_part = "";
|
$view_query_part = "";
|
||||||
|
|
||||||
if ($view_mode == "adaptive" || $view_query_part == "noscores") {
|
if ($view_mode == "adaptive" || $view_query_part == "noscores") {
|
||||||
@@ -3623,6 +3629,7 @@
|
|||||||
ttrss_user_entries.ref_id = ttrss_entries.id AND
|
ttrss_user_entries.ref_id = ttrss_entries.id AND
|
||||||
ttrss_user_entries.owner_uid = '$owner_uid' AND
|
ttrss_user_entries.owner_uid = '$owner_uid' AND
|
||||||
$search_query_part
|
$search_query_part
|
||||||
|
$filter_query_part
|
||||||
$view_query_part
|
$view_query_part
|
||||||
$query_strategy_part ORDER BY $order_by
|
$query_strategy_part ORDER BY $order_by
|
||||||
$limit_query_part $offset_query_part";
|
$limit_query_part $offset_query_part";
|
||||||
@@ -7245,4 +7252,58 @@
|
|||||||
return $result;
|
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;
|
||||||
|
}
|
||||||
?>
|
?>
|
||||||
|
|||||||
@@ -12,10 +12,10 @@
|
|||||||
|
|
||||||
$filter["reg_exp"] = $reg_exp;
|
$filter["reg_exp"] = $reg_exp;
|
||||||
$filter["action"] = $action_name;
|
$filter["action"] = $action_name;
|
||||||
|
$filter["type"] = $type_name;
|
||||||
$filter["action_param"] = $action_param;
|
$filter["action_param"] = $action_param;
|
||||||
$filter["filter_param"] = $filter_param;
|
$filter["filter_param"] = $filter_param;
|
||||||
$filter["inverse"] = sql_bool_to_bool($inverse);
|
$filter["inverse"] = $inverse;
|
||||||
|
|
||||||
$filters[$type_name] = array($filter);
|
$filters[$type_name] = array($filter);
|
||||||
|
|
||||||
@@ -27,8 +27,8 @@
|
|||||||
$feed_title = getFeedTitle($link, $feed);
|
$feed_title = getFeedTitle($link, $feed);
|
||||||
|
|
||||||
$qfh_ret = queryFeedHeadlines($link, $feed,
|
$qfh_ret = queryFeedHeadlines($link, $feed,
|
||||||
300, "", false, false, false,
|
30, "", false, false, false,
|
||||||
false, "date_entered DESC", 0, $_SESSION["uid"]);
|
false, "date_entered DESC", 0, $_SESSION["uid"], $filter);
|
||||||
|
|
||||||
$result = $qfh_ret[0];
|
$result = $qfh_ret[0];
|
||||||
|
|
||||||
@@ -45,43 +45,34 @@
|
|||||||
$entry_timestamp = strtotime($line["updated"]);
|
$entry_timestamp = strtotime($line["updated"]);
|
||||||
$entry_tags = get_article_tags($link, $line["id"], $_SESSION["uid"]);
|
$entry_tags = get_article_tags($link, $line["id"], $_SESSION["uid"]);
|
||||||
|
|
||||||
$article_filters = get_article_filters($filters, $line["title"],
|
$content_preview = truncate_string(
|
||||||
$line["content_preview"], $line["link"],
|
strip_tags($line["content_preview"]), 100, '...');
|
||||||
$entry_timestamp, $line["author"], $entry_tags);
|
|
||||||
|
|
||||||
if (count($article_filters) != 0) {
|
if ($line["feed_title"])
|
||||||
|
$feed_title = $line["feed_title"];
|
||||||
|
|
||||||
$content_preview = truncate_string(
|
print "<tr>";
|
||||||
strip_tags($line["content_preview"]), 100, '...');
|
|
||||||
|
|
||||||
if ($line["feed_title"])
|
print "<td width='5%' align='center'><input
|
||||||
$feed_title = $line["feed_title"];
|
dojoType=\"dijit.form.CheckBox\" checked=\"1\"
|
||||||
|
disabled=\"1\" type=\"checkbox\"></td>";
|
||||||
|
print "<td>";
|
||||||
|
|
||||||
print "<tr>";
|
print $line["title"];
|
||||||
|
print " (";
|
||||||
|
print "<b>" . $feed_title . "</b>";
|
||||||
|
print "): ";
|
||||||
|
print "<span class=\"insensitive\">" . $content_preview . "</span>";
|
||||||
|
print $line["date_entered"];
|
||||||
|
|
||||||
print "<td width='5%' align='center'><input
|
print "</td></tr>";
|
||||||
dojoType=\"dijit.form.CheckBox\" checked=\"1\"
|
|
||||||
disabled=\"1\" type=\"checkbox\"></td>";
|
|
||||||
print "<td>";
|
|
||||||
|
|
||||||
print $line["title"];
|
$found++;
|
||||||
print " (";
|
|
||||||
print "<b>" . $feed_title . "</b>";
|
|
||||||
print "): ";
|
|
||||||
print "<span class=\"insensitive\">" . $content_preview . "</span>";
|
|
||||||
|
|
||||||
print "</td></tr>";
|
|
||||||
|
|
||||||
$found++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($found >= 30)
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($found == 0) {
|
if ($found == 0) {
|
||||||
print "<tr><td align='center'>" .
|
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>";
|
print "</table>";
|
||||||
|
|||||||
Reference in New Issue
Block a user