]> git.wh0rd.org - tt-rss.git/blobdiff - functions.php
reworked preferences dialog, start work on post filters (schema updated)
[tt-rss.git] / functions.php
index 578020f239c811cb6c021f13d59b7ba82326c356..1337b30f89941c478a01e2cb7722aaaf8c70f43d 100644 (file)
@@ -1,6 +1,15 @@
 <?
        require_once 'config.php';
 
+       define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');
+
+       function purge_old_posts() {
+               if (PURGE_OLD_DAYS > 0) {
+                       $result = pg_query("DELETE FROM ttrss_entries WHERE
+                               date_entered < NOW() - INTERVAL '".PURGE_OLD_DAYS." days'");
+               }
+       }
+
        function update_all_feeds($link, $fetch) {
 
                if (WEB_DEMO_MODE) return;
                        update_rss_feed($link, $line["feed_url"], $line["id"]);
                }
 
+               purge_old_posts();
+
                pg_query("COMMIT");
 
        }
 
+       function check_feed_favicon($feed_url, $feed) {
+               $feed_url = str_replace("http://", "", $feed_url);
+               $feed_url = preg_replace("/\/.*$/", "", $feed_url);
+               
+               $icon_url = "http://$feed_url/favicon.ico";
+               $icon_file = ICONS_DIR . "/$feed.ico";
+
+               if (!file_exists($icon_file)) {
+                               
+                       error_reporting(0);
+                       $r = fopen($icon_url, "r");
+                       error_reporting (E_ERROR | E_WARNING | E_PARSE);
+
+                       if ($r) {
+                               $tmpfname = tempnam("/tmp", "ttrssicon");
+                       
+                               $t = fopen($tmpfname, "w");
+                               
+                               while (!feof($r)) {
+                                       $buf = fread($r, 16384);
+                                       fwrite($t, $buf);
+                               }
+                               
+                               fclose($r);
+                               fclose($t);
+
+                               error_reporting(0);
+                               if (!rename($tmpfname, $icon_file)) {
+                                       unlink($tmpfname);
+                               }
+                               error_reporting (E_ERROR | E_WARNING | E_PARSE);
+
+                       }       
+               }
+       }
+
        function update_rss_feed($link, $feed_url, $feed) {
 
                if (WEB_DEMO_MODE) return;
                error_reporting (E_ERROR | E_WARNING | E_PARSE);
 
                pg_query("BEGIN");
+
+               $feed = pg_escape_string($feed);
        
                if ($rss) {
 
-                       $result = pg_query("SELECT title FROM ttrss_feeds WHERE id = '$feed'");
+                       if (ENABLE_FEED_ICONS) {        
+                               check_feed_favicon($feed_url, $feed);
+                       }
+               
+                       $result = pg_query("SELECT title,icon_url FROM ttrss_feeds WHERE id = '$feed'");
 
                        $registered_title = pg_fetch_result($result, 0, "title");
+                       $orig_icon_url = pg_fetch_result($result, 0, "icon_url");
 
                        if (!$registered_title) {
                                $feed_title = $rss->channel["title"];
                                pg_query("UPDATE ttrss_feeds SET title = '$feed_title' WHERE id = '$feed'");
                        }
 
+//                     print "I: " . $rss->channel["image"]["url"];
+
+                       $icon_url = $rss->image["url"];
+
+                       if ($icon_url && !$orig_icon_url) {
+                               $icon_url = pg_escape_string($icon_url);
+                               pg_query("UPDATE ttrss_feeds SET icon_url = '$icon_url' WHERE id = '$feed'");
+                       }
+
                        foreach ($rss->items as $item) {
        
                                $entry_guid = $item["id"];
                                if (!$entry_guid) $entry_guid = $item["link"];
 
                                if (!$entry_guid) continue;
-       
+
                                $entry_timestamp = "";
 
                                $rss_2_date = $item['pubdate'];
                                if (!$entry_content) $entry_content = $item["content:escaped"];
                                if (!$entry_content) $entry_content = $item["content"];
 
-                               if (!$entry_content) continue;
+//                             if (!$entry_content) continue;
 
                                $content_hash = "SHA1:" . sha1(strip_tags($entry_content));
 
+                               $entry_comments = $item["comments"];
+
+                               $entry_guid = pg_escape_string($entry_guid);
+
                                $result = pg_query($link, "
                                        SELECT 
                                                id,last_read,no_orig_date,title,feed_id,content_hash,
 
                                if (pg_num_rows($result) == 0) {
 
+                                       //$entry_guid = pg_escape_string($entry_guid);
                                        $entry_content = pg_escape_string($entry_content);
                                        $entry_title = pg_escape_string($entry_title);
                                        $entry_link = pg_escape_string($entry_link);
+                                       $entry_comments = pg_escape_string($entry_comments);
 
                                        $query = "INSERT 
                                                INTO ttrss_entries 
                                                        content, 
                                                        content_hash,
                                                        feed_id, 
+                                                       comments,
                                                        no_orig_date) 
                                                VALUES
                                                        ('$entry_title', 
                                                        '$entry_content', 
                                                        '$content_hash',
                                                        '$feed', 
+                                                       '$entry_comments',
                                                        $no_orig_date)";
 
                                        $result = pg_query($link, $query);
 //                                             print "<p>Update from different feed ($orig_feed_id, $feed): $entry_guid [$entry_title]";
                                                continue;
                                        }
+
+                                       $entry_is_modified = false;
                                        
                                        $orig_timestamp = pg_fetch_result($result, 0, "updated_timestamp");
                                        $orig_content_hash = pg_fetch_result($result, 0, "content_hash");
                                        $orig_no_orig_date = pg_fetch_result($result, 0, "no_orig_date");
                                        $orig_title = pg_fetch_result($result, 0, "title");
 
+                                       $last_read_qpart = "";
+
+//                                     if ("$orig_title" != "$entry_title") {
+//                                             $last_read_qpart = 'last_read = null,';
+//                                     }
+                               
+                                       if ($orig_content_hash != $content_hash) {
+                                               if (UPDATE_POST_ON_CHECKSUM_CHANGE) {
+                                                       $last_read_qpart = 'last_read = null,';
+                                               }
+                                               $entry_is_modified = true;                                              
+                                       }
+
                                        if ($orig_title != $entry_title) {
-                                               $last_read_qpart = 'last_read = null,';
+                                               $entry_is_modified = true;
                                        }
 
-                                       if ($orig_content_hash != $content_hash) {
-                                               $last_read_qpart = 'last_read = null,';
+                                       if ($orig_timestamp != $entry_timestamp && !$orig_no_orig_date) {
+                                               $entry_is_modified = true;
                                        }
 
-//                                     if ($orig_timestamp < $entry_timestamp) {
+//                                     if (!$no_orig_date && $orig_timestamp < $entry_timestamp) {
 //                                             $last_read_qpart = 'last_read = null,';
 //                                     }
 
-                                       $entry_content = pg_escape_string($entry_content);
-                                       $entry_title = pg_escape_string($entry_title);
-                                       $entry_link = pg_escape_string($entry_link);
+                                       if ($entry_is_modified) {
 
-                                       $query = "UPDATE ttrss_entries 
-                                               SET 
-                                                       $last_read_qpart 
-                                                       title = '$entry_title',
-                                                       link = '$entry_link', 
-                                                       updated = '$entry_timestamp_fmt',
-                                                       content = '$entry_content',
-                                                       content_hash = '$content_hash'
-                                               WHERE
-                                                       id = '$orig_entry_id'";
+                                               $entry_comments = pg_escape_string($entry_comments);
+                                               $entry_content = pg_escape_string($entry_content);
+                                               $entry_title = pg_escape_string($entry_title);                                  
+                                               $entry_link = pg_escape_string($entry_link);
 
-                                       $result = pg_query($link, $query);
+//                                             print "update object $entry_guid<br>";
+
+                                               $query = "UPDATE ttrss_entries 
+                                                       SET 
+                                                               $last_read_qpart 
+                                                               title = '$entry_title',
+                                                               link = '$entry_link', 
+                                                               updated = '$entry_timestamp_fmt',
+                                                               content = '$entry_content',
+                                                               comments = '$entry_comments',
+                                                               content_hash = '$content_hash'
+                                                       WHERE
+                                                               id = '$orig_entry_id'";
 
+                                               $result = pg_query($link, $query);
+                                       }
                                }
                        }
 
 
        }
 
-
-
+       function print_select($id, $default, $values) {
+               print "<select id=\"$id\">";
+               foreach ($values as $v) {
+                       if ($v == $default)
+                               $sel = " selected";
+                        else
+                               $sel = "";
+                       
+                       print "<option$sel>$v</option>";
+               }
+               print "</select>";
+       }
 
 ?>