From 771a1bfc4432a7a0c55181c1a8ab554b0aafd3da Mon Sep 17 00:00:00 2001 From: Amine Ben hammou Date: Sat, 15 Apr 2017 16:32:37 +0000 Subject: [PATCH] Adding List-Unsubscribe to header of newsletters --- .../Workers/SendingQueue/SendingQueue.php | 45 ++++++++++++++++--- .../Workers/SendingQueue/Tasks/Mailer.php | 8 ++-- lib/Subscription/Url.php | 5 ++- 3 files changed, 49 insertions(+), 9 deletions(-) diff --git a/lib/Cron/Workers/SendingQueue/SendingQueue.php b/lib/Cron/Workers/SendingQueue/SendingQueue.php index 3a963e3231..c943da539d 100644 --- a/lib/Cron/Workers/SendingQueue/SendingQueue.php +++ b/lib/Cron/Workers/SendingQueue/SendingQueue.php @@ -5,9 +5,15 @@ use MailPoet\Cron\CronHelper; use MailPoet\Cron\Workers\SendingQueue\Tasks\Mailer as MailerTask; use MailPoet\Cron\Workers\SendingQueue\Tasks\Newsletter as NewsletterTask; use MailPoet\Mailer\MailerLog; +use MailPoet\Models\NewsletterLink; 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\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; @@ -116,7 +122,8 @@ class SendingQueue { $prepared_subscribers_ids, $prepared_newsletters[0], $prepared_subscribers[0], - $statistics + $statistics, + $this->getExtraParams($queue, $prepared_subscribers_ids) ); $prepared_newsletters = array(); $prepared_subscribers = array(); @@ -138,12 +145,13 @@ class SendingQueue { function sendNewsletters( $queue, $prepared_subscribers_ids, $prepared_newsletters, - $prepared_subscribers, $statistics + $prepared_subscribers, $statistics, $extra_params = array() ) { // send newsletter $send_result = $this->mailer_task->send( $prepared_newsletters, - $prepared_subscribers + $prepared_subscribers, + $extra_params ); // log error message and schedule retry/pause sending if($send_result['response'] === false) { @@ -172,6 +180,33 @@ class SendingQueue { 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() { return SendingQueueModel::orderByAsc('priority') ->whereNull('deleted_at') @@ -179,4 +214,4 @@ class SendingQueue { ->whereNull('type') ->findMany(); } -} \ No newline at end of file +} diff --git a/lib/Cron/Workers/SendingQueue/Tasks/Mailer.php b/lib/Cron/Workers/SendingQueue/Tasks/Mailer.php index f09a44fa20..66fcfdf239 100644 --- a/lib/Cron/Workers/SendingQueue/Tasks/Mailer.php +++ b/lib/Cron/Workers/SendingQueue/Tasks/Mailer.php @@ -3,6 +3,7 @@ namespace MailPoet\Cron\Workers\SendingQueue\Tasks; use MailPoet\Mailer\Mailer as MailerFactory; use MailPoet\Mailer\MailerLog; +use MailPoet\Subscription\Url; if(!defined('ABSPATH')) exit; @@ -54,10 +55,11 @@ class Mailer { 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( $prepared_newsletters, - $prepared_subscribers + $prepared_subscribers, + $extra_params ); } -} \ No newline at end of file +} diff --git a/lib/Subscription/Url.php b/lib/Subscription/Url.php index bedf284f47..73c653be01 100644 --- a/lib/Subscription/Url.php +++ b/lib/Subscription/Url.php @@ -33,6 +33,9 @@ class Url { if(is_object($subscriber)) { $subscriber = $subscriber->asArray(); } + if(is_string($subscriber)) { + $subscriber = array('email' => $subscriber); + } $data = array( 'token' => Subscriber::generateToken($subscriber['email']), @@ -61,4 +64,4 @@ class Url { return $url; } -} \ No newline at end of file +}