diff --git a/inc/plugincontroller.class.php b/inc/plugincontroller.class.php index c825870cd142625481280ce397be4a4d819319de..33d8c92cd89a7cd45c06cc5693ecf963aac11214 100644 --- a/inc/plugincontroller.class.php +++ b/inc/plugincontroller.class.php @@ -11,15 +11,15 @@ if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); class Doku_Plugin_Controller { - var $list_bytype = array(); - var $tmp_plugins = array(); - var $plugin_cascade = array('default'=>array(),'local'=>array(),'protected'=>array()); - var $last_local_config_file = ''; + protected $list_bytype = array(); + protected $tmp_plugins = array(); + protected $plugin_cascade = array('default'=>array(),'local'=>array(),'protected'=>array()); + protected $last_local_config_file = ''; /** * Populates the master list of plugins */ - function __construct() { + public function __construct() { $this->loadConfig(); $this->_populateMasterList(); } @@ -34,11 +34,13 @@ class Doku_Plugin_Controller { * false to only return enabled plugins, * true to return both enabled and disabled plugins * - * @return array of plugin names + * @return array of + * - plugin names when $type = '' + * - or plugin component names when a $type is given * * @author Andreas Gohr <andi@splitbrain.org> */ - function getList($type='',$all=false){ + public function getList($type='',$all=false){ // request the complete list if (!$type) { @@ -64,9 +66,9 @@ class Doku_Plugin_Controller { * @param $name string name of the plugin to load * @param $new bool true to return a new instance of the plugin, false to use an already loaded instance * @param $disabled bool true to load even disabled plugins - * @return objectreference the plugin object or null on failure + * @return DokuWiki_Plugin|DokuWiki_Syntax_Plugin|null the plugin object or null on failure */ - function load($type,$name,$new=false,$disabled=false){ + public function load($type,$name,$new=false,$disabled=false){ //we keep all loaded plugins available in global scope for reuse global $DOKU_PLUGINS; @@ -108,26 +110,59 @@ class Doku_Plugin_Controller { return $DOKU_PLUGINS[$type][$name]; } - function isdisabled($plugin) { + /** + * Whether plugin is disabled + * + * @param string $plugin name of plugin + * @return bool; true disabled, false enabled + */ + public function isdisabled($plugin) { return empty($this->tmp_plugins[$plugin]); } - function disable($plugin) { + /** + * Disable the plugin + * + * @param string $plugin name of plugin + * @return bool; true saving succeed, false saving failed + */ + public function disable($plugin) { if(array_key_exists($plugin,$this->plugin_cascade['protected'])) return false; $this->tmp_plugins[$plugin] = 0; return $this->saveList(); } - function enable($plugin) { + /** + * Enable the plugin + * + * @param string $plugin name of plugin + * @return bool; true saving succeed, false saving failed + */ + public function enable($plugin) { if(array_key_exists($plugin,$this->plugin_cascade['protected'])) return false; $this->tmp_plugins[$plugin] = 1; return $this->saveList(); } - function get_directory($plugin) { + /** + * Returns directory name of plugin + * + * @param string $plugin name of plugin + * @return string name of directory + */ + public function get_directory($plugin) { return $plugin; } + /** + * Returns cascade of the config files + * + * @return array with arrays of plugin configs + */ + public function getCascade() { + return $this->plugin_cascade; + } + protected function _populateMasterList() { global $conf; @@ -169,6 +204,13 @@ class Doku_Plugin_Controller { } } + /** + * Includes the plugin config $files + * and returns the entries of the $plugins array set in these files + * + * @param array $files list of files to include, latter overrides previous + * @return array with entries of the $plugins arrays of the included files + */ protected function checkRequire($files) { $plugins = array(); foreach($files as $file) { @@ -179,14 +221,15 @@ class Doku_Plugin_Controller { return $plugins; } - function getCascade() { - return $this->plugin_cascade; - } - /** * Save the current list of plugins + * + * @param bool $forceSave; + * false to save only when config changed + * true to always save + * @return bool; true saving succeed, false saving failed */ - function saveList($forceSave = false) { + protected function saveList($forceSave = false) { global $conf; if (empty($this->tmp_plugins)) return false; @@ -216,9 +259,10 @@ class Doku_Plugin_Controller { /** * Rebuild the set of local plugins + * * @return array array of plugins to be saved in end($config_cascade['plugins']['local']) */ - function rebuildLocal() { + protected function rebuildLocal() { //assign to local variable to avoid overwriting $backup = $this->tmp_plugins; //Can't do anything about protected one so rule them out completely @@ -238,7 +282,7 @@ class Doku_Plugin_Controller { * Build the list of plugins and cascade * */ - function loadConfig() { + protected function loadConfig() { global $config_cascade; foreach(array('default','protected') as $type) { if(array_key_exists($type,$config_cascade['plugins'])) @@ -253,7 +297,18 @@ class Doku_Plugin_Controller { $this->tmp_plugins = array_merge($this->plugin_cascade['default'],$this->plugin_cascade['local'],$this->plugin_cascade['protected']); } - function _getListByType($type, $enabled) { + /** + * Returns a list of available plugin components of given type + * + * @param string $type, plugin_type name; + * the type of plugin to return, + * @param bool $enabled; + * true to return enabled plugins, + * false to return disabled plugins + * + * @return array of plugin components of requested type + */ + protected function _getListByType($type, $enabled) { $master_list = $enabled ? array_keys(array_filter($this->tmp_plugins)) : array_keys(array_filter($this->tmp_plugins,array($this,'negate'))); $plugins = array(); @@ -278,14 +333,29 @@ class Doku_Plugin_Controller { return $plugins; } - function _splitName($name) { + /** + * Split name in a plugin name and a component name + * + * @param string $name + * @return array with + * - plugin name + * - and component name when available, otherwise empty string + */ + protected function _splitName($name) { if (array_search($name, array_keys($this->tmp_plugins)) === false) { return explode('_',$name,2); } return array($name,''); } - function negate($input) { + + /** + * Returns inverse boolean value of the input + * + * @param mixed $input + * @return bool inversed boolean value of input + */ + protected function negate($input) { return !(bool) $input; } } diff --git a/inc/pluginutils.php b/inc/pluginutils.php index 7c37d4f7ffefbff48d2aae99ed87cef67e22b961..894bbefb6c7512effc89cc86a3b62e574326866f 100644 --- a/inc/pluginutils.php +++ b/inc/pluginutils.php @@ -14,31 +14,92 @@ if(!defined('DOKU_PLUGIN_NAME_REGEX')) define('DOKU_PLUGIN_NAME_REGEX', '[a-zA-Z /** * Original plugin functions, remain for backwards compatibility */ + +/** + * Return list of available plugins + * + * @param string $type type of plugins; empty string for all + * @param bool $all; true to retrieve all, false to retrieve only enabled plugins + * @return array with plugin names or plugin component names + */ function plugin_list($type='',$all=false) { + /** @var $plugin_controller Doku_Plugin_Controller */ global $plugin_controller; return $plugin_controller->getList($type,$all); } + +/** + * Returns plugin object + * Returns only new instances of a plugin when $new is true or if plugin is not Singleton, + * otherwise an already loaded instance. + * + * @param $type string type of plugin to load + * @param $name string name of the plugin to load + * @param $new bool true to return a new instance of the plugin, false to use an already loaded instance + * @param $disabled bool true to load even disabled plugins + * @return DokuWiki_Plugin|DokuWiki_Syntax_Plugin|null the plugin object or null on failure + */ function plugin_load($type,$name,$new=false,$disabled=false) { + /** @var $plugin_controller Doku_Plugin_Controller */ global $plugin_controller; return $plugin_controller->load($type,$name,$new,$disabled); } + +/** + * Whether plugin is disabled + * + * @param string $plugin name of plugin + * @return bool; true disabled, false enabled + */ function plugin_isdisabled($plugin) { + /** @var $plugin_controller Doku_Plugin_Controller */ global $plugin_controller; return $plugin_controller->isdisabled($plugin); } + +/** + * Enable the plugin + * + * @param string $plugin name of plugin + * @return bool; true saving succeed, false saving failed + */ function plugin_enable($plugin) { + /** @var $plugin_controller Doku_Plugin_Controller */ global $plugin_controller; return $plugin_controller->enable($plugin); } + +/** + * Disable the plugin + * + * @param string $plugin name of plugin + * @return bool; true saving succeed, false saving failed + */ function plugin_disable($plugin) { + /** @var $plugin_controller Doku_Plugin_Controller */ global $plugin_controller; return $plugin_controller->disable($plugin); } + +/** + * Returns directory name of plugin + * + * @param string $plugin name of plugin + * @return string name of directory + */ function plugin_directory($plugin) { + /** @var $plugin_controller Doku_Plugin_Controller */ global $plugin_controller; return $plugin_controller->get_directory($plugin); } + +/** + * Returns cascade of the config files + * + * @return array with arrays of plugin configs + */ function plugin_getcascade() { + /** @var $plugin_controller Doku_Plugin_Controller */ global $plugin_controller; return $plugin_controller->getCascade(); } diff --git a/inc/search.php b/inc/search.php index 884aa7b237ecfbbbe1d9cfd46b6e4e532bb61161..cd36feeab3593a2474ce5108cfebbd053608508e 100644 --- a/inc/search.php +++ b/inc/search.php @@ -9,14 +9,15 @@ if(!defined('DOKU_INC')) die('meh.'); /** - * recurse direcory + * Recurse directory * * This function recurses into a given base directory * and calls the supplied function for each file and directory * - * @param array ref $data The results of the search are stored here + * @param array &$data The results of the search are stored here * @param string $base Where to start the search * @param callback $func Callback (function name or array with object,method) + * @param array $opts option array will be given to the Callback * @param string $dir Current directory beyond $base * @param int $lvl Recursion Level * @param mixed $sort 'natural' to use natural order sorting (default); 'date' to sort by filemtime; leave empty to skip sorting. @@ -68,12 +69,12 @@ function search(&$data,$base,$func,$opts,$dir='',$lvl=1,$sort='natural'){ * decide if this directory should be traversed (true) or not (false) * The function has to accept the following parameters: * - * &$data - Reference to the result data structure - * $base - Base usually $conf['datadir'] - * $file - current file or directory relative to $base - * $type - Type either 'd' for directory or 'f' for file - * $lvl - Current recursion depht - * $opts - option array as given to search() + * array &$data - Reference to the result data structure + * string $base - Base usually $conf['datadir'] + * string $file - current file or directory relative to $base + * string $type - Type either 'd' for directory or 'f' for file + * int $lvl - Current recursion depht + * array $opts - option array as given to search() * * return values for files are ignored * @@ -334,6 +335,15 @@ function pathID($path,$keeptxt=false){ * showhidden bool show hidden files too * firsthead bool return first heading for pages * + * @param array &$data - Reference to the result data structure + * @param string $base - Base usually $conf['datadir'] + * @param string $file - current file or directory relative to $base + * @param string $type - Type either 'd' for directory or 'f' for file + * @param int $lvl - Current recursion depht + * @param array $opts - option array as given to search() + * @return bool if this directory should be traversed (true) or not (false) + * return value is ignored for files + * * @author Andreas Gohr <gohr@cosmocode.de> */ function search_universal(&$data,$base,$file,$type,$lvl,$opts){