Merge pull request #694 from mailpoet/newsletter_number_shortcode_fix
Newsletter number shortcode fix
This commit is contained in:
@@ -68,7 +68,7 @@ const NewsletterListNotificationHistory = React.createClass({
|
||||
<a
|
||||
href={ newsletter.preview_url }
|
||||
target="_blank"
|
||||
>{ newsletter.subject }</a>
|
||||
>{ newsletter.queue.newsletter_rendered_subject }</a>
|
||||
</strong>
|
||||
{ actions }
|
||||
</td>
|
||||
|
@@ -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);
|
||||
|
@@ -14,4 +14,4 @@ class Date {
|
||||
);
|
||||
return (isset($actions[$action])) ? $actions[$action] : false;
|
||||
}
|
||||
}
|
||||
}
|
@@ -125,4 +125,4 @@ class Link {
|
||||
private static function getShortcode($action) {
|
||||
return sprintf('[link:%s]', $action);
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,10 +1,10 @@
|
||||
<?php
|
||||
namespace MailPoet\Newsletter\Shortcodes\Categories;
|
||||
use MailPoet\Models\SendingQueue;
|
||||
use MailPoet\Newsletter\Shortcodes\ShortcodesHelper;
|
||||
|
||||
use MailPoet\Models\Newsletter as NewsletterModel;
|
||||
|
||||
if(!defined('ABSPATH')) exit;
|
||||
require_once( ABSPATH . "wp-includes/pluggable.php" );
|
||||
require_once(ABSPATH . "wp-includes/pluggable.php");
|
||||
|
||||
class Newsletter {
|
||||
static function process($action,
|
||||
@@ -16,7 +16,7 @@ class Newsletter {
|
||||
) {
|
||||
switch($action) {
|
||||
case 'subject':
|
||||
return ($newsletter) ? $newsletter['subject'] : false;
|
||||
return ($newsletter) ? $newsletter->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;
|
||||
|
||||
|
@@ -1,5 +1,6 @@
|
||||
<?php
|
||||
namespace MailPoet\Newsletter\Shortcodes\Categories;
|
||||
|
||||
use MailPoet\Models\Subscriber as SubscriberModel;
|
||||
use MailPoet\Models\SubscriberCustomField;
|
||||
|
||||
@@ -15,14 +16,14 @@ class Subscriber {
|
||||
) {
|
||||
switch($action) {
|
||||
case 'firstname':
|
||||
return ($subscriber) ? $subscriber['first_name'] : $default_value;
|
||||
return ($subscriber) ? $subscriber->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;
|
||||
|
@@ -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) {
|
||||
|
@@ -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'
|
||||
|
@@ -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 {
|
||||
'<a href="#">not post</a>';
|
||||
$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);
|
||||
|
Reference in New Issue
Block a user