- Fixes incorrect newsletter issue number display
- Updates newsletter 'last post title' logic - Updates shortcode extraction regex to allow limiting extraction of only specific categories - Updates unit tests - Closes #380
This commit is contained in:
@ -25,7 +25,7 @@ class Links {
|
|||||||
. ')\\1#';
|
. ')\\1#';
|
||||||
preg_match_all($regex, $text, $links);
|
preg_match_all($regex, $text, $links);
|
||||||
$shortcodes = new Shortcodes();;
|
$shortcodes = new Shortcodes();;
|
||||||
$shortcodes = $shortcodes->extract($text);
|
$shortcodes = $shortcodes->extract($text, $limit = array('subscription'));
|
||||||
return array_merge(
|
return array_merge(
|
||||||
array_unique($links[2]),
|
array_unique($links[2]),
|
||||||
$shortcodes
|
$shortcodes
|
||||||
|
@ -3,6 +3,8 @@ namespace MailPoet\Newsletter\Shortcodes\Categories;
|
|||||||
|
|
||||||
use MailPoet\Models\SendingQueue;
|
use MailPoet\Models\SendingQueue;
|
||||||
|
|
||||||
|
require_once( ABSPATH . "wp-includes/pluggable.php" );
|
||||||
|
|
||||||
class Newsletter {
|
class Newsletter {
|
||||||
/*
|
/*
|
||||||
{
|
{
|
||||||
@ -46,14 +48,18 @@ class Newsletter {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 'post_title':
|
case 'post_title':
|
||||||
$post = wp_get_recent_posts(array('numberposts' => 1));
|
preg_match_all('/data-post-id="(\w+)"/ism', $text, $posts);
|
||||||
return (isset($post[0])) ? $post[0]['post_title'] : false;
|
$post_ids = array_unique($posts[1]);
|
||||||
|
$latest_post = self::getLatestWPPost($post_ids);
|
||||||
|
return ($latest_post) ? $latest_post['post_title'] : false;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'number':
|
case 'number':
|
||||||
if ($newsletter['type'] !== 'notification') return false;
|
if ($newsletter['type'] !== 'notification') return false;
|
||||||
$sent_newsletters = (int)
|
$sent_newsletters =
|
||||||
SendingQueue::where('newsletter_id', $newsletter['id'])->count();
|
SendingQueue::where('newsletter_id', $newsletter['id'])
|
||||||
|
->where('status', 'completed')
|
||||||
|
->count();
|
||||||
return ++$sent_newsletters;
|
return ++$sent_newsletters;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -70,4 +76,18 @@ class Newsletter {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static function getLatestWPPost($post_ids) {
|
||||||
|
$posts = new \WP_Query(
|
||||||
|
array(
|
||||||
|
'post__in' => $post_ids,
|
||||||
|
'posts_per_page' => 1,
|
||||||
|
'orderby' => 'post_date',
|
||||||
|
'order' => 'DESC'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
return (count($posts)) ?
|
||||||
|
$posts->posts[0]->to_array() :
|
||||||
|
false;
|
||||||
|
}
|
||||||
}
|
}
|
@ -13,8 +13,13 @@ class Shortcodes {
|
|||||||
$this->subscriber = $subscriber;
|
$this->subscriber = $subscriber;
|
||||||
}
|
}
|
||||||
|
|
||||||
function extract($text) {
|
function extract($text, $limit = false) {
|
||||||
preg_match_all('/\[(?:\w+):.*?\]/ism', $text, $shortcodes);
|
$limit = (is_array($limit)) ? implode('|', $limit) : false;
|
||||||
|
$regex = sprintf(
|
||||||
|
'/\[%s:.*?\]/ism',
|
||||||
|
($limit) ? '(?:' . $limit . ')' : '(?:\w+)'
|
||||||
|
);
|
||||||
|
preg_match_all($regex, $text, $shortcodes);
|
||||||
return array_unique($shortcodes[0]);
|
return array_unique($shortcodes[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,8 +18,10 @@ class ShortcodesTest extends MailPoetTest {
|
|||||||
$this->newsletter = array(
|
$this->newsletter = array(
|
||||||
'subject' => 'some subject',
|
'subject' => 'some subject',
|
||||||
'type' => 'notification',
|
'type' => 'notification',
|
||||||
'id' => 1
|
'id' => 2
|
||||||
);
|
);
|
||||||
|
$post = get_post(1);
|
||||||
|
$this->latest_post_title = $post->post_title;
|
||||||
$this->rendered_newsletter = '
|
$this->rendered_newsletter = '
|
||||||
Hello [user:displayname | default:member].
|
Hello [user:displayname | default:member].
|
||||||
Your first name is [user:firstname | default:First Name].
|
Your first name is [user:firstname | default:First Name].
|
||||||
@ -32,7 +34,7 @@ class ShortcodesTest extends MailPoetTest {
|
|||||||
|
|
||||||
There are [newsletter:total] posts in this newsletter.
|
There are [newsletter:total] posts in this newsletter.
|
||||||
You are reading [newsletter:subject].
|
You are reading [newsletter:subject].
|
||||||
The latest post on this blog is called [newsletter:post_title].
|
The latest post in this newsletter is called [newsletter:post_title].
|
||||||
The issue number of this newsletter is [newsletter:number].
|
The issue number of this newsletter is [newsletter:number].
|
||||||
|
|
||||||
Date: [date:d].
|
Date: [date:d].
|
||||||
@ -58,15 +60,11 @@ class ShortcodesTest extends MailPoetTest {
|
|||||||
|
|
||||||
function testItCanProcessShortcodes() {
|
function testItCanProcessShortcodes() {
|
||||||
$wp_user = get_userdata($this->wp_user);
|
$wp_user = get_userdata($this->wp_user);
|
||||||
$wp_latest_post = wp_get_recent_posts(array('numberposts' => 1));
|
|
||||||
$wp_latest_post = (isset($wp_latest_post)) ?
|
|
||||||
$wp_latest_post[0]['post_title'] :
|
|
||||||
false;
|
|
||||||
|
|
||||||
$queue = SendingQueue::create();
|
$queue = SendingQueue::create();
|
||||||
$queue->newsletter_id = $this->newsletter['id'];
|
$queue->newsletter_id = $this->newsletter['id'];
|
||||||
$queue->save();
|
$queue->save();
|
||||||
$issue_number = 2;
|
$issue_number = 1;
|
||||||
|
|
||||||
$number_of_posts = 2;
|
$number_of_posts = 2;
|
||||||
|
|
||||||
@ -92,7 +90,7 @@ class ShortcodesTest extends MailPoetTest {
|
|||||||
|
|
||||||
There are {$number_of_posts} posts in this newsletter.
|
There are {$number_of_posts} posts in this newsletter.
|
||||||
You are reading {$this->newsletter['subject']}.
|
You are reading {$this->newsletter['subject']}.
|
||||||
The latest post on this blog is called {$wp_latest_post}.
|
The latest post in this newsletter is called {$this->latest_post_title}.
|
||||||
The issue number of this newsletter is {$issue_number}.
|
The issue number of this newsletter is {$issue_number}.
|
||||||
|
|
||||||
Date: {$date->format('d')}.
|
Date: {$date->format('d')}.
|
||||||
|
Reference in New Issue
Block a user