]> git.wh0rd.org Git - tt-rss.git/commitdiff
implement preferred time for sending out digests
authorAndrew Dolgov <fox@madoka.volgo-balt.ru>
Mon, 30 Jan 2012 12:34:45 +0000 (16:34 +0400)
committerAndrew Dolgov <fox@madoka.volgo-balt.ru>
Mon, 30 Jan 2012 12:34:45 +0000 (16:34 +0400)
classes/backend.php
classes/pref_prefs.php
include/db-prefs.php
include/functions.php
include/rssfuncs.php
include/sanity_check.php
schema/ttrss_schema_mysql.sql
schema/ttrss_schema_pgsql.sql
schema/versions/mysql/89.sql [new file with mode: 0644]
schema/versions/pgsql/89.sql [new file with mode: 0644]

index 334701f4a64bc8f114ec5d499a242f60eb44ac0b..19938344d78481f1e222aba7e6cfbc646e1d4ebd 100644 (file)
@@ -8,7 +8,9 @@ class Backend extends Handler {
        }
 
        function digestSend() {
-               send_headlines_digests($this->link);
+               define('PREFS_NO_CACHE', true);
+
+               send_headlines_digests($this->link, 100, true);
        }
 
        function help() {
index 57971ccb161528b09958f7327c998c2b5dca082f..0c343087a6e3fbe21c66ef69117f7848ad484549 100644 (file)
@@ -464,6 +464,11 @@ class Pref_Prefs extends Protected_Handler {
                                        onclick=\"insertSSLserial('')\">" .
                                        __('Clear') . "</button>";
 
+                       } else if ($pref_name = 'DIGEST_RPEFERRED_TIME') {
+                               print "<input dojoType=\"dijit.form.ValidationTextBox\"
+                                       id=\"$pref_name\" regexp=\"[012]\d:\d\d\" placeHolder=\"12:00\"
+                                       name=\"$pref_name\" value=\"$value\"><div class=\"insensitive\">".
+                                       T_sprintf("Current server time: %s", date("H:i")) . "</div>";
                        } else {
                                $regexp = ($type_name == 'integer') ? 'regexp="^\d*$"' : '';
 
index 7ee492009bc3ff2ee93ebb4fd2e449955d6e63af..b62e01a7b4ecd7c777cc6deaefc706b9d4d923b5 100644 (file)
@@ -2,7 +2,7 @@
        require_once "config.php";
        require_once "db.php";
 
-       if (!defined('DISABLE_SESSIONS')) {
+       if (!defined('DISABLE_SESSIONS') && !defined('PREFS_NO_CACHE')) {
                if (!$_SESSION["prefs_cache"])
                        $_SESSION["prefs_cache"] = array();
        }
@@ -21,7 +21,7 @@
                        //$prefs_cache = false;
                }
 
-               if ($prefs_cache && !defined('DISABLE_SESSIONS')) {
+               if ($prefs_cache && !defined('DISABLE_SESSIONS') && !defined('PREFS_NO_CACHE')) {
                        if ($_SESSION["prefs_cache"] && @$_SESSION["prefs_cache"][$pref_name]) {
                                $tuple = $_SESSION["prefs_cache"][$pref_name];
                                return convert_pref_type($tuple["value"], $tuple["type"]);
                $type_name = "";
                $current_value = "";
 
-               if (!defined('DISABLE_SESSIONS')) {
+               if (!defined('DISABLE_SESSIONS') && !defined('PREFS_NO_CACHE')) {
                        if ($_SESSION["prefs_cache"] && @$_SESSION["prefs_cache"][$pref_name]) {
                                $type_name = $_SESSION["prefs_cache"][$pref_name]["type"];
                                $current_value = $_SESSION["prefs_cache"][$pref_name]["value"];
index 44331d72e1c88090441a622051a639825d7a7b7f..9eb66de3ea3fcd3d5637b0e450f1da55a19b465a 100644 (file)
                require_once 'lib/phpmailer/class.phpmailer.php';
 
                $user_limit = 15; // amount of users to process (e.g. emails to send out)
-               $days = 1;
 
-               if ($debug) _debug("Sending digests, batch of max $user_limit users, days = $days, headline limit = $limit");
+               if ($debug) _debug("Sending digests, batch of max $user_limit users, headline limit = $limit");
 
                if (DB_TYPE == "pgsql") {
-                       $interval_query = "last_digest_sent < NOW() - INTERVAL '$days days'";
+                       $interval_query = "last_digest_sent < NOW() - INTERVAL '1 days'";
                } else if (DB_TYPE == "mysql") {
-                       $interval_query = "last_digest_sent < DATE_SUB(NOW(), INTERVAL $days DAY)";
+                       $interval_query = "last_digest_sent < DATE_SUB(NOW(), INTERVAL 1 DAY)";
                }
 
                $result = db_query($link, "SELECT id,email FROM ttrss_users
                while ($line = db_fetch_assoc($result)) {
 
                        if (get_pref($link, 'DIGEST_ENABLE', $line['id'], false)) {
-                               print "Sending digest for UID:" . $line['id'] . " - " . $line["email"] . " ... ";
+                               $preferred_ts = strtotime(get_pref($link, 'DIGEST_PREFERRED_TIME', $line['id'], '00:00'));
 
-                               $do_catchup = get_pref($link, 'DIGEST_CATCHUP', $line['id'], false);
+                               if ($preferred_ts && time() >= $preferred_ts) {
 
-                               $tuple = prepare_headlines_digest($link, $line["id"], $days, $limit);
-                               $digest = $tuple[0];
-                               $headlines_count = $tuple[1];
-                               $affected_ids = $tuple[2];
-                               $digest_text = $tuple[3];
+                                       if ($debug) print "Sending digest for UID:" . $line['id'] . " - " . $line["email"] . " ... ";
 
-                               if ($headlines_count > 0) {
+                                       $do_catchup = get_pref($link, 'DIGEST_CATCHUP', $line['id'], false);
 
-                                       $mail = new PHPMailer();
+                                       $tuple = prepare_headlines_digest($link, $line["id"], 1, $limit);
+                                       $digest = $tuple[0];
+                                       $headlines_count = $tuple[1];
+                                       $affected_ids = $tuple[2];
+                                       $digest_text = $tuple[3];
 
-                                       $mail->PluginDir = "lib/phpmailer/";
-                                       $mail->SetLanguage("en", "lib/phpmailer/language/");
+                                       if ($headlines_count > 0) {
 
-                                       $mail->CharSet = "UTF-8";
+                                               $mail = new PHPMailer();
 
-                                       $mail->From = SMTP_FROM_ADDRESS;
-                                       $mail->FromName = SMTP_FROM_NAME;
-                                       $mail->AddAddress($line["email"], $line["login"]);
+                                               $mail->PluginDir = "lib/phpmailer/";
+                                               $mail->SetLanguage("en", "lib/phpmailer/language/");
 
-                                       if (SMTP_HOST) {
-                                               $mail->Host = SMTP_HOST;
-                                               $mail->Mailer = "smtp";
-                                               $mail->SMTPAuth = SMTP_LOGIN != '';
-                                               $mail->Username = SMTP_LOGIN;
-                                               $mail->Password = SMTP_PASSWORD;
-                                       }
+                                               $mail->CharSet = "UTF-8";
+
+                                               $mail->From = SMTP_FROM_ADDRESS;
+                                               $mail->FromName = SMTP_FROM_NAME;
+                                               $mail->AddAddress($line["email"], $line["login"]);
 
-                                       $mail->IsHTML(true);
-                                       $mail->Subject = DIGEST_SUBJECT;
-                                       $mail->Body = $digest;
-                                       $mail->AltBody = $digest_text;
+                                               if (SMTP_HOST) {
+                                                       $mail->Host = SMTP_HOST;
+                                                       $mail->Mailer = "smtp";
+                                                       $mail->SMTPAuth = SMTP_LOGIN != '';
+                                                       $mail->Username = SMTP_LOGIN;
+                                                       $mail->Password = SMTP_PASSWORD;
+                                               }
 
-                                       $rc = $mail->Send();
+                                               $mail->IsHTML(true);
+                                               $mail->Subject = DIGEST_SUBJECT;
+                                               $mail->Body = $digest;
+                                               $mail->AltBody = $digest_text;
 
-                                       if (!$rc) print "ERROR: " . $mail->ErrorInfo;
+                                               $rc = $mail->Send();
 
-                                       print "RC=$rc\n";
+                                               if (!$rc && $debug) print "ERROR: " . $mail->ErrorInfo;
 
-                                       if ($rc && $do_catchup) {
-                                               print "Marking affected articles as read...\n";
-                                               catchupArticlesById($link, $affected_ids, 0, $line["id"]);
+                                               if ($debug) print "RC=$rc\n";
+
+                                               if ($rc && $do_catchup) {
+                                                       if ($debug) print "Marking affected articles as read...\n";
+                                                       catchupArticlesById($link, $affected_ids, 0, $line["id"]);
+                                               }
+                                       } else {
+                                               if ($debug) print "No headlines\n";
                                        }
-                               } else {
-                                       print "No headlines\n";
-                               }
 
-                               db_query($link, "UPDATE ttrss_users SET last_digest_sent = NOW()
-                                       WHERE id = " . $line["id"]);
+                                       db_query($link, "UPDATE ttrss_users SET last_digest_sent = NOW()
+                                               WHERE id = " . $line["id"]);
+
+                               }
                        }
                }
 
index 1028371cf4411c3fbe24154d5e9a95d97e41d3c2..51b7d7c33117ee33b09f5fd1db977e5a1a3b9744 100644 (file)
@@ -60,6 +60,8 @@
        function update_daemon_common($link, $limit = DAEMON_FEED_LIMIT, $from_http = false, $debug = true) {
                // Process all other feeds using last_updated and interval parameters
 
+               define('PREFS_NO_CACHE', true);
+
                // Test if the user has loggued in recently. If not, it does not update its feeds.
                if (!SINGLE_USER_MODE && DAEMON_UPDATE_LOGIN_LIMIT > 0) {
                        if (DB_TYPE == "pgsql") {
index 1cd2873df4ab85a4c7a840fad6cb0e5ea558e14a..d1b2873ca1e2d9427cd61b8618ff64a6315e3198 100644 (file)
@@ -6,7 +6,7 @@
        } else {
 
                define('EXPECTED_CONFIG_VERSION', 25);
-               define('SCHEMA_VERSION', 88);
+               define('SCHEMA_VERSION', 89);
 
                require_once "config.php";
                require_once "sanity_config.php";
index e2815bf8bcf952ba87028b31ebc0f17e1155f729..4032771bb3d443a92971f51d52bca53a17ac9fc6 100644 (file)
@@ -260,7 +260,7 @@ create table ttrss_tags (id integer primary key auto_increment,
 
 create table ttrss_version (schema_version int not null) ENGINE=InnoDB DEFAULT CHARSET=UTF8;
 
-insert into ttrss_version values (88);
+insert into ttrss_version values (89);
 
 create table ttrss_enclosures (id integer primary key auto_increment,
        content_url text not null,
@@ -392,6 +392,8 @@ insert into ttrss_prefs (pref_name,type_id,def_value,short_desc,section_id) valu
 
 insert into ttrss_prefs (pref_name,type_id,def_value,short_desc,section_id,help_text) values('SSL_CERT_SERIAL', 2, '', 'Login with an SSL certificate',3, 'Click to register your SSL client certificate with tt-rss');
 
+insert into ttrss_prefs (pref_name,type_id,def_value,short_desc,section_id,help_text) values('DIGEST_PREFERRED_TIME', 2, '00:00', 'Try to send digests around specified time', 1, 'Uses server timezone');
+
 create table ttrss_user_prefs (
    owner_uid integer not null,
    pref_name varchar(250),
index ba239fc692834420907b4b23a1924740eda79109..aa7a2184cd2ff4c5a6f5d0514875287a564742c1 100644 (file)
@@ -229,7 +229,7 @@ create index ttrss_tags_post_int_id_idx on ttrss_tags(post_int_id);
 
 create table ttrss_version (schema_version int not null);
 
-insert into ttrss_version values (88);
+insert into ttrss_version values (89);
 
 create table ttrss_enclosures (id serial not null primary key,
        content_url text not null,
@@ -354,6 +354,8 @@ insert into ttrss_prefs (pref_name,type_id,def_value,short_desc,section_id) valu
 
 insert into ttrss_prefs (pref_name,type_id,def_value,short_desc,section_id,help_text) values('SSL_CERT_SERIAL', 2, '', 'Login with an SSL certificate',3, 'Click to register your SSL client certificate with tt-rss');
 
+insert into ttrss_prefs (pref_name,type_id,def_value,short_desc,section_id,help_text) values('DIGEST_PREFERRED_TIME', 2, '00:00', 'Try to send digests around specified time', 1, 'Uses server timezone');
+
 create table ttrss_user_prefs (
        owner_uid integer not null references ttrss_users(id) ON DELETE CASCADE,
        pref_name varchar(250) not null references ttrss_prefs(pref_name) ON DELETE CASCADE,
diff --git a/schema/versions/mysql/89.sql b/schema/versions/mysql/89.sql
new file mode 100644 (file)
index 0000000..55330a2
--- /dev/null
@@ -0,0 +1,7 @@
+begin;
+
+insert into ttrss_prefs (pref_name,type_id,def_value,short_desc,section_id,help_text) values('DIGEST_PREFERRED_TIME', 2, '00:00', 'Try to send digests around specified time', 1, 'Uses server timezone');
+
+update ttrss_version set schema_version = 89;
+
+commit;
diff --git a/schema/versions/pgsql/89.sql b/schema/versions/pgsql/89.sql
new file mode 100644 (file)
index 0000000..55330a2
--- /dev/null
@@ -0,0 +1,7 @@
+begin;
+
+insert into ttrss_prefs (pref_name,type_id,def_value,short_desc,section_id,help_text) values('DIGEST_PREFERRED_TIME', 2, '00:00', 'Try to send digests around specified time', 1, 'Uses server timezone');
+
+update ttrss_version set schema_version = 89;
+
+commit;