diff --git a/application/Espo/Core/Formula/Functions/ExtGroup/MarkdownGroup/TransformType.php b/application/Espo/Core/Formula/Functions/ExtGroup/MarkdownGroup/TransformType.php new file mode 100644 index 0000000000..47efff7d44 --- /dev/null +++ b/application/Espo/Core/Formula/Functions/ExtGroup/MarkdownGroup/TransformType.php @@ -0,0 +1,57 @@ +. + * + * The interactive user interfaces in modified source and object code versions + * of this program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU Affero General Public License version 3. + * + * In accordance with Section 7(b) of the GNU Affero General Public License version 3, + * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. + ************************************************************************/ + +namespace Espo\Core\Formula\Functions\ExtGroup\MarkdownGroup; + +use Espo\Core\Formula\EvaluatedArgumentList; +use Espo\Core\Formula\Exceptions\BadArgumentType; +use Espo\Core\Formula\Exceptions\TooFewArguments; +use Espo\Core\Formula\Func; +use Michelf\Markdown; + +/** + * @noinspection PhpUnused + */ +class TransformType implements Func +{ + public function process(EvaluatedArgumentList $arguments): string + { + if (count($arguments) < 1) { + throw TooFewArguments::create(1); + } + + $string = $arguments[0] ?? ''; + + if (!is_string($string)) { + throw BadArgumentType::create(1, 'string'); + } + + return Markdown::defaultTransform($string); + } +} diff --git a/application/Espo/Resources/metadata/app/formula.json b/application/Espo/Resources/metadata/app/formula.json index 357265a198..74e4d2f426 100644 --- a/application/Espo/Resources/metadata/app/formula.json +++ b/application/Espo/Resources/metadata/app/formula.json @@ -545,6 +545,12 @@ "insertText": "ext\\email\\applyTemplate(EMAIL_ID, EMAIL_TEMPLATE_ID)", "unsafe": true }, + { + "name": "ext\\markdown\\transform", + "insertText": "ext\\markdown\\transform(STRING)", + "returnType": "string", + "unsafe": true + }, { "name": "ext\\pdf\\generate", "insertText": "ext\\pdf\\generate(ENTITY_TYPE, ENTITY_ID, TEMPLATE_ID, FILENAME)", diff --git a/tests/unit/Espo/Core/Formula/EvaluatorTest.php b/tests/unit/Espo/Core/Formula/EvaluatorTest.php index 3daa0c71a4..2e9b60f5f8 100644 --- a/tests/unit/Espo/Core/Formula/EvaluatorTest.php +++ b/tests/unit/Espo/Core/Formula/EvaluatorTest.php @@ -1610,4 +1610,14 @@ class EvaluatorTest extends TestCase $this->assertTrue($vars->a); } + + public function testMarkdownTransform(): void + { + $expression = "ext\\markdown\\transform('**test**')"; + + /** @noinspection PhpUnhandledExceptionInspection */ + $result = $this->evaluator->process($expression); + + $this->assertEquals("

test

\n", $result); + } }