From 61c1812f29dc76e93107b65dea80fde260269e8d Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Mon, 30 Jan 2012 16:34:45 +0400 Subject: [PATCH] implement preferred time for sending out digests --- classes/backend.php | 4 +- classes/pref_prefs.php | 5 ++ include/db-prefs.php | 6 +-- include/functions.php | 87 ++++++++++++++++++----------------- include/rssfuncs.php | 2 + include/sanity_check.php | 2 +- schema/ttrss_schema_mysql.sql | 4 +- schema/ttrss_schema_pgsql.sql | 4 +- schema/versions/mysql/89.sql | 7 +++ schema/versions/pgsql/89.sql | 7 +++ 10 files changed, 80 insertions(+), 48 deletions(-) create mode 100644 schema/versions/mysql/89.sql create mode 100644 schema/versions/pgsql/89.sql diff --git a/classes/backend.php b/classes/backend.php index 334701f4..19938344 100644 --- a/classes/backend.php +++ b/classes/backend.php @@ -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() { diff --git a/classes/pref_prefs.php b/classes/pref_prefs.php index 57971ccb..0c343087 100644 --- a/classes/pref_prefs.php +++ b/classes/pref_prefs.php @@ -464,6 +464,11 @@ class Pref_Prefs extends Protected_Handler { onclick=\"insertSSLserial('')\">" . __('Clear') . ""; + } else if ($pref_name = 'DIGEST_RPEFERRED_TIME') { + print "
". + T_sprintf("Current server time: %s", date("H:i")) . "
"; } else { $regexp = ($type_name == 'integer') ? 'regexp="^\d*$"' : ''; diff --git a/include/db-prefs.php b/include/db-prefs.php index 7ee49200..b62e01a7 100644 --- a/include/db-prefs.php +++ b/include/db-prefs.php @@ -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"]); @@ -102,7 +102,7 @@ $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"]; diff --git a/include/functions.php b/include/functions.php index 44331d72..9eb66de3 100644 --- a/include/functions.php +++ b/include/functions.php @@ -2689,14 +2689,13 @@ 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 @@ -2705,58 +2704,64 @@ 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"]); + + } } } diff --git a/include/rssfuncs.php b/include/rssfuncs.php index 1028371c..51b7d7c3 100644 --- a/include/rssfuncs.php +++ b/include/rssfuncs.php @@ -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") { diff --git a/include/sanity_check.php b/include/sanity_check.php index 1cd2873d..d1b2873c 100644 --- a/include/sanity_check.php +++ b/include/sanity_check.php @@ -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"; diff --git a/schema/ttrss_schema_mysql.sql b/schema/ttrss_schema_mysql.sql index e2815bf8..4032771b 100644 --- a/schema/ttrss_schema_mysql.sql +++ b/schema/ttrss_schema_mysql.sql @@ -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), diff --git a/schema/ttrss_schema_pgsql.sql b/schema/ttrss_schema_pgsql.sql index ba239fc6..aa7a2184 100644 --- a/schema/ttrss_schema_pgsql.sql +++ b/schema/ttrss_schema_pgsql.sql @@ -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 index 00000000..55330a25 --- /dev/null +++ b/schema/versions/mysql/89.sql @@ -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 index 00000000..55330a25 --- /dev/null +++ b/schema/versions/pgsql/89.sql @@ -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; -- 2.39.2