implement support for daily digests
This commit is contained in:
parent
144a5ef8bc
commit
9cd7c995e7
|
@ -3948,8 +3948,14 @@
|
||||||
|
|
||||||
if ($op == "digestTest") {
|
if ($op == "digestTest") {
|
||||||
header("Content-Type: text/plain");
|
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;
|
$print_exec_time = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,8 +75,8 @@
|
||||||
define('MAIL_RESET_PASS', true);
|
define('MAIL_RESET_PASS', true);
|
||||||
// Send mail to user on password reset
|
// Send mail to user on password reset
|
||||||
|
|
||||||
define('MAIL_FROM', 'TT-RSS Daemon <noreply@ttrss.your-shiny-host.org>');
|
define('MAIL_FROM', 'TT-RSS Daemon <noreply@some.ttrss.host.dom>');
|
||||||
// Pretty obvious, I suppose.
|
// Pretty obvious, I suppose. Used for email digests & password notifications.
|
||||||
|
|
||||||
define('ENABLE_FEED_BROWSER', true);
|
define('ENABLE_FEED_BROWSER', true);
|
||||||
// Enable or disable local feed browser
|
// Enable or disable local feed browser
|
||||||
|
@ -134,9 +134,12 @@
|
||||||
define('USE_CURL_FOR_ICONS', false);
|
define('USE_CURL_FOR_ICONS', false);
|
||||||
// Fetch favicons using CURL, useful if your PHP has disabled remote fopen()
|
// 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
|
// Hostname for email digest signature
|
||||||
|
|
||||||
|
define('DIGEST_EMAIL_LIMIT', 10);
|
||||||
|
// The maximum amount of emails sent in one digest batch
|
||||||
|
|
||||||
define('CONFIG_VERSION', 5);
|
define('CONFIG_VERSION', 5);
|
||||||
// Expected config version. Please update this option in config.php
|
// Expected config version. Please update this option in config.php
|
||||||
// if necessary (after migrating all new options from this file).
|
// if necessary (after migrating all new options from this file).
|
||||||
|
|
|
@ -2378,12 +2378,53 @@
|
||||||
return $res;
|
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) {
|
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 = "New headlines for last 24 hours, as of " . date("Y/m/d H:m") . "\n";
|
||||||
$tmp .= "=======================================================\n\n";
|
$tmp .= "=======================================================\n\n";
|
||||||
|
|
||||||
if (DB_TYPE == "pgsql") {
|
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") {
|
} else if (DB_TYPE == "mysql") {
|
||||||
$interval_query = "ttrss_entries.date_entered > DATE_SUB(NOW(), INTERVAL $days DAY)";
|
$interval_query = "ttrss_entries.date_entered > DATE_SUB(NOW(), INTERVAL $days DAY)";
|
||||||
}
|
}
|
||||||
|
@ -2397,6 +2438,7 @@
|
||||||
ttrss_user_entries,ttrss_entries,ttrss_feeds
|
ttrss_user_entries,ttrss_entries,ttrss_feeds
|
||||||
WHERE
|
WHERE
|
||||||
ref_id = ttrss_entries.id AND feed_id = ttrss_feeds.id
|
ref_id = ttrss_entries.id AND feed_id = ttrss_feeds.id
|
||||||
|
AND hidden = false
|
||||||
AND $interval_query
|
AND $interval_query
|
||||||
AND ttrss_user_entries.owner_uid = $user_id
|
AND ttrss_user_entries.owner_uid = $user_id
|
||||||
AND unread = true ORDER BY ttrss_feeds.title, date_entered DESC
|
AND unread = true ORDER BY ttrss_feeds.title, date_entered DESC
|
||||||
|
@ -2404,6 +2446,8 @@
|
||||||
|
|
||||||
$cur_feed_title = "";
|
$cur_feed_title = "";
|
||||||
|
|
||||||
|
$headlines_count = db_num_rows($result);
|
||||||
|
|
||||||
while ($line = db_fetch_assoc($result)) {
|
while ($line = db_fetch_assoc($result)) {
|
||||||
$updated = smart_date_time(strtotime($line["last_updated"]));
|
$updated = smart_date_time(strtotime($line["last_updated"]));
|
||||||
$feed_title = $line["feed_title"];
|
$feed_title = $line["feed_title"];
|
||||||
|
@ -2425,7 +2469,7 @@
|
||||||
"To unsubscribe, visit your configuration options or contact instance owner.\n";
|
"To unsubscribe, visit your configuration options or contact instance owner.\n";
|
||||||
|
|
||||||
|
|
||||||
return $tmp;
|
return array($tmp, $headlines_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
function check_for_update($link) {
|
function check_for_update($link) {
|
||||||
|
|
|
@ -148,6 +148,8 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
send_headlines_digests($link);
|
||||||
|
|
||||||
print "Sleeping for " . DAEMON_SLEEP_INTERVAL . " seconds...\n";
|
print "Sleeping for " . DAEMON_SLEEP_INTERVAL . " seconds...\n";
|
||||||
|
|
||||||
sleep(DAEMON_SLEEP_INTERVAL);
|
sleep(DAEMON_SLEEP_INTERVAL);
|
||||||
|
|
|
@ -34,6 +34,8 @@
|
||||||
update_all_feeds($link, false, $user_id, true);
|
update_all_feeds($link, false, $user_id, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
send_headlines_digests($link);
|
||||||
|
|
||||||
db_close($link);
|
db_close($link);
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
Loading…
Reference in New Issue