blob: ce5a3ef8770bde5f2a3331ac66c9486c6c388a31 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
<?php
require_once('Singleton.class.php');
require_once('Database.class.php');
class PluginManager extends Singleton {
public $plugins = array();
private $loaded = false;
/**
* Return an instance of the plugin with $plugin_name
*/
public function loadPlugin($plugin_name) {
$db = Database::getInstance();
require_once("$plugin_name.class.php");
$obj = new $plugin_name;
$params = call_user_func("$plugin_name::configList");
foreach ($params as $param => $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");
}
}
|