Use Doctrine in form editor

[MAILPOET-3644]
This commit is contained in:
Pavel Dohnal
2021-09-15 13:35:45 +02:00
committed by Veljko V
parent ca88c96470
commit 942d756b9f
2 changed files with 25 additions and 15 deletions

View File

@@ -10,6 +10,7 @@ use MailPoet\Entities\FormEntity;
use MailPoet\Entities\SegmentEntity; use MailPoet\Entities\SegmentEntity;
use MailPoet\Form\Block; use MailPoet\Form\Block;
use MailPoet\Form\FormFactory; use MailPoet\Form\FormFactory;
use MailPoet\Form\FormsRepository;
use MailPoet\Form\Renderer as FormRenderer; use MailPoet\Form\Renderer as FormRenderer;
use MailPoet\Form\Templates\TemplateRepository; use MailPoet\Form\Templates\TemplateRepository;
use MailPoet\Form\Templates\Templates\Template10BelowPages; use MailPoet\Form\Templates\Templates\Template10BelowPages;
@@ -74,7 +75,7 @@ use MailPoet\Form\Templates\Templates\Template7SlideIn;
use MailPoet\Form\Templates\Templates\Template7Widget; use MailPoet\Form\Templates\Templates\Template7Widget;
use MailPoet\Form\Util\CustomFonts; use MailPoet\Form\Util\CustomFonts;
use MailPoet\Form\Util\Export; use MailPoet\Form\Util\Export;
use MailPoet\Models\Form; use MailPoet\NotFoundException;
use MailPoet\Router\Endpoints\FormPreview; use MailPoet\Router\Endpoints\FormPreview;
use MailPoet\Router\Router; use MailPoet\Router\Router;
use MailPoet\Segments\SegmentsSimpleListRepository; use MailPoet\Segments\SegmentsSimpleListRepository;
@@ -120,6 +121,9 @@ class FormEditor {
/** @var SegmentsSimpleListRepository */ /** @var SegmentsSimpleListRepository */
private $segmentsListRepository; private $segmentsListRepository;
/** @var FormsRepository */
private $formsRepository;
private $activeTemplates = [ private $activeTemplates = [
FormEntity::DISPLAY_TYPE_POPUP => [ FormEntity::DISPLAY_TYPE_POPUP => [
Template1Popup::ID, Template1Popup::ID,
@@ -205,6 +209,7 @@ class FormEditor {
UserFlagsController $userFlags, UserFlagsController $userFlags,
WPPostListLoader $wpPostListLoader, WPPostListLoader $wpPostListLoader,
TemplateRepository $templateRepository, TemplateRepository $templateRepository,
FormsRepository $formsRepository,
SegmentsSimpleListRepository $segmentsListRepository SegmentsSimpleListRepository $segmentsListRepository
) { ) {
$this->pageRenderer = $pageRenderer; $this->pageRenderer = $pageRenderer;
@@ -219,6 +224,7 @@ class FormEditor {
$this->userFlags = $userFlags; $this->userFlags = $userFlags;
$this->wpPostListLoader = $wpPostListLoader; $this->wpPostListLoader = $wpPostListLoader;
$this->segmentsListRepository = $segmentsListRepository; $this->segmentsListRepository = $segmentsListRepository;
$this->formsRepository = $formsRepository;
} }
public function render() { public function render() {
@@ -231,9 +237,12 @@ class FormEditor {
} }
$form = $this->getFormData((int)$_GET['id']); $form = $this->getFormData((int)$_GET['id']);
$customFields = $this->customFieldsRepository->findAll(); $customFields = $this->customFieldsRepository->findAll();
if (!$form instanceof FormEntity) {
throw new NotFoundException('Form does not exist');
}
$dateTypes = $this->dateBlock->getDateTypes(); $dateTypes = $this->dateBlock->getDateTypes();
$data = [ $data = [
'form' => $form, 'form' => $form->toArray(),
'form_exports' => [ 'form_exports' => [
'php' => Export::get('php', $form), 'php' => Export::get('php', $form),
'iframe' => Export::get('iframe', $form), 'iframe' => Export::get('iframe', $form),
@@ -352,17 +361,16 @@ class FormEditor {
return $translations; return $translations;
} }
private function getFormData(int $id) { private function getFormData(int $id): ?FormEntity {
$form = Form::findOne($id); $form = $this->formsRepository->findOneById($id);
if (!$form instanceof Form) { if (!$form instanceof FormEntity) {
return null; return null;
} }
$form = $form->asArray(); $form->setStyles($this->formRenderer->getCustomStyles($form));
$form['styles'] = $this->formRenderer->getCustomStyles($form);
// Use empty settings in case they are corrupted or missing // Use empty settings in case they are corrupted or missing
if (!is_array($form['settings'])) { if (!is_array($form->getSettings())) {
$initialFormTemplate = $this->templatesRepository->getFormTemplate(TemplateRepository::INITIAL_FORM_TEMPLATE); $initialFormTemplate = $this->templatesRepository->getFormTemplate(TemplateRepository::INITIAL_FORM_TEMPLATE);
$form['settings'] = $initialFormTemplate->getSettings(); $form->setSettings($initialFormTemplate->getSettings());
} }
return $form; return $form;
} }

View File

@@ -3,11 +3,12 @@
namespace MailPoet\Form\Util; namespace MailPoet\Form\Util;
use MailPoet\Config\Env; use MailPoet\Config\Env;
use MailPoet\Entities\FormEntity;
use MailPoet\Form\Widget; use MailPoet\Form\Widget;
use MailPoet\WP\Functions as WPFunctions; use MailPoet\WP\Functions as WPFunctions;
class Export { class Export {
public static function getAll($form = null) { public static function getAll(FormEntity $form = null) {
return [ return [
'html' => static::get('html', $form), 'html' => static::get('html', $form),
'php' => static::get('php', $form), 'php' => static::get('php', $form),
@@ -16,12 +17,13 @@ class Export {
]; ];
} }
public static function get($type = 'html', $form = null) { public static function get($type = 'html', FormEntity $form = null) {
if (!$form instanceof FormEntity) return '';
switch ($type) { switch ($type) {
case 'iframe': case 'iframe':
// generate url to load iframe's content // generate url to load iframe's content
$iframeUrl = WPFunctions::get()->addQueryArg([ $iframeUrl = WPFunctions::get()->addQueryArg([
'mailpoet_form_iframe' => $form['id'], 'mailpoet_form_iframe' => $form->getId(),
], WPFunctions::get()->siteUrl()); ], WPFunctions::get()->siteUrl());
// generate iframe // generate iframe
@@ -47,7 +49,7 @@ class Export {
$output = [ $output = [
'$form_widget = new \MailPoet\Form\Widget();', '$form_widget = new \MailPoet\Form\Widget();',
'echo $form_widget->widget(array(\'form\' => ' . 'echo $form_widget->widget(array(\'form\' => ' .
(int)$form['id'] . (int)$form->getId() .
', \'form_type\' => \'php\'));', ', \'form_type\' => \'php\'));',
]; ];
return join("\n", $output); return join("\n", $output);
@@ -93,13 +95,13 @@ class Export {
$formWidget = new Widget(); $formWidget = new Widget();
$output[] = $formWidget->widget([ $output[] = $formWidget->widget([
'form' => (int)$form['id'], 'form' => (int)$form->getId(),
'form_type' => 'php', 'form_type' => 'php',
]); ]);
return join("\n", $output); return join("\n", $output);
case 'shortcode': case 'shortcode':
return '[mailpoet_form id="' . (int)$form['id'] . '"]'; return '[mailpoet_form id="' . (int)$form->getId() . '"]';
} }
} }
} }