Merge pull request #795 from mailpoet/preview_link_update

Allows sharing of newsletter preview links [MAILPOET-791]
This commit is contained in:
stoletniy
2017-01-23 15:52:11 +03:00
committed by GitHub
6 changed files with 41 additions and 9 deletions

View File

@@ -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
); );
@@ -435,4 +434,4 @@ class Newsletters extends APIEndpoint {
); );
} }
} }
} }

View File

@@ -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',

View File

@@ -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:

View File

@@ -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)) ?

View File

@@ -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();

View File

@@ -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);