Przeglądaj źródła

WIP - do not update yet!
New plugin functions for marketplace - WIP
New remove function for marketplace
New API endpoint - v1/plugin/remove
plugin marketplace js work

causefx 7 lat temu
rodzic
commit
d2f48fda30
3 zmienionych plików z 123 dodań i 33 usunięć
  1. 44 12
      api/functions/plugin-functions.php
  2. 19 0
      api/index.php
  3. 60 21
      js/functions.js

+ 44 - 12
api/functions/plugin-functions.php

@@ -1,17 +1,8 @@
 <?php
 function installPlugin($plugin)
 {
-	//$array['data']['action']
-	/*
-	 *
-	 * if (downloadFileToPath($from, $to, $path)) {
-                writeLog('success', 'Update Function -  Downloaded Update File for Branch: '.$branch, $GLOBALS['organizrUser']['username']);
-                return true;
-            } else {
-                writeLog('error', 'Update Function -  Downloaded Update File Failed  for Branch: '.$branch, $GLOBALS['organizrUser']['username']);
-                return false;
-            }
-	 */
+	$name = $plugin['data']['plugin']['name'];
+	$version = $plugin['data']['plugin']['version'];
 	foreach ($plugin['data']['plugin']['downloadList'] as $k => $v) {
 		$file = array(
 			'from' => $v['githubPath'],
@@ -19,7 +10,48 @@ function installPlugin($plugin)
 			'path' => str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $GLOBALS['root'] . $v['path'])
 		);
 		if (!downloadFileToPath($file['from'], $file['to'], $file['path'])) {
-			writeLog('error', 'Update Function -  Downloaded File Failed  for: ' . $v['githubPath'], $GLOBALS['organizrUser']['username']);
+			writeLog('error', 'Plugin Function -  Downloaded File Failed  for: ' . $v['githubPath'], $GLOBALS['organizrUser']['username']);
+			return false;
+		}
+	}
+	if ($GLOBALS['installedPlugins'] !== '') {
+		$installedPlugins = explode('|', $GLOBALS['installedPlugins']);
+		foreach ($installedPlugins as $k => $v) {
+			$plugins = explode(':', $v);
+			$installedPluginsList[$plugins[0]] = $plugins[1];
+		}
+		if (isset($installedPluginsList[$name])) {
+			$installedPluginsList[$name] = $version;
+			$installedPluginsNew = '';
+			foreach ($installedPluginsList as $k => $v) {
+				if ($installedPluginsNew == '') {
+					$installedPluginsNew .= $k . ':' . $v;
+				} else {
+					$installedPluginsNew .= '|' . $k . ':' . $v;
+				}
+			}
+		} else {
+			$installedPluginsNew = $GLOBALS['installedPlugins'] . '|' . $name . ':' . $version;
+		}
+	} else {
+		$installedPluginsNew = $name . ':' . $version;
+	}
+	updateConfig(array('installedPlugins' => $installedPluginsNew));
+	return true;
+}
+
+function removePlugin($plugin)
+{
+	$name = $plugin['data']['plugin']['name'];
+	$version = $plugin['data']['plugin']['version'];
+	foreach ($plugin['data']['plugin']['downloadList'] as $k => $v) {
+		$file = array(
+			'from' => $v['githubPath'],
+			'to' => str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $GLOBALS['root'] . $v['path'] . $v['fileName']),
+			'path' => str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $GLOBALS['root'] . $v['path'])
+		);
+		if (!rrmdir($file['to'])) {
+			writeLog('error', 'Plugin Function -  Remove File Failed  for: ' . $v['githubPath'], $GLOBALS['organizrUser']['username']);
 			return false;
 		}
 	}

+ 19 - 0
api/index.php

@@ -916,6 +916,25 @@ switch ($function) {
 				break;
 		}
 		break;
+	case 'v1_plugin_remove':
+		switch ($method) {
+			case 'POST':
+				if (qualifyRequest(1)) {
+					$result['status'] = 'success';
+					$result['statusText'] = 'success';
+					$result['data'] = removePlugin($_POST);
+				} else {
+					$result['status'] = 'error';
+					$result['statusText'] = 'API/Token invalid or not set';
+					$result['data'] = null;
+				}
+				break;
+			default:
+				$result['status'] = 'error';
+				$result['statusText'] = 'The function requested is not defined for method: ' . $method;
+				break;
+		}
+		break;
 	case 'v1_user_edit':
 		switch ($method) {
 			case 'POST':

+ 60 - 21
js/functions.js

@@ -957,42 +957,81 @@ function aboutPlugin(plugin){
         height: '225px'
     });
 }
-function installPlugin(plugin=null){
+function removePlugin(plugin=null){
     if(plugin == null){
         return false;
     }
+    message('Removing Plugin',plugin.name,activeInfo.settings.notifications.position,"#FFF","success","5000");
     console.log(plugin);
     var installedPluginsList = [];
     var installedPlugins = [];
-    if(activeInfo.settings.misc.installedPlugins !== ''){
-        installedPlugins = activeInfo.settings.misc.installedPlugins.split("|");
-        $.each(installedPlugins, function(i,v) {
-            var plugin = v.split(":");
-            installedPluginsList[plugin[0]] = plugin[1];
-        });
-        if(typeof installedPluginsList[plugin.name] !== 'undefined'){
-            console.log(plugin.version);
-            installedPluginsList[plugin.name] = plugin.version;
-            activeInfo.settings.misc.installedPlugins = installedPlugins.toString().replace(/,/g , "|");
+    plugin.downloadList = pluginFileList(plugin.files,plugin.github_folder);
+    organizrAPI('POST','api/?v1/plugin/remove',{plugin:plugin}).success(function(data) {
+        var html = JSON.parse(data);
+        console.log(html);
+        if(html.data == true){
+            /*if(activeInfo.settings.misc.installedPlugins !== ''){
+                installedPlugins = activeInfo.settings.misc.installedPlugins.split("|");
+                $.each(installedPlugins, function(i,v) {
+                    var plugin = v.split(":");
+                    installedPluginsList[plugin[0]] = plugin[1];
+                });
+                if(typeof installedPluginsList[plugin.name] !== 'undefined'){
+                    console.log(plugin.version);
+                    installedPluginsList[plugin.name] = plugin.version;
+                    activeInfo.settings.misc.installedPlugins = installedPlugins.toString().replace(/,/g , "|");
+                }else{
+                    activeInfo.settings.misc.installedPlugins = activeInfo.settings.misc.installedPlugins + '|' + plugin.name + ':' + plugin.version;
+                }
+            }else{
+                activeInfo.settings.misc.installedPlugins = plugin.name + ':' + plugin.version;
+            }*/
+            loadMarketplace('plugins');
+            message('Plugin Removed',plugin.name,activeInfo.settings.notifications.position,"#FFF","success","5000");
         }else{
-            activeInfo.settings.misc.installedPlugins = activeInfo.settings.misc.installedPlugins + '|' + plugin.name + ':' + plugin.version;
+            message('Remove Failed',html.data,activeInfo.settings.notifications.position,"#FFF","warning","10000");
         }
-    }else{
-        activeInfo.settings.misc.installedPlugins = plugin.name + ':' + plugin.version;
+    }).fail(function(xhr) {
+        message('Remove Failed',plugin.name,activeInfo.settings.notifications.position,"#FFF","warning","5000");
+        console.error("Organizr Function: Connection Failed");
+    });
+}
+function installPlugin(plugin=null){
+    if(plugin == null){
+        return false;
     }
-    //loadMarketplace('plugins');
-
+    message('Installing Plugin',plugin.name,activeInfo.settings.notifications.position,"#FFF","success","5000");
+    console.log(plugin);
+    var installedPluginsList = [];
+    var installedPlugins = [];
     plugin.downloadList = pluginFileList(plugin.files,plugin.github_folder);
     organizrAPI('POST','api/?v1/plugin/install',{plugin:plugin}).success(function(data) {
         var html = JSON.parse(data);
         console.log(html);
-        /*if(html.data == true){
-            message('Path',' Path is good to go',activeInfo.settings.notifications.position,'#FFF','success','10000');
+        if(html.data == true){
+            if(activeInfo.settings.misc.installedPlugins !== ''){
+                installedPlugins = activeInfo.settings.misc.installedPlugins.split("|");
+                $.each(installedPlugins, function(i,v) {
+                    var plugin = v.split(":");
+                    installedPluginsList[plugin[0]] = plugin[1];
+                });
+                if(typeof installedPluginsList[plugin.name] !== 'undefined'){
+                    console.log(plugin.version);
+                    installedPluginsList[plugin.name] = plugin.version;
+                    activeInfo.settings.misc.installedPlugins = installedPlugins.toString().replace(/,/g , "|");
+                }else{
+                    activeInfo.settings.misc.installedPlugins = activeInfo.settings.misc.installedPlugins + '|' + plugin.name + ':' + plugin.version;
+                }
+            }else{
+                activeInfo.settings.misc.installedPlugins = plugin.name + ':' + plugin.version;
+            }
+            loadMarketplace('plugins');
+            message('Plugin Installed',plugin.name,activeInfo.settings.notifications.position,"#FFF","success","5000");
         }else{
-            message('Path Error',' Path is not writable',activeInfo.settings.notifications.position,'#FFF','warning','10000');
-        }*/
-        message('Plugin Installed',plugin.name,activeInfo.settings.notifications.position,"#FFF","success","5000");
+            message('Install Failed',html.data,activeInfo.settings.notifications.position,"#FFF","warning","10000");
+        }
     }).fail(function(xhr) {
+        message('Install Failed',plugin.name,activeInfo.settings.notifications.position,"#FFF","warning","5000");
         console.error("Organizr Function: Connection Failed");
     });