summaryrefslogtreecommitdiff
path: root/lib/Minz/Dispatcher.php
diff options
context:
space:
mode:
authorGravatar Marien Fressinaud <dev@marienfressinaud.fr> 2014-12-05 15:27:56 +0100
committerGravatar Marien Fressinaud <dev@marienfressinaud.fr> 2014-12-05 15:27:56 +0100
commitc6a682deb94111c1e14cf10e565da3f4214f02dc (patch)
tree38bdc2fe627735e0453b8a930ea2b71ad38bb69c /lib/Minz/Dispatcher.php
parentf8aa66152fcab24ae7cd9663dab0c0c96a45ca24 (diff)
Extensions can define new views
- View base pathname is set to the extension directory - An extension can now override an existing controller / view See https://github.com/FreshRSS/FreshRSS/issues/252
Diffstat (limited to 'lib/Minz/Dispatcher.php')
-rw-r--r--lib/Minz/Dispatcher.php40
1 files changed, 23 insertions, 17 deletions
diff --git a/lib/Minz/Dispatcher.php b/lib/Minz/Dispatcher.php
index 66789a3d3..edd59c7cc 100644
--- a/lib/Minz/Dispatcher.php
+++ b/lib/Minz/Dispatcher.php
@@ -68,16 +68,17 @@ class Minz_Dispatcher {
/**
* Instancie le Controller
- * @param $controller_name le nom du controller à instancier
+ * @param $base_name le nom du controller à instancier
* @exception ControllerNotExistException le controller n'existe pas
* @exception ControllerNotActionControllerException controller n'est
* > pas une instance de ActionController
*/
- private function createController ($controller_name) {
- if (self::isRegistered($controller_name)) {
- $controller_name = self::loadController($controller_name);
+ private function createController ($base_name) {
+ if (self::isRegistered($base_name)) {
+ self::loadController($base_name);
+ $controller_name = 'FreshExtension_' . $base_name . '_Controller';
} else {
- $controller_name = 'FreshRSS_' . $controller_name . '_Controller';
+ $controller_name = 'FreshRSS_' . $base_name . '_Controller';
}
if (!class_exists ($controller_name)) {
@@ -94,6 +95,10 @@ class Minz_Dispatcher {
Minz_Exception::ERROR
);
}
+
+ if (self::isRegistered($base_name)) {
+ $this->setViewPath($this->controller, $base_name);
+ }
}
/**
@@ -123,15 +128,11 @@ class Minz_Dispatcher {
* Register a controller file.
*
* @param $base_name the base name of the controller (i.e. ./?c=<base_name>)
- * @param $controller_name the name of the controller (e.g. HelloWorldController).
- * @param $filename the file which contains the controller.
+ * @param $base_path the base path where we should look into to find info.
*/
- public static function registerController($base_name, $controller_name, $filename) {
- if (file_exists($filename)) {
- self::$registrations[$base_name] = array(
- $controller_name,
- $filename,
- );
+ public static function registerController($base_name, $base_path) {
+ if (!self::isRegistered($base_name)) {
+ self::$registrations[$base_name] = $base_path;
}
}
@@ -146,13 +147,18 @@ class Minz_Dispatcher {
}
/**
- * Load a controller file (include) and return its name.
+ * Load a controller file (include).
*
* @param $base_name the base name of the controller.
*/
private static function loadController($base_name) {
- list($controller_name, $filename) = self::$registrations[$base_name];
- include($filename);
- return $controller_name;
+ $base_path = self::$registrations[$base_name];
+ $controller_filename = $base_path . '/controllers/' . $base_name . 'Controller.php';
+ include($controller_filename);
+ }
+
+ private static function setViewPath($controller, $base_name) {
+ $base_path = self::$registrations[$base_name];
+ $controller->view()->setBasePathname($base_path);
}
}