BUGFIX: Fixed Controller::join_links() handling of fragment identifiers

git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/branches/2.4@104580 467b73ca-7a2a-4603-9d3b-597d59a354a9
This commit is contained in:
Sam Minnee 2010-05-11 05:34:38 +00:00
parent 758d294b5d
commit d8b6b59ebd
2 changed files with 13 additions and 0 deletions

View File

@ -549,7 +549,13 @@ class Controller extends RequestHandler {
$args = func_get_args(); $args = func_get_args();
$result = ""; $result = "";
$querystrings = array(); $querystrings = array();
$fragmentIdentifier = null;
foreach($args as $arg) { foreach($args as $arg) {
// Find fragment identifier - keep the last one
if(strpos($arg,'#') !== false) {
list($arg, $fragmentIdentifier) = explode('#',$arg,2);
}
// Find querystrings
if(strpos($arg,'?') !== false) { if(strpos($arg,'?') !== false) {
list($arg, $suffix) = explode('?',$arg,2); list($arg, $suffix) = explode('?',$arg,2);
$querystrings[] = $suffix; $querystrings[] = $suffix;
@ -561,6 +567,7 @@ class Controller extends RequestHandler {
} }
if($querystrings) $result .= '?' . implode('&', $querystrings); if($querystrings) $result .= '?' . implode('&', $querystrings);
if($fragmentIdentifier) $result .= "#$fragmentIdentifier";
return $result; return $result;
} }

View File

@ -102,6 +102,12 @@ class ControllerTest extends FunctionalTest {
); );
$this->assertEquals('/admin/action', Controller::join_links('/admin', 'action')); $this->assertEquals('/admin/action', Controller::join_links('/admin', 'action'));
/* One fragment identifier is handled as you would expect */
$this->assertEquals("my-page?arg=var#subsection", Controller::join_links("my-page#subsection", "?arg=var"));
/* If there are multiple, it takes the last one */
$this->assertEquals("my-page?arg=var#second-section", Controller::join_links("my-page#subsection", "?arg=var", "#second-section"));
} }
/** /**