Add ConfirmationEmailCustomizer class and confirmation email template
MAILPOET-4649
This commit is contained in:
committed by
Aschepikov
parent
6541c20466
commit
d19f5dc732
@@ -365,6 +365,7 @@ class ContainerConfigurator implements IContainerConfigurator {
|
|||||||
$container->autowire(\MailPoet\Subscribers\ImportExport\PersonalDataExporters\NewsletterClicksExporter::class)->setPublic(true);
|
$container->autowire(\MailPoet\Subscribers\ImportExport\PersonalDataExporters\NewsletterClicksExporter::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\Subscribers\Statistics\SubscriberStatisticsRepository::class);
|
$container->autowire(\MailPoet\Subscribers\Statistics\SubscriberStatisticsRepository::class);
|
||||||
$container->autowire(\MailPoet\Subscribers\SubscribersCountsController::class)->setPublic(true);
|
$container->autowire(\MailPoet\Subscribers\SubscribersCountsController::class)->setPublic(true);
|
||||||
|
$container->autowire(\MailPoet\Subscribers\ConfirmationEmailCustomizer::class)->setPublic(true);
|
||||||
// Segments
|
// Segments
|
||||||
$container->autowire(\MailPoet\Segments\WooCommerce::class)->setPublic(true);
|
$container->autowire(\MailPoet\Segments\WooCommerce::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\Segments\WP::class)->setPublic(true);
|
$container->autowire(\MailPoet\Segments\WP::class)->setPublic(true);
|
||||||
|
@@ -30,6 +30,7 @@ class NewsletterEntity {
|
|||||||
const TYPE_NOTIFICATION_HISTORY = 'notification_history';
|
const TYPE_NOTIFICATION_HISTORY = 'notification_history';
|
||||||
const TYPE_WC_TRANSACTIONAL_EMAIL = 'wc_transactional';
|
const TYPE_WC_TRANSACTIONAL_EMAIL = 'wc_transactional';
|
||||||
const TYPE_RE_ENGAGEMENT = 're_engagement';
|
const TYPE_RE_ENGAGEMENT = 're_engagement';
|
||||||
|
const TYPE_CONFIRMATION_EMAIL_CUSTOMIZER = 'confirmation_email';
|
||||||
|
|
||||||
// standard newsletters
|
// standard newsletters
|
||||||
const STATUS_DRAFT = 'draft';
|
const STATUS_DRAFT = 'draft';
|
||||||
|
100
mailpoet/lib/Subscribers/ConfirmationEmailCustomizer.php
Normal file
100
mailpoet/lib/Subscribers/ConfirmationEmailCustomizer.php
Normal 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
Reference in New Issue
Block a user