diff --git a/lib/Form/Util/Styles.php b/lib/Form/Util/Styles.php index d35a4c005c..9441118725 100644 --- a/lib/Form/Util/Styles.php +++ b/lib/Form/Util/Styles.php @@ -26,8 +26,8 @@ class Styles { } public function renderFormSettingsStyles(FormEntity $form, string $selector, string $displayType): string { - if (!isset($form['settings']) || !is_array($form['settings'])) return ''; - $formSettings = $form['settings']; + if (!is_array($form->getSettings())) return ''; + $formSettings = $form->getSettings(); // Wrapper styles $styles = []; diff --git a/lib/Form/Widget.php b/lib/Form/Widget.php index 2d5b70513c..330a1dcdde 100644 --- a/lib/Form/Widget.php +++ b/lib/Form/Widget.php @@ -7,7 +7,6 @@ use MailPoet\Config\Renderer as ConfigRenderer; use MailPoet\DI\ContainerWrapper; use MailPoet\Entities\FormEntity; use MailPoet\Form\Renderer as FormRenderer; -use MailPoet\Models\Form; use MailPoet\Settings\SettingsController; use MailPoet\Util\Security; use MailPoet\WP\Functions as WPFunctions; @@ -22,6 +21,9 @@ class Widget extends \WP_Widget { /** @var FormRenderer */ private $formRenderer; + /** @var FormsRepository */ + private $formsRepository; + public function __construct() { parent::__construct( 'mailpoet_form', @@ -32,6 +34,7 @@ class Widget extends \WP_Widget { $this->renderer = new \MailPoet\Config\Renderer(!WP_DEBUG, !WP_DEBUG); $this->assetsController = new AssetsController($this->wp, $this->renderer, SettingsController::getInstance()); $this->formRenderer = ContainerWrapper::getInstance()->get(FormRenderer::class); + $this->formsRepository = ContainerWrapper::getInstance()->get(FormsRepository::class); if (!is_admin()) { $this->setupIframe(); } else { @@ -44,7 +47,7 @@ class Widget extends \WP_Widget { public function setupIframe() { $formId = (isset($_GET['mailpoet_form_iframe']) ? (int)$_GET['mailpoet_form_iframe'] : 0); - if (!$formId || !Form::findOne($formId)) return; + if (!$formId || !$this->formsRepository->findOneById($formId)) return; $formHtml = $this->widget( [ @@ -120,7 +123,7 @@ class Widget extends \WP_Widget { $selectedForm = isset($instance['form']) ? (int)($instance['form']) : 0; // get forms list - $forms = Form::getPublished()->orderByAsc('name')->findArray(); + $forms = $this->formsRepository->findBy(['deletedAt' => null], ['name' => 'asc']); ?>
wp->escHtml($form['name']) : "({$this->wp->_x('no name', 'fallback for forms without a name in a form list')})" + $isSelected = ($selectedForm === $form->getId()) ? 'selected="selected"' : ''; + $formName = $form->getName() ? $this->wp->escHtml($form->getName()) : "({$this->wp->_x('no name', 'fallback for forms without a name in a form list')})" ?> - +
@@ -194,11 +197,11 @@ class Widget extends \WP_Widget { ); // get form - $form = Form::getPublished()->findOne($instance['form']); + $form = $this->formsRepository->findOneById($instance['form']); if (!$form) return ''; - if ($form->status !== FormEntity::STATUS_ENABLED) return ''; + if ($form->getDeletedAt()) return ''; + if ($form->getStatus() !== FormEntity::STATUS_ENABLED) return ''; - $form = $form->asArray(); $formType = 'widget'; if (isset($instance['form_type']) && in_array( $instance['form_type'], @@ -212,16 +215,17 @@ class Widget extends \WP_Widget { $formType = $instance['form_type']; } - $body = (isset($form['body']) ? $form['body'] : []); + $body = (!empty($form->getBody()) ? $form->getBody() : []); $output = ''; + $settings = $form->getSettings(); - if (!empty($body) && isset($form['settings']) && is_array($form['settings'])) { - $formId = $this->id_base . '_' . $form['id']; // phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps + if (!empty($body) && is_array($settings)) { + $formId = $this->id_base . '_' . $form->getId(); // phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps $data = [ 'form_html_id' => $formId, - 'form_id' => $form['id'], + 'form_id' => $form->getId(), 'form_type' => $formType, - 'form_success_message' => $form['settings']['success_message'], + 'form_success_message' => $settings['success_message'], 'title' => $title, 'styles' => $this->formRenderer->renderStyles($form, '#' . $formId, FormEntity::DISPLAY_TYPE_OTHERS), 'html' => $this->formRenderer->renderHTML($form), @@ -235,12 +239,12 @@ class Widget extends \WP_Widget { $data['success'] = ( (isset($_GET['mailpoet_success'])) && - ((int)$_GET['mailpoet_success'] === (int)$form['id']) + ((int)$_GET['mailpoet_success'] === $form->getId()) ); $data['error'] = ( (isset($_GET['mailpoet_error'])) && - ((int)$_GET['mailpoet_error'] === (int)$form['id']) + ((int)$_GET['mailpoet_error'] === $form->getId()) ); // generate security token diff --git a/tests/integration/Subscription/FormTest.php b/tests/integration/Subscription/FormTest.php index 22295f484f..7052827349 100644 --- a/tests/integration/Subscription/FormTest.php +++ b/tests/integration/Subscription/FormTest.php @@ -7,8 +7,8 @@ use MailPoet\API\JSON\API; use MailPoet\API\JSON\ErrorResponse; use MailPoet\API\JSON\Response; use MailPoet\DI\ContainerWrapper; +use MailPoet\Entities\FormEntity; use MailPoet\Form\Util\FieldNameObfuscator; -use MailPoet\Models\Form as FormModel; use MailPoet\Models\Segment as SegmentModel; use MailPoet\Models\Subscriber as SubscriberModel; use MailPoet\Settings\SettingsController; @@ -42,26 +42,24 @@ class FormTest extends \MailPoetTest { 'name' => 'Test segment', ] ); - $this->form = FormModel::createOrUpdate( + $this->form = new FormEntity('Test form'); + $this->form->setBody([ [ - 'name' => 'Test form', - 'body' => [ - [ - 'type' => 'text', - 'id' => 'email', - ], - ], - 'settings' => [ - 'segments' => [$this->segment->id], - ], - ] - ); + 'type' => 'text', + 'id' => 'email', + ], + ]); + $this->form->setSettings([ + 'segments' => [$this->segment->id], + ]); + $this->entityManager->persist($this->form); + $this->entityManager->flush(); $obfuscator = new FieldNameObfuscator(WPFunctions::get()); $obfuscatedEmail = $obfuscator->obfuscate('email'); $this->requestData = [ 'action' => 'mailpoet_subscription_form', 'data' => [ - 'form_id' => $this->form->id, + 'form_id' => $this->form->getId(), $obfuscatedEmail => $this->testEmail, ], 'token' => Security::generateToken(), @@ -88,18 +86,18 @@ class FormTest extends \MailPoetTest { $formController = new Form(ContainerWrapper::getInstance()->get(API::class), $urlHelper); $result = $formController->onSubmit($this->requestData); expect(SubscriberModel::findOne($this->testEmail))->notEmpty(); - expect($result['mailpoet_success'])->equals($this->form->id); + expect($result['mailpoet_success'])->equals($this->form->getId()); expect($result['mailpoet_error'])->null(); } public function testItSubscribesAndRedirectsToCustomUrlWithSuccessResponse() { // update form with a redirect setting $form = $this->form; - $formSettings = unserialize($form->settings); + $formSettings = $form->getSettings(); $formSettings['on_success'] = 'page'; $formSettings['success_page'] = $this->post; - $form->settings = serialize($formSettings); - $form->save(); + $form->setSettings($formSettings); + $this->entityManager->flush(); $urlHelper = Stub::make(UrlHelper::class, [ 'redirectTo' => function($params) { return $params; @@ -126,7 +124,7 @@ class FormTest extends \MailPoetTest { $formController = new Form(ContainerWrapper::getInstance()->get(API::class), $urlHelper); $result = $formController->onSubmit($requestData); expect(SubscriberModel::findMany())->isEmpty(); - expect($result['mailpoet_error'])->equals($this->form->id); + expect($result['mailpoet_error'])->equals($this->form->getId()); expect($result['mailpoet_success'])->null(); } @@ -150,7 +148,7 @@ class FormTest extends \MailPoetTest { public function _after() { wp_delete_post($this->post); ORM::raw_execute('TRUNCATE ' . SegmentModel::$_table); - ORM::raw_execute('TRUNCATE ' . FormModel::$_table); + $this->truncateEntity(FormEntity::class); ORM::raw_execute('TRUNCATE ' . SubscriberModel::$_table); $this->diContainer->get(SettingsRepository::class)->truncate(); }