Add ConfirmationEmailCustomizer class and confirmation email template

MAILPOET-4649
This commit is contained in:
Oluwaseun Olorunsola
2022-11-30 12:28:56 +01:00
committed by Aschepikov
parent 6541c20466
commit d19f5dc732
4 changed files with 601 additions and 0 deletions

View File

@@ -365,6 +365,7 @@ class ContainerConfigurator implements IContainerConfigurator {
$container->autowire(\MailPoet\Subscribers\ImportExport\PersonalDataExporters\NewsletterClicksExporter::class)->setPublic(true);
$container->autowire(\MailPoet\Subscribers\Statistics\SubscriberStatisticsRepository::class);
$container->autowire(\MailPoet\Subscribers\SubscribersCountsController::class)->setPublic(true);
$container->autowire(\MailPoet\Subscribers\ConfirmationEmailCustomizer::class)->setPublic(true);
// Segments
$container->autowire(\MailPoet\Segments\WooCommerce::class)->setPublic(true);
$container->autowire(\MailPoet\Segments\WP::class)->setPublic(true);

View File

@@ -30,6 +30,7 @@ class NewsletterEntity {
const TYPE_NOTIFICATION_HISTORY = 'notification_history';
const TYPE_WC_TRANSACTIONAL_EMAIL = 'wc_transactional';
const TYPE_RE_ENGAGEMENT = 're_engagement';
const TYPE_CONFIRMATION_EMAIL_CUSTOMIZER = 'confirmation_email';
// standard newsletters
const STATUS_DRAFT = 'draft';

View File

@@ -0,0 +1,100 @@
<?php
namespace MailPoet\Subscribers;
use MailPoet\Config\Env;
use MailPoet\Entities\NewsletterEntity;
use MailPoet\Newsletter\NewslettersRepository;
use MailPoet\Newsletter\Renderer\Renderer as NewsletterRenderer;
use MailPoet\Settings\SettingsController;
class ConfirmationEmailCustomizer {
const SETTING_EMAIL_ID = 'signup_confirmation.transactional_email_id';
const SETTING_ENABLE_EMAIL_CUSTOMIZER = 'signup_confirmation.use_mailpoet_editor';
/** @var SettingsController */
private $settings;
/** @var NewslettersRepository */
private $newslettersRepository;
/** @var NewsletterRenderer */
private $renderer;
public function __construct(
SettingsController $settings,
NewslettersRepository $newslettersRepository,
NewsletterRenderer $renderer
) {
$this->settings = $settings;
$this->newslettersRepository = $newslettersRepository;
$this->renderer = $renderer;
}
public function init() {
$savedEmailId = (bool)$this->settings->get(self::SETTING_EMAIL_ID, false);
if (!$savedEmailId) {
$email = $this->createNewsletter();
if (is_null($email)) return;
$this->settings->set(self::SETTING_EMAIL_ID, $email->getId());
}
}
private function createNewsletter(): ?NewsletterEntity {
$emailTemplate = $this->fetchEmailTemplate();
if (empty($emailTemplate)) {
// if it's not able to fetch email template, don't bother creating newsletter
return null;
}
$newsletter = new NewsletterEntity;
$newsletter->setType(NewsletterEntity::TYPE_CONFIRMATION_EMAIL_CUSTOMIZER);
$newsletter->setSubject($this->settings->get('signup_confirmation.subject', 'Confirm your subscription'));
$newsletter->setBody($emailTemplate);
$this->newslettersRepository->persist($newsletter);
$this->newslettersRepository->flush();
return $newsletter;
}
private function fetchEmailTemplate() {
$templateUrl = Env::$libPath . '/Subscribers/ConfirmationEmailTemplate/template-confirmation.json';
$templateString = file_get_contents($templateUrl);
$templateArr = json_decode((string)$templateString, true);
$template = (array)$templateArr;
return $template['body'];
}
public function getNewsletter(): NewsletterEntity {
$savedEmailId = $this->settings->get(self::SETTING_EMAIL_ID, false);
if (empty($savedEmailId)) {
$this->init();
$savedEmailId = $this->settings->get(self::SETTING_EMAIL_ID);
}
$newsletter = $this->newslettersRepository->findOneById($savedEmailId);
if (!$newsletter) {
// the newsletter should always be present in the database, if it s not we shouldn't keep using this feature
// we need to recreate the newsletter
$this->settings->set(self::SETTING_EMAIL_ID, false); // reset
$this->init();
return $this->getNewsletter();
}
return $newsletter;
}
public function render(NewsletterEntity $newsletter): ?array {
$renderedContent = $this->renderer->renderAsPreview($newsletter);
if (empty($renderedContent)) {
return null;
}
$renderedContent['subject'] = $newsletter->getSubject();
return $renderedContent;
}
}

File diff suppressed because one or more lines are too long