Partially use Doctrine for Newsletter::sendPreview()
[MAILPOET-2646]
This commit is contained in:
@@ -425,8 +425,7 @@ class Newsletters extends APIEndpoint {
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$id = (isset($data['id'])) ? (int)$data['id'] : false;
|
$newsletter = $this->getNewsletter($data);
|
||||||
$newsletter = Newsletter::findOne($id);
|
|
||||||
if (!$newsletter) {
|
if (!$newsletter) {
|
||||||
return $this->errorResponse([
|
return $this->errorResponse([
|
||||||
APIError::NOT_FOUND => __('This email does not exist.', 'mailpoet'),
|
APIError::NOT_FOUND => __('This email does not exist.', 'mailpoet'),
|
||||||
@@ -440,7 +439,7 @@ class Newsletters extends APIEndpoint {
|
|||||||
} catch (\Throwable $e) {
|
} catch (\Throwable $e) {
|
||||||
return $this->errorResponse([$e->getCode() => $e->getMessage()]);
|
return $this->errorResponse([$e->getCode() => $e->getMessage()]);
|
||||||
}
|
}
|
||||||
return $this->successResponse($newsletter->asArray());
|
return $this->successResponse($this->newslettersResponseBuilder->build($newsletter));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function listing($data = []) {
|
public function listing($data = []) {
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace MailPoet\Newsletter\Preview;
|
namespace MailPoet\Newsletter\Preview;
|
||||||
|
|
||||||
|
use MailPoet\Entities\NewsletterEntity;
|
||||||
use MailPoet\Mailer\Mailer;
|
use MailPoet\Mailer\Mailer;
|
||||||
use MailPoet\Mailer\MetaInfo;
|
use MailPoet\Mailer\MetaInfo;
|
||||||
use MailPoet\Models\Newsletter;
|
use MailPoet\Models\Newsletter;
|
||||||
@@ -30,12 +31,18 @@ class SendPreviewController {
|
|||||||
$this->wp = $wp;
|
$this->wp = $wp;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function sendPreview(Newsletter $newsletter, string $emailAddress) {
|
public function sendPreview(NewsletterEntity $newsletter, string $emailAddress) {
|
||||||
$renderer = new Renderer($newsletter, $preview = true);
|
// Renderer and Shortcodes need old Newsletter model, until they're rewritten to use Doctrine
|
||||||
|
$newsletterModel = Newsletter::findOne();
|
||||||
|
if (!$newsletterModel) {
|
||||||
|
throw new SendPreviewException("Newsletter with ID '{$newsletter->getId()}' not found");
|
||||||
|
}
|
||||||
|
|
||||||
|
$renderer = new Renderer($newsletterModel, $preview = true);
|
||||||
$renderedNewsletter = $renderer->render();
|
$renderedNewsletter = $renderer->render();
|
||||||
$divider = '***MailPoet***';
|
$divider = '***MailPoet***';
|
||||||
$dataForShortcodes = array_merge(
|
$dataForShortcodes = array_merge(
|
||||||
[$newsletter->subject],
|
[$newsletter->getSubject()],
|
||||||
$renderedNewsletter
|
$renderedNewsletter
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -43,7 +50,7 @@ class SendPreviewController {
|
|||||||
|
|
||||||
$subscriber = Subscriber::getCurrentWPUser() ?: false;
|
$subscriber = Subscriber::getCurrentWPUser() ?: false;
|
||||||
$shortcodes = new Shortcodes(
|
$shortcodes = new Shortcodes(
|
||||||
$newsletter,
|
$newsletterModel,
|
||||||
$subscriber,
|
$subscriber,
|
||||||
$queue = false,
|
$queue = false,
|
||||||
$wpUserPreview = true
|
$wpUserPreview = true
|
||||||
@@ -54,7 +61,7 @@ class SendPreviewController {
|
|||||||
$renderedNewsletter['body']['html'],
|
$renderedNewsletter['body']['html'],
|
||||||
$renderedNewsletter['body']['text']
|
$renderedNewsletter['body']['text']
|
||||||
) = explode($divider, $shortcodes->replace($body));
|
) = explode($divider, $shortcodes->replace($body));
|
||||||
$renderedNewsletter['id'] = $newsletter->id;
|
$renderedNewsletter['id'] = $newsletter->getId();
|
||||||
|
|
||||||
$extraParams = [
|
$extraParams = [
|
||||||
'unsubscribe_url' => $this->wp->homeUrl(),
|
'unsubscribe_url' => $this->wp->homeUrl(),
|
||||||
|
@@ -4,31 +4,34 @@ namespace MailPoet\Newsletter\Preview;
|
|||||||
|
|
||||||
use Codeception\Stub\Expected;
|
use Codeception\Stub\Expected;
|
||||||
use Codeception\Util\Fixtures;
|
use Codeception\Util\Fixtures;
|
||||||
|
use MailPoet\Entities\NewsletterEntity;
|
||||||
use MailPoet\Mailer\Mailer;
|
use MailPoet\Mailer\Mailer;
|
||||||
use MailPoet\Mailer\MailerError;
|
use MailPoet\Mailer\MailerError;
|
||||||
use MailPoet\Mailer\MetaInfo;
|
use MailPoet\Mailer\MetaInfo;
|
||||||
use MailPoet\Models\Newsletter;
|
|
||||||
use MailPoet\Newsletter\Url;
|
use MailPoet\Newsletter\Url;
|
||||||
use MailPoet\Subscription\SubscriptionUrlFactory;
|
use MailPoet\Subscription\SubscriptionUrlFactory;
|
||||||
|
use MailPoet\Util\Security;
|
||||||
use MailPoet\WP\Functions as WPFunctions;
|
use MailPoet\WP\Functions as WPFunctions;
|
||||||
|
|
||||||
class SendPrevewControllerTest extends \MailPoetTest {
|
class SendPreviewControllerTest extends \MailPoetTest {
|
||||||
/** @var SubscriptionUrlFactory */
|
/** @var SubscriptionUrlFactory */
|
||||||
private $subscriptionUrlFactory;
|
private $subscriptionUrlFactory;
|
||||||
|
|
||||||
/** @var Newsletter */
|
/** @var NewsletterEntity */
|
||||||
private $newsletter;
|
private $newsletter;
|
||||||
|
|
||||||
public function _before() {
|
public function _before() {
|
||||||
parent::_before();
|
parent::_before();
|
||||||
$this->subscriptionUrlFactory = SubscriptionUrlFactory::getInstance();
|
$this->subscriptionUrlFactory = SubscriptionUrlFactory::getInstance();
|
||||||
$this->newsletter = Newsletter::createOrUpdate([
|
$newsletter = new NewsletterEntity();
|
||||||
'subject' => 'My Standard Newsletter',
|
$newsletter->setType(NewsletterEntity::TYPE_STANDARD);
|
||||||
'preheader' => 'preheader',
|
$newsletter->setSubject('My Standard Newsletter');
|
||||||
'body' => Fixtures::get('newsletter_body_template'),
|
$newsletter->setPreheader('preheader');
|
||||||
'type' => Newsletter::TYPE_STANDARD,
|
$newsletter->setBody(json_decode(Fixtures::get('newsletter_body_template'), true));
|
||||||
]);
|
$newsletter->setHash(Security::generateHash());
|
||||||
|
$this->entityManager->persist($newsletter);
|
||||||
|
$this->entityManager->flush();
|
||||||
|
$this->newsletter = $newsletter;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItCanSendAPreview() {
|
public function testItCanSendAPreview() {
|
||||||
@@ -37,7 +40,12 @@ class SendPrevewControllerTest extends \MailPoetTest {
|
|||||||
function ($newsletter, $subscriber, $extraParams) {
|
function ($newsletter, $subscriber, $extraParams) {
|
||||||
$unsubscribeLink = $this->subscriptionUrlFactory->getConfirmUnsubscribeUrl(null);
|
$unsubscribeLink = $this->subscriptionUrlFactory->getConfirmUnsubscribeUrl(null);
|
||||||
$manageLink = $this->subscriptionUrlFactory->getManageUrl(null);
|
$manageLink = $this->subscriptionUrlFactory->getManageUrl(null);
|
||||||
$viewInBrowserLink = Url::getViewInBrowserUrl($this->newsletter);
|
$viewInBrowserLink = Url::getViewInBrowserUrl(
|
||||||
|
(object)[
|
||||||
|
'id' => $this->newsletter->getId(),
|
||||||
|
'hash' => $this->newsletter->getHash(),
|
||||||
|
]
|
||||||
|
);
|
||||||
$mailerMetaInfo = new MetaInfo;
|
$mailerMetaInfo = new MetaInfo;
|
||||||
|
|
||||||
expect(is_array($newsletter))->true();
|
expect(is_array($newsletter))->true();
|
Reference in New Issue
Block a user