]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
Fixes #959: Added elgg_http_remove_url_query_element() to remove a GET element instea...
authorbrettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
Sun, 31 Jan 2010 00:00:43 +0000 (00:00 +0000)
committerbrettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
Sun, 31 Jan 2010 00:00:43 +0000 (00:00 +0000)
git-svn-id: http://code.elgg.org/elgg/trunk@3866 36083f99-b078-4883-b0ff-0f9b5a30f544

engine/lib/elgglib.php
views/default/navigation/pagination.php
views/default/navigation/viewtype.php
views/default/river/item/list.php

index 5c0f9aa2dbfd56165a3396a94b5825cd7f3fc4b4..698a34b931e6d557893b71ac805d9c1444faf4f0 100644 (file)
@@ -2462,15 +2462,23 @@ interface Friendable {
 }
 
 /**
- * Rebuilds the parsed URL
+ * Rebuilds a parsed (partial) URL
  *
  * @param array $parts Associative array of URL components like parse_url() returns
  * @return str Full URL
  * @since 1.7
  */
 function elgg_http_build_url(array $parts) {
-       $port = (array_key_exists('port', $parts)) ? ":{$parts['port']}" : '';
-       return "{$parts['scheme']}://{$parts['host']}{$port}{$parts['path']}?{$parts['query']}";
+       // build only what's given to us.
+       $scheme = isset($parts['scheme']) ? "{$parts['scheme']}://" : '';
+       $host = isset($parts['host']) ? "{$parts['host']}" : '';
+       $port = isset($parts['port']) ? "{$parts['port']}" : '';
+       $path = isset($parts['path']) ? "{$parts['path']}" : '';
+       $query = isset($parts['query']) ? "?{$parts['query']}" : '';
+
+       $string = $scheme . $host . $port . $path . $query;
+
+       return $string;
 }
 
 /**
@@ -2502,6 +2510,33 @@ function elgg_validate_action_url($link) {
        return elgg_http_build_url($url);
 }
 
+/**
+ * Removes a single elementry from a (partial) url query.
+ *
+ * @param string $url
+ * @param string $element
+ * @return string
+ */
+function elgg_http_remove_url_query_element($url, $element) {
+       $url = parse_url($url);
+
+       if (isset($url['query'])) {
+               parse_str($url['query'], $query);
+       } else {
+               // nothing to remove.
+               return $url;
+       }
+
+       if (array_key_exists($element, $query)) {
+               unset($query[$element]);
+       }
+
+       $url['query'] = http_build_query($query);
+       $string = elgg_http_build_url($url);
+       return $string;
+}
+
+
 /**
  * Returns the PHP INI setting in bytes
  *
index aec005eaf312389a0dbb437741e95c770891405c..4e068236757f34d6b983a2f51fd223295fbb6d64 100644 (file)
@@ -38,7 +38,7 @@ if (isset($vars['nonefound'])) {
 $totalpages = ceil($count / $limit);
 $currentpage = ceil($offset / $limit) + 1;
 
-$baseurl = preg_replace('/[\&\?]'.$word.'\=[0-9]*/',"",$vars['baseurl']);
+$baseurl = elgg_http_remove_url_query_element($vars['baseurl'], $word);
 
 //only display if there is content to paginate through or if we already have an offset
 if (($count > $limit || $offset > 0) && get_context() != 'widget') {
index fcea39b61a186a9ee8908ba0d9a017f80e4ff084..6366ebc0401cbb77e78a32bf5e763fe4655791b2 100644 (file)
@@ -8,7 +8,7 @@
  * @link http://elgg.org/
  */
 
-$baseurl = preg_replace('/[\&\?]search\_viewtype\=[A-Za-z0-9]*/',"",$vars['baseurl']);
+$baseurl = elgg_http_remove_url_query_element($vars['baseurl'], 'search_viewtype');
 
 if ($vars['viewtype'] == "list") {
        $viewtype = "gallery";
index 9508a0da6aa42dcc30aa186057afb3ea216f40cb..f9d8dd283c629c5b3ced21de1362a52166582fbc 100644 (file)
@@ -26,7 +26,7 @@
 
        if ($vars['pagination'] !== false) {
                $baseurl = $_SERVER['REQUEST_URI'];
-               $baseurl = $baseurl = preg_replace('/[\&\?]offset\=[0-9]*/',"",$baseurl);
+               $baseurl = elgg_http_remove_url_query_element($baseurl, 'offset');
 
                $nav = '';