Create a new form from template
[MAILPOET-2987]
This commit is contained in:
@ -20,103 +20,10 @@ use MailPoet\Settings\Pages;
|
|||||||
use MailPoet\WP\Functions as WPFunctions;
|
use MailPoet\WP\Functions as WPFunctions;
|
||||||
|
|
||||||
class FormEditor {
|
class FormEditor {
|
||||||
/** @var PageRenderer */
|
const TEMPLATES = [
|
||||||
private $pageRenderer;
|
'my-fancy-template1' => [
|
||||||
|
|
||||||
/** @var CustomFieldsRepository */
|
|
||||||
private $customFieldsRepository;
|
|
||||||
|
|
||||||
/** @var CustomFieldsResponseBuilder */
|
|
||||||
private $customFieldsResponseBuilder;
|
|
||||||
|
|
||||||
/** @var FormRenderer */
|
|
||||||
private $formRenderer;
|
|
||||||
|
|
||||||
/** @var Block\Date */
|
|
||||||
private $dateBlock;
|
|
||||||
|
|
||||||
/** @var WPFunctions */
|
|
||||||
private $wp;
|
|
||||||
|
|
||||||
/** @var FormFactory */
|
|
||||||
private $formsFactory;
|
|
||||||
|
|
||||||
/** @var Localizer */
|
|
||||||
private $localizer;
|
|
||||||
|
|
||||||
/** @var FeaturesController */
|
|
||||||
private $flagsController;
|
|
||||||
|
|
||||||
public function __construct(
|
|
||||||
PageRenderer $pageRenderer,
|
|
||||||
CustomFieldsRepository $customFieldsRepository,
|
|
||||||
CustomFieldsResponseBuilder $customFieldsResponseBuilder,
|
|
||||||
FormRenderer $formRenderer,
|
|
||||||
Block\Date $dateBlock,
|
|
||||||
WPFunctions $wp,
|
|
||||||
FormFactory $formsFactory,
|
|
||||||
FeaturesController $flagsController,
|
|
||||||
Localizer $localizer
|
|
||||||
) {
|
|
||||||
$this->pageRenderer = $pageRenderer;
|
|
||||||
$this->customFieldsRepository = $customFieldsRepository;
|
|
||||||
$this->customFieldsResponseBuilder = $customFieldsResponseBuilder;
|
|
||||||
$this->formRenderer = $formRenderer;
|
|
||||||
$this->dateBlock = $dateBlock;
|
|
||||||
$this->wp = $wp;
|
|
||||||
$this->formsFactory = $formsFactory;
|
|
||||||
$this->localizer = $localizer;
|
|
||||||
$this->flagsController = $flagsController;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function render() {
|
|
||||||
if (!isset($_GET['id']) && !isset($_GET['action'])) {
|
|
||||||
$this->renderTemplateSelection();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if ($_GET['action'] === 'create') {
|
|
||||||
$this->createEmptyForm();
|
|
||||||
}
|
|
||||||
$form = Form::findOne((int)$_GET['id']);
|
|
||||||
if ($form instanceof Form) {
|
|
||||||
$form = $form->asArray();
|
|
||||||
}
|
|
||||||
$form['styles'] = $this->formRenderer->getCustomStyles($form);
|
|
||||||
$customFields = $this->customFieldsRepository->findAll();
|
|
||||||
$dateTypes = $this->dateBlock->getDateTypes();
|
|
||||||
$data = [
|
|
||||||
'form' => $form,
|
|
||||||
'form_exports' => [
|
|
||||||
'php' => Export::get('php', $form),
|
|
||||||
'iframe' => Export::get('iframe', $form),
|
|
||||||
'shortcode' => Export::get('shortcode', $form),
|
|
||||||
],
|
|
||||||
'pages' => Pages::getAll(),
|
|
||||||
'segments' => Segment::getSegmentsWithSubscriberCount(),
|
|
||||||
'styles' => $this->formRenderer->getCustomStyles($form),
|
|
||||||
'date_types' => array_map(function ($label, $value) {
|
|
||||||
return [
|
|
||||||
'label' => $label,
|
|
||||||
'value' => $value,
|
|
||||||
];
|
|
||||||
}, $dateTypes, array_keys($dateTypes)),
|
|
||||||
'date_formats' => $this->dateBlock->getDateFormats(),
|
|
||||||
'month_names' => $this->dateBlock->getMonthNames(),
|
|
||||||
'sub_menu' => 'mailpoet-forms',
|
|
||||||
'custom_fields' => $this->customFieldsResponseBuilder->buildBatch($customFields),
|
|
||||||
'preview_page_url' => $this->getPreviewPageUrl(),
|
|
||||||
'custom_fonts' => CustomFonts::FONTS,
|
|
||||||
'translations' => $this->getGutenbergScriptsTranslations(),
|
|
||||||
];
|
|
||||||
$this->wp->wpEnqueueMedia();
|
|
||||||
$this->pageRenderer->displayPage('form/editor.html', $data);
|
|
||||||
}
|
|
||||||
|
|
||||||
private function renderTemplateSelection() {
|
|
||||||
$templates = [
|
|
||||||
[
|
|
||||||
'id' => 'my-fancy-template1',
|
'id' => 'my-fancy-template1',
|
||||||
'name' => 'My First Form',
|
'name' => 'My Fancy Form',
|
||||||
'body' => [
|
'body' => [
|
||||||
[
|
[
|
||||||
'type' => 'columns',
|
'type' => 'columns',
|
||||||
@ -188,7 +95,7 @@ class FormEditor {
|
|||||||
],
|
],
|
||||||
],
|
],
|
||||||
'settings' => [
|
'settings' => [
|
||||||
'segments' => ['3'],
|
'segments' => [],
|
||||||
'on_success' => 'message',
|
'on_success' => 'message',
|
||||||
'success_message' => 'Check your inbox or spam folder to confirm your subscription.',
|
'success_message' => 'Check your inbox or spam folder to confirm your subscription.',
|
||||||
'success_page' => '5',
|
'success_page' => '5',
|
||||||
@ -233,8 +140,103 @@ class FormEditor {
|
|||||||
',
|
',
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
|
/** @var PageRenderer */
|
||||||
|
private $pageRenderer;
|
||||||
|
|
||||||
|
/** @var CustomFieldsRepository */
|
||||||
|
private $customFieldsRepository;
|
||||||
|
|
||||||
|
/** @var CustomFieldsResponseBuilder */
|
||||||
|
private $customFieldsResponseBuilder;
|
||||||
|
|
||||||
|
/** @var FormRenderer */
|
||||||
|
private $formRenderer;
|
||||||
|
|
||||||
|
/** @var Block\Date */
|
||||||
|
private $dateBlock;
|
||||||
|
|
||||||
|
/** @var WPFunctions */
|
||||||
|
private $wp;
|
||||||
|
|
||||||
|
/** @var FormFactory */
|
||||||
|
private $formsFactory;
|
||||||
|
|
||||||
|
/** @var Localizer */
|
||||||
|
private $localizer;
|
||||||
|
|
||||||
|
/** @var FeaturesController */
|
||||||
|
private $flagsController;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
PageRenderer $pageRenderer,
|
||||||
|
CustomFieldsRepository $customFieldsRepository,
|
||||||
|
CustomFieldsResponseBuilder $customFieldsResponseBuilder,
|
||||||
|
FormRenderer $formRenderer,
|
||||||
|
Block\Date $dateBlock,
|
||||||
|
WPFunctions $wp,
|
||||||
|
FormFactory $formsFactory,
|
||||||
|
FeaturesController $flagsController,
|
||||||
|
Localizer $localizer
|
||||||
|
) {
|
||||||
|
$this->pageRenderer = $pageRenderer;
|
||||||
|
$this->customFieldsRepository = $customFieldsRepository;
|
||||||
|
$this->customFieldsResponseBuilder = $customFieldsResponseBuilder;
|
||||||
|
$this->formRenderer = $formRenderer;
|
||||||
|
$this->dateBlock = $dateBlock;
|
||||||
|
$this->wp = $wp;
|
||||||
|
$this->formsFactory = $formsFactory;
|
||||||
|
$this->localizer = $localizer;
|
||||||
|
$this->flagsController = $flagsController;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function render() {
|
||||||
|
if (!isset($_GET['id']) && !isset($_GET['action'])) {
|
||||||
|
$this->renderTemplateSelection();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (isset($_GET['action']) && $_GET['action'] === 'create') {
|
||||||
|
$this->createForm($_GET['template-id']);
|
||||||
|
}
|
||||||
|
$form = Form::findOne((int)$_GET['id']);
|
||||||
|
if ($form instanceof Form) {
|
||||||
|
$form = $form->asArray();
|
||||||
|
}
|
||||||
|
$form['styles'] = $this->formRenderer->getCustomStyles($form);
|
||||||
|
$customFields = $this->customFieldsRepository->findAll();
|
||||||
|
$dateTypes = $this->dateBlock->getDateTypes();
|
||||||
|
$data = [
|
||||||
|
'form' => $form,
|
||||||
|
'form_exports' => [
|
||||||
|
'php' => Export::get('php', $form),
|
||||||
|
'iframe' => Export::get('iframe', $form),
|
||||||
|
'shortcode' => Export::get('shortcode', $form),
|
||||||
|
],
|
||||||
|
'pages' => Pages::getAll(),
|
||||||
|
'segments' => Segment::getSegmentsWithSubscriberCount(),
|
||||||
|
'styles' => $this->formRenderer->getCustomStyles($form),
|
||||||
|
'date_types' => array_map(function ($label, $value) {
|
||||||
|
return [
|
||||||
|
'label' => $label,
|
||||||
|
'value' => $value,
|
||||||
|
];
|
||||||
|
}, $dateTypes, array_keys($dateTypes)),
|
||||||
|
'date_formats' => $this->dateBlock->getDateFormats(),
|
||||||
|
'month_names' => $this->dateBlock->getMonthNames(),
|
||||||
|
'sub_menu' => 'mailpoet-forms',
|
||||||
|
'custom_fields' => $this->customFieldsResponseBuilder->buildBatch($customFields),
|
||||||
|
'preview_page_url' => $this->getPreviewPageUrl(),
|
||||||
|
'custom_fonts' => CustomFonts::FONTS,
|
||||||
|
'translations' => $this->getGutenbergScriptsTranslations(),
|
||||||
|
];
|
||||||
|
$this->wp->wpEnqueueMedia();
|
||||||
|
$this->pageRenderer->displayPage('form/editor.html', $data);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function renderTemplateSelection() {
|
||||||
|
$templates = array_values(self::TEMPLATES);
|
||||||
if (empty($templates) || !$this->flagsController->isSupported(FeaturesController::TEMPLATES_SELECTION)) {
|
if (empty($templates) || !$this->flagsController->isSupported(FeaturesController::TEMPLATES_SELECTION)) {
|
||||||
$this->createEmptyForm();
|
$this->createForm();
|
||||||
}
|
}
|
||||||
$data = [
|
$data = [
|
||||||
'templates' => $templates,
|
'templates' => $templates,
|
||||||
@ -242,8 +244,13 @@ class FormEditor {
|
|||||||
$this->pageRenderer->displayPage('form/template_selection.html', $data);
|
$this->pageRenderer->displayPage('form/template_selection.html', $data);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function createEmptyForm() {
|
private function createForm($templateId = null) {
|
||||||
|
if (!is_null($templateId) && isset(self::TEMPLATES[$templateId])) {
|
||||||
|
$form = $this->formsFactory->createFormFromTemplate(self::TEMPLATES[$templateId]);
|
||||||
|
}
|
||||||
|
if (!isset($form)) {
|
||||||
$form = $this->formsFactory->createEmptyForm();
|
$form = $this->formsFactory->createEmptyForm();
|
||||||
|
}
|
||||||
|
|
||||||
$this->wp->wpSafeRedirect(
|
$this->wp->wpSafeRedirect(
|
||||||
$this->wp->getSiteUrl(null,
|
$this->wp->getSiteUrl(null,
|
||||||
|
@ -5,6 +5,13 @@ namespace MailPoet\Form;
|
|||||||
use MailPoet\Models\Form;
|
use MailPoet\Models\Form;
|
||||||
|
|
||||||
class FormFactory {
|
class FormFactory {
|
||||||
|
public function createFormFromTemplate(array $template) {
|
||||||
|
if (isset($template['id'])) {
|
||||||
|
unset($template['id']);
|
||||||
|
}
|
||||||
|
return Form::createOrUpdate($template);
|
||||||
|
}
|
||||||
|
|
||||||
/** @return Form */
|
/** @return Form */
|
||||||
public function createEmptyForm() {
|
public function createEmptyForm() {
|
||||||
$data = [
|
$data = [
|
||||||
@ -42,6 +49,6 @@ class FormFactory {
|
|||||||
'segments_selected_by' => 'admin',
|
'segments_selected_by' => 'admin',
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
return Form::createOrUpdate($data);
|
return $this->createFormFromTemplate($data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user