Merge branch '5.2' into 5

This commit is contained in:
github-actions 2024-05-22 22:41:40 +00:00
commit 8886a3a93d
5 changed files with 45 additions and 17 deletions

3
sake
View File

@ -9,7 +9,8 @@ Executes a SilverStripe command"
exit 1
fi
if ! [ -x "$(command -v which)" ]; then
command -v which >/dev/null 2>&1
if [ $? -ne 0 ]; then
echo "Error: sake requires the 'which' command to operate." >&2
exit 1
fi

View File

@ -192,7 +192,19 @@ class HTMLEditorField extends TextareaField
*/
public function ValueEntities()
{
return htmlentities($this->Value() ?? '', ENT_COMPAT, 'UTF-8', false);
$entities = get_html_translation_table(HTML_ENTITIES);
foreach ($entities as $key => $value) {
$entities[$key] = "/" . $value . "/";
}
$value = preg_replace_callback($entities, function ($matches) {
// Don't apply double encoding to ampersand
$doubleEncoding = $matches[0] != '&';
return htmlentities($matches[0], ENT_COMPAT, 'UTF-8', $doubleEncoding);
}, $this->Value() ?? '');
return $value;
}
/**

View File

@ -171,6 +171,10 @@ class EmbedShortcodeProvider implements ShortcodeHandler
$arguments['style'] = 'width: ' . intval($arguments['width']) . 'px;';
}
if (!empty($arguments['caption'])) {
$arguments['caption'] = htmlentities($arguments['caption'], ENT_QUOTES, 'UTF-8', false);
}
// override iframe dimension attributes provided by webservice with ones specified in shortcode arguments
foreach (['width', 'height'] as $attr) {
if (!($value = $arguments[$attr] ?? false)) {

View File

@ -3,6 +3,6 @@
>
{$Content}
<% if $Arguments.caption %>
<p class="caption">{$Arguments.caption}</p>
<p class="caption">{$Arguments.caption.RAW}</p>
<% end_if %>
</div>

View File

@ -75,7 +75,7 @@ class HTMLEditorFieldTest extends FunctionalTest
$inputText = "These are some unicodes: ä, ö, & ü";
$field = new HTMLEditorField("Test", "Test");
$field->setValue($inputText);
$this->assertStringContainsString('These are some unicodes: &auml;, &ouml;, &amp; &uuml;', $field->Field());
$this->assertStringContainsString('These are some unicodes: ä, ö, & ü', $field->Field());
// Test shortcodes
$inputText = "Shortcode: [file_link id=4]";
$field = new HTMLEditorField("Test", "Test");
@ -211,23 +211,34 @@ EOS
);
}
public function testValueEntities()
public function provideTestValueEntities()
{
$inputText = "The company &amp; partners";
$field = new HTMLEditorField("Content");
$field->setValue($inputText);
$this->assertEquals(
return [
"ampersand" => [
"The company &amp; partners",
$field->obj('ValueEntities')->forTemplate()
);
"The company &amp; partners"
],
"double ampersand" => [
"The company &amp;amp; partners",
"The company &amp;amp; partners"
],
"left arrow and right arrow" => [
"<p>&lt;strong&gt;The company &amp;amp; partners&lt;/strong&gt;</p>",
"<p>&amp;lt;strong&amp;gt;The company &amp;amp; partners&amp;lt;/strong&amp;gt;</p>"
],
];
}
$inputText = "The company &amp;&amp; partners";
/**
* @dataProvider provideTestValueEntities
*/
public function testValueEntities(string $input, string $result)
{
$field = new HTMLEditorField("Content");
$field->setValue($inputText);
$field->setValue($input);
$this->assertEquals(
"The company &amp;&amp; partners",
$result,
$field->obj('ValueEntities')->forTemplate()
);
}