Merge pull request #795 from mailpoet/preview_link_update
Allows sharing of newsletter preview links [MAILPOET-791]
This commit is contained in:
@@ -340,11 +340,10 @@ class Newsletters extends APIEndpoint {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// get preview url
|
// get preview url
|
||||||
$subscriber = Subscriber::getCurrentWPUser();
|
|
||||||
$newsletter->preview_url = NewsletterUrl::getViewInBrowserUrl(
|
$newsletter->preview_url = NewsletterUrl::getViewInBrowserUrl(
|
||||||
NewsletterUrl::TYPE_LISTING_EDITOR,
|
NewsletterUrl::TYPE_LISTING_EDITOR,
|
||||||
$newsletter,
|
$newsletter,
|
||||||
$subscriber,
|
$subscriber = null,
|
||||||
$queue
|
$queue
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@@ -593,6 +593,7 @@ class Newsletter extends Model {
|
|||||||
return self::select(array(
|
return self::select(array(
|
||||||
'id',
|
'id',
|
||||||
'subject',
|
'subject',
|
||||||
|
'hash',
|
||||||
'type',
|
'type',
|
||||||
'status',
|
'status',
|
||||||
'updated_at',
|
'updated_at',
|
||||||
|
@@ -27,8 +27,7 @@ class Url {
|
|||||||
$preview = true;
|
$preview = true;
|
||||||
break;
|
break;
|
||||||
case self::TYPE_LISTING_EDITOR:
|
case self::TYPE_LISTING_EDITOR:
|
||||||
// enable preview and hide newsletter hash when displaying from editor or listings
|
// enable preview when displaying from editor or listings
|
||||||
$newsletter->hash = null;
|
|
||||||
$preview = true;
|
$preview = true;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@@ -50,10 +50,14 @@ class ViewInBrowser {
|
|||||||
if(empty($data->subscriber_token) ||
|
if(empty($data->subscriber_token) ||
|
||||||
!Subscriber::verifyToken($data->subscriber->email, $data->subscriber_token)
|
!Subscriber::verifyToken($data->subscriber->email, $data->subscriber_token)
|
||||||
) return false;
|
) return false;
|
||||||
|
} else if(!$data->subscriber && !empty($data->preview)) {
|
||||||
|
// if this is a preview and subscriber does not exist,
|
||||||
|
// attemp to set subscriber to the current logged-in WP user
|
||||||
|
$data->subscriber = Subscriber::getCurrentWPUser();
|
||||||
}
|
}
|
||||||
|
|
||||||
// if newsletter ID is defined then subscriber must exist
|
// if newsletter hash is not provided but newsletter ID is defined then subscriber must exist
|
||||||
if($data->newsletter_id && !$data->subscriber) return false;
|
if(empty($data->newsletter_hash) && $data->newsletter_id && !$data->subscriber) return false;
|
||||||
|
|
||||||
// queue is optional; if defined, get it
|
// queue is optional; if defined, get it
|
||||||
$data->queue = (!empty($data->queue_id)) ?
|
$data->queue = (!empty($data->queue_id)) ?
|
||||||
|
@@ -8,6 +8,8 @@ use MailPoet\Models\NewsletterOptionField;
|
|||||||
use MailPoet\Models\NewsletterSegment;
|
use MailPoet\Models\NewsletterSegment;
|
||||||
use MailPoet\Models\Segment;
|
use MailPoet\Models\Segment;
|
||||||
use MailPoet\Newsletter\Scheduler\Scheduler;
|
use MailPoet\Newsletter\Scheduler\Scheduler;
|
||||||
|
use MailPoet\Newsletter\Url;
|
||||||
|
use MailPoet\Router\Router;
|
||||||
|
|
||||||
class NewslettersTest extends MailPoetTest {
|
class NewslettersTest extends MailPoetTest {
|
||||||
function _before() {
|
function _before() {
|
||||||
@@ -29,7 +31,7 @@ class NewslettersTest extends MailPoetTest {
|
|||||||
function testItCanGetANewsletter() {
|
function testItCanGetANewsletter() {
|
||||||
$router = new Newsletters();
|
$router = new Newsletters();
|
||||||
|
|
||||||
$response = $router->get(/* missing id */);
|
$response = $router->get(); // missing id
|
||||||
expect($response->status)->equals(APIResponse::STATUS_NOT_FOUND);
|
expect($response->status)->equals(APIResponse::STATUS_NOT_FOUND);
|
||||||
expect($response->errors[0]['message'])
|
expect($response->errors[0]['message'])
|
||||||
->equals('This newsletter does not exist.');
|
->equals('This newsletter does not exist.');
|
||||||
@@ -517,7 +519,7 @@ class NewslettersTest extends MailPoetTest {
|
|||||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
function testItReturnsMaillerErrorWhenSendingFailed() {
|
function testItReturnsMailerErrorWhenSendingFailed() {
|
||||||
$subscriber = 'test@subscriber.com';
|
$subscriber = 'test@subscriber.com';
|
||||||
$data = array(
|
$data = array(
|
||||||
'subscriber' => $subscriber,
|
'subscriber' => $subscriber,
|
||||||
@@ -542,6 +544,18 @@ class NewslettersTest extends MailPoetTest {
|
|||||||
expect($response->errors[0]['message'])->equals('The email could not be sent: failed');
|
expect($response->errors[0]['message'])->equals('The email could not be sent: failed');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function testItGeneratesPreviewLinksWithNewsletterHashAndNoSubscriberData() {
|
||||||
|
$router = new Newsletters();
|
||||||
|
$response = $router->listing();
|
||||||
|
$preview_link = $response->data[0]['preview_url'];
|
||||||
|
parse_str(parse_url($preview_link, PHP_URL_QUERY), $preview_link_data);
|
||||||
|
$preview_link_data = Url::transformUrlDataObject(Router::decodeRequestData($preview_link_data['data']));
|
||||||
|
expect($preview_link_data['newsletter_hash'])->notEmpty();
|
||||||
|
expect($preview_link_data['subscriber_id'])->false();
|
||||||
|
expect($preview_link_data['subscriber_token'])->false();
|
||||||
|
expect((boolean)$preview_link_data['preview'])->true();
|
||||||
|
}
|
||||||
|
|
||||||
function _after() {
|
function _after() {
|
||||||
Newsletter::deleteMany();
|
Newsletter::deleteMany();
|
||||||
NewsletterSegment::deleteMany();
|
NewsletterSegment::deleteMany();
|
||||||
|
@@ -143,6 +143,21 @@ class ViewInBrowserRouterTest extends MailPoetTest {
|
|||||||
expect($this->view_in_browser->_validateBrowserPreviewData($data))->equals($data);
|
expect($this->view_in_browser->_validateBrowserPreviewData($data))->equals($data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function testItSetsSubscriberToLoggedInWPUserWhenPreviewIsEnabled() {
|
||||||
|
$data = (object)array_merge(
|
||||||
|
$this->browser_preview_data,
|
||||||
|
array(
|
||||||
|
'queue' => $this->queue,
|
||||||
|
'subscriber' => null,
|
||||||
|
'newsletter' => $this->newsletter
|
||||||
|
)
|
||||||
|
);
|
||||||
|
$data->preview = true;
|
||||||
|
wp_set_current_user(1);
|
||||||
|
$result = $this->view_in_browser->_validateBrowserPreviewData($data);
|
||||||
|
expect($result->subscriber->id)->equals(1);
|
||||||
|
}
|
||||||
|
|
||||||
function testItProcessesBrowserPreviewData() {
|
function testItProcessesBrowserPreviewData() {
|
||||||
$processed_data = $this->view_in_browser->_processBrowserPreviewData($this->browser_preview_data);
|
$processed_data = $this->view_in_browser->_processBrowserPreviewData($this->browser_preview_data);
|
||||||
expect($processed_data->queue->id)->equals($this->queue->id);
|
expect($processed_data->queue->id)->equals($this->queue->id);
|
||||||
|
Reference in New Issue
Block a user