[!!!][TASK] Remove RteHtmlParser proc options 64/51264/2
authorBenni Mack <benni@typo3.org>
Wed, 11 Jan 2017 13:05:30 +0000 (14:05 +0100)
committerSusanne Moog <susanne.moog@typo3.org>
Wed, 11 Jan 2017 14:19:35 +0000 (15:19 +0100)
The RTE processing options "dontProtectUnknownTags_rte"
and "dontConvAmpInNBSP_rte" come from a legacy point of
view when transforming from DB to the RTE and have never
been set since TYPO3 4.x as a default for installations.

Additionally the option "dontConvBRtoParagraph" which was used
for setups without RTE where people just wrote plain HTML is
removed, so BR tags are kept as they are (which is a regular use case
in any RTE). This option was set with HtmlArea at all time
(same with other RTEs).

The options are very custom and when transferring data to the RTE
the best practice is applied by default since a decade (original code
was from CVS by Kasper - before the RTE was enabled by default).

Resolves: #79273
Releases: master
Change-Id: Ib05955b7294fc8f5600d91de443f519176b58634
Reviewed-on: https://review.typo3.org/51264
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
Reviewed-by: Susanne Moog <susanne.moog@typo3.org>
Tested-by: Susanne Moog <susanne.moog@typo3.org>
typo3/sysext/core/Classes/Html/RteHtmlParser.php
typo3/sysext/core/Documentation/Changelog/master/Breaking-79273-RemovedRteHtmlParserProcOptions.rst [new file with mode: 0644]
typo3/sysext/core/Tests/Unit/Html/RteHtmlParserTest.php
typo3/sysext/rtehtmlarea/Configuration/PageTSconfig/Proc/pageTSConfig.txt
typo3/sysext/rtehtmlarea/Documentation/DefaultConfigurations/Default/Index.rst

index 8850d64..f1c510e 100644 (file)
@@ -978,13 +978,9 @@ class RteHtmlParser extends HtmlParser
                 $subLines = $this->divideIntoLines($v, $count - 1, true);
                 // So, if there happened to be sub-nesting of p, this is written directly as the new content of THIS section. (This would be considered 'an error')
                 if (!is_array($subLines)) {
-                    //... but if NO subsection was found, we process it as a TRUE line without erronous content:
+                    //... but if NO subsection was found, we process it as a TRUE line without erroneous content:
                     $subLines = [$subLines];
-                    // process break-tags, if configured for. Simply, the breaktags will here be treated like if each was a line of content...
-                    if (!$this->procOptions['dontConvBRtoParagraph']) {
-                        $subLines = preg_split('/<br[[:space:]]*[\\/]?>/i', $v);
-                    }
-                    // Traverse sublines (there is typically one, except if <br/> has been converted to lines as well!)
+                    // Traverse sublines (there is typically one)
                     foreach ($subLines as $sk => $value) {
                         // Clear up the subline for DB.
                         $subLines[$sk] = $this->HTMLcleaner_db($subLines[$sk]);
@@ -1060,9 +1056,7 @@ class RteHtmlParser extends HtmlParser
     {
         // First, setting configuration for the HTMLcleaner function. This will process each line between the <div>/<p> section on their way to the RTE
         $keepTags = $this->getKeepTags('rte');
-        // Default: remove unknown tags.
-        $kUknown = $this->procOptions['dontProtectUnknownTags_rte'] ? 0 : 'protect';
-        // Divide the content into lines, based on LF:
+        // Divide the content into lines
         $parts = explode(LF, $value);
         foreach ($parts as $k => $v) {
             // Processing of line content:
@@ -1070,13 +1064,13 @@ class RteHtmlParser extends HtmlParser
             if (trim($parts[$k]) === '') {
                 $parts[$k] = '&nbsp;';
             } else {
-                // Clean the line content:
-                $parts[$k] = $this->HTMLcleaner($parts[$k], $keepTags, $kUknown);
-                if (!$this->procOptions['dontConvAmpInNBSP_rte']) {
-                    $parts[$k] = str_replace('&amp;nbsp;', '&nbsp;', $parts[$k]);
-                }
+                // Clean the line content, keeping unknown tags (as they can be removed in the entryHTMLparser)
+                $parts[$k] = $this->HTMLcleaner($parts[$k], $keepTags, 'protect');
+                // convert double-encoded &nbsp; into regular &nbsp; however this could also be reversed via the exitHTMLparser
+                // This was previously an option to disable called "dontConvAmpInNBSP_rte"
+                $parts[$k] = str_replace('&amp;nbsp;', '&nbsp;', $parts[$k]);
             }
-            // Wrapping the line in <$dT> if not already wrapped and does not contain an hr tag
+            // Wrapping the line in <p> tags if not already wrapped and does not contain an hr tag
             if (!preg_match('/<(hr)(\\s[^>\\/]*)?[[:space:]]*\\/?>/i', $parts[$k])) {
                 $testStr = strtolower(trim($parts[$k]));
                 if (substr($testStr, 0, 4) != '<div' || substr($testStr, -6) != '</div>') {
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Breaking-79273-RemovedRteHtmlParserProcOptions.rst b/typo3/sysext/core/Documentation/Changelog/master/Breaking-79273-RemovedRteHtmlParserProcOptions.rst
new file mode 100644 (file)
index 0000000..8d26dfe
--- /dev/null
@@ -0,0 +1,44 @@
+.. include:: ../../Includes.txt
+
+=====================================================
+Breaking: #79273 - Removed RteHtmlParser proc options
+=====================================================
+
+See :issue:`79273`
+
+Description
+===========
+
+The following TSconfig options for processing content of RTE fields have been removed:
+
+* RTE.default.proc.dontConvBRtoParagraph
+* RTE.default.proc.dontProtectUnknownTags_rte
+* RTE.default.proc.dontConvAmpInNBSP_rte
+
+
+Impact
+======
+
+Setting any of these options have no effect anymore.
+
+Content coming from the database towards the RTE will now always keep unknown tags (but HSC'ed), and never have any
+double-encoded &nbsp; characters - this was a default since a decade already.
+
+Content stored in the database will now always treat <br> tags as intentional and not treat them like paragraphs, a behaviour which
+is common in modern Rich Text Editors.
+
+
+Affected Installations
+======================
+
+Installations explicitly setting `RTE.default.proc.dontConvBRtoParagraph=0`, `RTE.default.proc.dontProtectUnknownTags_rte=1` or
+`RTE.default.proc.dontConvAmpInNBSP_rte=1` might experience different results when editing and saving content via an RTE.
+
+
+Migration
+=========
+
+Remove the TSconfig options, as they have no effect anymore. Any custom implementation which is necessary should be handled
+via separate entryHtmlParser and exitHtmlParsers in both directions.
+
+.. index:: RTE, TSConfig
\ No newline at end of file
index 9fbee55..7c7f128 100644 (file)
@@ -28,7 +28,6 @@ class RteHtmlParserTest extends \TYPO3\CMS\Components\TestingFramework\Core\Unit
     {
         $this->subject = new \TYPO3\CMS\Core\Html\RteHtmlParser();
         $this->subject->procOptions = [
-            'dontConvBRtoParagraph' => '1',
             'allowTagsOutside' => 'hr, address',
             'overruleMode' => 'ts_css'
         ];
index 487859b..db23985 100644 (file)
@@ -15,10 +15,6 @@ RTE.default.proc {
                ## We assume that CSS Styled Content is used.
        overruleMode = ts_css
 
-               ## DO NOT CONVERT BR TAGS INTO LINEBREAKS
-               ## br tags in the content are assumed to be intentional.
-       dontConvBRtoParagraph = 1
-
                ## TAGS ALLOWED OUTSIDE P
        allowTagsOutside = address, article, aside, blockquote, footer, header, hr, nav, section, div
 
index ba2dede..8a8cdbf 100644 (file)
@@ -50,17 +50,6 @@ We assume that CSS Styled Content is used.
 
    overruleMode = ts_css
 
-DO NOT CONVERT BR TAGS INTO LINEBREAKS
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-br tags in the content are assumed to be intentional.
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-::
-
-   dontConvBRtoParagraph = 1
-
-
 TAGS ALLOWED OUTSIDE P & DIV
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^