[!!!][TASK] Remove RTE proc.transformBoldAndItalicTags option 89/51289/5
authorBenni Mack <benni@typo3.org>
Thu, 12 Jan 2017 15:41:30 +0000 (16:41 +0100)
committerSusanne Moog <susanne.moog@typo3.org>
Thu, 12 Jan 2017 17:49:28 +0000 (18:49 +0100)
The option transformBoldAndItalicTags is there to convert
<i> and <b> tags from the DB to <strong> and <em> for the RTE.

When saving, all tags are converted back to <i> and <b>
before storing the content in the database again.

This is actually a (weird) shortcut due to historical reasons,
and can easily be set up by the HTMLparser directly using
the tags.[tagname].remap = [newtagname].

This syntax can be used directly to enable this functionality
again

RTE.default.proc {
        # make <strong> and <em> tags when sending to the RTE
    HTMLparser_rte {
            tags {
                b.remap = strong
                i.remap = em
            }
    }
        # make <b> and <i> tags when sending to the DB
    HTMLparser_db {
        tags {
            strong.remap = B
            em.remap = I
        }
    }
}

The option is removed and the explicit (and IMHO more understandable)
syntax is used in the RTE configuration of HTMLArea.

If the InlineElements functionality of HTMLarea is enabled,
then the remapping is not done, as any tag (b, i, strong, em)
is kept as is, becoming more flexible.

In any case, any "unification" if necessary, can also be
done the same way via the HTMLparser for the frontend
when outputting the content.

Resolving: #79300
Releases: master
Change-Id: I354b0ccd1948ea7d018c7135c4694e0c0f9b72b8
Reviewed-on: https://review.typo3.org/51289
Reviewed-by: Frans Saris <franssaris@gmail.com>
Tested-by: TYPO3com <no-reply@typo3.com>
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-79300-RemovedRTEProctransformBoldAndItalicTagsOption.rst [new file with mode: 0644]
typo3/sysext/rtehtmlarea/Configuration/PageTSconfig/Extensions/InlineElements/pageTSConfig.txt
typo3/sysext/rtehtmlarea/Configuration/PageTSconfig/Proc/pageTSConfig.txt

index bc6094b..9f35aa9 100644 (file)
@@ -806,8 +806,8 @@ class RteHtmlParser extends HtmlParser
     }
 
     /**
-     * Creates an array of configuration for the HTMLcleaner function based on whether content go TO or FROM the Rich Text Editor ($direction)
-     * Unless "tagList" is given, the function will cache the configuration for next time processing goes on. (In this class that is the case only if we are processing a bulletlist)
+     * Creates an array of configuration for the HTMLcleaner function based on whether content
+     * go TO or FROM the Rich Text Editor ($direction)
      *
      * @param string $direction The direction of the content being processed by the output configuration; "db" (content going into the database FROM the rte) or "rte" (content going into the form)
      * @return array Configuration array
@@ -828,28 +828,11 @@ class RteHtmlParser extends HtmlParser
             // Based on the direction of content, set further options:
             switch ($direction) {
                 case 'rte':
-                    if (!isset($this->procOptions['transformBoldAndItalicTags']) || $this->procOptions['transformBoldAndItalicTags']) {
-                        // Transform bold/italics tags to strong/em
-                        if (isset($keepTags['b'])) {
-                            $keepTags['b'] = ['remap' => 'STRONG'];
-                        }
-                        if (isset($keepTags['i'])) {
-                            $keepTags['i'] = ['remap' => 'EM'];
-                        }
-                    }
-                    // Transforming keepTags array so it can be understood by the HTMLcleaner function. This basically converts the format of the array from TypoScript (having .'s) to plain multi-dimensional array.
+                    // Transforming keepTags array so it can be understood by the HTMLcleaner function.
+                    // This basically converts the format of the array from TypoScript (having dots) to plain multi-dimensional array.
                     list($keepTags) = $this->HTMLparserConfig($this->procOptions['HTMLparser_rte.'], $keepTags);
                     break;
                 case 'db':
-                    if (!isset($this->procOptions['transformBoldAndItalicTags']) || $this->procOptions['transformBoldAndItalicTags']) {
-                        // Transform strong/em back to bold/italics:
-                        if (isset($keepTags['strong'])) {
-                            $keepTags['strong'] = ['remap' => 'b'];
-                        }
-                        if (isset($keepTags['em'])) {
-                            $keepTags['em'] = ['remap' => 'i'];
-                        }
-                    }
                     // Setting up span tags if they are allowed:
                     if (isset($keepTags['span'])) {
                         $keepTags['span'] = [
@@ -865,7 +848,7 @@ class RteHtmlParser extends HtmlParser
                             $keepTags['span']['fixAttrib']['class']['list'] = $this->allowedClasses;
                         }
                     }
-                    // Setting further options, getting them from the processiong options:
+                    // Setting further options, getting them from the processing options
                     $TSc = $this->procOptions['HTMLparser_db.'];
                     if (!$TSc['globalNesting']) {
                         $TSc['globalNesting'] = 'b,i,u,a,center,font,sub,sup,strong,em,strike,span';
@@ -877,7 +860,7 @@ class RteHtmlParser extends HtmlParser
                     list($keepTags) = $this->HTMLparserConfig($TSc, $keepTags);
                     break;
             }
-            // Caching (internally, in object memory) the result unless tagList is set:
+            // Caching (internally, in object memory) the result
             $this->getKeepTags_cache[$direction] = $keepTags;
         }
         // Return result:
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Breaking-79300-RemovedRTEProctransformBoldAndItalicTagsOption.rst b/typo3/sysext/core/Documentation/Changelog/master/Breaking-79300-RemovedRTEProctransformBoldAndItalicTagsOption.rst
new file mode 100644 (file)
index 0000000..d88a25e
--- /dev/null
@@ -0,0 +1,86 @@
+.. include:: ../../Includes.txt
+
+=====================================================================
+Breaking: #79300 - Removed RTE proc.transformBoldAndItalicTags option
+=====================================================================
+
+See :issue:`79300`
+
+Description
+===========
+
+The RTE processing TSconfig option `RTE.default.proc.transformBoldAndItalicTags` has been removed from the processing
+functionality.
+
+It was a shortcut to change all <b> and <i> tags coming from the database to <strong> and <em> when loading the RTE. In return
+when storing the content again from the RTE, the <strong> and <em> tags were moved to <b> and <i> again.
+
+If an integrator wanted to explicitly disable this functionality (basically having <strong> and <em> in the database), he/she needed
+to explicitly disable the option (setting it to "0", not just unsetting the option via PageTSconfig).
+
+
+Impact
+======
+
+Setting this option does not transform the tags anymore when loading the RTE or storing in DB. Instead, <strong> and <em> are stored
+in the database when editing a record.
+
+
+Affected Installations
+======================
+
+Any installation having custom RTE configuration and explicitly setting this option without having a proper HTMLparser replacement
+mapping in place.
+
+
+Migration
+=========
+
+Any default configuration of RTEHtmlArea that was in place before 8.6.0 has a simple replacement to ensure the same functionality now:
+
+This code does the same as having `proc.transformBoldAndItalicTags=1`:
+
+.. code-block:: typoscript
+
+       RTE.default.proc {
+               # make <strong> and <em> tags when sending to the RTE
+               HTMLparser_rte {
+                       tags {
+                               b.remap = strong
+                               i.remap = em
+                       }
+               }
+               # make <b> and <i> tags when sending to the DB
+               HTMLparser_db {
+                       tags {
+                               strong.remap = B
+                               em.remap = I
+                       }
+               }
+       }
+
+If having the option explicitly turned off (allowing strong, b, em, and i tags) is wanted the configuration should look like this:
+
+.. code-block:: typoscript
+
+       RTE.default.proc {
+               # no remapping should happen, tags should stay as they are
+               HTMLparser_rte {
+                       tags {
+                               b.remap >
+                               i.remap >
+                       }
+               }
+               # no remapping should happen, tags should stay as they are
+               HTMLparser_db {
+                       tags {
+                               strong.remap >
+                               em.remap >
+                       }
+               }
+       }
+
+Please note that this migration is necessary if custom RTE options are in place, as the default RTE HTMLArea configuration does that
+automatically.
+
+.. index:: RTE, TSConfig
\ No newline at end of file
index 252b173..9d929e1 100644 (file)
@@ -2,6 +2,31 @@
 # Additonal proc options in Page TSconfig for Inline Elements extension
 # ***************************************************************************************
 
-       ## DO NOT REMAP BOLD AND ITALIC TO STRONG AND EMPHASIS AND VICE VERSA
-RTE.default.proc.transformBoldAndItalicTags = 0
-RTE.default.FE.proc.transformBoldAndItalicTags = 0
+# Previously called "transformBoldAndItalicTags"
+# When storing content in the DB, all <strong> and <em> tags are transferred to <b> and <i>
+# When fetching content from the DB, all <b> and <i> tags are transferred to <strong> and <em>
+# This is explicitly disabled so all tags remain the same in RTE and DB
+RTE.default.proc {
+       HTMLparser_db {
+               tags {
+                       strong.remap >
+                       em.remap >
+               }
+       }
+       HTMLparser_rte {
+               tags {
+                       b.remap >
+                       i.remap >
+               }
+       }
+}
+RTE.default.proc.FE {
+       HTMLparser_db.tags {
+               strong.remap >
+               em.remap >
+       }
+       HTMLparser_rte.tags {
+               b.remap >
+               i.remap >
+       }
+}
index db23985..45a3047 100644 (file)
@@ -35,9 +35,6 @@ RTE.default.proc {
                ## ALLOWED P ATTRIBUTES
        keepPDIVattribs = class, align, id, title, dir, lang, xml:lang, itemscope, itemtype, itemprop
 
-               ## REMAP BOLD AND ITALIC TO STRONG AND EMPHASIS AND VICE VERSA
-       transformBoldAndItalicTags = 1
-
                ## CONTENT TO DATABASE
        entryHTMLparser_db = 1
        entryHTMLparser_db {
@@ -104,6 +101,21 @@ RTE.default.proc {
                        ## If this list of tags is not set, it will default to: b,i,u,br,center,hr,sub,sup,strong,em,li,ul,ol,blockquote,strike.
                        ## However, we want to keep xml:lang attribute on most tags and tags from the default list where cleaned on entry.
                noAttrib = br
+
+                       # Previously called "transformBoldAndItalicTags"
+                       # When storing content in the DB, all <strong> and <em> tags are transferred to <b> and <i>
+               tags {
+                       strong.remap = B
+                       em.remap = I
+               }
+       }
+       HTMLparser_rte {
+                       # Previously called "transformBoldAndItalicTags"
+                       # When fetching content from the DB, all <b> and <i> tags are transferred to <strong> and <em>
+               tags {
+                       b.remap = strong
+                       i.remap = em
+               }
        }
 
        exitHTMLparser_db = 1