From d8b6b59ebd747c55d02e09e61fa93fce41eb41ff Mon Sep 17 00:00:00 2001 From: Sam Minnee Date: Tue, 11 May 2010 05:34:38 +0000 Subject: [PATCH] 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 --- core/control/Controller.php | 7 +++++++ tests/ControllerTest.php | 6 ++++++ 2 files changed, 13 insertions(+) diff --git a/core/control/Controller.php b/core/control/Controller.php index 2071c5731..47a3e2496 100755 --- a/core/control/Controller.php +++ b/core/control/Controller.php @@ -549,7 +549,13 @@ class Controller extends RequestHandler { $args = func_get_args(); $result = ""; $querystrings = array(); + $fragmentIdentifier = null; 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) { list($arg, $suffix) = explode('?',$arg,2); $querystrings[] = $suffix; @@ -561,6 +567,7 @@ class Controller extends RequestHandler { } if($querystrings) $result .= '?' . implode('&', $querystrings); + if($fragmentIdentifier) $result .= "#$fragmentIdentifier"; return $result; } diff --git a/tests/ControllerTest.php b/tests/ControllerTest.php index cb697624d..48581fa8a 100755 --- a/tests/ControllerTest.php +++ b/tests/ControllerTest.php @@ -102,6 +102,12 @@ class ControllerTest extends FunctionalTest { ); $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")); } /**