CRM-18384 - fix event info urls to avoid link tracking issues
authorjitendrapurohit <jitendra.purohit@webaccessglobal.com>
Wed, 13 Apr 2016 13:15:54 +0000 (18:45 +0530)
committerjitendrapurohit <jitendra.purohit@webaccessglobal.com>
Thu, 14 Apr 2016 10:51:20 +0000 (16:21 +0530)
CRM-18384 - decode incorrect keys in ,  when &amp; is present in url

CRM/Utils/Request.php

index c08f10b99ba1a198d0b223d1d92d95fa56f06bd9..a5357f85f35e00c9b1ad7f2e4d5a5ce356e2919d 100644 (file)
@@ -94,15 +94,15 @@ class CRM_Utils_Request {
     $value = NULL;
     switch ($method) {
       case 'GET':
-        $value = CRM_Utils_Array::value($name, $_GET);
+        $value = self::getValue($name, $_GET);
         break;
 
       case 'POST':
-        $value = CRM_Utils_Array::value($name, $_POST);
+        $value = self::getValue($name, $_POST);
         break;
 
       default:
-        $value = CRM_Utils_Array::value($name, $_REQUEST);
+        $value = self::getValue($name, $_REQUEST);
         break;
     }
 
@@ -136,6 +136,26 @@ class CRM_Utils_Request {
     return $value;
   }
 
+  /**
+   * @param string $name
+   *   Name of the variable to be retrieved.
+   *
+   * @param array $method - '$_GET', '$_POST' or '$_REQUEST'.
+   *
+   * @return mixed
+   *    The value of the variable
+   */
+  public static function getValue($name, $method) {
+    // CRM-18384 - decode incorrect keys generated when &amp; is present in url
+    foreach ($method as $key => $value) {
+      if (strpos($key, 'amp;') !== false) {
+        $method[str_replace('amp;', '', $key)] = $method[$key];
+        unset($method[$key]);
+      }
+    }
+    return CRM_Utils_Array::value($name, $method);
+  }
+
   /**
    * This is a replacement for $_REQUEST which includes $_GET/$_POST
    * but excludes $_COOKIE / $_ENV / $_SERVER.