Fixed bug #9386: Acronym plugin encoding problem
[Packages/TYPO3.CMS.git] / typo3 / sysext / rtehtmlarea / extensions / Acronym / class.tx_rtehtmlarea_acronym.php
index 51b33e4..1721772 100644 (file)
@@ -2,7 +2,7 @@
 /***************************************************************
 *  Copyright notice
 *
 /***************************************************************
 *  Copyright notice
 *
-*  (c) 2008 Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
+*  (c) 2008 Stanislas Rolland <typo3(arobas)sjbr.ca>
 *  All rights reserved
 *
 *  This script is part of the Typo3 project. The Typo3 project is
 *  All rights reserved
 *
 *  This script is part of the Typo3 project. The Typo3 project is
@@ -24,7 +24,7 @@
 /**
  * Acronym extension for htmlArea RTE
  *
 /**
  * Acronym extension for htmlArea RTE
  *
- * @author Stanislas Rolland <stanislas.rolland(arobas)fructifor.ca>
+ * @author Stanislas Rolland <typo3(arobas)sjbr.ca>
  *
  * TYPO3 SVN ID: $Id$
  *
  *
  * TYPO3 SVN ID: $Id$
  *
@@ -42,14 +42,14 @@ class tx_rtehtmlarea_acronym extends tx_rtehtmlareaapi {
        protected $thisConfig;                                  // Reference to RTE PageTSConfig
        protected $toolbar;                                     // Reference to RTE toolbar array
        protected $LOCAL_LANG;                                  // Frontend language array
        protected $thisConfig;                                  // Reference to RTE PageTSConfig
        protected $toolbar;                                     // Reference to RTE toolbar array
        protected $LOCAL_LANG;                                  // Frontend language array
-       
+
        protected $pluginButtons = 'acronym';
        protected $convertToolbarForHtmlAreaArray = array (
                'acronym'       => 'Acronym',
                );
        protected $pluginButtons = 'acronym';
        protected $convertToolbarForHtmlAreaArray = array (
                'acronym'       => 'Acronym',
                );
-       private $acronymIndex = 0;
-       private $abbraviationIndex = 0;
-       
+       protected $acronymIndex = 0;
+       protected $abbraviationIndex = 0;
+
        /**
         * Return tranformed content
         *
        /**
         * Return tranformed content
         *
@@ -58,16 +58,16 @@ class tx_rtehtmlarea_acronym extends tx_rtehtmlareaapi {
         * @return      string          the transformed content
         */
        public function transformContent($content) {
         * @return      string          the transformed content
         */
        public function transformContent($content) {
-               
+
                        // <abbr> was not supported by IE before verison 7
                if ($this->htmlAreaRTE->client['BROWSER'] == 'msie' && $this->htmlAreaRTE->client['VERSION'] < 7) {
                                // change <abbr> to <acronym>
                        $content = preg_replace('/<(\/?)abbr/i', "<$1acronym", $content);
                }
                        // <abbr> was not supported by IE before verison 7
                if ($this->htmlAreaRTE->client['BROWSER'] == 'msie' && $this->htmlAreaRTE->client['VERSION'] < 7) {
                                // change <abbr> to <acronym>
                        $content = preg_replace('/<(\/?)abbr/i', "<$1acronym", $content);
                }
-               
+
                return $content;
        }
                return $content;
        }
-       
+
        /**
         * Return JS configuration of the htmlArea plugins registered by the extension
         *
        /**
         * Return JS configuration of the htmlArea plugins registered by the extension
         *
@@ -80,7 +80,7 @@ class tx_rtehtmlarea_acronym extends tx_rtehtmlareaapi {
         *      RTEarea['.$RTEcounter.']["buttons"]["button-id"]["property"] = "value";
         */
        public function buildJavascriptConfiguration($RTEcounter) {
         *      RTEarea['.$RTEcounter.']["buttons"]["button-id"]["property"] = "value";
         */
        public function buildJavascriptConfiguration($RTEcounter) {
-               
+
                $registerRTEinJavascriptString = '';
                $button = 'acronym';
                if (in_array($button, $this->toolbar)) {
                $registerRTEinJavascriptString = '';
                $button = 'acronym';
                if (in_array($button, $this->toolbar)) {
@@ -91,7 +91,7 @@ class tx_rtehtmlarea_acronym extends tx_rtehtmlareaapi {
                        $registerRTEinJavascriptString .= '
                        RTEarea['.$RTEcounter.'].buttons.'. $button .'.pathAcronymModule = "../../mod2/acronym.php";
                        RTEarea['.$RTEcounter.'].buttons.'. $button .'.acronymUrl = "' . $this->htmlAreaRTE->writeTemporaryFile('', 'acronym_'.$this->htmlAreaRTE->contentLanguageUid, 'js', $this->buildJSAcronymArray($this->htmlAreaRTE->contentLanguageUid)) . '";';
                        $registerRTEinJavascriptString .= '
                        RTEarea['.$RTEcounter.'].buttons.'. $button .'.pathAcronymModule = "../../mod2/acronym.php";
                        RTEarea['.$RTEcounter.'].buttons.'. $button .'.acronymUrl = "' . $this->htmlAreaRTE->writeTemporaryFile('', 'acronym_'.$this->htmlAreaRTE->contentLanguageUid, 'js', $this->buildJSAcronymArray($this->htmlAreaRTE->contentLanguageUid)) . '";';
-                       
+
                                // <abbr> was not supported by IE before version 7
                        if ($this->htmlAreaRTE->client['BROWSER'] == 'msie' && $this->htmlAreaRTE->client['VERSION'] < 7) {
                                $this->AbbreviationIndex = 0;
                                // <abbr> was not supported by IE before version 7
                        if ($this->htmlAreaRTE->client['BROWSER'] == 'msie' && $this->htmlAreaRTE->client['VERSION'] < 7) {
                                $this->AbbreviationIndex = 0;
@@ -100,24 +100,26 @@ class tx_rtehtmlarea_acronym extends tx_rtehtmlareaapi {
                        RTEarea['.$RTEcounter.'].buttons.'. $button .'.noAcronym = ' . ($this->acronymIndex ? 'false' : 'true') . ';
                        RTEarea['.$RTEcounter.'].buttons.'. $button .'.noAbbr =  ' . ($this->AbbreviationIndex ? 'false' : 'true') . ';';
                }
                        RTEarea['.$RTEcounter.'].buttons.'. $button .'.noAcronym = ' . ($this->acronymIndex ? 'false' : 'true') . ';
                        RTEarea['.$RTEcounter.'].buttons.'. $button .'.noAbbr =  ' . ($this->AbbreviationIndex ? 'false' : 'true') . ';';
                }
-               
+
                return $registerRTEinJavascriptString;
        }
                return $registerRTEinJavascriptString;
        }
-       
+
        /**
         * Return an acronym array for the Acronym plugin
         *
         * @return      string          acronym Javascript array
         */
        function buildJSAcronymArray($languageUid) {
        /**
         * Return an acronym array for the Acronym plugin
         *
         * @return      string          acronym Javascript array
         */
        function buildJSAcronymArray($languageUid) {
-               global $TYPO3_CONF_VARS, $TYPO3_DB;
-               
+               global $TYPO3_DB;
+
+               $charset = $GLOBALS['TYPO3_CONF_VARS']['BE']['forceCharset'] ? $GLOBALS['TYPO3_CONF_VARS']['BE']['forceCharset'] : 'iso-8859-1';
+
                $button = 'acronym';
                $PIDList = 0;
                if (is_array($this->thisConfig['buttons.']) && is_array($this->thisConfig['buttons.'][$button.'.']) && trim($this->thisConfig['buttons.'][$button.'.']['PIDList'])) {
                        $PIDList = implode(',', t3lib_div::trimExplode(',', $this->thisConfig['buttons.'][$button.'.']['PIDList']));
                }
                $button = 'acronym';
                $PIDList = 0;
                if (is_array($this->thisConfig['buttons.']) && is_array($this->thisConfig['buttons.'][$button.'.']) && trim($this->thisConfig['buttons.'][$button.'.']['PIDList'])) {
                        $PIDList = implode(',', t3lib_div::trimExplode(',', $this->thisConfig['buttons.'][$button.'.']['PIDList']));
                }
-               $linebreak = $TYPO3_CONF_VARS['EXTCONF'][$this->htmlAreaRTE->ID]['enableCompressedScripts'] ? '' : chr(10);
+               $linebreak = $GLOBALS['TYPO3_CONF_VARS']['EXTCONF'][$this->htmlAreaRTE->ID]['enableCompressedScripts'] ? '' : chr(10);
                $JSAcronymArray .= 'acronyms = { ' . $linebreak;
                $JSAbbreviationArray .= 'abbreviations = { ' . $linebreak;
                $table = 'tx_rtehtmlarea_acronym';
                $JSAcronymArray .= 'acronyms = { ' . $linebreak;
                $JSAbbreviationArray .= 'abbreviations = { ' . $linebreak;
                $table = 'tx_rtehtmlarea_acronym';
@@ -131,8 +133,8 @@ class tx_rtehtmlarea_acronym extends tx_rtehtmlareaapi {
                $whereClause .= t3lib_BEfunc::deleteClause($table);
                $res = $TYPO3_DB->exec_SELECTquery('type,term,acronym', $table, $whereClause);
                while($acronymRow = $TYPO3_DB->sql_fetch_assoc($res))    {
                $whereClause .= t3lib_BEfunc::deleteClause($table);
                $res = $TYPO3_DB->exec_SELECTquery('type,term,acronym', $table, $whereClause);
                while($acronymRow = $TYPO3_DB->sql_fetch_assoc($res))    {
-                       if( $acronymRow['type'] == 1) $JSAcronymArray .= (($this->acronymIndex++)?',':'') . '"' . $acronymRow['acronym'] . '":"' . $acronymRow['term'] . '"' . $linebreak;
-                       if ($acronymRow['type'] == 2) $JSAbbreviationArray .= (($this->AbbreviationIndex++)?',':'') . '"' . $acronymRow['acronym'] . '":"' . $acronymRow['term'] . '"' . $linebreak;
+                       if( $acronymRow['type'] == 1) $JSAcronymArray .= (($this->acronymIndex++)?',':'') . '"' . $GLOBALS['LANG']->csConvObj->utf8_encode($acronymRow['term'], $charset) . '":"' . $GLOBALS['LANG']->csConvObj->utf8_encode($acronymRow['acronym'], $charset) . '"' . $linebreak;
+                       if ($acronymRow['type'] == 2) $JSAbbreviationArray .= (($this->AbbreviationIndex++)?',':'') . '"' . $GLOBALS['LANG']->csConvObj->utf8_encode($acronymRow['term'], $charset) . '":"' . $GLOBALS['LANG']->csConvObj->utf8_encode($acronymRow['acronym'], $charset) . '"' . $linebreak;
                }
                $JSAcronymArray .= '};' . $linebreak;
                $JSAbbreviationArray .= '};' . $linebreak;
                }
                $JSAcronymArray .= '};' . $linebreak;
                $JSAbbreviationArray .= '};' . $linebreak;