Index: lib/pkp/classes/core/PKPRequest.inc.php =================================================================== RCS file: /cvs/pkp/classes/core/PKPRequest.inc.php,v --- lib/pkp/classes/core/PKPRequest.inc.php 2 Dec 2009 06:22:41 -0000 1.20 +++ lib/pkp/classes/core/PKPRequest.inc.php 11 Dec 2009 22:27:55 -0000 @@ -640,7 +640,14 @@ */ function getRequestedContextPath($contextLevel = null) { $_this =& PKPRequest::_checkThis(); - return $_this->_delegateToRouter('getRequestedContextPath', $contextLevel); + + // Emulate the old behavior of getRequestedContextPath for + // backwards compatibility. + if (is_null($contextLevel)) { + return $_this->_delegateToRouter('getRequestedContextPaths'); + } else { + return array($_this->_delegateToRouter('getRequestedContextPath', $contextLevel)); + } } /** Index: lib/pkp/classes/core/PKPRouter.inc.php =================================================================== RCS file: /cvs/pkp/classes/core/PKPRouter.inc.php,v --- lib/pkp/classes/core/PKPRouter.inc.php 11 Dec 2009 02:23:36 -0000 1.4 +++ lib/pkp/classes/core/PKPRouter.inc.php 11 Dec 2009 22:27:55 -0000 @@ -135,24 +135,17 @@ } /** - * A Generic call to a context-defined path (e.g. a Press or a Conference's path) + * A generic method to return an array of context paths (e.g. a Press or a Conference/SchedConf paths) * @param $request PKPRequest the request to be routed - * @param $requestedContextLevel int (optional) the number of levels of context to return in the path - * @param $asArray boolean false to return a scalar for the given context level - * @return array of String (each element the path to one context element) + * @param $requestedContextLevel int (optional) the context level to return in the path + * @return array of string (each element the path to one context element) */ - function getRequestedContextPath(&$request, $requestedContextLevel = null, $asArray = true) { - assert(isset($this->_contextDepth) && isset($this->_contextList)); - + function getRequestedContextPaths(&$request) { // Handle context depth 0 - if (!$this->_contextDepth) { - if ($asArray) return array(); - else return null; - } + if (!$this->_contextDepth) return array(); - // Validate the context level - assert(is_null($requestedContextLevel) || - ($requestedContextLevel > 0 && $requestedContextLevel <= $this->_contextDepth)); + // Validate context parameters + assert(isset($this->_contextDepth) && isset($this->_contextList)); // Determine the context path if (empty($this->_contextPaths)) { @@ -182,18 +175,30 @@ $this->_contextPaths[$key] = Core::cleanFileVar($this->_contextPaths[$key]); } - HookRegistry::call('Router::getRequestedContextPath', array(&$this->_contextPaths)); + HookRegistry::call('Router::getRequestedContextPaths', array(&$this->_contextPaths)); } - if (is_null($requestedContextLevel)) { - return $this->_contextPaths; - } else { - if ($asArray) { - return array($this->_contextPaths[$requestedContextLevel - 1]); - } else { - return $this->_contextPaths[$requestedContextLevel - 1]; - } - } + return $this->_contextPaths; + } + + /** + * A generic method to return a single context path (e.g. a Press or a SchedConf path) + * @param $request PKPRequest the request to be routed + * @param $requestedContextLevel int (optional) the context level to return + * @return string + */ + function getRequestedContextPath(&$request, $requestedContextLevel = 1) { + // Handle context depth 0 + if (!$this->_contextDepth) return null; + + // Validate the context level + assert(isset($this->_contextDepth) && isset($this->_contextList)); + assert($requestedContextLevel > 0 && $requestedContextLevel <= $this->_contextDepth); + + // Return the full context, then retrieve the requested context path + $contextPaths = $this->getRequestedContextPaths($request); + assert(isset($this->_contextPaths[$requestedContextLevel - 1])); + return $this->_contextPaths[$requestedContextLevel - 1]; } /** Index: lib/pkp/tests/classes/core/PKPRouterTest.inc.php =================================================================== RCS file: /cvs/pkp/tests/classes/core/PKPRouterTest.inc.php,v --- lib/pkp/tests/classes/core/PKPRouterTest.inc.php 10 Dec 2009 22:13:54 -0000 1.2 +++ lib/pkp/tests/classes/core/PKPRouterTest.inc.php 11 Dec 2009 22:27:55 -0000 @@ -79,6 +79,7 @@ /** * @covers PKPRouter::getRequestedContextPath + * @covers PKPRouter::getRequestedContextPaths * @expectedException PHPUnit_Framework_Error */ public function testGetRequestedContextPathWithInvalidLevel() { @@ -88,16 +89,17 @@ } /** - * @covers PKPRouter::getRequestedContextPath + * @covers PKPRouter::getRequestedContextPaths */ public function testGetRequestedContextPathWithEmptyPathInfo() { $this->_setUpMockEnvironment(self::PATHINFO_ENABLED); $_SERVER['PATH_INFO'] = null; self::assertEquals(array('index', 'index'), - $this->router->getRequestedContextPath($this->request)); + $this->router->getRequestedContextPaths($this->request)); } /** + * @covers PKPRouter::getRequestedContextPaths * @covers PKPRouter::getRequestedContextPath */ public function testGetRequestedContextPathWithFullPathInfo() { @@ -105,54 +107,51 @@ HookRegistry::resetCalledHooks(); $_SERVER['PATH_INFO'] = '/context1/context2/other/path/vars'; self::assertEquals(array('context1', 'context2'), - $this->router->getRequestedContextPath($this->request)); - self::assertEquals(array('context1'), - $this->router->getRequestedContextPath($this->request, 1)); - self::assertEquals(array('context2'), - $this->router->getRequestedContextPath($this->request, 2)); + $this->router->getRequestedContextPaths($this->request)); self::assertEquals('context1', - $this->router->getRequestedContextPath($this->request, 1, false)); + $this->router->getRequestedContextPath($this->request, 1)); self::assertEquals('context2', - $this->router->getRequestedContextPath($this->request, 2, false)); + $this->router->getRequestedContextPath($this->request, 2)); self::assertEquals( - array(array('Router::getRequestedContextPath', array(array('context1', 'context2')))), + array(array('Router::getRequestedContextPaths', array(array('context1', 'context2')))), HookRegistry::getCalledHooks() ); } /** - * @covers PKPRouter::getRequestedContextPath + * @covers PKPRouter::getRequestedContextPaths */ public function testGetRequestedContextPathWithPartialPathInfo() { $this->_setUpMockEnvironment(self::PATHINFO_ENABLED); $_SERVER['PATH_INFO'] = '/context'; self::assertEquals(array('context', 'index'), - $this->router->getRequestedContextPath($this->request)); + $this->router->getRequestedContextPaths($this->request)); } /** - * @covers PKPRouter::getRequestedContextPath + * @covers PKPRouter::getRequestedContextPaths */ public function testGetRequestedContextPathWithInvalidPathInfo() { $this->_setUpMockEnvironment(self::PATHINFO_ENABLED); $_SERVER['PATH_INFO'] = '/context:?#/'; self::assertEquals(array('context', 'index'), - $this->router->getRequestedContextPath($this->request)); + $this->router->getRequestedContextPaths($this->request)); } /** - * @covers PKPRouter::getRequestedContextPath + * @covers PKPRouter::getRequestedContextPaths */ public function testGetRequestedContextPathWithEmptyContextParameters() { $this->_setUpMockEnvironment(self::PATHINFO_DISABLED); $_GET['firstContext'] = null; $_GET['secondContext'] = null; self::assertEquals(array('index', 'index'), - $this->router->getRequestedContextPath($this->request)); + $this->router->getRequestedContextPaths($this->request)); } /** * @covers PKPRouter::getRequestedContextPath + * @covers PKPRouter::getRequestedContextPaths */ public function testGetRequestedContextPathWithFullContextParameters() { $this->_setUpMockEnvironment(self::PATHINFO_DISABLED); @@ -160,10 +159,10 @@ $_GET['firstContext'] = 'context1'; $_GET['secondContext'] = 'context2'; self::assertEquals(array('context1', 'context2'), - $this->router->getRequestedContextPath($this->request)); - self::assertEquals(array('context1'), + $this->router->getRequestedContextPaths($this->request)); + self::assertEquals('context1', $this->router->getRequestedContextPath($this->request, 1)); - self::assertEquals(array('context2'), + self::assertEquals('context2', $this->router->getRequestedContextPath($this->request, 2)); self::assertEquals( array(array('Router::getRequestedContextPath', array(array('context1', 'context2')))), @@ -172,13 +171,13 @@ } /** - * @covers PKPRouter::getRequestedContextPath + * @covers PKPRouter::getRequestedContextPaths */ public function testGetRequestedContextPathWithPartialContextParameters() { $this->_setUpMockEnvironment(self::PATHINFO_DISABLED); $_GET['firstContext'] = 'context'; self::assertEquals(array('context', 'index'), - $this->router->getRequestedContextPath($this->request)); + $this->router->getRequestedContextPaths($this->request)); } /**