Extract rendering of a single block to extra class

[MAILPOET-2665]
This commit is contained in:
Rostislav Wolny
2020-01-29 16:56:13 +01:00
committed by Jack Kitterhing
parent a759530b9d
commit d9b9e13a04
4 changed files with 64 additions and 50 deletions

View File

@ -171,6 +171,7 @@ class ContainerConfigurator implements IContainerConfigurator {
$container->autowire(\MailPoet\Form\DisplayFormInWPContent::class); $container->autowire(\MailPoet\Form\DisplayFormInWPContent::class);
$container->autowire(\MailPoet\Form\FormsRepository::class); $container->autowire(\MailPoet\Form\FormsRepository::class);
$container->autowire(\MailPoet\Form\Renderer::class); $container->autowire(\MailPoet\Form\Renderer::class);
$container->autowire(\MailPoet\Form\BlocksRenderer::class);
$container->autowire(\MailPoet\Form\Util\Styles::class); $container->autowire(\MailPoet\Form\Util\Styles::class);
// Helpscout // Helpscout
$container->autowire(\MailPoet\Helpscout\Beacon::class); $container->autowire(\MailPoet\Helpscout\Beacon::class);

View File

@ -0,0 +1,51 @@
<?php
namespace MailPoet\Form;
class BlocksRenderer {
public function renderBlock(array $block = []): string {
$html = '';
switch ($block['type']) {
case 'html':
$html .= Block\Html::render($block);
break;
case 'divider':
$html .= Block\Divider::render();
break;
case 'checkbox':
$html .= Block\Checkbox::render($block);
break;
case 'radio':
$html .= Block\Radio::render($block);
break;
case 'segment':
$html .= Block\Segment::render($block);
break;
case 'date':
$html .= Block\Date::render($block);
break;
case 'select':
$html .= Block\Select::render($block);
break;
case 'text':
$html .= Block\Text::render($block);
break;
case 'textarea':
$html .= Block\Textarea::render($block);
break;
case 'submit':
$html .= Block\Submit::render($block);
break;
}
return $html;
}
}

View File

@ -13,9 +13,17 @@ class Renderer {
/** @var SettingsController */ /** @var SettingsController */
private $settings; private $settings;
public function __construct(Styles $styleUtils, SettingsController $settings) { /** @var BlocksRenderer */
private $blocksRenderer;
public function __construct(
Styles $styleUtils,
SettingsController $settings,
BlocksRenderer $blocksRenderer
) {
$this->styleUtils = $styleUtils; $this->styleUtils = $styleUtils;
$this->settings = $settings; $this->settings = $settings;
$this->blocksRenderer = $blocksRenderer;
} }
public function renderStyles(array $form = [], string $prefix = null): string { public function renderStyles(array $form = [], string $prefix = null): string {
@ -50,7 +58,7 @@ class Renderer {
if ($block['type'] == 'submit' && $this->settings->get('captcha.type') === Captcha::TYPE_RECAPTCHA) { if ($block['type'] == 'submit' && $this->settings->get('captcha.type') === Captcha::TYPE_RECAPTCHA) {
$html .= $this->renderReCaptcha(); $html .= $this->renderReCaptcha();
} }
$html .= $this->renderBlock($block) . PHP_EOL; $html .= $this->blocksRenderer->renderBlock($block) . PHP_EOL;
} }
return $html; return $html;
} }
@ -80,50 +88,4 @@ class Renderer {
<input class="mailpoet_recaptcha_field" type="hidden" name="recaptcha"> <input class="mailpoet_recaptcha_field" type="hidden" name="recaptcha">
</div>'; </div>';
} }
private function renderBlock(array $block = []): string {
$html = '';
switch ($block['type']) {
case 'html':
$html .= Block\Html::render($block);
break;
case 'divider':
$html .= Block\Divider::render();
break;
case 'checkbox':
$html .= Block\Checkbox::render($block);
break;
case 'radio':
$html .= Block\Radio::render($block);
break;
case 'segment':
$html .= Block\Segment::render($block);
break;
case 'date':
$html .= Block\Date::render($block);
break;
case 'select':
$html .= Block\Select::render($block);
break;
case 'text':
$html .= Block\Text::render($block);
break;
case 'textarea':
$html .= Block\Textarea::render($block);
break;
case 'submit':
$html .= Block\Submit::render($block);
break;
}
return $html;
}
} }

View File

@ -4,8 +4,8 @@ namespace MailPoet\Form;
use MailPoet\API\JSON\API; use MailPoet\API\JSON\API;
use MailPoet\Config\Renderer as ConfigRenderer; use MailPoet\Config\Renderer as ConfigRenderer;
use MailPoet\DI\ContainerWrapper;
use MailPoet\Form\Renderer as FormRenderer; use MailPoet\Form\Renderer as FormRenderer;
use MailPoet\Form\Util\Styles;
use MailPoet\Models\Form; use MailPoet\Models\Form;
use MailPoet\Settings\SettingsController; use MailPoet\Settings\SettingsController;
use MailPoet\Util\Security; use MailPoet\Util\Security;
@ -30,7 +30,7 @@ class Widget extends \WP_Widget {
$this->wp = new WPFunctions; $this->wp = new WPFunctions;
$this->renderer = new \MailPoet\Config\Renderer(!WP_DEBUG, !WP_DEBUG); $this->renderer = new \MailPoet\Config\Renderer(!WP_DEBUG, !WP_DEBUG);
$this->assetsController = new AssetsController($this->wp, $this->renderer, SettingsController::getInstance()); $this->assetsController = new AssetsController($this->wp, $this->renderer, SettingsController::getInstance());
$this->formRenderer = new FormRenderer(new Styles(), SettingsController::getInstance()); $this->formRenderer = ContainerWrapper::getInstance()->get(FormRenderer::class);
if (!is_admin()) { if (!is_admin()) {
$this->setupIframe(); $this->setupIframe();
} else { } else {