Partially use Doctrine for Newsletter::sendPreview()

[MAILPOET-2646]
This commit is contained in:
Jan Jakeš
2020-04-30 13:40:51 +02:00
committed by Veljko V
parent 79bfd8ec44
commit 5bfbabf25b
3 changed files with 33 additions and 19 deletions

View File

@@ -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 = []) {

View File

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

View File

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