Every form block now has unique ID (even the same block in two different form has different ID) used for rendering error messages. Before this, when the same form was rendered on a page multiple times, error messages of custom fields were always shown on the last rendered form, even if the first one was submitted. [MAILPOET-6182]
65 lines
2.0 KiB
PHP
65 lines
2.0 KiB
PHP
<?php // phpcs:ignore SlevomatCodingStandard.TypeHints.DeclareStrictTypes.DeclareStrictTypesMissing
|
|
|
|
namespace MailPoet\Form\Block;
|
|
|
|
use MailPoet\Form\BlockStylesRenderer;
|
|
use MailPoet\Form\BlockWrapperRenderer;
|
|
use MailPoet\WP\Functions as WPFunctions;
|
|
|
|
class Textarea {
|
|
/** @var BlockRendererHelper */
|
|
private $rendererHelper;
|
|
|
|
/** @var BlockStylesRenderer */
|
|
private $inputStylesRenderer;
|
|
|
|
/** @var BlockWrapperRenderer */
|
|
private $wrapper;
|
|
|
|
/** @var WPFunctions */
|
|
private $wp;
|
|
|
|
public function __construct(
|
|
BlockRendererHelper $rendererHelper,
|
|
BlockStylesRenderer $inputStylesRenderer,
|
|
BlockWrapperRenderer $wrapper,
|
|
WPFunctions $wp
|
|
) {
|
|
$this->rendererHelper = $rendererHelper;
|
|
$this->inputStylesRenderer = $inputStylesRenderer;
|
|
$this->wrapper = $wrapper;
|
|
$this->wp = $wp;
|
|
}
|
|
|
|
public function render(array $block, array $formSettings, ?int $formId = null): string {
|
|
$html = '';
|
|
$name = $this->rendererHelper->getFieldName($block);
|
|
$styles = $this->inputStylesRenderer->renderForTextInput($block['styles'] ?? [], $formSettings);
|
|
|
|
$html .= $this->rendererHelper->renderLabel($block, $formSettings);
|
|
|
|
$lines = (isset($block['params']['lines']) ? (int)$block['params']['lines'] : 1);
|
|
$html .= $this->inputStylesRenderer->renderPlaceholderStyles($block, 'textarea[name="data[' . $name . ']"]');
|
|
|
|
$html .= '<textarea class="mailpoet_textarea" data-automation-id="form_custom_text_area" rows="' . $lines . '" ';
|
|
|
|
$html .= 'name="data[' . $name . ']"';
|
|
|
|
$html .= $this->rendererHelper->renderInputPlaceholder($block);
|
|
|
|
$html .= $this->rendererHelper->getInputValidation($block);
|
|
|
|
$html .= $this->rendererHelper->getInputModifiers($block);
|
|
|
|
if ($styles) {
|
|
$html .= 'style="' . $this->wp->escAttr($styles) . '" ';
|
|
}
|
|
|
|
$html .= '>' . $this->rendererHelper->escapeShortCodes($this->rendererHelper->getFieldValue($block)) . '</textarea>';
|
|
|
|
$html .= $this->rendererHelper->renderErrorsContainer($block, $formId);
|
|
|
|
return $this->wrapper->render($block, $html);
|
|
}
|
|
}
|