Example #1
0
 function digestTest()
 {
     header("Content-type: text/html");
     $rv = prepare_headlines_digest($this->link, $_SESSION['uid'], 1, 1000);
     $rv[3] = "<pre>" . $rv[3] . "</pre>";
     print_r($rv);
 }
Example #2
0
/**
 * Send by mail a digest of last articles.
 *
 * @param mixed $link The database connection.
 * @param integer $limit The maximum number of articles by digest.
 * @return boolean Return false if digests are not enabled.
 */
function send_headlines_digests($debug = false)
{
    require_once 'classes/ttrssmailer.php';
    $user_limit = 15;
    // amount of users to process (e.g. emails to send out)
    $limit = 1000;
    // maximum amount of headlines to include
    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 '1 days'";
    } elseif (DB_TYPE == "mysql") {
        $interval_query = "last_digest_sent < DATE_SUB(NOW(), INTERVAL 1 DAY)";
    }
    $result = db_query("SELECT id,email FROM ttrss_users\n        WHERE email != '' AND (last_digest_sent IS NULL OR {$interval_query})");
    while ($line = db_fetch_assoc($result)) {
        if (@get_pref('DIGEST_ENABLE', $line['id'], false)) {
            $preferred_ts = strtotime(get_pref('DIGEST_PREFERRED_TIME', $line['id'], '00:00'));
            // try to send digests within 2 hours of preferred time
            if ($preferred_ts && time() >= $preferred_ts && time() - $preferred_ts <= 7200) {
                if ($debug) {
                    _debug("Sending digest for UID:" . $line['id'] . " - " . $line["email"]);
                }
                $do_catchup = get_pref('DIGEST_CATCHUP', $line['id'], false);
                global $tz_offset;
                // reset tz_offset global to prevent tz cache clash between users
                $tz_offset = -1;
                $tuple = prepare_headlines_digest($line["id"], 1, $limit);
                $digest = $tuple[0];
                $headlines_count = $tuple[1];
                $affected_ids = $tuple[2];
                $digest_text = $tuple[3];
                if ($headlines_count > 0) {
                    $mail = new ttrssMailer();
                    $rc = $mail->quickMail($line["email"], $line["login"], DIGEST_SUBJECT, $digest, $digest_text);
                    if (!$rc && $debug) {
                        _debug("ERROR: " . $mail->ErrorInfo);
                    }
                    if ($debug) {
                        _debug("RC={$rc}");
                    }
                    if ($rc && $do_catchup) {
                        if ($debug) {
                            _debug("Marking affected articles as read...");
                        }
                        catchupArticlesById($affected_ids, 0, $line["id"]);
                    }
                } elseif ($debug) {
                    _debug("No headlines");
                }
                db_query("UPDATE ttrss_users SET last_digest_sent = NOW()\n                    WHERE id = " . $line["id"]);
            }
        }
    }
    if ($debug) {
        _debug("All done.");
    }
}
Example #3
0
 function digestTest()
 {
     header("Content-type: text/html");
     require_once "digest.php";
     $rv = prepare_headlines_digest($_SESSION['uid'], 1, 1000);
     $rv[3] = "<pre>" . $rv[3] . "</pre>";
     print_r($rv);
 }
Example #4
0
/**
 * Send by mail a digest of last articles.
 * 
 * @param mixed $link The database connection.
 * @param integer $limit The maximum number of articles by digest.
 * @return boolean Return false if digests are not enabled.
 */
function send_headlines_digests($link, $limit = 100)
{
    if (!DIGEST_ENABLE) {
        return false;
    }
    $user_limit = DIGEST_EMAIL_LIMIT;
    $days = 1;
    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 \n\t\t\t\tWHERE 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"] . " ... ";
            $do_catchup = get_pref($link, 'DIGEST_CATCHUP', $line['id'], false);
            $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 ($headlines_count > 0) {
                $mail = new PHPMailer();
                $mail->PluginDir = "lib/phpmailer/";
                $mail->SetLanguage("en", "lib/phpmailer/language/");
                $mail->CharSet = "UTF-8";
                $mail->From = DIGEST_FROM_ADDRESS;
                $mail->FromName = DIGEST_FROM_NAME;
                $mail->AddAddress($line["email"], $line["login"]);
                if (DIGEST_SMTP_HOST) {
                    $mail->Host = DIGEST_SMTP_HOST;
                    $mail->Mailer = "smtp";
                    $mail->SMTPAuth = DIGEST_SMTP_LOGIN != '';
                    $mail->Username = DIGEST_SMTP_LOGIN;
                    $mail->Password = DIGEST_SMTP_PASSWORD;
                }
                $mail->IsHTML(true);
                $mail->Subject = DIGEST_SUBJECT;
                $mail->Body = $digest;
                $mail->AltBody = $digest_text;
                $rc = $mail->Send();
                if (!$rc) {
                    print "ERROR: " . $mail->ErrorInfo;
                }
                print "RC={$rc}\n";
                if ($rc && $do_catchup) {
                    print "Marking affected articles as read...\n";
                    catchupArticlesById($link, $affected_ids, 0, $line["id"]);
                }
                db_query($link, "UPDATE ttrss_users SET last_digest_sent = NOW() \n\t\t\t\t\t\t\tWHERE id = " . $line["id"]);
            } else {
                print "No headlines\n";
            }
        }
    }
    print "All done.\n";
}
Example #5
0
         $uid = db_fetch_result($result, 0, "id");
         print getGlobalUnread($link, $uid);
         if ($fresh) {
             print ";";
             print getFeedArticles($link, -3, false, true, $uid);
         }
     } else {
         print "-1;User not found";
     }
     $print_exec_time = false;
     break;
     // getUnread
 // getUnread
 case "digestTest":
     header("Content-Type: text/plain");
     print_r(prepare_headlines_digest($link, $_SESSION["uid"]));
     $print_exec_time = false;
     break;
     // digestTest
 // digestTest
 case "digestSend":
     header("Content-Type: text/plain");
     send_headlines_digests($link);
     $print_exec_time = false;
     break;
     // digestSend
 // digestSend
 case "getProfiles":
     $login = db_escape_string($_REQUEST["login"]);
     $password = db_escape_string($_REQUEST["password"]);
     if (authenticate_user($link, $login, $password)) {
Example #6
0
/**
 * Send by mail a digest of last articles.
 *
 * @param mixed $link The database connection.
 * @param integer $limit The maximum number of articles by digest.
 * @return boolean Return false if digests are not enabled.
 */
function send_headlines_digests($link, $debug = false)
{
    require_once 'lib/phpmailer/class.phpmailer.php';
    $user_limit = 15;
    // amount of users to process (e.g. emails to send out)
    $limit = 1000;
    // maximum amount of headlines to include
    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 '1 days'";
    } else {
        if (DB_TYPE == "mysql") {
            $interval_query = "last_digest_sent < DATE_SUB(NOW(), INTERVAL 1 DAY)";
        }
    }
    $result = db_query($link, "SELECT id,email FROM ttrss_users\n\t\t\t\tWHERE 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)) {
            $preferred_ts = strtotime(get_pref($link, 'DIGEST_PREFERRED_TIME', $line['id'], '00:00'));
            // try to send digests within 2 hours of preferred time
            if ($preferred_ts && time() >= $preferred_ts && time() - $preferred_ts <= 7200) {
                if ($debug) {
                    print "Sending digest for UID:" . $line['id'] . " - " . $line["email"] . " ... ";
                }
                $do_catchup = get_pref($link, 'DIGEST_CATCHUP', $line['id'], false);
                global $tz_offset;
                // reset tz_offset global to prevent tz cache clash between users
                $tz_offset = -1;
                $tuple = prepare_headlines_digest($link, $line["id"], 1, $limit);
                $digest = $tuple[0];
                $headlines_count = $tuple[1];
                $affected_ids = $tuple[2];
                $digest_text = $tuple[3];
                if ($headlines_count > 0) {
                    $mail = new PHPMailer();
                    $mail->PluginDir = "lib/phpmailer/";
                    $mail->SetLanguage("en", "lib/phpmailer/language/");
                    $mail->CharSet = "UTF-8";
                    $mail->From = SMTP_FROM_ADDRESS;
                    $mail->FromName = SMTP_FROM_NAME;
                    $mail->AddAddress($line["email"], $line["login"]);
                    if (SMTP_HOST) {
                        $mail->Host = SMTP_HOST;
                        $mail->Mailer = "smtp";
                        $mail->SMTPAuth = SMTP_LOGIN != '';
                        $mail->Username = SMTP_LOGIN;
                        $mail->Password = SMTP_PASSWORD;
                    }
                    $mail->IsHTML(true);
                    $mail->Subject = DIGEST_SUBJECT;
                    $mail->Body = $digest;
                    $mail->AltBody = $digest_text;
                    $rc = $mail->Send();
                    if (!$rc && $debug) {
                        print "ERROR: " . $mail->ErrorInfo;
                    }
                    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";
                    }
                }
                db_query($link, "UPDATE ttrss_users SET last_digest_sent = NOW()\n\t\t\t\t\t\tWHERE id = " . $line["id"]);
            }
        }
    }
    if ($debug) {
        _debug("All done.");
    }
}