provide a way for the router to support custom controller objects and allow plugins to register class objects as modules instead of the traditional procedural interface.
This commit is contained in:
parent
4669107634
commit
692e41c41e
@ -16,7 +16,7 @@ class Router {
|
|||||||
*
|
*
|
||||||
* App::$argv[0] is our module name. Let's call it 'foo'. We will load the
|
* App::$argv[0] is our module name. Let's call it 'foo'. We will load the
|
||||||
* Zotlabs/Module/Foo.php (object) or file mod/foo.php (procedural)
|
* Zotlabs/Module/Foo.php (object) or file mod/foo.php (procedural)
|
||||||
* and use it for handling our URL request.
|
* and use it for handling our URL request to 'https://ourgreatwebsite.something/foo' .
|
||||||
* The module file contains a few functions that we call in various circumstances
|
* The module file contains a few functions that we call in various circumstances
|
||||||
* and in the following order:
|
* and in the following order:
|
||||||
*
|
*
|
||||||
@ -24,7 +24,7 @@ class Router {
|
|||||||
* class Foo extends Zotlabs\Web\Controller {
|
* class Foo extends Zotlabs\Web\Controller {
|
||||||
* function init() { init function }
|
* function init() { init function }
|
||||||
* function post() { post function }
|
* function post() { post function }
|
||||||
* function get() { nomral page function }
|
* function get() { normal page function }
|
||||||
* }
|
* }
|
||||||
*
|
*
|
||||||
* Procedual interface:
|
* Procedual interface:
|
||||||
@ -38,6 +38,7 @@ class Router {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
$module = \App::$module;
|
$module = \App::$module;
|
||||||
|
$modname = "Zotlabs\\Module\\" . ucfirst($module);
|
||||||
|
|
||||||
if(strlen($module)) {
|
if(strlen($module)) {
|
||||||
|
|
||||||
@ -50,8 +51,13 @@ class Router {
|
|||||||
|
|
||||||
if(is_array(\App::$plugins) && in_array($module,\App::$plugins) && file_exists("addon/{$module}/{$module}.php")) {
|
if(is_array(\App::$plugins) && in_array($module,\App::$plugins) && file_exists("addon/{$module}/{$module}.php")) {
|
||||||
include_once("addon/{$module}/{$module}.php");
|
include_once("addon/{$module}/{$module}.php");
|
||||||
if(function_exists($module . '_module'))
|
if(class_exists($modname)) {
|
||||||
|
$this->controller = new $modname;
|
||||||
\App::$module_loaded = true;
|
\App::$module_loaded = true;
|
||||||
|
}
|
||||||
|
elseif(function_exists($module . '_module')) {
|
||||||
|
\App::$module_loaded = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if((strpos($module,'admin') === 0) && (! is_site_admin())) {
|
if((strpos($module,'admin') === 0) && (! is_site_admin())) {
|
||||||
@ -62,18 +68,27 @@ class Router {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* If the site has a custom module to over-ride the standard module, use it.
|
* If the site has a custom module to over-ride the standard module, use it.
|
||||||
* Otherwise, look for the standard program module in the 'mod' directory
|
* Otherwise, look for the standard program module
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if(! (\App::$module_loaded)) {
|
if(! (\App::$module_loaded)) {
|
||||||
try {
|
try {
|
||||||
$modname = "Zotlabs\\Module\\" . ucfirst($module);
|
$filename = 'Zotlabs/SiteModule/'. ucfirst($module). '.php';
|
||||||
$filename = 'Zotlabs/Module/'. ucfirst($module). '.php';
|
|
||||||
if(file_exists($filename)) {
|
if(file_exists($filename)) {
|
||||||
|
// This won't be picked up by the autoloader, so load it explicitly
|
||||||
|
require_once($filename);
|
||||||
$this->controller = new $modname;
|
$this->controller = new $modname;
|
||||||
\App::$module_loaded = true;
|
\App::$module_loaded = true;
|
||||||
}
|
}
|
||||||
else throw new \Exception('Module not found');
|
else {
|
||||||
|
$filename = 'Zotlabs/Module/'. ucfirst($module). '.php';
|
||||||
|
if(file_exists($filename)) {
|
||||||
|
$this->controller = new $modname;
|
||||||
|
\App::$module_loaded = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(! \App::$module_loaded)
|
||||||
|
throw new \Exception('Module not found');
|
||||||
}
|
}
|
||||||
catch(\Exception $e) {
|
catch(\Exception $e) {
|
||||||
if(file_exists("mod/site/{$module}.php")) {
|
if(file_exists("mod/site/{$module}.php")) {
|
||||||
@ -88,17 +103,19 @@ class Router {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This provides a place for plugins to register module handlers which don't otherwise exist on the system.
|
* This provides a place for plugins to register module handlers which don't otherwise exist
|
||||||
|
* on the system, or to completely over-ride an existing module.
|
||||||
* If the plugin sets 'installed' to true we won't throw a 404 error for the specified module even if
|
* If the plugin sets 'installed' to true we won't throw a 404 error for the specified module even if
|
||||||
* there is no specific module file or matching plugin name.
|
* there is no specific module file or matching plugin name.
|
||||||
* The plugin should catch at least one of the module hooks for this URL.
|
* The plugin should catch at least one of the module hooks for this URL.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$x = array('module' => $module, 'installed' => \App::$module_loaded);
|
$x = array('module' => $module, 'installed' => \App::$module_loaded, 'controller' => $this->controller);
|
||||||
call_hooks('module_loaded', $x);
|
call_hooks('module_loaded', $x);
|
||||||
if($x['installed'])
|
if($x['installed']) {
|
||||||
\App::$module_loaded = true;
|
\App::$module_loaded = true;
|
||||||
|
$this->controller = $x['controller'];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The URL provided does not resolve to a valid module.
|
* The URL provided does not resolve to a valid module.
|
||||||
|
Reference in New Issue
Block a user