]> git.wh0rd.org - tt-rss.git/commitdiff
implement support for daily digests
authorAndrew Dolgov <fox@madoka.spb.ru>
Mon, 21 Aug 2006 06:43:38 +0000 (07:43 +0100)
committerAndrew Dolgov <fox@madoka.spb.ru>
Mon, 21 Aug 2006 06:43:38 +0000 (07:43 +0100)
backend.php
config.php-dist
functions.php
update_daemon.php
update_feeds.php

index 23f46282ef44008bf86d99285a51cb069ba3002d..130be4a1f5ea18a0306aae68890445d2870ea6d5 100644 (file)
 
        if ($op == "digestTest") {
                header("Content-Type: text/plain");
+               print_r(prepare_headlines_digest($link, $_SESSION["uid"]));
+               $print_exec_time = false;
+
+       }
 
-               echo prepare_headlines_digest($link, $_SESSION["uid"]);
+       if ($op == "digestSend") {
+               header("Content-Type: text/plain");
+               send_headlines_digests($link);
                $print_exec_time = false;
 
        }
index cd1450724c9728b2711c7145e97654b6228ab268..9f2f23854fbcfe32ab54a6c199220d985f3c1f04 100644 (file)
@@ -75,8 +75,8 @@
        define('MAIL_RESET_PASS', true);
        // Send mail to user on password reset
        
-       define('MAIL_FROM', 'TT-RSS Daemon <noreply@ttrss.your-shiny-host.org>');
-       // Pretty obvious, I suppose.
+       define('MAIL_FROM', 'TT-RSS Daemon <noreply@some.ttrss.host.dom>');
+       // Pretty obvious, I suppose. Used for email digests & password notifications.
 
        define('ENABLE_FEED_BROWSER', true);
        // Enable or disable local feed browser
        define('USE_CURL_FOR_ICONS', false);
        // Fetch favicons using CURL, useful if your PHP has disabled remote fopen()
 
-       define('DIGEST_HOSTNAME', 'madoka.spb.ru');
+       define('DIGEST_HOSTNAME', 'some.ttrss.host.dom');
        // Hostname for email digest signature
 
+       define('DIGEST_EMAIL_LIMIT', 10);
+       // The maximum amount of emails sent in one digest batch
+
        define('CONFIG_VERSION', 5);
        // Expected config version. Please update this option in config.php
        // if necessary (after migrating all new options from this file).
index 1fa9aa2997ff35d285f6f2f1960706a743c8c549..2dbe127b6d89d91e478ee3c4116b315fdd0ce783 100644 (file)
                return $res;
        }
 
+       function send_headlines_digests($link, $limit = 100) {
+
+               $user_limit = DIGEST_EMAIL_LIMIT;
+               $days = DIGEST_DAYS_BACK;
+
+               print "Sending digests, batch of max $user_limit users, days = $days, headline limit = $limit\n\n";
+
+               if (DB_TYPE == "pgsql") {
+                       $interval_query = "last_digest_sent < NOW() - INTERVAL '$days days'";
+               } else if (DB_TYPE == "mysql") {
+                       $interval_query = "last_digest_sent < DATE_SUB(NOW(), INTERVAL $days DAY)";
+               }
+
+               $result = db_query($link, "SELECT id,email FROM ttrss_users 
+                               WHERE email != '' AND (last_digest_sent IS NULL OR $interval_query)");
+
+               while ($line = db_fetch_assoc($result)) {
+                       if (get_pref($link, 'DIGEST_ENABLE', $line['id'], false)) {
+                               print "Sending digest for UID:" . $line['id'] . " - " . $line["email"] . " ... ";
+
+                               $tuple = prepare_headlines_digest($link, $line["id"], $days, $limit);
+                               $digest = $tuple[0];
+                               $headlines_count = $tuple[1];
+
+                               if ($headlines_count > 0) {
+                                       $rc = mail($line["login"] . " <" . $line["email"] . ">",
+                                               "[tt-rss] New headlines for last 24 hours", $digest,
+                                               "From: " . MAIL_FROM);
+                                       print "RC=$rc\n";
+                                       db_query($link, "UPDATE ttrss_users SET last_digest_sent = NOW() 
+                                                       WHERE id = " . $line["id"]);
+                               } else {
+                                       print "No headlines\n";
+                               }
+                       }
+               }
+
+//             $digest = prepare_headlines_digest($link, $user_id, $days, $limit);
+
+       }
+
        function prepare_headlines_digest($link, $user_id, $days = 1, $limit = 100) {
                $tmp =  "New headlines for last 24 hours, as of " . date("Y/m/d H:m") . "\n";   
                $tmp .= "=======================================================\n\n";
 
                if (DB_TYPE == "pgsql") {
-                       $interval_query = "ttrss_entries.date_entered < NOW() - INTERVAL '$days days'";
+                       $interval_query = "ttrss_entries.date_entered > NOW() - INTERVAL '$days days'";
                } else if (DB_TYPE == "mysql") {
                        $interval_query = "ttrss_entries.date_entered > DATE_SUB(NOW(), INTERVAL $days DAY)";
                }
                                ttrss_user_entries,ttrss_entries,ttrss_feeds 
                        WHERE 
                                ref_id = ttrss_entries.id AND feed_id = ttrss_feeds.id 
+                               AND hidden = false
                                AND $interval_query
                                AND ttrss_user_entries.owner_uid = $user_id
                                AND unread = true ORDER BY ttrss_feeds.title, date_entered DESC
 
                $cur_feed_title = "";
 
+               $headlines_count = db_num_rows($result);
+
                while ($line = db_fetch_assoc($result)) {
                        $updated = smart_date_time(strtotime($line["last_updated"]));
                        $feed_title = $line["feed_title"];
                        "To unsubscribe, visit your configuration options or contact instance owner.\n";
                        
 
-               return $tmp;
+               return array($tmp, $headlines_count);
        }
 
        function check_for_update($link) {
index 007afb5bbab4d5f0ef2d7cc71a09465e086e2b67..b15d43966994e9e4c89418f1a2a301bf699d7704 100644 (file)
                        }
                }
 
+               send_headlines_digests($link);
+
                print "Sleeping for " . DAEMON_SLEEP_INTERVAL . " seconds...\n";
                
                sleep(DAEMON_SLEEP_INTERVAL);
index 5d8ea2da8287698b42aa060cc836a57c8eac5d9f..279f4e1df35e7b2f5ebcbc0451fefa706df7a5d8 100644 (file)
@@ -34,6 +34,8 @@
                        update_all_feeds($link, false, $user_id, true);
        }
 
+       send_headlines_digests($link);
+
        db_close($link);
 
 ?>