Added Feature #13418: Allow t3lib_div::_GETset() to set specified key
authorChristian Kuhn <lolli@schwarzbu.ch>
Fri, 26 Mar 2010 17:58:33 +0000 (17:58 +0000)
committerChristian Kuhn <lolli@schwarzbu.ch>
Fri, 26 Mar 2010 17:58:33 +0000 (17:58 +0000)
git-svn-id: https://svn.typo3.org/TYPO3v4/Core/trunk@7193 709f56b5-9817-0410-a4d7-c38de5d9e867

ChangeLog
t3lib/class.t3lib_div.php

index b96cc31..b59cad9 100755 (executable)
--- a/ChangeLog
+++ b/ChangeLog
@@ -8,6 +8,7 @@
 
 2010-03-26  Christian Kuhn  <lolli@schwarzbu.ch>
 
+       * Added Feature #13418: Allow t3lib_div::_GETset() to set specified key (Thanks to Felix Oertel)
        * Fixed bug #13595: loginform has <table> stdWrap, but <div>s inside [css styled content] (Thanks to Susanne Moog)
        * Fixed bug #13792: Double semicolon in css styled content (Thanks to Susanne Moog)
        * Fixed bug #13386: mod.web_list.hideTables doesn't accept spaces (Thanks to Marcel Greter)
index 99af3a5..b763cb2 100644 (file)
@@ -322,25 +322,54 @@ final class t3lib_div {
        }
 
        /**
-        * Writes input value to $_GET
+        * Writes input value to $_GET.
         * Usage: 2
         *
-        * @param       mixed           Array to write to $_GET. Values should NOT be escaped at input time (but will be escaped before writing according to TYPO3 standards).
-        * @param       string          Alternative key; If set, this will not set the WHOLE GET array, but only the key in it specified by this value!
+        * @param mixed $inputGet
+        *        array or single value to write to $_GET. Values should NOT be
+        *        escaped at input time (but will be escaped before writing
+        *        according to TYPO3 standards).
+        * @param string $key
+        *        alternative key; If set, this will not set the WHOLE GET array,
+        *        but only the key in it specified by this value!
+        *        You can specify to replace keys on deeper array levels by
+        *        separating the keys with a pipe.
+        *        Example: 'parentKey|childKey' will result in
+        *        array('parentKey' => array('childKey' => $inputGet))
+        *
         * @return      void
         */
-       public static function _GETset($inputGet,$key='')       {
-                       // ADDS slashes since TYPO3 standard currently is that slashes MUST be applied (regardless of magic_quotes setting).
-               if (strcmp($key,''))    {
-                       if (is_array($inputGet)) {
-                               self::addSlashesOnArray($inputGet);
+       public static function _GETset($inputGet, $key = '') {
+                       // adds slashes since TYPO3 standard currently is that slashes
+                       // must be applied (regardless of magic_quotes setting)
+               if (is_array($inputGet)) {
+                       self::addSlashesOnArray($inputGet);
+               } else {
+                       $inputGet = addslashes($inputGet);
+               }
+
+               if ($key != '') {
+                       if (strpos($key, '|') !== FALSE) {
+                               $pieces = explode('|', $key);
+                               $newGet = array();
+                               $pointer =& $newGet;
+                               foreach ($pieces as $piece) {
+                                       $pointer =& $pointer[$piece];
+                               }
+                               $pointer = $inputGet;
+                               $mergedGet = self::array_merge_recursive_overrule(
+                                       $_GET, $newGet
+                               );
+
+                               $_GET = $mergedGet;
+                               $GLOBALS['HTTP_GET_VARS'] = $mergedGet;
                        } else {
-                               $inputGet = addslashes($inputGet);
+                               $_GET[$key] = $inputGet;
+                               $GLOBALS['HTTP_GET_VARS'][$key] = $inputGet;
                        }
-                       $GLOBALS['HTTP_GET_VARS'][$key] = $_GET[$key] = $inputGet;
                } elseif (is_array($inputGet)) {
-                       self::addSlashesOnArray($inputGet);
-                       $GLOBALS['HTTP_GET_VARS'] = $_GET = $inputGet;
+                       $_GET = $inputGet;
+                       $GLOBALS['HTTP_GET_VARS'] = $inputGet;
                }
        }