diff --git a/common/framework/parsers/template/TemplateParser_v2.php b/common/framework/parsers/template/TemplateParser_v2.php index cce065bd9..0486633f2 100644 --- a/common/framework/parsers/template/TemplateParser_v2.php +++ b/common/framework/parsers/template/TemplateParser_v2.php @@ -149,6 +149,7 @@ class TemplateParser_v2 $content = $this->_convertInlineDirectives($content); $content = $this->_convertMiscDirectives($content); $content = $this->_convertEchoStatements($content); + $content = $this->_addDeprecationMessages($content); // Postprocessing. $content = $this->_postprocess($content); @@ -917,6 +918,31 @@ class TemplateParser_v2 } } + /** + * Add an error message if any supported v1 syntax is found. + * + * @param string $content + * @return string + */ + protected function _addDeprecationMessages(string $content): string + { + // + $content = preg_replace_callback('#'; + }, $content); + + // cond, loop + $content = preg_replace_callback('#(?<=\s)(cond|loop)="([^"]+)"#', function($match) { + if ($match[1] === 'loop' && ctype_alnum($match[2])) + { + return $match[0]; + } + return ''; + }, $content); + + return $content; + } + /** * Postprocessing. * diff --git a/tests/unit/framework/parsers/TemplateParserV2Test.php b/tests/unit/framework/parsers/TemplateParserV2Test.php index 937ec921d..2be9ea6f1 100644 --- a/tests/unit/framework/parsers/TemplateParserV2Test.php +++ b/tests/unit/framework/parsers/TemplateParserV2Test.php @@ -1057,6 +1057,43 @@ class TemplateParserV2Test extends \Codeception\Test\Unit $this->assertEquals($target, $this->_parse($source)); } + public function testDeprecationMessages() + { + // element + $source = ''; + $target = ' class="foobar">'; + $this->assertEquals($target, $this->_parse($source)); + + // cond + $source = '
'; + $target = '
>
';; + $this->assertEquals($target, $this->_parse($source)); + + // cond is OK in includes + $source = ''; + $target = 'relative_dirname, "foo.html", "html"); echo $__tpl->compile(); ?>';; + $this->assertEquals($target, $this->_parse($source)); + + // loop + $source = ''; + $target = '>';; + $this->assertEquals($target, $this->_parse($source)); + + // loop is OK in multimedia elements + $source = ''; + $target = ''; + $this->assertEquals($target, $this->_parse($source)); + + // Comprehensive example + $source = ''; + $target = implode('', [ + ' ', + ' ', + '>
', + ]); + $this->assertEquals($target, $this->_parse($source)); + } + public function testCompile() { // General example