Fixed bug #7383: Added option to delete unused marker in parsehtml::substituteMarkerA...
authorBenni Mack <benni.mack@typo3.org>
Thu, 7 Feb 2008 11:15:43 +0000 (11:15 +0000)
committerBenni Mack <benni.mack@typo3.org>
Thu, 7 Feb 2008 11:15:43 +0000 (11:15 +0000)
git-svn-id: https://svn.typo3.org/TYPO3v4/Core/trunk@3119 709f56b5-9817-0410-a4d7-c38de5d9e867

ChangeLog
t3lib/class.t3lib_parsehtml.php

index 0e2f810..2811ad2 100755 (executable)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2008-02-07  Benjamin Mack  <mack@xnos.org>
+
+       * Fixed bug #7383: Added option to delete unused marker in parsehtml::substituteMarkerArray (thanks to Steffen Kamper)
+
 2008-02-06  Oliver Hader  <oh@inpublica.de>
 
        * (minor) Fixed bug: IRRE - Deleted records are added to array of related records
index 28ff940..3de6095 100644 (file)
@@ -216,7 +216,7 @@ class t3lib_parsehtml       {
                return $before.$between.$after;
        }
 
-       
+
        /**
         * Substitutes a marker string in the input content (by a simple str_replace())
         *
@@ -239,21 +239,27 @@ class t3lib_parsehtml     {
         * @param       array           The array of key/value pairs being marker/content values used in the substitution. For each element in this array the function will substitute a marker in the content stream with the content.
         * @param       string          A wrap value - [part 1] | [part 2] - for the markers before substitution
         * @param       boolean         If set, all marker string substitution is done with upper-case markers.
+        * @param       boolean         If set, all unused marker are deleted.
         * @return      string          The processed output stream
         * @see substituteMarker(), substituteMarkerInObject(), TEMPLATE()
         */
-       public function substituteMarkerArray($content, $markContentArray, $wrap='', $uppercase=0)      {
-               if (is_array($markContentArray))        {
-                       $wrapArr = t3lib_div::trimExplode('|',$wrap);
-                       foreach($markContentArray as $marker => $markContent)   {
-                               if($uppercase)  {
-                                       $marker = strtoupper($marker);
+       public function substituteMarkerArray($content, $markContentArray, $wrap='', $uppercase=0, $deleteUnused=0) {
+               if (is_array($markContentArray)) {
+                       $wrapArr = t3lib_div::trimExplode('|', $wrap);
+                       foreach ($markContentArray as $marker => $markContent) {
+                               if ($uppercase) {
+                                               // use strtr instead of strtoupper to avoid locale problems with Turkish
+                                       $marker = strtr($marker,'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ');
                                }
-                               if(count($wrapArr)>0) {
+                               if (count($wrapArr) > 0) {
                                        $marker = $wrapArr[0].$marker.$wrapArr[1];
                                }
                                $content = str_replace($marker, $markContent, $content);
                        }
+                       
+                       if ($deleteUnused) {
+                               $content = preg_replace('/'.preg_quote($wrapArr[0]).'([A-Z0-9_-|]*)'.preg_quote($wrapArr[1]).'/is', '', $content);
+                       }
                }
                return $content;
        }