Add escaping for known shortcodes when rendered in form textarea's value
[MAILPOET-5243]
This commit is contained in:
committed by
Aschepikov
parent
fb2c839fad
commit
e62a3ee5b5
@@ -258,6 +258,15 @@ class BlockRendererHelper {
|
|||||||
return join(' ', $modifiers);
|
return join(' ', $modifiers);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function escapeShortCodes(?string $value): ?string {
|
||||||
|
if ($value === null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return preg_replace_callback('/' . $this->wp->getShortcodeRegex() . '/s', function ($matches) {
|
||||||
|
return str_replace(['[', ']'], ['[', ']'], $matches[0]);
|
||||||
|
}, $value);
|
||||||
|
}
|
||||||
|
|
||||||
private function translateValidationErrorMessage(string $validate): string {
|
private function translateValidationErrorMessage(string $validate): string {
|
||||||
switch ($validate) {
|
switch ($validate) {
|
||||||
case 'email':
|
case 'email':
|
||||||
|
@@ -55,7 +55,7 @@ class Textarea {
|
|||||||
$html .= 'style="' . $this->wp->escAttr($styles) . '" ';
|
$html .= 'style="' . $this->wp->escAttr($styles) . '" ';
|
||||||
}
|
}
|
||||||
|
|
||||||
$html .= '>' . $this->rendererHelper->getFieldValue($block) . '</textarea>';
|
$html .= '>' . $this->rendererHelper->escapeShortCodes($this->rendererHelper->getFieldValue($block)) . '</textarea>';
|
||||||
|
|
||||||
return $this->wrapper->render($block, $html);
|
return $this->wrapper->render($block, $html);
|
||||||
}
|
}
|
||||||
|
@@ -881,4 +881,8 @@ class Functions {
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getShortcodeRegex($tagnames = null): string {
|
||||||
|
return get_shortcode_regex($tagnames);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,16 @@
|
|||||||
|
<?php declare(strict_types = 1);
|
||||||
|
|
||||||
|
namespace MailPoet\Form\Block;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* There is also a unit test for this class in mailpoet/tests/unit/Form/Block/BlockRendererHelperTest.php
|
||||||
|
* The integration test method that need WordPress to be loaded.
|
||||||
|
*/
|
||||||
|
class BlockRendererHelperTest extends \MailPoetTest {
|
||||||
|
public function testItEscapesKnownShortCodes() {
|
||||||
|
$text = '[mailpoet_subscribers_count] [gallery attr="attr"]inside[/gallery][unknown]';
|
||||||
|
$rendererHelper = $this->diContainer->get(BlockRendererHelper::class);
|
||||||
|
$escaped = $rendererHelper->escapeShortCodes($text);
|
||||||
|
expect($escaped)->equals('[mailpoet_subscribers_count] [gallery attr="attr"]inside[/gallery][unknown]');
|
||||||
|
}
|
||||||
|
}
|
@@ -62,6 +62,7 @@ class TextareaTest extends \MailPoetUnitTest {
|
|||||||
$this->rendererHelperMock->expects($this->once())->method('getInputValidation')->willReturn(' validation="1" ');
|
$this->rendererHelperMock->expects($this->once())->method('getInputValidation')->willReturn(' validation="1" ');
|
||||||
$this->rendererHelperMock->expects($this->once())->method('getInputModifiers')->willReturn(' modifiers="mod" ');
|
$this->rendererHelperMock->expects($this->once())->method('getInputModifiers')->willReturn(' modifiers="mod" ');
|
||||||
$this->rendererHelperMock->expects($this->once())->method('getFieldValue')->willReturn('val');
|
$this->rendererHelperMock->expects($this->once())->method('getFieldValue')->willReturn('val');
|
||||||
|
$this->rendererHelperMock->expects($this->once())->method('escapeShortCodes')->will($this->returnArgument(0));
|
||||||
$this->stylesRendererMock->expects($this->once())->method('renderForTextInput')->willReturn('border-radius: 10px;');
|
$this->stylesRendererMock->expects($this->once())->method('renderForTextInput')->willReturn('border-radius: 10px;');
|
||||||
|
|
||||||
$html = $this->textarea->render($this->block, []);
|
$html = $this->textarea->render($this->block, []);
|
||||||
|
Reference in New Issue
Block a user