Skip to content
Snippets Groups Projects
Commit d54ac877 authored by Adrian Lang's avatar Adrian Lang
Browse files

Use autoloading for plugin classes

parent 1b595a18
No related branches found
No related tags found
No related merge requests found
......@@ -43,7 +43,7 @@ require_once(DOKU_INC.'inc/auth.php');
* require()s their associated php files when an object is instantiated.
*
* @author Andreas Gohr <andi@splitbrain.org>
* @todo add generic loading of plugins and other generically named classes
* @todo add generic loading of renderers and auth backends
*/
function load_autoload($name){
static $classes = null;
......@@ -87,5 +87,16 @@ function load_autoload($name){
require_once($classes[$name]);
return;
}
// Plugin loading
if(preg_match('/^(helper|syntax|action|admin|renderer)_plugin_([^_]+)(?:_([^_]+))?$/',
$name, $m)) {
//try to load the wanted plugin file
// include, but be silent. Maybe some other autoloader has an idea
// how to load this class.
$c = ((count($m) === 4) ? "/{$m[3]}" : '');
@include DOKU_PLUGIN . "{$m[2]}/{$m[1]}$c.php";
return;
}
}
......@@ -72,32 +72,21 @@ class Doku_Plugin_Controller {
return null;
}
$class = $type.'_plugin_'.$name;
//plugin already loaded?
if(!empty($DOKU_PLUGINS[$type][$name])){
if ($new || !$DOKU_PLUGINS[$type][$name]->isSingleton()) {
$class = $type.'_plugin_'.$name;
return class_exists($class) ? new $class : null;
return class_exists($class, true) ? new $class : null;
} else {
return $DOKU_PLUGINS[$type][$name];
}
}
//try to load the wanted plugin file
$dir = $this->get_directory($plugin);
$file = $component ? "$type/$component.php" : "$type.php";
if(!is_file(DOKU_PLUGIN."$dir/$file")){
return null;
}
if (!include_once(DOKU_PLUGIN."$dir/$file")) {
return null;
}
//construct class and instantiate
$class = $type.'_plugin_'.$name;
if (!class_exists($class)){
if (!class_exists($class, true)) {
# the plugin might be in the wrong directory
$dir = $this->get_directory($plugin);
$inf = confToHash(DOKU_PLUGIN."$dir/plugin.info.txt");
if($inf['base'] && $inf['base'] != $plugin){
msg("Plugin installed incorrectly. Rename plugin directory '".
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment