]> git.wh0rd.org - tt-rss.git/commitdiff
enable processing of article-date filter (closes #225)
authorAndrew Dolgov <fox@bah.spb.su>
Sat, 13 Dec 2008 13:49:19 +0000 (14:49 +0100)
committerAndrew Dolgov <fox@bah.spb.su>
Sat, 13 Dec 2008 13:49:19 +0000 (14:49 +0100)
functions.php
modules/popup-dialog.php
modules/pref-filters.php

index 89752a588efecc4bf59bdb9e356eddc843495dcd..bb858671914d0cfa0d0c65e775920e59c9cab072 100644 (file)
                                        if ($rss_2_date != "") $entry_timestamp = strtotime($rss_2_date);
                                }
 
-                               if (defined('DAEMON_EXTENDED_DEBUG') || $_GET['xdebug']) {
-                                       _debug("update_rss_feed: date $entry_timestamp");
-                               }
-
                                if ($entry_timestamp == "" || $entry_timestamp == -1 || !$entry_timestamp) {
                                        $entry_timestamp = time();
                                        $no_orig_date = 'true';
 
                                $entry_timestamp_fmt = strftime("%Y/%m/%d %H:%M:%S", $entry_timestamp);
 
+                               if (defined('DAEMON_EXTENDED_DEBUG') || $_GET['xdebug']) {
+                                       _debug("update_rss_feed: date $entry_timestamp [$entry_timestamp_fmt]");
+                               }
+
                                if ($use_simplepie) {
                                        $entry_title = $item->get_title();
                                } else {
 //                                     error_reporting(0);
 
                                        $article_filters = get_article_filters($filters, $entry_title, 
-                                                       $entry_content, $entry_link);
+                                                       $entry_content, $entry_link, $entry_timestamp);
 
                                        if (defined('DAEMON_EXTENDED_DEBUG') || $_GET['xdebug']) {
                                                _debug("update_rss_feed: article filters: ");
                print "</select>";
        }
 
-       function get_article_filters($filters, $title, $content, $link) {
+       function get_article_filters($filters, $title, $content, $link, $timestamp) {
                $matches = array();
 
                if ($filters["title"]) {
                        }
                }
 
+               if ($filters["date"]) {
+                       $reg_exp = $filter["reg_exp"];
+                       foreach ($filters["date"] as $filter) {
+                               $date_modifier = $filter["filter_param"];
+                               $inverse = $filter["inverse"];
+                               $check_timestamp = strtotime($filter["reg_exp"]);
+
+                               # no-op when timestamp doesn't parse to prevent misfires
+
+                               if ($check_timestamp) {
+                                       $match_ok = false;
+
+                                       if ($date_modifier == "before" && $timestamp < $check_timestamp ||
+                                               $date_modifier == "after" && $timestamp > $check_timestamp) {
+                                                       $match_ok = true;
+                                       }
+
+                                       if ($inverse) $match_ok = !$match_ok;
+
+                                       if ($match_ok) {
+                                               array_push($matches, array($filter["action"], $filter["action_param"]));
+                                       }
+                               }
+                       }
+               } 
+
                return $matches;
        }
 
                        ttrss_filter_types.name AS name,
                        ttrss_filter_actions.name AS action,
                        inverse,
-                       action_param
+                       action_param,
+                       filter_param
                        FROM ttrss_filters,ttrss_filter_types,ttrss_filter_actions WHERE                                        
                                enabled = true AND
                                $ftype_query_part
                                $filter["reg_exp"] = $line["reg_exp"];
                                $filter["action"] = $line["action"];
                                $filter["action_param"] = $line["action_param"];
+                               $filter["filter_param"] = $line["filter_param"];
                                $filter["inverse"] = sql_bool_to_bool($line["inverse"]);
                        
                                array_push($filters[$line["name"]], $filter);
index a39ea0efa5491a399c04f2aa12a8cf63214a6229..fe8bf5e01ca6cce7b6a833de323a27ff02b0081e 100644 (file)
 
                        print "<span id=\"filter_dlg_date_mod_box\" style=\"display : none\">";
                        print __("Date") . " ";
-                       print "<select name=\"filter_date_modifier\">";
-                       print "<option value=\"before\">".__('before')."</option>";
-                       print "<option value=\"after\">".__('after')."</option>";
-                       print "</select>&nbsp;</span>";
+
+                       $filter_params = array(
+                               "before" => __("before"),
+                               "after" => __("after"));
+
+                       print_select_hash("filter_date_modifier", "before", $filter_params);
+
+                       print "&nbsp;</span>";
 
                        print "<input onkeypress=\"return filterCR(event, createFilter)\"
                                         onkeyup=\"toggleSubmitNotEmpty(this, 'infobox_submit')\"
index 2bf4c151602f3a34968e983336e5e12969f4d37e..777e9ba8178e7d1c66eb1127f3525f9614821e7f 100644 (file)
@@ -15,6 +15,7 @@
                        $feed_id = db_fetch_result($result, 0, "feed_id");
                        $action_id = db_fetch_result($result, 0, "action_id");
                        $action_param = db_fetch_result($result, 0, "action_param");
+                       $filter_param = db_fetch_result($result, 0, "filter_param");
 
                        $enabled = sql_bool_to_bool(db_fetch_result($result, 0, "enabled"));
                        $inverse = sql_bool_to_bool(db_fetch_result($result, 0, "inverse"));
 
                        print "<span id=\"filter_dlg_date_mod_box\" $date_ops_invisible>";
                        print __("Date") . " ";
-                       print "<select name=\"filter_date_modifier\">";
-                       print "<option value=\"before\">".__('before')."</option>";
-                       print "<option value=\"after\">".__('after')."</option>";
-                       print "</select>&nbsp;</span>";
+
+                       $filter_params = array(
+                               "before" => __("before"),
+                               "after" => __("after"));
+
+                       print_select_hash("filter_date_modifier", $filter_param,
+                               $filter_params);
+
+                       print "&nbsp;</span>";
 
                        print "<input onkeypress=\"return filterCR(event, filterEditSave)\"
                                         onkeyup=\"toggleSubmitNotEmpty(this, 'infobox_submit')\"
                        $enabled = checkbox_to_sql_bool(db_escape_string($_GET["enabled"]));
                        $inverse = checkbox_to_sql_bool(db_escape_string($_GET["inverse"]));
 
+                       # for the time being, no other filters use params anyway...
+                       $filter_param = db_escape_string($_GET["filter_date_modifier"]);
+
                        if (!$feed_id) {
                                $feed_id = 'NULL';
                        } else {
                                        filter_type = '$filter_type',
                                        enabled = $enabled,
                                        inverse = $inverse,
-                                       action_param = '$action_param'
+                                       action_param = '$action_param',
+                                       filter_param = '$filter_param'
                                        WHERE id = '$filter_id' AND owner_uid = " . $_SESSION["uid"]);
 
                        if (db_affected_rows($link, $result) != 0) {
                        $feed_id = db_escape_string($_GET["feed_id"]);
                        $action_id = db_escape_string($_GET["action_id"]); 
                        $action_param = db_escape_string($_GET["action_param"]); 
-
                        $inverse = checkbox_to_sql_bool(db_escape_string($_GET["inverse"]));
 
+                       # for the time being, no other filters use params anyway...
+                       $filter_param = db_escape_string($_GET["filter_date_modifier"]);
+
                        if (!$regexp) return;
 
                        if (!$feed_id) {
                                $feed_id = sprintf("'%s'", db_escape_string($feed_id));
                        }
 
-                       # for the time being, no other filters use params anyway...
-                       $filter_param = db_escape_string($_GET["filter_date_modifier"]);
-
                        $result = db_query($link,
                                "INSERT INTO ttrss_filters (reg_exp,filter_type,owner_uid,feed_id,
                                        action_id, action_param, inverse, filter_param)