diff --git a/lib/Form/Block/Checkbox.php b/lib/Form/Block/Checkbox.php index c0521e8937..6942639de9 100644 --- a/lib/Form/Block/Checkbox.php +++ b/lib/Form/Block/Checkbox.php @@ -2,6 +2,7 @@ namespace MailPoet\Form\Block; +use MailPoet\Form\BlockWrapperRenderer; use MailPoet\WP\Functions as WPFunctions; class Checkbox { @@ -9,11 +10,15 @@ class Checkbox { /** @var BlockRendererHelper */ private $rendererHelper; + /** @var BlockWrapperRenderer */ + private $wrapper; + /** @var WPFunctions */ private $wp; - public function __construct(BlockRendererHelper $rendererHelper, WPFunctions $wp) { + public function __construct(BlockRendererHelper $rendererHelper, BlockWrapperRenderer $wrapper, WPFunctions $wp) { $this->rendererHelper = $rendererHelper; + $this->wrapper = $wrapper; $this->wp = $wp; } @@ -23,8 +28,6 @@ class Checkbox { $fieldName = 'data[' . $this->rendererHelper->getFieldName($block) . ']'; $fieldValidation = $this->rendererHelper->getInputValidation($block); - $html .= '
'; - $html .= $this->rendererHelper->renderLabel($block, $formSettings); $options = (!empty($block['params']['values']) @@ -60,8 +63,6 @@ class Checkbox { $html .= ''; - $html .= '
'; - - return $html; + return $this->wrapper->render($block, $html); } } diff --git a/lib/Form/Block/Date.php b/lib/Form/Block/Date.php index 0d83a631b1..c2ff0b300c 100644 --- a/lib/Form/Block/Date.php +++ b/lib/Form/Block/Date.php @@ -2,23 +2,26 @@ namespace MailPoet\Form\Block; +use MailPoet\Form\BlockWrapperRenderer; + class Date { /** @var BlockRendererHelper */ private $rendererHelper; - public function __construct(BlockRendererHelper $rendererHelper) { + /** @var BlockWrapperRenderer */ + private $wrapper; + + public function __construct(BlockRendererHelper $rendererHelper, BlockWrapperRenderer $wrapper) { $this->rendererHelper = $rendererHelper; + $this->wrapper = $wrapper; } public function render(array $block, array $formSettings): string { $html = ''; - $html .= '
'; $html .= $this->rendererHelper->renderLabel($block, $formSettings); $html .= $this->renderDateSelect($block); - $html .= '
'; - - return $html; + return $this->wrapper->render($block, $html); } private function renderDateSelect(array $block = []): string { diff --git a/lib/Form/Block/Radio.php b/lib/Form/Block/Radio.php index f0897cae03..0e74c11d2e 100644 --- a/lib/Form/Block/Radio.php +++ b/lib/Form/Block/Radio.php @@ -2,6 +2,7 @@ namespace MailPoet\Form\Block; +use MailPoet\Form\BlockWrapperRenderer; use MailPoet\WP\Functions as WPFunctions; class Radio { @@ -12,8 +13,12 @@ class Radio { /** @var WPFunctions */ private $wp; - public function __construct(BlockRendererHelper $rendererHelper, WPFunctions $wp) { + /** @var BlockWrapperRenderer */ + private $wrapper; + + public function __construct(BlockRendererHelper $rendererHelper, BlockWrapperRenderer $wrapper, WPFunctions $wp) { $this->rendererHelper = $rendererHelper; + $this->wrapper = $wrapper; $this->wp = $wp; } @@ -23,8 +28,6 @@ class Radio { $fieldName = 'data[' . $this->rendererHelper->getFieldName($block) . ']'; $fieldValidation = $this->rendererHelper->getInputValidation($block); - $html .= '
'; - $html .= $this->rendererHelper->renderLabel($block, $formSettings); $options = (!empty($block['params']['values']) @@ -68,8 +71,6 @@ class Radio { $html .= ''; - $html .= '
'; - - return $html; + return $this->wrapper->render($block, $html); } } diff --git a/lib/Form/Block/Segment.php b/lib/Form/Block/Segment.php index 87780fdf56..08d940695d 100644 --- a/lib/Form/Block/Segment.php +++ b/lib/Form/Block/Segment.php @@ -2,6 +2,7 @@ namespace MailPoet\Form\Block; +use MailPoet\Form\BlockWrapperRenderer; use MailPoet\WP\Functions as WPFunctions; class Segment { @@ -12,8 +13,12 @@ class Segment { /** @var WPFunctions */ private $wp; - public function __construct(BlockRendererHelper $rendererHelper, WPFunctions $wp) { + /** @var BlockWrapperRenderer */ + private $wrapper; + + public function __construct(BlockRendererHelper $rendererHelper, BlockWrapperRenderer $wrapper, WPFunctions $wp) { $this->rendererHelper = $rendererHelper; + $this->wrapper = $wrapper; $this->wp = $wp; } @@ -23,8 +28,6 @@ class Segment { $fieldName = 'data[' . $this->rendererHelper->getFieldName($block) . ']'; $fieldValidation = $this->rendererHelper->getInputValidation($block); - $html .= '
'; - $html .= $this->rendererHelper->renderLabel($block, $formSettings); $options = (!empty($block['params']['values']) @@ -50,8 +53,6 @@ class Segment { $html .= ''; - $html .= '
'; - - return $html; + return $this->wrapper->render($block, $html); } } diff --git a/lib/Form/Block/Select.php b/lib/Form/Block/Select.php index 70d366d079..585eadd45f 100644 --- a/lib/Form/Block/Select.php +++ b/lib/Form/Block/Select.php @@ -2,6 +2,7 @@ namespace MailPoet\Form\Block; +use MailPoet\Form\BlockWrapperRenderer; use MailPoet\WP\Functions as WPFunctions; class Select { @@ -12,8 +13,12 @@ class Select { /** @var WPFunctions */ private $wp; - public function __construct(BlockRendererHelper $rendererHelper, WPFunctions $wp) { + /** @var BlockWrapperRenderer */ + private $wrapper; + + public function __construct(BlockRendererHelper $rendererHelper, BlockWrapperRenderer $wrapper, WPFunctions $wp) { $this->rendererHelper = $rendererHelper; + $this->wrapper = $wrapper; $this->wp = $wp; } @@ -23,7 +28,6 @@ class Select { $fieldName = 'data[' . $this->rendererHelper->getFieldName($block) . ']'; $automationId = ($block['id'] == 'status') ? 'data-automation-id="form_status"' : ''; - $html .= '
'; $html .= $this->rendererHelper->renderLabel($block, $formSettings); $html .= ''; - $html .= '
'; - - return $html; + return $this->wrapper->render($block, $html); } } diff --git a/lib/Form/Block/Submit.php b/lib/Form/Block/Submit.php index 7920f82b0d..8196bf4bc6 100644 --- a/lib/Form/Block/Submit.php +++ b/lib/Form/Block/Submit.php @@ -2,19 +2,25 @@ namespace MailPoet\Form\Block; +use MailPoet\Form\BlockWrapperRenderer; + class Submit { /** @var BlockRendererHelper */ private $rendererHelper; - public function __construct(BlockRendererHelper $rendererHelper) { + /** @var BlockWrapperRenderer */ + private $wrapper; + + public function __construct(BlockRendererHelper $rendererHelper, BlockWrapperRenderer $wrapper) { $this->rendererHelper = $rendererHelper; + $this->wrapper = $wrapper; } public function render(array $block): string { $html = ''; - $html .= '
rendererHelper->getFieldLabel($block) . '" '; @@ -24,8 +30,6 @@ class Submit { $html .= ''; - $html .= '
'; - - return $html; + return $this->wrapper->render($block, $html); } } diff --git a/lib/Form/Block/Text.php b/lib/Form/Block/Text.php index f594c9aa93..8f9760d99b 100644 --- a/lib/Form/Block/Text.php +++ b/lib/Form/Block/Text.php @@ -2,19 +2,27 @@ namespace MailPoet\Form\Block; +use MailPoet\Form\BlockWrapperRenderer; use MailPoet\Form\TextInputStylesRenderer; class Text { - /** @var BlockRendererHelper */ private $rendererHelper; /** @var TextInputStylesRenderer */ private $inputStylesRenderer; - public function __construct(BlockRendererHelper $rendererHelper, TextInputStylesRenderer $inputStylesRenderer) { + /** @var BlockWrapperRenderer */ + private $wrapper; + + public function __construct( + BlockRendererHelper $rendererHelper, + TextInputStylesRenderer $inputStylesRenderer, + BlockWrapperRenderer $wrapper + ) { $this->rendererHelper = $rendererHelper; $this->inputStylesRenderer = $inputStylesRenderer; + $this->wrapper = $wrapper; } public function render(array $block, array $formSettings): string { @@ -34,7 +42,7 @@ class Text { $automationId = 'data-automation-id="form_' . $block['id'] . '" '; } - $html = '
'; + $html = ''; $html .= $this->rendererHelper->renderLabel($block, $formSettings); @@ -60,8 +68,6 @@ class Text { $html .= '/>'; - $html .= '
'; - - return $html; + return $this->wrapper->render($block, $html); } } diff --git a/lib/Form/Block/Textarea.php b/lib/Form/Block/Textarea.php index 919e512377..6fd0a17b9c 100644 --- a/lib/Form/Block/Textarea.php +++ b/lib/Form/Block/Textarea.php @@ -2,6 +2,7 @@ namespace MailPoet\Form\Block; +use MailPoet\Form\BlockWrapperRenderer; use MailPoet\Form\TextInputStylesRenderer; class Textarea { @@ -11,17 +12,23 @@ class Textarea { /** @var TextInputStylesRenderer */ private $inputStylesRenderer; - public function __construct(BlockRendererHelper $rendererHelper, TextInputStylesRenderer $inputStylesRenderer) { + /** @var BlockWrapperRenderer */ + private $wrapper; + + public function __construct( + BlockRendererHelper $rendererHelper, + TextInputStylesRenderer $inputStylesRenderer, + BlockWrapperRenderer $wrapper + ) { $this->rendererHelper = $rendererHelper; $this->inputStylesRenderer = $inputStylesRenderer; + $this->wrapper = $wrapper; } public function render(array $block, array $formSettings): string { $html = ''; $styles = $this->inputStylesRenderer->render($block['styles'] ?? []); - $html .= '
'; - $html .= $this->rendererHelper->renderLabel($block, $formSettings); $lines = (isset($block['params']['lines']) ? (int)$block['params']['lines'] : 1); @@ -42,8 +49,6 @@ class Textarea { $html .= '>' . $this->rendererHelper->getFieldValue($block) . ''; - $html .= '
'; - - return $html; + return $this->wrapper->render($block, $html); } } diff --git a/tests/unit/Form/Block/CheckboxTest.php b/tests/unit/Form/Block/CheckboxTest.php index 53c640bd80..f1c2906876 100644 --- a/tests/unit/Form/Block/CheckboxTest.php +++ b/tests/unit/Form/Block/CheckboxTest.php @@ -4,6 +4,7 @@ namespace MailPoet\Test\Form\Block; use MailPoet\Form\Block\BlockRendererHelper; use MailPoet\Form\Block\Checkbox; +use MailPoet\Form\BlockWrapperRenderer; use MailPoet\Test\Form\HtmlParser; use MailPoet\WP\Functions as WPFunctions; use PHPUnit\Framework\MockObject\MockObject; @@ -20,6 +21,9 @@ class CheckboxTest extends \MailPoetUnitTest { /** @var MockObject & BlockRendererHelper */ private $rendererHelperMock; + /** @var MockObject & BlockWrapperRenderer */ + private $wrapperMock; + /** @var HtmlParser */ private $htmlParser; @@ -46,7 +50,9 @@ class CheckboxTest extends \MailPoetUnitTest { $this->wpMock = $this->createMock(WPFunctions::class); $this->wpMock->method('escAttr')->will($this->returnArgument(0)); $this->rendererHelperMock = $this->createMock(BlockRendererHelper::class); - $this->checkbox = new Checkbox($this->rendererHelperMock, $this->wpMock); + $this->wrapperMock = $this->createMock(BlockWrapperRenderer::class); + $this->wrapperMock->method('render')->will($this->returnArgument(1)); + $this->checkbox = new Checkbox($this->rendererHelperMock, $this->wrapperMock, $this->wpMock); $this->htmlParser = new HtmlParser(); } diff --git a/tests/unit/Form/Block/DateTest.php b/tests/unit/Form/Block/DateTest.php index 96a2407338..29c026d294 100644 --- a/tests/unit/Form/Block/DateTest.php +++ b/tests/unit/Form/Block/DateTest.php @@ -4,6 +4,7 @@ namespace MailPoet\Test\Form\Block; use MailPoet\Form\Block\BlockRendererHelper; use MailPoet\Form\Block\Date; +use MailPoet\Form\BlockWrapperRenderer; use MailPoet\Test\Form\HtmlParser; use MailPoetVendor\Carbon\Carbon; use PHPUnit\Framework\MockObject\MockObject; @@ -17,6 +18,9 @@ class DateTest extends \MailPoetUnitTest { /** @var MockObject & BlockRendererHelper */ private $baseMock; + /** @var MockObject & BlockWrapperRenderer */ + private $wrapperMock; + /** @var HtmlParser */ private $htmlParser; @@ -39,7 +43,9 @@ class DateTest extends \MailPoetUnitTest { public function _before() { parent::_before(); $this->baseMock = $this->createMock(BlockRendererHelper::class); - $this->date = new Date($this->baseMock); + $this->wrapperMock = $this->createMock(BlockWrapperRenderer::class); + $this->wrapperMock->method('render')->will($this->returnArgument(1)); + $this->date = new Date($this->baseMock, $this->wrapperMock); $this->htmlParser = new HtmlParser(); } diff --git a/tests/unit/Form/Block/RadioTest.php b/tests/unit/Form/Block/RadioTest.php index 644ef76964..617f586cd8 100644 --- a/tests/unit/Form/Block/RadioTest.php +++ b/tests/unit/Form/Block/RadioTest.php @@ -4,6 +4,7 @@ namespace MailPoet\Test\Form\Block; use MailPoet\Form\Block\BlockRendererHelper; use MailPoet\Form\Block\Radio; +use MailPoet\Form\BlockWrapperRenderer; use MailPoet\Test\Form\HtmlParser; use MailPoet\WP\Functions as WPFunctions; use PHPUnit\Framework\MockObject\MockObject; @@ -20,6 +21,9 @@ class RadioTest extends \MailPoetUnitTest { /** @var MockObject & WPFunctions */ private $rendererHelperMock; + /** @var MockObject & BlockWrapperRenderer */ + private $wrapperMock; + /** @var HtmlParser */ private $htmlParser; @@ -48,8 +52,10 @@ class RadioTest extends \MailPoetUnitTest { parent::_before(); $this->rendererHelperMock = $this->createMock(WPFunctions::class); $this->rendererHelperMock->method('escAttr')->will($this->returnArgument(0)); + $this->wrapperMock = $this->createMock(BlockWrapperRenderer::class); + $this->wrapperMock->method('render')->will($this->returnArgument(1)); $this->baseMock = $this->createMock(BlockRendererHelper::class); - $this->radio = new Radio($this->baseMock, $this->rendererHelperMock); + $this->radio = new Radio($this->baseMock, $this->wrapperMock, $this->rendererHelperMock); $this->htmlParser = new HtmlParser(); } diff --git a/tests/unit/Form/Block/SegmentTest.php b/tests/unit/Form/Block/SegmentTest.php index addbbd66bd..d747fdc905 100644 --- a/tests/unit/Form/Block/SegmentTest.php +++ b/tests/unit/Form/Block/SegmentTest.php @@ -4,6 +4,7 @@ namespace MailPoet\Test\Form\Block; use MailPoet\Form\Block\BlockRendererHelper; use MailPoet\Form\Block\Segment; +use MailPoet\Form\BlockWrapperRenderer; use MailPoet\Test\Form\HtmlParser; use MailPoet\WP\Functions as WPFunctions; use PHPUnit\Framework\MockObject\MockObject; @@ -20,6 +21,9 @@ class SegmentTest extends \MailPoetUnitTest { /** @var MockObject & BlockRendererHelper */ private $rendererHelperMock; + /** @var MockObject & BlockWrapperRenderer */ + private $wrapperMock; + /** @var HtmlParser */ private $htmlParser; @@ -47,8 +51,10 @@ class SegmentTest extends \MailPoetUnitTest { parent::_before(); $this->wpMock = $this->createMock(WPFunctions::class); $this->wpMock->method('escAttr')->will($this->returnArgument(0)); + $this->wrapperMock = $this->createMock(BlockWrapperRenderer::class); + $this->wrapperMock->method('render')->will($this->returnArgument(1)); $this->rendererHelperMock = $this->createMock(BlockRendererHelper::class); - $this->segment = new Segment($this->rendererHelperMock, $this->wpMock); + $this->segment = new Segment($this->rendererHelperMock, $this->wrapperMock, $this->wpMock); $this->htmlParser = new HtmlParser(); } diff --git a/tests/unit/Form/Block/SelectTest.php b/tests/unit/Form/Block/SelectTest.php index e354217fb7..e5987355f6 100644 --- a/tests/unit/Form/Block/SelectTest.php +++ b/tests/unit/Form/Block/SelectTest.php @@ -4,6 +4,7 @@ namespace MailPoet\Test\Form\Block; use MailPoet\Form\Block\BlockRendererHelper; use MailPoet\Form\Block\Select; +use MailPoet\Form\BlockWrapperRenderer; use MailPoet\Models\Subscriber; use MailPoet\WP\Functions; use PHPUnit\Framework\MockObject\MockObject; @@ -21,16 +22,21 @@ class SelectTest extends \MailPoetUnitTest { /** @var MockObject & BlockRendererHelper */ private $rendererHelperMock; + /** @var MockObject & BlockWrapperRenderer */ + private $wrapperMock; + public function _before() { parent::_before(); $this->wpMock = $this->createMock(Functions::class); $this->wpMock->method('escAttr')->will($this->returnArgument(0)); + $this->wrapperMock = $this->createMock(BlockWrapperRenderer::class); + $this->wrapperMock->method('render')->will($this->returnArgument(1)); $this->rendererHelperMock = $this->createMock(BlockRendererHelper::class); $this->rendererHelperMock->method('getFieldName')->will($this->returnValue('select')); $this->rendererHelperMock->method('renderLabel')->will($this->returnValue('')); $this->rendererHelperMock->method('getFieldLabel')->will($this->returnValue('Field label')); $this->rendererHelperMock->method('getFieldValue')->will($this->returnValue('1')); - $this->selectBlock = new Select($this->rendererHelperMock, $this->wpMock); + $this->selectBlock = new Select($this->rendererHelperMock, $this->wrapperMock, $this->wpMock); $this->block = [ 'id' => 'status', 'type' => 'select', diff --git a/tests/unit/Form/Block/SubmitTest.php b/tests/unit/Form/Block/SubmitTest.php index 3cf82baf73..05feeb46d4 100644 --- a/tests/unit/Form/Block/SubmitTest.php +++ b/tests/unit/Form/Block/SubmitTest.php @@ -4,6 +4,7 @@ namespace MailPoet\Test\Form\Block; use MailPoet\Form\Block\BlockRendererHelper; use MailPoet\Form\Block\Submit; +use MailPoet\Form\BlockWrapperRenderer; use MailPoet\Test\Form\HtmlParser; use PHPUnit\Framework\MockObject\MockObject; @@ -16,6 +17,9 @@ class SubmitTest extends \MailPoetUnitTest { /** @var MockObject & BlockRendererHelper */ private $rendererHelperMock; + /** @var MockObject & BlockWrapperRenderer */ + private $wrapperMock; + /** @var HtmlParser */ private $htmlParser; @@ -34,7 +38,9 @@ class SubmitTest extends \MailPoetUnitTest { public function _before() { parent::_before(); $this->rendererHelperMock = $this->createMock(BlockRendererHelper::class); - $this->submit = new Submit($this->rendererHelperMock); + $this->wrapperMock = $this->createMock(BlockWrapperRenderer::class); + $this->wrapperMock->method('render')->will($this->returnArgument(1)); + $this->submit = new Submit($this->rendererHelperMock, $this->wrapperMock); $this->htmlParser = new HtmlParser(); } diff --git a/tests/unit/Form/Block/TextTest.php b/tests/unit/Form/Block/TextTest.php index 2a6f3ac288..c6d93ca26d 100644 --- a/tests/unit/Form/Block/TextTest.php +++ b/tests/unit/Form/Block/TextTest.php @@ -4,6 +4,7 @@ namespace MailPoet\Test\Form\Block; use MailPoet\Form\Block\BlockRendererHelper; use MailPoet\Form\Block\Text; +use MailPoet\Form\BlockWrapperRenderer; use MailPoet\Form\TextInputStylesRenderer; use MailPoet\Test\Form\HtmlParser; use PHPUnit\Framework\MockObject\MockObject; @@ -20,6 +21,9 @@ class TextTest extends \MailPoetUnitTest { /** @var MockObject & TextInputStylesRenderer */ private $stylesRendererMock; + /** @var MockObject & BlockWrapperRenderer */ + private $wrapperMock; + /** @var HtmlParser */ private $htmlParser; @@ -41,7 +45,9 @@ class TextTest extends \MailPoetUnitTest { parent::_before(); $this->rendererHelperMock = $this->createMock(BlockRendererHelper::class); $this->stylesRendererMock = $this->createMock(TextInputStylesRenderer::class); - $this->text = new Text($this->rendererHelperMock, $this->stylesRendererMock); + $this->wrapperMock = $this->createMock(BlockWrapperRenderer::class); + $this->wrapperMock->method('render')->will($this->returnArgument(1)); + $this->text = new Text($this->rendererHelperMock, $this->stylesRendererMock, $this->wrapperMock); $this->htmlParser = new HtmlParser(); } diff --git a/tests/unit/Form/Block/TextareaTest.php b/tests/unit/Form/Block/TextareaTest.php index d54844fcaa..819024825a 100644 --- a/tests/unit/Form/Block/TextareaTest.php +++ b/tests/unit/Form/Block/TextareaTest.php @@ -4,6 +4,7 @@ namespace MailPoet\Test\Form\Block; use MailPoet\Form\Block\BlockRendererHelper; use MailPoet\Form\Block\Textarea; +use MailPoet\Form\BlockWrapperRenderer; use MailPoet\Form\TextInputStylesRenderer; use MailPoet\Test\Form\HtmlParser; use PHPUnit\Framework\MockObject\MockObject; @@ -20,6 +21,9 @@ class TextareaTest extends \MailPoetUnitTest { /** @var MockObject & TextInputStylesRenderer */ private $stylesRendererMock; + /** @var MockObject & BlockWrapperRenderer */ + private $wrapperMock; + /** @var HtmlParser */ private $htmlParser; @@ -42,7 +46,9 @@ class TextareaTest extends \MailPoetUnitTest { parent::_before(); $this->rendererHelperMock = $this->createMock(BlockRendererHelper::class); $this->stylesRendererMock = $this->createMock(TextInputStylesRenderer::class); - $this->textarea = new Textarea($this->rendererHelperMock, $this->stylesRendererMock); + $this->wrapperMock = $this->createMock(BlockWrapperRenderer::class); + $this->wrapperMock->method('render')->will($this->returnArgument(1)); + $this->textarea = new Textarea($this->rendererHelperMock, $this->stylesRendererMock, $this->wrapperMock); $this->htmlParser = new HtmlParser(); }