From 485cc0fad823d50ed07df15f629ff824d2332ece Mon Sep 17 00:00:00 2001
From: Luke Shumaker <LukeShu@sbcglobal.net>
Date: Thu, 22 Sep 2011 00:45:02 -0400
Subject: Implement actual plugin management. I was tired of doing the SQL
 queries by hand :)

---
 src/controllers/Plugins.class.php | 57 ++++++++++++++++++++++++++++++++++++++-
 1 file changed, 56 insertions(+), 1 deletion(-)

(limited to 'src/controllers')

diff --git a/src/controllers/Plugins.class.php b/src/controllers/Plugins.class.php
index 40d3fc0..e2b500c 100644
--- a/src/controllers/Plugins.class.php
+++ b/src/controllers/Plugins.class.php
@@ -1,5 +1,7 @@
 <?php
 require_once('Login.class.php');
+require_once('Plugin.class.php');
+require_once('PluginManager.class.php');
 
 Router::register('plugins', 'Plugins');
 
@@ -10,7 +12,60 @@ class Plugins extends Controller {
 			$this->http401($routed, $remainder);
 			return;
 		}
-		// TODO
+		
+		$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() {
+		global $mm;
+		$db = $mm->database();
+		
+		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() {
+		global $mm; $pm = $mm->pluginManager();
+		$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) {
-- 
cgit v1.2.3-2-g168b