Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Merge branch '1.3' of git://github.com/cakephp/cakephp1x into 1.3

  • Loading branch information...
commit 07870bacfb3cff1b9b1314212f61d75235a6746f 2 parents 7aca8df + 5c6d59e
@burzum burzum authored
View
41 cake/dispatcher.php
@@ -62,14 +62,6 @@ class Dispatcher extends Object {
var $here = false;
/**
- * Plugin being served (if any)
- *
- * @var string
- * @access public
- */
- var $plugin = null;
-
-/**
* the params for this request
*
* @var string
@@ -159,7 +151,7 @@ function dispatch($url = null, $additionalParams = array()) {
$controller->base = $this->base;
$controller->here = $this->here;
$controller->webroot = $this->webroot;
- $controller->plugin = $this->plugin;
+ $controller->plugin = isset($this->params['plugin']) ? $this->params['plugin'] : null;
$controller->params =& $this->params;
$controller->action =& $this->params['action'];
$controller->passedArgs = array_merge($this->params['pass'], $this->params['named']);
@@ -399,16 +391,8 @@ function _restructureParams($params, $reverse = false) {
'pass' => array_merge($pass, $params['pass']),
'named' => array_merge($named, $params['named'])
));
- $this->plugin = $params['plugin'];
} else {
$params['plugin'] = $params['controller'];
- $params['controller'] = $params['action'];
- if (isset($params['pass'][0])) {
- $params['action'] = $params['pass'][0];
- array_shift($params['pass']);
- } else {
- $params['action'] = null;
- }
}
return $params;
}
@@ -420,19 +404,15 @@ function _restructureParams($params, $reverse = false) {
* @return mixed name of controller if not loaded, or object if loaded
* @access private
*/
- function &__getController($params = null) {
- if (!is_array($params)) {
- $original = $params = $this->params;
- }
+ function &__getController() {
+ $original = $params = $this->params;
+
$controller = false;
$ctrlClass = $this->__loadController($params);
if (!$ctrlClass) {
if (!isset($params['plugin'])) {
$params = $this->_restructureParams($params);
} else {
- if (empty($original['pass']) && $original['action'] == 'index') {
- $params['action'] = null;
- }
$params = $this->_restructureParams($params, true);
}
$ctrlClass = $this->__loadController($params);
@@ -441,15 +421,13 @@ function &__getController($params = null) {
return $controller;
}
} else {
- $params = $this->params;
+ if (!isset($params['plugin'])) {
+ $params = $this->_restructureParams($params);
+ }
}
$name = $ctrlClass;
- $ctrlClass = $ctrlClass . 'Controller';
+ $ctrlClass .= 'Controller';
if (class_exists($ctrlClass)) {
- if (strtolower(get_parent_class($ctrlClass)) === strtolower($name . 'AppController') && empty($params['plugin'])) {
- $params = $this->_restructureParams($params);
- $params = $this->_restructureParams($params, true);
- }
$this->params = $params;
$controller =& new $ctrlClass();
}
@@ -466,10 +444,9 @@ function &__getController($params = null) {
function __loadController($params) {
$pluginName = $pluginPath = $controller = null;
if (!empty($params['plugin'])) {
- $this->plugin = $params['plugin'];
$pluginName = Inflector::camelize($params['plugin']);
$pluginPath = $pluginName . '.';
- $this->params['controller'] = $this->plugin;
+ $this->params['controller'] = $params['plugin'];
$controller = $pluginName;
}
if (!empty($params['controller'])) {
View
8 cake/libs/router.php
@@ -272,7 +272,7 @@ function connect($route, $defaults = array(), $options = array()) {
$self->__prefixes[] = $defaults['prefix'];
$self->__prefixes = array_keys(array_flip($self->__prefixes));
}
- $defaults += array('action' => 'index', 'plugin' => null, 'controller' => null);
+ $defaults += array('action' => 'index', 'plugin' => null);
$routeClass = 'CakeRoute';
if (isset($options['routeClass'])) {
$routeClass = $options['routeClass'];
@@ -424,7 +424,11 @@ function parse($url) {
if (!$self->__defaultsMapped && $self->__connectDefaults) {
$self->__connectDefaultRoutes();
}
- $out = array('pass' => array(), 'named' => array());
+ $out = array(
+ 'pass' => array(),
+ 'named' => array(),
+ 'controller' => null,
+ );
$r = $ext = null;
if (ini_get('magic_quotes_gpc') === '1') {
View
11 cake/libs/view/media.php
@@ -33,15 +33,17 @@ class MediaView extends View {
'cpio' => 'application/x-cpio', 'cpt' => 'application/mac-compactpro', 'csh' => 'application/x-csh',
'csv' => 'application/csv', 'dcr' => 'application/x-director', 'dir' => 'application/x-director',
'dms' => 'application/octet-stream', 'doc' => 'application/msword', 'drw' => 'application/drafting',
- 'dvi' => 'application/x-dvi', 'dwg' => 'application/acad', 'dxf' => 'application/dxf', 'dxr' => 'application/x-director',
- 'eps' => 'application/postscript', 'exe' => 'application/octet-stream', 'ez' => 'application/andrew-inset',
+ 'dvi' => 'application/x-dvi', 'dwg' => 'application/acad', 'dxf' => 'application/dxf',
+ 'dxr' => 'application/x-director', 'eot' => 'application/vnd.ms-fontobject', 'eps' => 'application/postscript',
+ 'exe' => 'application/octet-stream', 'ez' => 'application/andrew-inset',
'flv' => 'video/x-flv', 'gtar' => 'application/x-gtar', 'gz' => 'application/x-gzip',
'bz2' => 'application/x-bzip', '7z' => 'application/x-7z-compressed', 'hdf' => 'application/x-hdf',
'hqx' => 'application/mac-binhex40', 'ico' => 'image/vnd.microsoft.icon', 'ips' => 'application/x-ipscript',
'ipx' => 'application/x-ipix', 'js' => 'application/x-javascript', 'latex' => 'application/x-latex',
'lha' => 'application/octet-stream', 'lsp' => 'application/x-lisp', 'lzh' => 'application/octet-stream',
'man' => 'application/x-troff-man', 'me' => 'application/x-troff-me', 'mif' => 'application/vnd.mif',
- 'ms' => 'application/x-troff-ms', 'nc' => 'application/x-netcdf', 'oda' => 'application/oda', 'pdf' => 'application/pdf',
+ 'ms' => 'application/x-troff-ms', 'nc' => 'application/x-netcdf', 'oda' => 'application/oda',
+ 'otf' => 'font/otf', 'pdf' => 'application/pdf',
'pgn' => 'application/x-chess-pgn', 'pot' => 'application/mspowerpoint', 'pps' => 'application/mspowerpoint',
'ppt' => 'application/mspowerpoint', 'ppz' => 'application/mspowerpoint', 'pre' => 'application/x-freelance',
'prt' => 'application/pro_eng', 'ps' => 'application/postscript', 'roff' => 'application/x-troff',
@@ -55,7 +57,8 @@ class MediaView extends View {
'swf' => 'application/x-shockwave-flash', 't' => 'application/x-troff',
'tar' => 'application/x-tar', 'tcl' => 'application/x-tcl', 'tex' => 'application/x-tex',
'texi' => 'application/x-texinfo', 'texinfo' => 'application/x-texinfo', 'tr' => 'application/x-troff',
- 'tsp' => 'application/dsptype', 'unv' => 'application/i-deas', 'ustar' => 'application/x-ustar',
+ 'tsp' => 'application/dsptype', 'ttf' => 'font/ttf',
+ 'unv' => 'application/i-deas', 'ustar' => 'application/x-ustar',
'vcd' => 'application/x-cdlink', 'vda' => 'application/vda', 'xlc' => 'application/vnd.ms-excel',
'xll' => 'application/vnd.ms-excel', 'xlm' => 'application/vnd.ms-excel', 'xls' => 'application/vnd.ms-excel',
'xlw' => 'application/vnd.ms-excel', 'zip' => 'application/zip', 'aif' => 'audio/x-aiff', 'aifc' => 'audio/x-aiff',
View
58 cake/tests/cases/dispatcher.test.php
@@ -1599,11 +1599,18 @@ function testAutomaticPluginDispatchWithShortAccess() {
$_SERVER['PHP_SELF'] = '/cake/repo/branches/1.2.x.x/index.php';
Router::reload();
- Router::connect('/my_plugin/:controller/:action/*', array('plugin'=>'my_plugin'));
+ Router::connect('/my_plugin/:controller/:action/*', array('plugin' => 'my_plugin'));
$Dispatcher =& new TestDispatcher();
$Dispatcher->base = false;
+ $url = 'my_plugin/';
+ $controller = $Dispatcher->dispatch($url, array('return' => 1));
+ $this->assertEqual($controller->params['controller'], 'my_plugin');
+ $this->assertEqual($controller->params['plugin'], 'my_plugin');
+ $this->assertEqual($controller->params['action'], 'index');
+ $this->assertFalse(isset($controller->params['pass'][0]));
+
$url = 'my_plugin/my_plugin/add';
$controller = $Dispatcher->dispatch($url, array('return' => 1));
$this->assertFalse(isset($controller->params['pass'][0]));
@@ -1620,7 +1627,6 @@ function testAutomaticPluginDispatchWithShortAccess() {
$url = 'my_plugin/add';
$controller = $Dispatcher->dispatch($url, array('return' => 1));
-
$this->assertFalse(isset($controller->params['pass'][0]));
$Dispatcher =& new TestDispatcher();
@@ -1628,14 +1634,48 @@ function testAutomaticPluginDispatchWithShortAccess() {
$url = 'my_plugin/add/0';
$controller = $Dispatcher->dispatch($url, array('return' => 1));
- $this->assertIdentical('0',$controller->params['pass'][0]);
+ $this->assertEqual($controller->params['controller'], 'my_plugin');
+ $this->assertEqual($controller->params['plugin'], 'my_plugin');
+ $this->assertEqual($controller->params['action'], 'add');
+ $this->assertIdentical('0', $controller->params['pass'][0]);
$Dispatcher =& new TestDispatcher();
$Dispatcher->base = false;
$url = 'my_plugin/add/1';
$controller = $Dispatcher->dispatch($url, array('return' => 1));
- $this->assertIdentical('1',$controller->params['pass'][0]);
+
+ $this->assertEqual($controller->params['controller'], 'my_plugin');
+ $this->assertEqual($controller->params['plugin'], 'my_plugin');
+ $this->assertEqual($controller->params['action'], 'add');
+ $this->assertIdentical('1', $controller->params['pass'][0]);
+ }
+
+/**
+ * test plugin shortcut urls with controllers that need to be loaded,
+ * the above test uses a controller that has already been included.
+ *
+ * @return void
+ */
+ function testPluginShortCutUrlsWithControllerThatNeedsToBeLoaded() {
+ $loaded = class_exists('TestPluginController', false);
+ if ($this->skipIf($loaded, 'TestPluginController already loaded, this test will always pass, skipping %s')) {
+ return true;
+ }
+ Router::reload();
+ App::build(array(
+ 'plugins' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS)
+ ), true);
+ $Dispatcher =& new TestDispatcher();
+ $Dispatcher->base = false;
+
+ $url = 'test_plugin/';
+ $controller = $Dispatcher->dispatch($url, array('return' => 1));
+ $this->assertEqual($controller->params['controller'], 'test_plugin');
+ $this->assertEqual($controller->params['plugin'], 'test_plugin');
+ $this->assertEqual($controller->params['action'], 'index');
+ $this->assertFalse(isset($controller->params['pass'][0]));
+ App::build();
}
/**
@@ -1711,7 +1751,7 @@ function testPrefixProtection() {
}
/**
- * undocumented function
+ * Test dispatching into the TestPlugin in the test_app
*
* @return void
* @access public
@@ -1721,6 +1761,10 @@ function testTestPluginDispatch() {
App::build(array(
'plugins' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS)
));
+ App::objects('plugin', null, false);
+ Router::reload();
+ Router::parse('/');
+
$url = '/test_plugin/tests/index';
$result = $Dispatcher->dispatch($url, array('return' => 1));
$this->assertTrue(class_exists('TestsController'));
@@ -1728,6 +1772,10 @@ function testTestPluginDispatch() {
$this->assertTrue(class_exists('OtherComponentComponent'));
$this->assertTrue(class_exists('PluginsComponentComponent'));
+ $this->assertEqual($result->params['controller'], 'tests');
+ $this->assertEqual($result->params['plugin'], 'test_plugin');
+ $this->assertEqual($result->params['action'], 'index');
+
App::build();
}
View
39 cake/tests/cases/libs/router.test.php
@@ -508,6 +508,16 @@ function testUrlGenerationWithRegexQualifiedParams() {
$result = Router::url(array('plugin' => 'shows', 'controller' => 'shows', 'action' => 'calendar', 'year' => 2007, 'month' => 10, 'min-forestilling'));
$expected = '/kalender/10/2007/min-forestilling';
$this->assertEqual($result, $expected);
+
+ Router::reload();
+ Router::connect('/:controller/:action/*', array(), array(
+ 'controller' => 'source|wiki|commits|tickets|comments|view',
+ 'action' => 'branches|history|branch|logs|view|start|add|edit|modify'
+ ));
+ Router::defaults(false);
+ $result = Router::parse('/foo/bar');
+ $expected = array('pass' => array(), 'named' => array(), 'controller' => null);
+ $this->assertEqual($result, $expected);
}
/**
@@ -1844,7 +1854,7 @@ function testCurentRoute() {
Router::connect('/government', $url);
Router::parse('/government');
$route =& Router::currentRoute();
- $this->assertEqual(array_merge($url, array('plugin' => false)), $route->defaults);
+ $this->assertEqual(array_merge($url, array('plugin' => null)), $route->defaults);
}
/**
* testRequestRoute
@@ -1857,21 +1867,21 @@ function testRequestRoute() {
Router::connect('/government', $url);
Router::parse('/government');
$route =& Router::requestRoute();
- $this->assertEqual(array_merge($url, array('plugin' => false)), $route->defaults);
+ $this->assertEqual(array_merge($url, array('plugin' => null)), $route->defaults);
// test that the first route is matched
$newUrl = array('controller' => 'products', 'action' => 'display', 6);
Router::connect('/government', $url);
Router::parse('/government');
$route =& Router::requestRoute();
- $this->assertEqual(array_merge($url, array('plugin' => false)), $route->defaults);
+ $this->assertEqual(array_merge($url, array('plugin' => null)), $route->defaults);
// test that an unmatched route does not change the current route
$newUrl = array('controller' => 'products', 'action' => 'display', 6);
Router::connect('/actor', $url);
Router::parse('/government');
$route =& Router::requestRoute();
- $this->assertEqual(array_merge($url, array('plugin' => false)), $route->defaults);
+ $this->assertEqual(array_merge($url, array('plugin' => null)), $route->defaults);
}
/**
* testGetParams
@@ -1884,7 +1894,7 @@ function testGetParams() {
$params = array('param1' => '1', 'param2' => '2');
Router::setRequestInfo(array($params, $paths));
$expected = array(
- 'plugin' => false, 'controller' => false, 'action' => false,
+ 'plugin' => null, 'controller' => false, 'action' => false,
'param1' => '1', 'param2' => '2'
);
$this->assertEqual(Router::getparams(), $expected);
@@ -1896,7 +1906,7 @@ function testGetParams() {
$params = array('controller' => 'pages', 'action' => 'display');
Router::setRequestInfo(array($params, $paths));
- $expected = array('plugin' => false, 'controller' => 'pages', 'action' => 'display');
+ $expected = array('plugin' => null, 'controller' => 'pages', 'action' => 'display');
$this->assertEqual(Router::getparams(), $expected);
$this->assertEqual(Router::getparams(true), $expected);
}
@@ -2125,6 +2135,23 @@ function testComplexRouteCompilingAndParsing() {
'extra' => null,
);
$this->assertEqual($route->defaults, $expected);
+
+ $route =& new CakeRoute(
+ '/:controller/:action/*',
+ array('project' => false),
+ array(
+ 'controller' => 'source|wiki|commits|tickets|comments|view',
+ 'action' => 'branches|history|branch|logs|view|start|add|edit|modify'
+ )
+ );
+ $this->assertFalse($route->parse('/chaw_test/wiki'));
+
+ $result = $route->compile();
+ $this->assertNoPattern($result, '/some_project/source');
+ $this->assertPattern($result, '/source/view');
+ $this->assertPattern($result, '/source/view/other/params');
+ $this->assertNoPattern($result, '/chaw_test/wiki');
+ $this->assertNoPattern($result, '/source/wierd_action');
}
/**
Please sign in to comment.
Something went wrong with that request. Please try again.