aboutsummaryrefslogtreecommitdiff
path: root/engine
diff options
context:
space:
mode:
Diffstat (limited to 'engine')
-rw-r--r--engine/lib/elgglib.php41
1 files changed, 38 insertions, 3 deletions
diff --git a/engine/lib/elgglib.php b/engine/lib/elgglib.php
index 5c0f9aa2d..698a34b93 100644
--- a/engine/lib/elgglib.php
+++ b/engine/lib/elgglib.php
@@ -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;
}
/**
@@ -2503,6 +2511,33 @@ function elgg_validate_action_url($link) {
}
/**
+ * 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
*
* @param str $setting