diff --git a/assets/js/src/newsletters/listings/notification_history.jsx b/assets/js/src/newsletters/listings/notification_history.jsx
index 6b1d1bd4d2..75284c1605 100644
--- a/assets/js/src/newsletters/listings/notification_history.jsx
+++ b/assets/js/src/newsletters/listings/notification_history.jsx
@@ -68,7 +68,7 @@ const NewsletterListNotificationHistory = React.createClass({
{ newsletter.subject }
+ >{ newsletter.queue.newsletter_rendered_subject }
{ actions }
diff --git a/lib/Cron/Workers/SendingQueue/Tasks/Newsletter.php b/lib/Cron/Workers/SendingQueue/Tasks/Newsletter.php
index 4024e90096..e886c9cac2 100644
--- a/lib/Cron/Workers/SendingQueue/Tasks/Newsletter.php
+++ b/lib/Cron/Workers/SendingQueue/Tasks/Newsletter.php
@@ -25,8 +25,7 @@ class Newsletter {
if(!$newsletter) {
return false;
}
- // if the newsletter was previously rendered, return it
- // otherwise, process/render it
+ // return the newsletter if it was previously rendered
if(!is_null($queue->getNewsletterRenderedBody())) {
return $newsletter;
}
@@ -34,7 +33,7 @@ class Newsletter {
if($this->tracking_enabled) {
// hook to the newsletter post-processing filter and add tracking image
$this->tracking_image_inserted = OpenTracking::addTrackingImage();
- // render newsletter and save its
+ // render newsletter
$rendered_newsletter = $newsletter->render();
// hash and save all links
$rendered_newsletter = LinksTask::process($rendered_newsletter, $newsletter, $queue);
diff --git a/lib/Newsletter/Shortcodes/Categories/Date.php b/lib/Newsletter/Shortcodes/Categories/Date.php
index 0a1e72beb9..8bea0a15d6 100644
--- a/lib/Newsletter/Shortcodes/Categories/Date.php
+++ b/lib/Newsletter/Shortcodes/Categories/Date.php
@@ -14,4 +14,4 @@ class Date {
);
return (isset($actions[$action])) ? $actions[$action] : false;
}
-}
+}
\ No newline at end of file
diff --git a/lib/Newsletter/Shortcodes/Categories/Link.php b/lib/Newsletter/Shortcodes/Categories/Link.php
index 8968fe27c3..e63f4f1ed2 100644
--- a/lib/Newsletter/Shortcodes/Categories/Link.php
+++ b/lib/Newsletter/Shortcodes/Categories/Link.php
@@ -125,4 +125,4 @@ class Link {
private static function getShortcode($action) {
return sprintf('[link:%s]', $action);
}
-}
+}
\ No newline at end of file
diff --git a/lib/Newsletter/Shortcodes/Categories/Newsletter.php b/lib/Newsletter/Shortcodes/Categories/Newsletter.php
index 8ab4aa6742..785ca33c94 100644
--- a/lib/Newsletter/Shortcodes/Categories/Newsletter.php
+++ b/lib/Newsletter/Shortcodes/Categories/Newsletter.php
@@ -1,10 +1,10 @@
subject : false;
case 'total':
return substr_count($content, 'data-post-id');
@@ -28,10 +28,10 @@ class Newsletter {
return ($latest_post) ? $latest_post['post_title'] : false;
case 'number':
- if($newsletter['type'] !== 'notification') return false;
+ if($newsletter->type !== NewsletterModel::TYPE_NOTIFICATION_HISTORY) return false;
$sent_newsletters =
- SendingQueue::where('newsletter_id', $newsletter['id'])
- ->where('status', 'completed')
+ NewsletterModel::where('parent_id', $newsletter->parent_id)
+ ->where('status', NewsletterModel::STATUS_SENT)
->count();
return ++$sent_newsletters;
diff --git a/lib/Newsletter/Shortcodes/Categories/Subscriber.php b/lib/Newsletter/Shortcodes/Categories/Subscriber.php
index 12cd250c32..f69911dd09 100644
--- a/lib/Newsletter/Shortcodes/Categories/Subscriber.php
+++ b/lib/Newsletter/Shortcodes/Categories/Subscriber.php
@@ -1,5 +1,6 @@
first_name : $default_value;
case 'lastname':
- return ($subscriber) ? $subscriber['last_name'] : $default_value;
+ return ($subscriber) ? $subscriber->last_name : $default_value;
case 'email':
- return ($subscriber) ? $subscriber['email'] : false;
+ return ($subscriber) ? $subscriber->email : false;
case 'displayname':
- if($subscriber && $subscriber['wp_user_id']) {
- $wp_user = get_userdata($subscriber['wp_user_id']);
+ if($subscriber && $subscriber->wp_user_id) {
+ $wp_user = get_userdata($subscriber->wp_user_id);
return $wp_user->user_login;
}
return $default_value;
@@ -31,10 +32,10 @@ class Subscriber {
->count();
default:
if(preg_match('/cf_(\d+)/', $action, $custom_field) &&
- !empty($subscriber['id'])
+ !empty($subscriber->id)
) {
$custom_field = SubscriberCustomField
- ::where('subscriber_id', $subscriber['id'])
+ ::where('subscriber_id', $subscriber->id)
->where('custom_field_id', $custom_field[1])
->findOne();
return ($custom_field) ? $custom_field->value : false;
diff --git a/lib/Newsletter/Shortcodes/Shortcodes.php b/lib/Newsletter/Shortcodes/Shortcodes.php
index e123c14960..53009386cd 100644
--- a/lib/Newsletter/Shortcodes/Shortcodes.php
+++ b/lib/Newsletter/Shortcodes/Shortcodes.php
@@ -12,15 +12,9 @@ class Shortcodes {
$subscriber = false,
$queue = false
) {
- $this->newsletter = (is_object($newsletter)) ?
- $newsletter->asArray() :
- $newsletter;
- $this->subscriber = (is_object($subscriber)) ?
- $subscriber->asArray() :
- $subscriber;
- $this->queue = (is_object($queue)) ?
- $queue->asArray() :
- $queue;
+ $this->newsletter = $newsletter;
+ $this->subscriber = $subscriber;
+ $this->queue = $queue;
}
function extract($content, $categories = false) {
diff --git a/tests/unit/Cron/Workers/SendingQueue/Tasks/ShortcodesTest.php b/tests/unit/Cron/Workers/SendingQueue/Tasks/ShortcodesTest.php
index 9dbfc229b1..ac09b59577 100644
--- a/tests/unit/Cron/Workers/SendingQueue/Tasks/ShortcodesTest.php
+++ b/tests/unit/Cron/Workers/SendingQueue/Tasks/ShortcodesTest.php
@@ -7,11 +7,10 @@ if(!defined('ABSPATH')) exit;
class ShortcodesTaskTest extends MailPoetTest {
function testItCanReplaceShortcodes() {
- $queue = $newsletter = array(
+ $queue = $newsletter = (object)array(
'id' => 1
-
);
- $subscriber = array(
+ $subscriber = (object)array(
'email' => 'test@xample. com',
'first_name' => 'John',
'last_name' => 'Doe'
diff --git a/tests/unit/Newsletter/ShortcodesTest.php b/tests/unit/Newsletter/ShortcodesTest.php
index 690e4961d9..4b19a42881 100644
--- a/tests/unit/Newsletter/ShortcodesTest.php
+++ b/tests/unit/Newsletter/ShortcodesTest.php
@@ -2,6 +2,7 @@
use MailPoet\Config\Populator;
use MailPoet\Models\CustomField;
+use MailPoet\Models\Newsletter;
use MailPoet\Models\SendingQueue;
use MailPoet\Models\Setting;
use MailPoet\Models\Subscriber;
@@ -22,11 +23,7 @@ class ShortcodesTest extends MailPoetTest {
$this->WP_user = $this->_createWPUser();
$this->WP_post = $this->_createWPPost();
$this->subscriber = $this->_createSubscriber();
- $this->newsletter = array(
- 'subject' => 'some subject',
- 'type' => 'notification',
- 'id' => 2
- );
+ $this->newsletter = $this->_createNewsletter();
$this->shortcodes_object = new MailPoet\Newsletter\Shortcodes\Shortcodes(
$this->newsletter,
$this->subscriber
@@ -72,7 +69,7 @@ class ShortcodesTest extends MailPoetTest {
$shortcode = array('[some:shortcode]');
$result = $shortcodes_object->process($shortcode);
expect($result[0])->false();
- add_filter('mailpoet_newsletter_shortcode', function (
+ add_filter('mailpoet_newsletter_shortcode', function(
$shortcode, $newsletter, $subscriber, $queue, $content) {
if($shortcode === '[some:shortcode]') return 'success';
}, 10, 5);
@@ -98,7 +95,7 @@ class ShortcodesTest extends MailPoetTest {
'not post';
$result =
$shortcodes_object->process(array('[newsletter:subject]'));
- expect($result[0])->equals($this->newsletter['subject']);
+ expect($result[0])->equals($this->newsletter->subject);
$result =
$shortcodes_object->process(array('[newsletter:total]'), $content);
expect($result[0])->equals(2);
@@ -106,12 +103,32 @@ class ShortcodesTest extends MailPoetTest {
$shortcodes_object->process(array('[newsletter:post_title]'));
$wp_post = get_post($this->WP_post);
expect($result['0'])->equals($wp_post->post_title);
- $result =
- $shortcodes_object->process(array('[newsletter:number]'));
+ }
+
+
+ function itCanProcessPostNotificationNewsletterNumberShortcode() {
+ // create first post notification
+ $post_notification_history = $this->_createNewsletter(
+ $parent_id = $this->newsletter_id,
+ $type = Newsletter::TYPE_NOTIFICATION_HISTORY
+ );
+ $shortcodes_object = new MailPoet\Newsletter\Shortcodes\Shortcodes(
+ $post_notification_history,
+ $this->subscriber
+ );
+ $result = $shortcodes_object->process(array('[newsletter:number]'));
expect($result['0'])->equals(1);
- $queue = $this->_createQueue();
- $result =
- $shortcodes_object->process(array('[newsletter:number]'));
+
+ // create another post notification
+ $post_notification_history = $this->_createNewsletter(
+ $parent_id = $this->newsletter_id,
+ $type = Newsletter::TYPE_NOTIFICATION_HISTORY
+ );
+ $shortcodes_object = new MailPoet\Newsletter\Shortcodes\Shortcodes(
+ $post_notification_history,
+ $this->subscriber
+ );
+ $result = $shortcodes_object->process(array('[newsletter:number]'));
expect($result['0'])->equals(2);
}
@@ -228,7 +245,7 @@ class ShortcodesTest extends MailPoetTest {
$shortcode = '[link:shortcode]';
$result = $shortcodes_object->process(array($shortcode));
expect($result[0])->false();
- add_filter('mailpoet_newsletter_shortcode_link', function (
+ add_filter('mailpoet_newsletter_shortcode_link', function(
$shortcode, $newsletter, $subscriber, $queue) {
if($shortcode === '[link:shortcode]') return 'success';
}, 10, 4);
@@ -271,15 +288,30 @@ class ShortcodesTest extends MailPoetTest {
return Subscriber::findOne($subscriber->id);
}
+ function _createNewsletter($parent_id = null, $type = Newsletter::TYPE_NOTIFICATION) {
+ $newsletter = Newsletter::create();
+ $newsletter->hydrate(
+ array(
+ 'subject' => 'some subject',
+ 'type' => $type,
+ 'status' => Newsletter::STATUS_SENT,
+ 'parent_id' => $parent_id,
+ )
+ );
+ $newsletter->save();
+ return Newsletter::findOne($newsletter->id);
+ }
+
function _createQueue() {
$queue = SendingQueue::create();
$queue->newsletter_id = $this->newsletter['id'];
$queue->status = 'completed';
$queue->save();
- return $queue;
+ return SendingQueue::findOne($queue->id);
}
function _after() {
+ ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
ORM::raw_execute('TRUNCATE ' . Subscriber::$_table);
ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
ORM::raw_execute('TRUNCATE ' . CustomField::$_table);