- Implements shortcodes
- Updates newsletter router/sending queue worker to use shortcodes replacement class
This commit is contained in:
43
lib/Newsletter/Shortcodes/Categories/Date.php
Normal file
43
lib/Newsletter/Shortcodes/Categories/Date.php
Normal file
@ -0,0 +1,43 @@
|
||||
<?php
|
||||
namespace MailPoet\Newsletter\Shortcodes\Categories;
|
||||
|
||||
class Date {
|
||||
/*
|
||||
{
|
||||
text: '<%= __('Current day of the month number') %>',
|
||||
shortcode: 'date:d',
|
||||
},
|
||||
{
|
||||
text: '<%= __('Current day of the month in ordinal, ie. 2nd, 3rd, etc.') %>',
|
||||
shortcode: 'date:dordinal',
|
||||
},
|
||||
{
|
||||
text: '<%= __('Full name of current day') %>',
|
||||
shortcode: 'date:dtext',
|
||||
},
|
||||
{
|
||||
text: '<%= __('Current month number') %>',
|
||||
shortcode: 'date:m',
|
||||
},
|
||||
{
|
||||
text: '<%= __('Full name of current month') %>',
|
||||
shortcode: 'date:mtext',
|
||||
},
|
||||
{
|
||||
text: '<%= __('Year') %>',
|
||||
shortcode: 'date:y',
|
||||
}
|
||||
*/
|
||||
static function process($action) {
|
||||
$date = new \DateTime('now');
|
||||
$actions = array(
|
||||
'd' => $date->format('d'),
|
||||
'dordinal' => $date->format('dS'),
|
||||
'dtext' => $date->format('D'),
|
||||
'm' => $date->format('m'),
|
||||
'mtext' => $date->format('F'),
|
||||
'y' => $date->format('Y')
|
||||
);
|
||||
return (isset($actions[$action])) ? $actions[$action] : false;
|
||||
}
|
||||
}
|
30
lib/Newsletter/Shortcodes/Categories/Link.php
Normal file
30
lib/Newsletter/Shortcodes/Categories/Link.php
Normal file
@ -0,0 +1,30 @@
|
||||
<?php
|
||||
namespace MailPoet\Newsletter\Shortcodes\Categories;
|
||||
|
||||
require_once(ABSPATH . 'wp-includes/pluggable.php');
|
||||
|
||||
class Link {
|
||||
/*
|
||||
{
|
||||
text: '<%= __('Unsubscribe link') %>',
|
||||
shortcode: 'global:unsubscribe',
|
||||
},
|
||||
{
|
||||
text: '<%= __('Edit subscription page link') %>',
|
||||
shortcode: 'global:manage',
|
||||
},
|
||||
{
|
||||
text: '<%= __('View in browser link') %>',
|
||||
shortcode: 'global:browser',
|
||||
}
|
||||
*/
|
||||
static function process($action) {
|
||||
// TODO: implement
|
||||
$actions = array(
|
||||
'unsubscribe' => '',
|
||||
'manage' => '',
|
||||
'browser' => ''
|
||||
);
|
||||
return (isset($actions[$action])) ? $actions[$action] : false;
|
||||
}
|
||||
}
|
43
lib/Newsletter/Shortcodes/Categories/Newsletter.php
Normal file
43
lib/Newsletter/Shortcodes/Categories/Newsletter.php
Normal file
@ -0,0 +1,43 @@
|
||||
<?php
|
||||
namespace MailPoet\Newsletter\Shortcodes\Categories;
|
||||
|
||||
class Newsletter {
|
||||
/*
|
||||
{
|
||||
text: '<%= __('Newsletter Subject') %>',-
|
||||
shortcode: 'newsletter:subject',
|
||||
},
|
||||
{
|
||||
text: '<%= __('Total number of posts or pages') %>',
|
||||
shortcode: 'newsletter:total',
|
||||
},
|
||||
{
|
||||
text: '<%= __('Latest post title') %>',
|
||||
shortcode: 'newsletter:post_title',
|
||||
},
|
||||
{
|
||||
text: '<%= __('Issue number') %>',
|
||||
shortcode: 'newsletter:number',
|
||||
}
|
||||
*/
|
||||
static function process($action, $default_value = false, $newsletter) {
|
||||
if(is_object($newsletter)) {
|
||||
$newsletter = $newsletter->asArray();
|
||||
}
|
||||
switch($action) {
|
||||
case 'subject':
|
||||
return ($newsletter) ? $newsletter['subject'] : false;
|
||||
case 'total':
|
||||
$posts = wp_count_posts();
|
||||
return $posts->publish;
|
||||
case 'post_title':
|
||||
$post = wp_get_recent_posts(array('numberposts' => 1));
|
||||
return (isset($post[0])) ? $post[0]['post_title'] : false;
|
||||
case 'number':
|
||||
// TODO: implement
|
||||
return;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
54
lib/Newsletter/Shortcodes/Categories/User.php
Normal file
54
lib/Newsletter/Shortcodes/Categories/User.php
Normal file
@ -0,0 +1,54 @@
|
||||
<?php
|
||||
namespace MailPoet\Newsletter\Shortcodes\Categories;
|
||||
|
||||
use MailPoet\Models\Subscriber;
|
||||
|
||||
require_once(ABSPATH . 'wp-includes/pluggable.php');
|
||||
|
||||
class User {
|
||||
/*
|
||||
{
|
||||
text: '<%= __('First Name') %>',
|
||||
shortcode: 'user:firstname | default:reader',
|
||||
},
|
||||
{
|
||||
text: '<%= __('Last Name') %>',
|
||||
shortcode: 'user:lastname | default:reader',
|
||||
},
|
||||
{
|
||||
text: '<%= __('Email Address') %>',
|
||||
shortcode: 'user:email',
|
||||
},
|
||||
{
|
||||
text: '<%= __('Wordpress user display name') %>',
|
||||
shortcode: 'user:displayname | default:member',
|
||||
},
|
||||
{
|
||||
text: '<%= __('Total of subscribers') %>',
|
||||
shortcode: 'user:count',
|
||||
}
|
||||
*/
|
||||
static function process($action, $default_value, $newsletter = false, $subscriber) {
|
||||
if(is_object($subscriber)) {
|
||||
$subscriber = $subscriber->asArray();
|
||||
}
|
||||
switch($action) {
|
||||
case 'firstname':
|
||||
return ($subscriber) ? $subscriber['first_name'] : $default_value;
|
||||
case 'lastname':
|
||||
return ($subscriber) ? $subscriber['last_name'] : $default_value;
|
||||
case 'email':
|
||||
return ($subscriber) ? $subscriber['email'] : false;
|
||||
case 'displayname':
|
||||
if($subscriber && $subscriber['wp_user_id']) {
|
||||
$wp_user = get_userdata($subscriber['wp_user_id']);
|
||||
return $wp_user->user_login;
|
||||
};
|
||||
return $default_value;
|
||||
case 'count':
|
||||
return Subscriber::count();
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
53
lib/Newsletter/Shortcodes/Shortcodes.php
Normal file
53
lib/Newsletter/Shortcodes/Shortcodes.php
Normal file
@ -0,0 +1,53 @@
|
||||
<?php
|
||||
namespace MailPoet\Newsletter\Shortcodes;
|
||||
|
||||
class Shortcodes {
|
||||
public $rendered_newsletter;
|
||||
public $newsletter;
|
||||
public $subscriber;
|
||||
|
||||
function __construct(
|
||||
$rendered_newsletter,
|
||||
$newsletter = false,
|
||||
$subscriber = false) {
|
||||
$this->rendered_newsletter = $rendered_newsletter;
|
||||
$this->newsletter = $newsletter;
|
||||
$this->subscriber = $subscriber;
|
||||
}
|
||||
|
||||
function extract() {
|
||||
preg_match_all('/\[(?:\w+):.*?\]/', $this->rendered_newsletter, $shortcodes);
|
||||
return array_unique($shortcodes[0]);
|
||||
}
|
||||
|
||||
function process($shortcodes) {
|
||||
$processed_shortcodes = array_map(
|
||||
function ($shortcode) {
|
||||
// TODO: discuss renaming "global". It is a reserved name in PHP.
|
||||
if($shortcode === 'global') $shortcode = 'link';
|
||||
preg_match(
|
||||
'/\[(?P<type>\w+):(?P<action>\w+)(?:.*?default:(?P<default>.*?))?\]/',
|
||||
$shortcode,
|
||||
$shortcode_details
|
||||
);
|
||||
$shortcode_class =
|
||||
__NAMESPACE__ . '\\Categories\\' . ucfirst($shortcode_details['type']);
|
||||
if(!class_exists($shortcode_class)) return false;
|
||||
return $shortcode_class::process(
|
||||
$shortcode_details['action'],
|
||||
isset($shortcode_details['default'])
|
||||
? $shortcode_details['default'] : false,
|
||||
$this->newsletter,
|
||||
$this->subscriber
|
||||
);
|
||||
}, $shortcodes);
|
||||
return array_filter($processed_shortcodes);
|
||||
}
|
||||
|
||||
function replace() {
|
||||
$shortcodes = $this->extract($this->rendered_newsletter);
|
||||
$processed_shortcodes = $this->process($shortcodes);
|
||||
$shortcodes = array_intersect_key($shortcodes, $processed_shortcodes);
|
||||
return str_replace($shortcodes, $processed_shortcodes, $this->rendered_newsletter);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user