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 = Newsletter::findOne($id);
|
||||
$newsletter = $this->getNewsletter($data);
|
||||
if (!$newsletter) {
|
||||
return $this->errorResponse([
|
||||
APIError::NOT_FOUND => __('This email does not exist.', 'mailpoet'),
|
||||
@@ -440,7 +439,7 @@ class Newsletters extends APIEndpoint {
|
||||
} catch (\Throwable $e) {
|
||||
return $this->errorResponse([$e->getCode() => $e->getMessage()]);
|
||||
}
|
||||
return $this->successResponse($newsletter->asArray());
|
||||
return $this->successResponse($this->newslettersResponseBuilder->build($newsletter));
|
||||
}
|
||||
|
||||
public function listing($data = []) {
|
||||
|
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace MailPoet\Newsletter\Preview;
|
||||
|
||||
use MailPoet\Entities\NewsletterEntity;
|
||||
use MailPoet\Mailer\Mailer;
|
||||
use MailPoet\Mailer\MetaInfo;
|
||||
use MailPoet\Models\Newsletter;
|
||||
@@ -30,12 +31,18 @@ class SendPreviewController {
|
||||
$this->wp = $wp;
|
||||
}
|
||||
|
||||
public function sendPreview(Newsletter $newsletter, string $emailAddress) {
|
||||
$renderer = new Renderer($newsletter, $preview = true);
|
||||
public function sendPreview(NewsletterEntity $newsletter, string $emailAddress) {
|
||||
// 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();
|
||||
$divider = '***MailPoet***';
|
||||
$dataForShortcodes = array_merge(
|
||||
[$newsletter->subject],
|
||||
[$newsletter->getSubject()],
|
||||
$renderedNewsletter
|
||||
);
|
||||
|
||||
@@ -43,7 +50,7 @@ class SendPreviewController {
|
||||
|
||||
$subscriber = Subscriber::getCurrentWPUser() ?: false;
|
||||
$shortcodes = new Shortcodes(
|
||||
$newsletter,
|
||||
$newsletterModel,
|
||||
$subscriber,
|
||||
$queue = false,
|
||||
$wpUserPreview = true
|
||||
@@ -54,7 +61,7 @@ class SendPreviewController {
|
||||
$renderedNewsletter['body']['html'],
|
||||
$renderedNewsletter['body']['text']
|
||||
) = explode($divider, $shortcodes->replace($body));
|
||||
$renderedNewsletter['id'] = $newsletter->id;
|
||||
$renderedNewsletter['id'] = $newsletter->getId();
|
||||
|
||||
$extraParams = [
|
||||
'unsubscribe_url' => $this->wp->homeUrl(),
|
||||
|
@@ -4,31 +4,34 @@ namespace MailPoet\Newsletter\Preview;
|
||||
|
||||
use Codeception\Stub\Expected;
|
||||
use Codeception\Util\Fixtures;
|
||||
use MailPoet\Entities\NewsletterEntity;
|
||||
use MailPoet\Mailer\Mailer;
|
||||
use MailPoet\Mailer\MailerError;
|
||||
use MailPoet\Mailer\MetaInfo;
|
||||
use MailPoet\Models\Newsletter;
|
||||
use MailPoet\Newsletter\Url;
|
||||
use MailPoet\Subscription\SubscriptionUrlFactory;
|
||||
use MailPoet\Util\Security;
|
||||
use MailPoet\WP\Functions as WPFunctions;
|
||||
|
||||
class SendPrevewControllerTest extends \MailPoetTest {
|
||||
class SendPreviewControllerTest extends \MailPoetTest {
|
||||
/** @var SubscriptionUrlFactory */
|
||||
private $subscriptionUrlFactory;
|
||||
|
||||
/** @var Newsletter */
|
||||
/** @var NewsletterEntity */
|
||||
private $newsletter;
|
||||
|
||||
public function _before() {
|
||||
parent::_before();
|
||||
$this->subscriptionUrlFactory = SubscriptionUrlFactory::getInstance();
|
||||
$this->newsletter = Newsletter::createOrUpdate([
|
||||
'subject' => 'My Standard Newsletter',
|
||||
'preheader' => 'preheader',
|
||||
'body' => Fixtures::get('newsletter_body_template'),
|
||||
'type' => Newsletter::TYPE_STANDARD,
|
||||
]);
|
||||
|
||||
$newsletter = new NewsletterEntity();
|
||||
$newsletter->setType(NewsletterEntity::TYPE_STANDARD);
|
||||
$newsletter->setSubject('My Standard Newsletter');
|
||||
$newsletter->setPreheader('preheader');
|
||||
$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() {
|
||||
@@ -37,7 +40,12 @@ class SendPrevewControllerTest extends \MailPoetTest {
|
||||
function ($newsletter, $subscriber, $extraParams) {
|
||||
$unsubscribeLink = $this->subscriptionUrlFactory->getConfirmUnsubscribeUrl(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;
|
||||
|
||||
expect(is_array($newsletter))->true();
|
Reference in New Issue
Block a user