diff options
-rw-r--r-- | CHANGES.txt | 1 | ||||
-rw-r--r-- | engine/lib/elgglib.php | 38 | ||||
-rw-r--r-- | views/default/navigation/pagination.php | 29 | ||||
-rw-r--r-- | views/default/river/item/list.php | 15 |
4 files changed, 43 insertions, 40 deletions
diff --git a/CHANGES.txt b/CHANGES.txt index ca59f83f5..af93f9913 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -43,6 +43,7 @@ http://code.elgg.org/elgg/..... * delete_relationship() triggers the hook delete:relationship and passes the relationship object. #1213 * added ElggEntity::removeRelationship(). #1376. * get_entity_dates() supports order by. #1406. + * added elgg_http_add_url_query_elements(). Services API: * Separated user and api authenticate processing diff --git a/engine/lib/elgglib.php b/engine/lib/elgglib.php index 357141baa..76f8430b7 100644 --- a/engine/lib/elgglib.php +++ b/engine/lib/elgglib.php @@ -2576,12 +2576,12 @@ function elgg_validate_action_url($link) { * @return string */ function elgg_http_remove_url_query_element($url, $element) { - $url = parse_url($url); + $url_array = parse_url($url); - if (isset($url['query'])) { - parse_str($url['query'], $query); + if (isset($url_array['query'])) { + parse_str($url_array['query'], $query); } else { - // nothing to remove. + // nothing to remove. Return original URL. return $url; } @@ -2589,13 +2589,39 @@ function elgg_http_remove_url_query_element($url, $element) { unset($query[$element]); } - $url['query'] = http_build_query($query); - $string = elgg_http_build_url($url); + $url_array['query'] = http_build_query($query); + $string = elgg_http_build_url($url_array); return $string; } /** + * Adds get params to $url + * + * @param str $url + * @param array $elements k/v pairs. + * @return str + */ +function elgg_http_add_url_query_elements($url, array $elements) { + $url_array = parse_url($url); + + if (isset($url_array['query'])) { + parse_str($url_array['query'], $query); + } else { + $query = array(); + } + + foreach ($elements as $k => $v) { + $query[$k] = $v; + } + + $url_array['query'] = http_build_query($query); + $string = elgg_http_build_url($url_array); + + return $string; +} + +/** * Returns the PHP INI setting in bytes * * @param str $setting diff --git a/views/default/navigation/pagination.php b/views/default/navigation/pagination.php index 4e0682367..0512aada1 100644 --- a/views/default/navigation/pagination.php +++ b/views/default/navigation/pagination.php @@ -38,7 +38,7 @@ if (isset($vars['nonefound'])) { $totalpages = ceil($count / $limit); $currentpage = ceil($offset / $limit) + 1; -$baseurl = elgg_http_remove_url_query_element($vars['baseurl'], $word); +//$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') { @@ -51,17 +51,13 @@ if (($count > $limit || $offset > 0) && get_context() != 'widget') { if ($offset > 0) { $prevoffset = $offset - $limit; - if ($prevoffset < 0) $prevoffset = 0; - - $prevurl = $baseurl; - if (substr_count($baseurl,'?')) { - $prevurl .= "&{$word}=" . $prevoffset; - } else { - $prevurl .= "?{$word}=" . $prevoffset; + if ($prevoffset < 0) { + $prevoffset = 0; } - echo "<a href=\"{$prevurl}\" class=\"pagination_previous\">« ". elgg_echo("previous") ."</a> "; + $prevurl = elgg_http_add_url_query_elements($baseurl, array($word => $prevoffset)); + echo "<a href=\"{$prevurl}\" class=\"pagination_previous\">« ". elgg_echo("previous") ."</a> "; } if ($offset > 0 || $offset < ($count - $limit)) { @@ -98,13 +94,9 @@ if (($count > $limit || $offset > 0) && get_context() != 'widget') { echo "<span class=\"pagination_more\">...</span>"; } - $counturl = $baseurl; $curoffset = (($i - 1) * $limit); - if (substr_count($baseurl,'?')) { - $counturl .= "&{$word}=" . $curoffset; - } else { - $counturl .= "?{$word}=" . $curoffset; - } + $counturl = elgg_http_add_url_query_elements($base_url, array($word => $curoffset)); + if ($curoffset != $offset) { echo " <a href=\"{$counturl}\" class=\"pagination_number\">{$i}</a> "; } else { @@ -122,12 +114,7 @@ if (($count > $limit || $offset > 0) && get_context() != 'widget') { $nextoffset--; } - $nexturl = $baseurl; - if (substr_count($baseurl,'?')) { - $nexturl .= "&{$word}=" . $nextoffset; - } else { - $nexturl .= "?{$word}=" . $nextoffset; - } + $nexturl = elgg_http_add_url_query_elements($baseurl, array($word => $nextoffset)); echo " <a href=\"{$nexturl}\" class=\"pagination_next\">" . elgg_echo("next") . " »</a>"; diff --git a/views/default/river/item/list.php b/views/default/river/item/list.php index f9d8dd283..8fcc84bea 100644 --- a/views/default/river/item/list.php +++ b/views/default/river/item/list.php @@ -26,18 +26,12 @@ if ($vars['pagination'] !== false) { $baseurl = $_SERVER['REQUEST_URI']; - $baseurl = elgg_http_remove_url_query_element($baseurl, 'offset'); $nav = ''; if (sizeof($vars['items']) > $vars['limit']) { $newoffset = $vars['offset'] + $vars['limit']; - $urladdition = 'offset='.$newoffset; - if (substr_count($baseurl,'?')) { - $nexturl = $baseurl . '&' . $urladdition; - } else { - $nexturl=$baseurl . '?' . $urladdition; - } + $nexturl = elgg_http_add_url_query_elements($baseurl, array('offset' => $newoffset)); $nav .= '<a class="back" href="'.$nexturl.'">« ' . elgg_echo('previous') . '</a> '; } @@ -47,12 +41,7 @@ if ($newoffset < 0) { $newoffset = 0; } - $urladdition = 'offset='.$newoffset; - if (substr_count($baseurl,'?')) { - $prevurl=$baseurl . '&' . $urladdition; - } else { - $prevurl=$baseurl . '?' . $urladdition; - } + $prevurl = elgg_http_add_url_query_elements($baseurl, array('offset' => $newoffset)); $nav .= '<a class="forward" href="'.$prevurl.'">' . elgg_echo('next') . ' »</a> '; } |