$type) { $value = $db->getPluginConf($plugin_name, $param); if ($value!==false) { switch ($type) { case 'text': case 'password': $value = "$value"; break; case 'int': $value = (int)$value; break; } $obj->configSet($param, $value); } } return $obj; } /** * Return an array of available plugin names. */ public function listPlugins() { $plugins = array(); $dirs = explode(PATH_SEPARATOR, PLUGINPATH); foreach ($dirs as $dir) { // Find all files in $dir with the ext `.class.php' $files = glob($dir.'/*.class.php'); foreach ($files as $file) { $plugins[] = preg_replace('@\.class\.php$@', '$1', basename($file)); } } return $plugins; } /** * Return an array of enabled plugin names. */ public function getActivePlugins() { $db = Database::getInstance(); $string = $db->getSysConf('plugins'); return $db->valueToArray($string); } /** * Set the enabled plugins. */ public function setActivePlugins($plugins) { $db = Database::getInstance(); $string = $db->arrayToValue($plugins); return $db->setSysConf('plugins', $string); } /** * Load the enabled plugins. */ public function loadPlugins() { if ($this->loaded) return; $plugin_names = $this->getActivePlugins(); foreach ($plugin_names as $name) { $this->plugins[$name] = $this->loadPlugin($name); } $this->loaded = true; } public function callHook($hook, $arg=null) { $this->loadPlugins(); $ret = array(); foreach ($this->plugins as $name => $plugin) { $ret[$name] = call_user_func(array($plugin, $hook), &$arg); } return $ret; } public function staticHook($plugin_name, $hook) { require_once("$plugin_name.class.php"); return call_user_func("$plugin_name::$hook"); } }