diff options
-rw-r--r-- | engine/lib/elgglib.php | 4 | ||||
-rw-r--r-- | engine/lib/navigation.php | 6 | ||||
-rw-r--r-- | engine/lib/output.php | 23 |
3 files changed, 29 insertions, 4 deletions
diff --git a/engine/lib/elgglib.php b/engine/lib/elgglib.php index d162768f7..282b69fce 100644 --- a/engine/lib/elgglib.php +++ b/engine/lib/elgglib.php @@ -79,9 +79,7 @@ function forward($location = "") { $location = $_SERVER['HTTP_REFERER']; } - if ((substr_count($location, 'http://') == 0) && (substr_count($location, 'https://') == 0)) { - $location = $CONFIG->url . $location; - } + $location = elgg_normalize_url($location); // return new forward location or false to stop the forward or empty string to exit $current_page = current_page_url(); diff --git a/engine/lib/navigation.php b/engine/lib/navigation.php index a5b087bd8..beb154f30 100644 --- a/engine/lib/navigation.php +++ b/engine/lib/navigation.php @@ -92,6 +92,10 @@ function elgg_add_submenu_item(array $item, $context = 'all', $group = 'default' if (!isset($item['text'])) { return FALSE; } + + if (!empty($item['href'])) { + $item['href'] = elgg_normalize_url($item['href']); + } // we use persistent object properties in the submenu // setup function, so normalize the array to an object. @@ -420,7 +424,7 @@ function add_menu($menu_name, $menu_url, $menu_children = array(), $context = "" } $value = new stdClass(); - $value->url = $menu_url; + $value->url = elgg_normalize_url($menu_url); $value->context = $context; $CONFIG->menucontexts[] = $context; diff --git a/engine/lib/output.php b/engine/lib/output.php index 6fd820486..707d0b79a 100644 --- a/engine/lib/output.php +++ b/engine/lib/output.php @@ -140,6 +140,29 @@ function elgg_format_url($url) { } /** + * Converts shorthand urls to absolute urls. + * + * If the url is already absolute or protocol-relative, no change is made. + * + * @example + * elgg_normalize_url(''); // 'http://my.site.com/' + * elgg_normalize_url('pg/dashboard'); // 'http://my.site.com/pg/dashboard' + * elgg_normalize_url('http://google.com/'); // no change + * elgg_normalize_url('//google.com/'); // no change + * + * @param string $url The URL to normalize + * + * @return string The absolute url + */ +function elgg_normalize_url($url) { + if (preg_match("#{^(https?:)?//#i", $url)) { + return $url; + } + + return elgg_get_site_url().$url; +} + +/** * When given a title, returns a version suitable for inclusion in a URL * * @param string $title The title |