diff --git a/lib/API/JSON/ResponseBuilders/CustomFieldsResponseBuilder.php b/lib/API/JSON/ResponseBuilders/CustomFieldsResponseBuilder.php new file mode 100644 index 0000000000..63d0223597 --- /dev/null +++ b/lib/API/JSON/ResponseBuilders/CustomFieldsResponseBuilder.php @@ -0,0 +1,31 @@ + $custom_field->getId(), + 'name' => $custom_field->getName(), + 'type' => $custom_field->getType(), + 'params' => $custom_field->getParams(), + 'created_at' => $custom_field->getCreatedAt()->format(DATE_ATOM), + 'updated_at' => $custom_field->getUpdatedAt()->format(DATE_ATOM), + ]; + } +} diff --git a/lib/AdminPages/Pages/FormEditor.php b/lib/AdminPages/Pages/FormEditor.php index 393c7b520c..4f24158e0c 100644 --- a/lib/AdminPages/Pages/FormEditor.php +++ b/lib/AdminPages/Pages/FormEditor.php @@ -3,10 +3,13 @@ namespace MailPoet\AdminPages\Pages; use MailPoet\AdminPages\PageRenderer; +use MailPoet\API\JSON\ResponseBuilders\CustomFieldsResponseBuilder; +use MailPoet\CustomFields\CustomFieldsRepository; use MailPoet\Features\FeaturesController; use MailPoet\Form\Block; use MailPoet\Form\Renderer as FormRenderer; use MailPoet\Form\Util\Export; +use MailPoet\Models\CustomField; use MailPoet\Models\Form; use MailPoet\Models\Segment; use MailPoet\Settings\Pages; @@ -18,9 +21,22 @@ class FormEditor { /** @var FeaturesController */ private $features_controller; - function __construct(PageRenderer $page_renderer, FeaturesController $features_controller) { + /** @var CustomFieldsRepository */ + private $custom_fields_repository; + + /** @var CustomFieldsResponseBuilder */ + private $custom_fields_response_builder; + + function __construct( + PageRenderer $page_renderer, + FeaturesController $features_controller, + CustomFieldsRepository $custom_fields_repository, + CustomFieldsResponseBuilder $custom_fields_response_builder + ) { $this->page_renderer = $page_renderer; $this->features_controller = $features_controller; + $this->custom_fields_repository = $custom_fields_repository; + $this->custom_fields_response_builder = $custom_fields_response_builder; } function render() { @@ -48,6 +64,8 @@ class FormEditor { if ($this->features_controller->isSupported(FeaturesController::NEW_FORM_EDITOR)) { $data['form']['styles'] = FormRenderer::getStyles($form); + $custom_fields = $this->custom_fields_repository->findAll(); + $data['custom_fields'] = $this->custom_fields_response_builder->buildBatch($custom_fields); $this->page_renderer->displayPage('form/editor.html', $data); } else { $this->page_renderer->displayPage('form/editor_legacy.html', $data); diff --git a/lib/CustomFields/CustomFieldsRepository.php b/lib/CustomFields/CustomFieldsRepository.php new file mode 100644 index 0000000000..cc4b888b03 --- /dev/null +++ b/lib/CustomFields/CustomFieldsRepository.php @@ -0,0 +1,20 @@ +autowire(\MailPoet\API\JSON\v1\WoocommerceSettings::class)->setPublic(true); // API response builders $container->autowire(\MailPoet\API\JSON\ResponseBuilders\NewslettersResponseBuilder::class); + $container->autowire(\MailPoet\API\JSON\ResponseBuilders\CustomFieldsResponseBuilder::class); // Config $container->autowire(\MailPoet\Config\AccessControl::class)->setPublic(true); $container->autowire(\MailPoet\Config\Activator::class)->setPublic(true); @@ -158,6 +159,7 @@ class ContainerConfigurator implements IContainerConfigurator { $container->autowire(\MailPoet\Cron\Workers\WooCommercePastOrders::class)->setPublic(true); // Custom field $container->autowire(\MailPoet\CustomFields\ApiDataSanitizer::class); + $container->autowire(\MailPoet\CustomFields\CustomFieldsRepository::class); // Features $container->autowire(\MailPoet\Features\FeaturesController::class); $container->autowire(\MailPoet\Features\FeatureFlagsController::class)->setPublic(true); diff --git a/lib/Entities/CustomFieldEntity.php b/lib/Entities/CustomFieldEntity.php new file mode 100644 index 0000000000..803940d5a2 --- /dev/null +++ b/lib/Entities/CustomFieldEntity.php @@ -0,0 +1,60 @@ +name; + } + + /** + * @return string + */ + public function getType() { + return $this->type; + } + + /** + * @return array + */ + public function getParams() { + return $this->params; + } +} diff --git a/views/form/editor.html b/views/form/editor.html index d09b32d22c..fbb8640c90 100644 --- a/views/form/editor.html +++ b/views/form/editor.html @@ -18,6 +18,7 @@ var mailpoet_form_exports = <%= json_encode(form_exports) %>; var mailpoet_form_segments = <%= json_encode(segments) %>; var mailpoet_form_pages = <%= json_encode(pages) %>; + var mailpoet_custom_fields = <%= json_encode(custom_fields) %>; <% endautoescape %>