- Updates queue worker to use mailer router for sending

- Updates mailer router to detect method type
- Rebases master
This commit is contained in:
MrCasual
2015-12-03 19:12:18 -05:00
parent 4a2bbe3f88
commit acebf669a7
3 changed files with 54 additions and 85 deletions

View File

@@ -62,9 +62,11 @@ class Daemon {
) {
$this->abortWithError('invalid token');
}
$worker = new Worker($this->timer);
$worker->process();
try {
$worker = new Worker($this->timer);
$worker->process();
} catch(Exception $e) {
}
$elapsedTime = microtime(true) - $this->timer;
if($elapsedTime < 30) {
sleep(30 - $elapsedTime);
@@ -76,7 +78,7 @@ class Daemon {
$daemonData['token'] = $this->refreshedToken;
$daemon->value = json_encode($daemonData);
$daemon->save();
$this->callSelf();
if($daemonData['status'] === 'strated') $this->callSelf();
}
function getDaemon() {

View File

@@ -4,8 +4,8 @@ namespace MailPoet\Cron;
use MailPoet\Models\Newsletter;
use MailPoet\Models\NewsletterStatistics;
use MailPoet\Models\SendingQueue;
use MailPoet\Models\Setting;
use MailPoet\Models\Subscriber;
use MailPoet\Newsletter\Renderer\Renderer;
use MailPoet\Router\Mailer;
if(!defined('ABSPATH')) exit;
@@ -21,25 +21,21 @@ class Worker {
->whereNull('deleted_at')
->whereNull('status')
->findResultSet();
// TODO: usee Mailer's method to get the mailer from DB
$mailer = new Mailer();
$mailer->mailer['method'] = 'MailPoet';
$mailer->mailer['class'] = 'MailPoet\\Mailer\\MailPoet';
$mailer->mailer['api_key'] = Setting::getValue('api_key', 'dhNSqj1XHkVltIliyQDvMiKzQShOA5rs0m_DdRUVZHU');
$mailerMethod = $mailer->buildMailer();
foreach($queues as $queue) {
if($this->checkExecutionTimer()) break;
$newsletter = Newsletter::findOne($queue->newsletter_id);
if(!$newsletter) {
continue;
};
$newsletter = $newsletter->asArray();
// TODO: render newsletter
$renderer = new Renderer(json_decode($newsletter['body'], true));
$newsletter = array(
'subject' => $newsletter['subject'],
'id' => $newsletter['id'],
'body' => array(
'html' => 'rendering not yet implemented',
'text' => 'rendering not yet implemented'
'html' => $renderer->renderAll(),
'text' => '' // TODO: add text body
)
);
$subscribers = json_decode($queue->subscribers, true);
@@ -47,20 +43,14 @@ class Worker {
if(!isset($subscribers['failed'])) $subscribers['failed'] = array();
if(!isset($subscribers['processed'])) $subscribers['processed'] = array();
foreach(array_chunk($subscribersToProcess, 200) as $subscriberIds) {
if($this->checkExecutionTimer()) break;
$dbSubscribers = Subscriber::whereIn('id', $subscriberIds)
->findArray();
foreach($dbSubscribers as $i => $dbSubscriber) {
if($this->checkExecutionTimer()) break;
$this->checkExecutionTimer();
// TODO: replace shortcodes in the newsletter
$result = $mailer->send(
$result = $mailerMethod->send(
$newsletter,
sprintf(
"%s %s <%s>",
$dbSubscriber['first_name'],
$dbSubscriber['last_name'],
$dbSubscriber['email']
)
$mailer->transformSubscriber($dbSubscriber)
);
$newsletterStatistics = NewsletterStatistics::create();
$newsletterStatistics->subscriber_id = $dbSubscriber['id'];
@@ -97,6 +87,6 @@ class Worker {
function checkExecutionTimer() {
$elapsedTime = microtime(true) - $this->timer;
return ($elapsedTime >= 28) ? true : false;
if ($elapsedTime >= 28) throw new \Exception('Maximum execution time reached.');
}
}