public function testWhetherSchedulingBroadcastsOnSpecifiedDateResultsInDeliveryOnSaidDate() { global $wpdb; $time = new DateTime(); $subscriberId = $this->createSubscriber(); $timestampTomorrow = new DateTime(sprintf("@%d", $time->getTimestamp() + 86400)); $this->createBroadcast($timestampTomorrow); $broadcastId = $wpdb->insert_id; BroadcastProcessor::run($time); $numberOfEmailsInQueue = $this->getNumberOfEmailsEnqueued(); $this->assertEquals(0, $numberOfEmailsInQueue); $randomOffset = rand(1000, 10000); $timeObjectForTomorrowsRun = new DateTime(sprintf("@%d", $timestampTomorrow->getTimestamp() + $randomOffset)); BroadcastProcessor::run($timeObjectForTomorrowsRun); $checkNumberOfEmailsInQueueQuery = sprintf("SELECT * FROM %swpr_queue;", $wpdb->prefix); $numberOfSubscribersResultSet = $wpdb->get_results($checkNumberOfEmailsInQueueQuery); $numberOfEmailsInQueue = count($numberOfSubscribersResultSet); $this->assertEquals(1, $numberOfEmailsInQueue); $theEmailEnqueued = $numberOfSubscribersResultSet[0]; $emailMetaKey = sprintf("BR-%s-%s-%s", $subscriberId, $broadcastId, $this->newsletterId); $this->assertEquals($emailMetaKey, $theEmailEnqueued->meta_key); }
function _wpr_process_broadcasts() { global $wpdb; $last_cron_status = get_option("_wpr_newsletter_process_status"); set_time_limit(3600); /* When the cron is running the _wpr_newsletter_process_status is set to the timestamp at which the cron processing was started. Before shutting down the _wpr_newsletter_process_status is set to 'stopped'. This cron will run only if the _wpr_newsletter_process_status option is set to "stopped" or is empty. */ $timeOfStart = time(); $timeMaximumExecutionTimeAgo = $timeOfStart - WPR_MAX_NEWSLETTER_PROCESS_EXECUTION_TIME; if (!empty($last_cron_status) && $last_cron_status != "stopped") { $last_cron_status = intval($last_cron_status); if ($last_cron_status != 0 && $last_cron_status > $timeMaximumExecutionTimeAgo) { return; } } BroadcastProcessor::run(); delete_option("_wpr_newsletter_process_status"); add_option("_wpr_newsletter_process_status", $timeOfStart); delete_option("_wpr_newsletter_process_status"); add_option("_wpr_newsletter_process_status", "stopped"); }