Adding List-Unsubscribe to header of newsletters

This commit is contained in:
Amine Ben hammou
2017-04-15 16:32:37 +00:00
parent 53169bba78
commit 771a1bfc44
3 changed files with 49 additions and 9 deletions

View File

@ -5,9 +5,15 @@ use MailPoet\Cron\CronHelper;
use MailPoet\Cron\Workers\SendingQueue\Tasks\Mailer as MailerTask; use MailPoet\Cron\Workers\SendingQueue\Tasks\Mailer as MailerTask;
use MailPoet\Cron\Workers\SendingQueue\Tasks\Newsletter as NewsletterTask; use MailPoet\Cron\Workers\SendingQueue\Tasks\Newsletter as NewsletterTask;
use MailPoet\Mailer\MailerLog; use MailPoet\Mailer\MailerLog;
use MailPoet\Models\NewsletterLink;
use MailPoet\Models\SendingQueue as SendingQueueModel; use MailPoet\Models\SendingQueue as SendingQueueModel;
use MailPoet\Models\Subscriber as SubscriberModel; use MailPoet\Models\Setting;
use MailPoet\Models\StatisticsNewsletters as StatisticsNewslettersModel; use MailPoet\Models\StatisticsNewsletters as StatisticsNewslettersModel;
use MailPoet\Models\Subscriber as SubscriberModel;
use MailPoet\Newsletter\Links\Links;
use MailPoet\Router\Endpoints\Track;
use MailPoet\Router\Router;
use MailPoet\Subscription\Url;
if(!defined('ABSPATH')) exit; if(!defined('ABSPATH')) exit;
@ -116,7 +122,8 @@ class SendingQueue {
$prepared_subscribers_ids, $prepared_subscribers_ids,
$prepared_newsletters[0], $prepared_newsletters[0],
$prepared_subscribers[0], $prepared_subscribers[0],
$statistics $statistics,
$this->getExtraParams($queue, $prepared_subscribers_ids)
); );
$prepared_newsletters = array(); $prepared_newsletters = array();
$prepared_subscribers = array(); $prepared_subscribers = array();
@ -138,12 +145,13 @@ class SendingQueue {
function sendNewsletters( function sendNewsletters(
$queue, $prepared_subscribers_ids, $prepared_newsletters, $queue, $prepared_subscribers_ids, $prepared_newsletters,
$prepared_subscribers, $statistics $prepared_subscribers, $statistics, $extra_params = array()
) { ) {
// send newsletter // send newsletter
$send_result = $this->mailer_task->send( $send_result = $this->mailer_task->send(
$prepared_newsletters, $prepared_newsletters,
$prepared_subscribers $prepared_subscribers,
$extra_params
); );
// log error message and schedule retry/pause sending // log error message and schedule retry/pause sending
if($send_result['response'] === false) { if($send_result['response'] === false) {
@ -172,6 +180,33 @@ class SendingQueue {
MailerLog::enforceExecutionRequirements(); MailerLog::enforceExecutionRequirements();
} }
protected function getExtraParams($queue, $prepared_subscribers_ids) {
$subscriber_id = $prepared_subscribers_ids[0];
$subscriber = SubscriberModel::where('id', $subscriber_id)->findOne();
if((boolean)Setting::getValue('tracking.enabled')) {
$link_hash = NewsletterLink::where('queue_id', $queue->id)
->where('url', '[link:subscription_unsubscribe_url]')
->findOne()
->hash;
$data = Links::createUrlDataObject(
$subscriber_id,
$subscriber->email,
$queue->id,
$link_hash,
false
);
$url = Router::buildRequest(
Track::ENDPOINT,
Track::ACTION_CLICK,
$data
);
} else {
$url = Url::getUnsubscribeUrl($subscriber);
}
return array('unsubscribe_url' => $url);
}
static function getRunningQueues() { static function getRunningQueues() {
return SendingQueueModel::orderByAsc('priority') return SendingQueueModel::orderByAsc('priority')
->whereNull('deleted_at') ->whereNull('deleted_at')

View File

@ -3,6 +3,7 @@ namespace MailPoet\Cron\Workers\SendingQueue\Tasks;
use MailPoet\Mailer\Mailer as MailerFactory; use MailPoet\Mailer\Mailer as MailerFactory;
use MailPoet\Mailer\MailerLog; use MailPoet\Mailer\MailerLog;
use MailPoet\Subscription\Url;
if(!defined('ABSPATH')) exit; if(!defined('ABSPATH')) exit;
@ -54,10 +55,11 @@ class Mailer {
return $this->mailer->formatSubscriberNameAndEmailAddress($subscriber); return $this->mailer->formatSubscriberNameAndEmailAddress($subscriber);
} }
function send($prepared_newsletters, $prepared_subscribers) { function send($prepared_newsletters, $prepared_subscribers, $extra_params = array()) {
return $this->mailer->mailer_instance->send( return $this->mailer->mailer_instance->send(
$prepared_newsletters, $prepared_newsletters,
$prepared_subscribers $prepared_subscribers,
$extra_params
); );
} }
} }

View File

@ -33,6 +33,9 @@ class Url {
if(is_object($subscriber)) { if(is_object($subscriber)) {
$subscriber = $subscriber->asArray(); $subscriber = $subscriber->asArray();
} }
if(is_string($subscriber)) {
$subscriber = array('email' => $subscriber);
}
$data = array( $data = array(
'token' => Subscriber::generateToken($subscriber['email']), 'token' => Subscriber::generateToken($subscriber['email']),