X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=classes%2Fpref%2Ffilters.php;h=12c2f271c28d9c303f1e18c20b04fdc636aa6b47;hb=6322ac79a020ab584d412d782d62b2ee77d7c6cf;hp=f1a4c7fd1e61c9db3f8654dfeb1959758af8c903;hpb=5451903ce33d21fa4901227a4021d44eb2e20535;p=tt-rss.git diff --git a/classes/pref/filters.php b/classes/pref/filters.php index f1a4c7fd..12c2f271 100644 --- a/classes/pref/filters.php +++ b/classes/pref/filters.php @@ -3,102 +3,152 @@ class Pref_Filters extends Handler_Protected { function csrf_ignore($method) { $csrf_ignored = array("index", "getfiltertree", "edit", "newfilter", "newrule", - "newaction"); + "newaction", "savefilterorder"); return array_search($method, $csrf_ignored) !== false; } -/* function filter_test($filter_type, $reg_exp, - $action_id, $action_param, $filter_param, $inverse, $feed_id, $cat_id, - $cat_filter) { + function filtersortreset() { + db_query( "UPDATE ttrss_filters2 + SET order_id = 0 WHERE owner_uid = " . $_SESSION["uid"]); + return; + } + + function savefilterorder() { + $data = json_decode($_POST['payload'], true); + + #file_put_contents("/tmp/saveorder.json", $_POST['payload']); + #$data = json_decode(file_get_contents("/tmp/saveorder.json"), true); + + if (!is_array($data['items'])) + $data['items'] = json_decode($data['items'], true); + + $index = 0; + + if (is_array($data) && is_array($data['items'])) { + foreach ($data['items'][0]['items'] as $item) { + $filter_id = (int) str_replace("FILTER:", "", $item['_reference']); + + if ($filter_id > 0) { + + db_query( "UPDATE ttrss_filters2 SET + order_id = $index WHERE id = '$filter_id' AND + owner_uid = " .$_SESSION["uid"]); + + ++$index; + } + } + } + + return; + } + + + function testFilter() { + $filter = array(); + + $filter["enabled"] = true; + $filter["match_any_rule"] = sql_bool_to_bool( + checkbox_to_sql_bool(db_escape_string( $_REQUEST["match_any_rule"]))); + $filter["inverse"] = sql_bool_to_bool( + checkbox_to_sql_bool(db_escape_string( $_REQUEST["inverse"]))); + + $filter["rules"] = array(); + + $result = db_query( "SELECT id,name FROM ttrss_filter_types"); + + $filter_types = array(); + while ($line = db_fetch_assoc($result)) { + $filter_types[$line["id"]] = $line["name"]; + } + + $rctr = 0; + foreach ($_REQUEST["rule"] AS $r) { + $rule = json_decode($r, true); + + if ($rule && $rctr < 5) { + $rule["type"] = $filter_types[$rule["filter_type"]]; + unset($rule["filter_type"]); + + if (strpos($rule["feed_id"], "CAT:") === 0) { + $rule["cat_id"] = (int) substr($rule["feed_id"], 4); + unset($rule["feed_id"]); + } - $result = db_query($this->link, "SELECT name FROM ttrss_filter_types WHERE - id = " . $filter_type); - $type_name = db_fetch_result($result, 0, "name"); + array_push($filter["rules"], $rule); - $result = db_query($this->link, "SELECT name FROM ttrss_filter_actions WHERE - id = " . $action_id); - $action_name = db_fetch_result($result, 0, "name"); + ++$rctr; + } else { + break; + } + } - $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"] = $inverse; + $feed_title = getFeedTitle( $feed); - $filters[$type_name] = array($filter); + $qfh_ret = queryFeedHeadlines( -4, 30, "", false, false, false, + "date_entered DESC", 0, $_SESSION["uid"], $filter); - if ($feed_id) - $feed = $feed_id; - else - $feed = -4; + $result = $qfh_ret[0]; - $regexp_valid = preg_match('/' . $filter['reg_exp'] . '/', - $filter['reg_exp']) !== FALSE; + $articles = array(); + $found = 0; print __("Articles matching this filter:"); print "
"; print ""; - if ($regexp_valid) { - - $feed_title = getFeedTitle($this->link, $feed); + while ($line = db_fetch_assoc($result)) { - $qfh_ret = queryFeedHeadlines($this->link, $cat_filter ? $cat_id : $feed, - 30, "", $cat_filter, false, false, - false, "date_entered DESC", 0, $_SESSION["uid"], $filter); + $entry_timestamp = strtotime($line["updated"]); + $entry_tags = get_article_tags( $line["id"], $_SESSION["uid"]); - $result = $qfh_ret[0]; + $content_preview = truncate_string( + strip_tags($line["content_preview"]), 100, '...'); - $articles = array(); - $found = 0; + if ($line["feed_title"]) + $feed_title = $line["feed_title"]; - while ($line = db_fetch_assoc($result)) { + print ""; - $entry_timestamp = strtotime($line["updated"]); - $entry_tags = get_article_tags($this->link, $line["id"], $_SESSION["uid"]); + print ""; + print ""; - print ""; + $found++; + } - print ""; - print ""; + print __("Complex expressions might not give results while testing due to issues with database server regexp implementation."); - $found++; - } - - if ($found == 0) { - print ""; - } - } else { - print ""; + print ""; } - print "
"; - $content_preview = truncate_string( - strip_tags($line["content_preview"]), 100, '...'); + print $line["title"]; + print " ("; + print "" . $feed_title . ""; + print "): "; + print "" . $content_preview . ""; + print " " . mb_substr($line["date_entered"], 0, 16); - if ($line["feed_title"]) - $feed_title = $line["feed_title"]; + print "
"; + if ($found == 0) { + print "
" . + __("No recent articles matching this filter have been found."); - print $line["title"]; - print " ("; - print "" . $feed_title . ""; - print "): "; - print "" . $content_preview . ""; - print " " . mb_substr($line["date_entered"], 0, 16); + print "
"; - print "
" . - __("No articles matching this filter has been found.") . "
" . - __("Invalid regular expression.") . "
"; + print "
"; + + print "
"; + print ""; print "
"; - } */ + } + function getfiltertree() { $root = array(); @@ -106,29 +156,87 @@ class Pref_Filters extends Handler_Protected { $root['name'] = __('Filters'); $root['items'] = array(); - $result = db_query($this->link, "SELECT *, + $filter_search = $_SESSION["prefs_filter_search"]; + + $result = db_query( "SELECT *, + (SELECT action_param FROM ttrss_filters2_actions + WHERE filter_id = ttrss_filters2.id ORDER BY id LIMIT 1) AS action_param, (SELECT action_id FROM ttrss_filters2_actions WHERE filter_id = ttrss_filters2.id ORDER BY id LIMIT 1) AS action_id, + (SELECT description FROM ttrss_filter_actions + WHERE id = (SELECT action_id FROM ttrss_filters2_actions + WHERE filter_id = ttrss_filters2.id ORDER BY id LIMIT 1)) AS action_name, (SELECT reg_exp FROM ttrss_filters2_rules WHERE filter_id = ttrss_filters2.id ORDER BY id LIMIT 1) AS reg_exp FROM ttrss_filters2 WHERE - owner_uid = ".$_SESSION["uid"]." ORDER BY action_id,reg_exp"); + owner_uid = ".$_SESSION["uid"]." ORDER BY order_id, title"); + + + $action_id = -1; + $folder = array(); + $folder['items'] = array(); while ($line = db_fetch_assoc($result)) { + /* if ($action_id != $line["action_id"]) { + if (count($folder['items']) > 0) { + array_push($root['items'], $folder); + } + + $folder = array(); + $folder['id'] = $line["action_id"]; + $folder['name'] = __($line["action_name"]); + $folder['items'] = array(); + $action_id = $line["action_id"]; + } */ + $name = $this->getFilterName($line["id"]); + $match_ok = false; + if ($filter_search) { + $rules_result = db_query( + "SELECT reg_exp FROM ttrss_filters2_rules WHERE filter_id = ".$line["id"]); + + while ($rule_line = db_fetch_assoc($rules_result)) { + if (mb_strpos($rule_line['reg_exp'], $filter_search) !== false) { + $match_ok = true; + break; + } + } + } + + if ($line['action_id'] == 7) { + $label_result = db_query( "SELECT fg_color, bg_color + FROM ttrss_labels2 WHERE caption = '".db_escape_string( $line['action_param'])."' AND + owner_uid = " . $_SESSION["uid"]); + + if (db_num_rows($label_result) > 0) { + $fg_color = db_fetch_result($label_result, 0, "fg_color"); + $bg_color = db_fetch_result($label_result, 0, "bg_color"); + + $name[1] = "α" . $name[1]; + } + } + $filter = array(); $filter['id'] = 'FILTER:' . $line['id']; $filter['bare_id'] = $line['id']; $filter['name'] = $name[0]; $filter['param'] = $name[1]; $filter['checkbox'] = false; - $filter['enabled'] = $line["enabled"]; + $filter['enabled'] = sql_bool_to_bool($line["enabled"]); - array_push($root['items'], $filter); + if (!$filter_search || $match_ok) { + array_push($folder['items'], $filter); + } } + /* if (count($folder['items']) > 0) { + array_push($root['items'], $folder); + } */ + + $root['items'] = $folder['items']; + $fl = array(); $fl['identifier'] = 'id'; $fl['label'] = 'name'; @@ -140,13 +248,15 @@ class Pref_Filters extends Handler_Protected { function edit() { - $filter_id = db_escape_string($_REQUEST["id"]); + $filter_id = db_escape_string( $_REQUEST["id"]); - $result = db_query($this->link, + $result = db_query( "SELECT * FROM ttrss_filters2 WHERE id = '$filter_id' AND owner_uid = " . $_SESSION["uid"]); $enabled = sql_bool_to_bool(db_fetch_result($result, 0, "enabled")); $match_any_rule = sql_bool_to_bool(db_fetch_result($result, 0, "match_any_rule")); + $inverse = sql_bool_to_bool(db_fetch_result($result, 0, "inverse")); + $title = htmlspecialchars(db_fetch_result($result, 0, "title")); print "
"; @@ -155,6 +265,12 @@ class Pref_Filters extends Handler_Protected { print ""; print ""; + print "
".__("Caption")."
"; + + print ""; + + print ""; + print "
".__("Match")."
"; print "
"; @@ -178,19 +294,23 @@ class Pref_Filters extends Handler_Protected { print "