1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- <?php
- /**
- * @file
- * Views Send cron rotuines.
- *
- * @ingroup views_send
- */
- /**
- * Process the spool queue at cron run.
- */
- function views_send_send_from_spool() {
- $limit = variable_get('views_send_throttle', 20);
- $ok = $fail = $check = 0;
- // Get PHP maximum execution time. 30 seconds default.
- $max_execution_time = ini_get('max_execution_time') ? ini_get('max_execution_time') : VIEWS_SEND_MAX_EXECUTION_TIME;
- // Reset a Drupal timer.
- timer_start('views_send');
- // Retrieve messages to be send.
- $query = "SELECT * FROM {views_send_spool} WHERE status = :status ORDER BY tentatives ASC, timestamp ASC";
- $result = $limit ? db_query_range($query, 0, $limit, array(':status' => 0)) : db_query($query, array(':status' => 0));
- foreach ($result as $message) {
- // Send the message.
- $status = views_send_deliver($message);
- if ($status) {
- // Update the spool status.
- db_query("UPDATE {views_send_spool} SET status = :status WHERE eid = :eid", array(':status' => 1, ':eid' => $message->eid));
- if (variable_get('views_send_debug', FALSE)) {
- watchdog('views_send', 'Message sent to %mail.', array('%mail' => $message->to_mail));
- }
- if (module_exists('rules')) {
- rules_invoke_event('views_send_email_sent', $message);
- }
- $ok++;
- }
- else {
- // Increment tentatives so that next time this message
- // will be scheduled with low priority.
- db_query("UPDATE {views_send_spool} SET tentatives = tentatives + 1 WHERE eid = :eid", array(':eid' => $message->eid));
- $fail++;
- }
- // Check the elapsed time and break if we've spent more than 80%.
- // We check every 50 messages.
- if (++$check >= 50) {
- // Reset the counter.
- $check = 0;
- // Break if exceded.
- if (timer_read('views_send') / 1000 > .8 * $max_execution_time) {
- watchdog('views_send', 'PHP maximum execution time almost exceeded. Remaining e-mail messages will be sent during the next cron run. If this warning occurs regularly you should reduce the cron throttle setting.', NULL, WATCHDOG_WARNING);
- break;
- }
- }
- }
- if ($ok + $fail > 0) {
- // Log results and exit.
- watchdog('views_send', '%ok messages sent in %sec seconds, %fail failed sending.',
- array('%ok' => $ok, '%sec' => timer_read('views_send') / 1000, '%fail' => $fail)
- );
- }
- }
- /**
- * Clear the expired items from spool.
- */
- function views_send_clear_spool() {
- // TODO: Drupal 7: replace time() with REQUEST_TIME.
- $expiration_time = time() - variable_get('views_send_spool_expire', 0) * 86400;
- db_query("DELETE FROM {views_send_spool} WHERE status = :status AND timestamp <= :expiry", array(':status' => 1, 'expiry' => $expiration_time));
- }
|