summaryrefslogtreecommitdiff
path: root/apps/um/controllers/Plugins.class.php
diff options
context:
space:
mode:
Diffstat (limited to 'apps/um/controllers/Plugins.class.php')
-rw-r--r--apps/um/controllers/Plugins.class.php75
1 files changed, 75 insertions, 0 deletions
diff --git a/apps/um/controllers/Plugins.class.php b/apps/um/controllers/Plugins.class.php
new file mode 100644
index 0000000..2ed6e7a
--- /dev/null
+++ b/apps/um/controllers/Plugins.class.php
@@ -0,0 +1,75 @@
+<?php
+require_once('Login.class.php');
+require_once('Plugin.class.php');
+require_once('PluginManager.class.php');
+require_once('Auth.class.php');
+require_once('Database.class.php');
+
+Router::register('plugins', 'Plugins');
+
+class Plugins extends Controller {
+ public function index($routed, $remainder) {
+ $uid = Login::isLoggedIn();
+ if ($uid===false || !Auth::getInstance($uid)->isAdmin()) {
+ $this->http401($routed, $remainder);
+ return;
+ }
+
+ $method = $_SERVER['REQUEST_METHOD'];
+ switch ($method) {
+ case 'PUT': $_POST = $_PUT;
+ case 'POST':
+ // We're PUTing an updated user index.
+ $this->update();
+ break;
+ }
+ $this->show_index();
+ }
+
+ private function update() {
+ $db = Database::getInstance();
+
+ if (isset($_POST['plugins'])) {
+ $string = $db->arrayToValue($_POST['plugins']);
+ $db->setSysConf('plugins', $string);
+ }
+
+ if (isset($_POST['config'])) {
+ foreach ($_POST['config'] as $plugin_name => $plugin) {
+ foreach ($plugin as $param => $value) {
+ $db->setPluginConf($plugin_name,
+ $param,
+ $value);
+ }
+ }
+ }
+ }
+
+ private function show_index() {
+ $pm = PluginManager::getInstance();
+ $all_plugins = $pm->listPlugins();
+ $enabled_plugins = $pm->getActivePlugins();
+
+ $plugin_data = array();
+ foreach ($all_plugins as $plugin_name) {
+ $plugin = array();
+ $plugin['name'] = $plugin_name;
+ $plugin['key'] = 'config['.$plugin_name.']';
+ $plugin['active'] =
+ in_array($plugin_name, $enabled_plugins);
+ $plugin['description'] =
+ $pm->staticHook($plugin_name, 'description');
+ $plugin['config'] =
+ $pm->staticHook($plugin_name, 'configList');
+ $plugin_data[] = $plugin;
+ }
+
+ $vars = array();
+ $vars['plugins'] = $plugin_data;
+ $this->showView('plugins/index', $vars);
+ }
+
+ public function http401($routed, $remainder) {
+ $this->showView('plugins/401');
+ }
+}