diff --git a/src/View/View.php b/src/View/View.php index b1e26153c29..a10386bc200 100644 --- a/src/View/View.php +++ b/src/View/View.php @@ -932,11 +932,9 @@ protected function _paths($plugin = null, $cached = true) { } $paths = array(); $viewPaths = App::path('Template'); - $corePaths = App::core('Template'); if (!empty($plugin)) { - $count = count($viewPaths); - for ($i = 0; $i < $count; $i++) { + for ($i = 0, $count = count($viewPaths); $i < $count; $i++) { $paths[] = $viewPaths[$i] . 'Plugin' . DS . $plugin . DS; } $paths = array_merge($paths, App::path('Template', $plugin)); @@ -948,21 +946,17 @@ protected function _paths($plugin = null, $cached = true) { $themePaths = App::path('Template', $theme); if ($plugin) { - $count = count($viewPaths); - for ($i = 0; $i < $count; $i++) { - $themePaths[] = $themePaths[$i] . 'Plugin' . DS . $plugin . DS; + for ($i = 0, $count = count($viewPaths); $i < $count; $i++) { + array_unshift($themePaths, $themePaths[$i] . 'Plugin' . DS . $plugin . DS); } } - $paths = array_merge($themePaths, $paths); } - - $paths = array_merge($paths, $corePaths); + $paths = array_merge($paths, App::core('Template')); if ($plugin !== null) { return $this->_pathsForPlugin[$plugin] = $paths; } - return $this->_paths = $paths; } diff --git a/tests/TestCase/View/ViewTest.php b/tests/TestCase/View/ViewTest.php index 9b013733c49..6dae8d0a117 100644 --- a/tests/TestCase/View/ViewTest.php +++ b/tests/TestCase/View/ViewTest.php @@ -422,7 +422,7 @@ public function testPluginThemedGetTemplate() { * * @return void */ - public function testPluginPathGeneration() { + public function testPathPluginGeneration() { $viewOptions = ['plugin' => 'TestPlugin', 'name' => 'TestPlugin', 'viewPath' => 'Tests', @@ -445,6 +445,34 @@ public function testPluginPathGeneration() { $this->assertPathEquals($expected, $paths); } +/** + * Test that themed plugin paths are generated correctly. + * + * @return void + */ + public function testPathThemedPluginGeneration() { + $viewOptions = ['plugin' => 'TestPlugin', + 'name' => 'TestPlugin', + 'viewPath' => 'Tests', + 'view' => 'index', + 'theme' => 'TestTheme' + ]; + + $View = new TestView(null, null, null, $viewOptions); + $paths = $View->paths('TestPlugin'); + $pluginPath = Plugin::path('TestPlugin'); + $themePath = Plugin::path('TestTheme'); + $expected = array( + $themePath . 'src' . DS . 'Template' . DS . 'Plugin' . DS . 'TestPlugin' . DS, + $themePath . 'src' . DS . 'Template' . DS, + TEST_APP . 'TestApp' . DS . 'Template' . DS . 'Plugin' . DS . 'TestPlugin' . DS, + $pluginPath . 'src' . DS . 'Template' . DS, + TEST_APP . 'TestApp' . DS . 'Template' . DS, + CAKE . 'Template' . DS, + ); + $this->assertPathEquals($expected, $paths); + } + /** * Test that CamelCase'd plugins still find their view files. *