D8 - Fix url function
authorColeman Watts <coleman@civicrm.org>
Mon, 30 Nov 2015 00:12:32 +0000 (19:12 -0500)
committerColeman Watts <coleman@civicrm.org>
Mon, 30 Nov 2015 00:12:32 +0000 (19:12 -0500)
CRM/Utils/System.php
CRM/Utils/System/Base.php
CRM/Utils/System/Drupal8.php
CRM/Utils/System/DrupalBase.php
CRM/Utils/System/Joomla.php
CRM/Utils/System/WordPress.php

index 74a1f8e09239a70f432db966d550ca8c62a07f8e..7bf8bcfe28b085a12401cf4fa05f6a7b1cc32f1b 100644 (file)
@@ -269,13 +269,33 @@ class CRM_Utils_System {
   ) {
     $query = self::makeQueryString($query);
 
-    // we have a valid query and it has not yet been transformed
-    if ($htmlize && !empty($query) && strpos($query, '&amp;') === FALSE) {
-      $query = htmlentities($query);
+    // Legacy handling for when the system passes around html escaped strings
+    if (strstr($query, '&amp;')) {
+      $query = html_entity_decode($query);
+    }
+
+    // Extract fragment from path or query if munged together
+    if ($query && strstr($query, '#')) {
+      list($path, $fragment) = explode('#', $query);
+    }
+    if ($path && strstr($path, '#')) {
+      list($path, $fragment) = explode('#', $path);
+    }
+
+    // Extract query from path if munged together
+    if ($path && strstr($path, '?')) {
+      list($path, $extraQuery) = explode('?', $path);
+      $query = $extraQuery . ($query ? "&$query" : '');
     }
 
     $config = CRM_Core_Config::singleton();
-    return $config->userSystem->url($path, $query, $absolute, $fragment, $htmlize, $frontend, $forceBackend);
+    $url = $config->userSystem->url($path, $query, $absolute, $fragment, $frontend, $forceBackend);
+
+    if ($htmlize) {
+      $url = htmlentities($url);
+    }
+
+    return $url;
   }
 
   /**
index 2e5619b8640afd563742c7b21f6a7ef362c2aede..b79e51addc941bb38e930b7635967558374f30ec 100644 (file)
@@ -132,7 +132,6 @@ abstract class CRM_Utils_System_Base {
     $query = NULL,
     $absolute = FALSE,
     $fragment = NULL,
-    $htmlize = TRUE,
     $frontend = FALSE,
     $forceBackend = FALSE
   ) {
index 4592ef3593f1b518435e99dcbf1ec71a37c12200..32a5bc4884ee6889dcafc170ee84d5007ccbc880 100644 (file)
@@ -328,7 +328,6 @@ class CRM_Utils_System_Drupal8 extends CRM_Utils_System_DrupalBase {
     $query = '',
     $absolute = FALSE,
     $fragment = NULL,
-    $htmlize = FALSE,
     $frontend = FALSE,
     $forceBackend = FALSE
   ) {
@@ -357,9 +356,6 @@ class CRM_Utils_System_Drupal8 extends CRM_Utils_System_DrupalBase {
       $url = urldecode($url);
     }
 
-    if ($htmlize) {
-      $url = htmlentities($url);
-    }
     return $url;
   }
 
index fce73f6113382e6d484e38d6c4a2a971a9c39a58..2b0019a81ce20b8d57e8d93d575f92c6ca718904 100644 (file)
@@ -147,7 +147,6 @@ abstract class CRM_Utils_System_DrupalBase extends CRM_Utils_System_Base {
     $query = NULL,
     $absolute = FALSE,
     $fragment = NULL,
-    $htmlize = TRUE,
     $frontend = FALSE,
     $forceBackend = FALSE
   ) {
@@ -162,7 +161,7 @@ abstract class CRM_Utils_System_DrupalBase extends CRM_Utils_System_Base {
 
     $base = $absolute ? $config->userFrameworkBaseURL : $config->useFrameworkRelativeBase;
 
-    $separator = $htmlize ? '&amp;' : '&';
+    $separator = '&';
 
     if (!$config->cleanURL) {
       if (isset($path)) {
index 766e4b477f2a85f4cbf671a54c7f6350e762f412..b063d70adb2372deedc828a1892858db14c954c3 100644 (file)
@@ -251,12 +251,11 @@ class CRM_Utils_System_Joomla extends CRM_Utils_System_Base {
     $query = NULL,
     $absolute = FALSE,
     $fragment = NULL,
-    $htmlize = TRUE,
     $frontend = FALSE,
     $forceBackend = FALSE
   ) {
     $config = CRM_Core_Config::singleton();
-    $separator = $htmlize ? '&amp;' : '&';
+    $separator = '&';
     $Itemid = '';
     $script = '';
     $path = CRM_Utils_String::stripPathChars($path);
index b3a4bd7a87bd9431e12d75c81f2d924b5e582f40..142b8f8b43ed5f0b0ece23d55caa3859fe9eaef9 100644 (file)
@@ -180,13 +180,12 @@ class CRM_Utils_System_WordPress extends CRM_Utils_System_Base {
     $query = NULL,
     $absolute = FALSE,
     $fragment = NULL,
-    $htmlize = TRUE,
     $frontend = FALSE,
     $forceBackend = FALSE
   ) {
     $config = CRM_Core_Config::singleton();
     $script = '';
-    $separator = $htmlize ? '&amp;' : '&';
+    $separator = '&';
     $wpPageParam = '';
     $fragment = isset($fragment) ? ('#' . $fragment) : '';