Load form templates data for template selection page from repository

[MAILPOET-2985]
This commit is contained in:
Rostislav Wolny
2020-07-01 13:44:05 +02:00
committed by Veljko V
parent 14aa0b1393
commit b4dc778230
2 changed files with 33 additions and 125 deletions

View File

@@ -9,6 +9,7 @@ use MailPoet\CustomFields\CustomFieldsRepository;
use MailPoet\Form\Block;
use MailPoet\Form\FormFactory;
use MailPoet\Form\Renderer as FormRenderer;
use MailPoet\Form\Templates\TemplateRepository;
use MailPoet\Form\Util\CustomFonts;
use MailPoet\Form\Util\Export;
use MailPoet\Models\Form;
@@ -19,127 +20,6 @@ use MailPoet\Settings\Pages;
use MailPoet\WP\Functions as WPFunctions;
class FormEditor {
const TEMPLATES = [
'my-fancy-template1' => [
'id' => 'my-fancy-template1',
'name' => 'My Fancy Form',
'body' => [
[
'type' => 'columns',
'body' =>
[
[
'type' => 'column',
'params' => ['class_name' => '', 'vertical_alignment' => '', 'width' => '50'],
'body' => [
[
'type' => 'text',
'params' => ['label' => 'Email', 'class_name' => '', 'required' => '1'],
'id' => 'email',
'name' => 'Email',
'styles' => ['full_width' => '1'],
],
[
'type' => 'text',
'params' => ['label' => 'First name', 'class_name' => ''],
'id' => 'first_name',
'name' => 'First name',
'styles' => ['full_width' => '1'],
],
],
],
[
'type' => 'column',
'params' => ['class_name' => '', 'vertical_alignment' => '', 'width' => '50'],
'body' => [
[
'type' => 'paragraph',
'id' => 'paragraph',
'params' => [
'content' => 'Far far away, behind the word mountains, far from the countries Vokalia and Consonantia, there live the blind texts. Separated they live in Bookmarksgrove right at the coast of the Semantics, a large language ocean.',
'drop_cap' => '0',
'align' => 'left',
'font_size' => '',
'text_color' => '',
'background_color' => '',
'class_name' => '',
],
],
],
],
],
'params' => [
'vertical_alignment' => '',
'class_name' => '',
'text_color' => '',
'background_color' => '',
],
],
[
'type' => 'submit',
'params' => ['label' => 'Subscribe!', 'class_name' => ''],
'id' => 'submit',
'name' => 'Submit',
'styles' => [
'full_width' => '0',
'bold' => '0',
'background_color' => '#ff6900',
'font_size' => '36',
'font_color' => '#313131',
'border_size' => '1',
'border_radius' => '8',
'border_color' => '#f78da7',
'padding' => '5',
],
],
],
'settings' => [
'segments' => [],
'on_success' => 'message',
'success_message' => 'Check your inbox or spam folder to confirm your subscription.',
'success_page' => '5',
'segments_selected_by' => 'admin',
'alignment' => 'left',
'place_form_bellow_all_pages' => '',
'place_form_bellow_all_posts' => '',
'place_popup_form_on_all_pages' => '1',
'place_popup_form_on_all_posts' => '1',
'popup_form_delay' => '15',
'place_fixed_bar_form_on_all_pages' => '',
'place_fixed_bar_form_on_all_posts' => '',
'fixed_bar_form_delay' => '15',
'fixed_bar_form_position' => 'top',
'place_slide_in_form_on_all_pages' => '',
'place_slide_in_form_on_all_posts' => '',
'slide_in_form_delay' => '15',
'slide_in_form_position' => 'right',
'border_radius' => '0',
'border_size' => '0',
'form_padding' => '20',
'input_padding' => '5',
'below_post_styles' => ['width' => ['unit' => 'percent', 'value' => '100']],
'slide_in_styles' => ['width' => ['unit' => 'pixel', 'value' => '560']],
'fixed_bar_styles' => ['width' => ['unit' => 'percent', 'value' => '100']],
'popup_styles' => ['width' => ['unit' => 'pixel', 'value' => '560']],
'other_styles' => ['width' => ['unit' => 'percent', 'value' => '100']],
],
'styles' => '
/* form */.mailpoet_form {}
/* columns */.mailpoet_column_with_background { padding: 10px;}/* space between columns */.mailpoet_form_column:not(:first-child) { margin-left: 20px;}
/* input wrapper (label + input) */.mailpoet_paragraph { line-height:20px; margin-bottom: 20px;}
/* labels */.mailpoet_segment_label,.mailpoet_text_label,.mailpoet_textarea_label,.mailpoet_select_label,.mailpoet_radio_label,.mailpoet_checkbox_label,.mailpoet_list_label,.mailpoet_date_label { display:block; font-weight: normal;}
/* inputs */.mailpoet_text,.mailpoet_textarea,.mailpoet_select,.mailpoet_date_month,.mailpoet_date_day,.mailpoet_date_year,.mailpoet_date { display:block;}
.mailpoet_text,.mailpoet_textarea { width: 200px;}
.mailpoet_checkbox {}
.mailpoet_submit {}
.mailpoet_divider {}
.mailpoet_message {}
.mailpoet_form_loading { width: 30px; text-align: center; line-height: normal;}
.mailpoet_form_loading > span { width: 5px; height: 5px; background-color: #5b5b5b;}
',
],
];
/** @var PageRenderer */
private $pageRenderer;
@@ -164,6 +44,13 @@ class FormEditor {
/** @var Localizer */
private $localizer;
/** @var TemplateRepository */
private $templatesRepository;
private $activeTemplates = [
'demo_form',
];
public function __construct(
PageRenderer $pageRenderer,
CustomFieldsRepository $customFieldsRepository,
@@ -172,7 +59,8 @@ class FormEditor {
Block\Date $dateBlock,
WPFunctions $wp,
FormFactory $formsFactory,
Localizer $localizer
Localizer $localizer,
TemplateRepository $templateRepository
) {
$this->pageRenderer = $pageRenderer;
$this->customFieldsRepository = $customFieldsRepository;
@@ -182,6 +70,7 @@ class FormEditor {
$this->wp = $wp;
$this->formsFactory = $formsFactory;
$this->localizer = $localizer;
$this->templatesRepository = $templateRepository;
}
public function render() {
@@ -228,9 +117,16 @@ class FormEditor {
}
public function renderTemplateSelection() {
$templates = array_values(self::TEMPLATES);
$templateForms = $this->templatesRepository->getFormsForTemplates($this->activeTemplates);
$templatesData = [];
foreach ($templateForms as $templateId => $form) {
$templatesData[] = [
'id' => $templateId,
'name' => $form->getName(),
];
}
$data = [
'templates' => $templates,
'templates' => $templatesData,
];
$this->pageRenderer->displayPage('form/template_selection.html', $data);
}

View File

@@ -23,7 +23,7 @@ class TemplateRepository {
$this->settings = $settings;
}
public function getFormEntityForTemplate($templateId): FormEntity {
public function getFormEntityForTemplate(string $templateId): FormEntity {
if (!isset($this->templates[$templateId])) {
throw UnexpectedValueException::create()
->withErrors(["Template with id $templateId doesn't exist."]);
@@ -39,6 +39,18 @@ class TemplateRepository {
return $formEntity;
}
/**
* @param string[] $templateIds
* @return FormEntity[] associative array with template ids as keys
*/
public function getFormsForTemplates(array $templateIds): array {
$result = [];
foreach ($templateIds as $templateId) {
$result[$templateId] = $this->getFormEntityForTemplate($templateId);
}
return $result;
}
private function getDefaultSuccessMessage() {
if ($this->settings->get('signup_confirmation.enabled')) {
return __('Check your inbox or spam folder to confirm your subscription.', 'mailpoet');