From a98dfbbf71336f4f0fbf4299c101239aaa65826b Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Fri, 15 Oct 2010 23:42:58 +0000 Subject: [PATCH] plugin manager and plugin installer --- css/default.php | 20 +++++++++++++++++--- inc/lib_files.php | 34 ++++++++++++++++++++++++++++++++++ inc/lib_filestorage.php | 5 ----- inc/lib_plugin.php | 39 ++++++++++++++++++++++++++++++++++----- settings/index.php | 1 + 5 files changed, 86 insertions(+), 13 deletions(-) diff --git a/css/default.php b/css/default.php index 5f69eeaa1b..1c7e6e7bee 100644 --- a/css/default.php +++ b/css/default.php @@ -456,15 +456,16 @@ div.moreActionsList tr:hover{ height:100%; } -table.userlist{ +table.userlist, table.pluginlist{ margin:0px; padding:0px; width:100%; border-spacing:0px; } -table.userlist>thead{ +table.userlist>thead, table.pluginlist>thead{ background-color:#DDD; + font-weight:bold; } table.userlist td.sellect{ @@ -490,7 +491,7 @@ p.description{ padding-bottom:3px; } -#settingsContent_user_managment{ +div.settingsContent{ background-color:#F2F2F2; min-height:100%; } @@ -504,4 +505,17 @@ p.description{ text-align:left; background-color:#DDD; width:100%; +} + +table.pluginlist td.name{ + width:150px; +} + +table.pluginlist td.disable{ + width:50px; +} + +table.pluginlist td.version{ + width:60px; + text-align:center } \ No newline at end of file diff --git a/inc/lib_files.php b/inc/lib_files.php index 94eff9ce59..c8c26df972 100755 --- a/inc/lib_files.php +++ b/inc/lib_files.php @@ -306,6 +306,24 @@ function zipAddDir($dir,$zip,$internalDir=''){ } } +//remove a dir and it's content +function delTree($dir) { + if (!file_exists($dir)) return true; + if (!is_dir($dir) || is_link($dir)) return unlink($dir); + foreach (scandir($dir) as $item) { + if ($item == '.' || $item == '..') continue; + if(is_file($dir.'/'.$item)){ + unlink($dir.'/'.$item); + }elseif(is_dir($dir.'/'.$item)){ + if (!delTree($dir. "/" . $item)){ + return false; + }; + } + } + $return=rmdir($dir); + return $return; +} + if(!function_exists('sys_get_temp_dir')) { function sys_get_temp_dir() { if( $temp=getenv('TMP') ) return $temp; @@ -320,6 +338,22 @@ if(!function_exists('sys_get_temp_dir')) { } } +function recursive_copy($src,$dst) { + $dir = opendir($src); + @mkdir($dst); + while(false !== ( $file = readdir($dir)) ) { + if (( $file != '.' ) && ( $file != '..' )) { + if ( is_dir($src . '/' . $file) ) { + recursive_copy($src . '/' . $file,$dst . '/' . $file); + } + else { + copy($src . '/' . $file,$dst . '/' . $file); + } + } + } + closedir($dir); +} + global $FAKEDIRS; $FAKEDIRS=array(); diff --git a/inc/lib_filestorage.php b/inc/lib_filestorage.php index 3e53e26627..7dbdfe2457 100644 --- a/inc/lib_filestorage.php +++ b/inc/lib_filestorage.php @@ -175,13 +175,8 @@ class OC_FILESTORAGE_LOCAL extends OC_FILESTORAGE{ } $source=substr($path1,strrpos($path1,'/')+1); $path2.=$source; -// sleep(30); - }else{ - error_log('isfile'); } - error_log("copy $path1 to {$this->datadir}$path2"); if($return=copy($this->datadir.$path1,$this->datadir.$path2)){ - error_log('success'); $this->notifyObservers($path2,OC_FILEACTION_CREATE); } return $return; diff --git a/inc/lib_plugin.php b/inc/lib_plugin.php index 3fe92bd771..76f94a1156 100644 --- a/inc/lib_plugin.php +++ b/inc/lib_plugin.php @@ -175,11 +175,12 @@ class OC_PLUGIN{ global $SERVERROOT; if(is_file($id)){ $file=$id; - } - if(!is_dir($SERVERROOT.'/plugins/'.$id) or !is_file($SERVERROOT.'/plugins/'.$id.'/plugin.xml')){ - return false; }else{ - $file=$SERVERROOT.'/plugins/'.$id.'/plugin.xml'; + if(!is_dir($SERVERROOT.'/plugins/'.$id) or !is_file($SERVERROOT.'/plugins/'.$id.'/plugin.xml')){ + return false; + }else{ + $file=$SERVERROOT.'/plugins/'.$id.'/plugin.xml'; + } } $data=array(); $plugin=new DOMDocument(); @@ -345,6 +346,34 @@ class OC_PLUGIN{ self::savePluginData($id,$data); return true; } + + public static function installPlugin($path){ + global $SERVERROOT; + if(is_file($path)){ + $zip = new ZipArchive; + if($zip->open($path)===TRUE){ + $folder=sys_get_temp_dir().'/OC_PLUGIN_INSTALL/'; + mkdir($folder); + $zip->extractTo($folder); + if(is_file($folder.'/plugin.xml')){ + $pluginData=self::getPluginData($folder.'/plugin.xml'); + if(array_search($pluginData['info']['id'],self::listPlugins())===false){ + if(isset($pluginData['install'])){ + foreach($pluginData['install']['database'] as $db){ + OC_DB::createDbFromStructure($folder.'/'.$db); + $pluginData['install']['database_installed'][$db]=true; + } + foreach($pluginData['install']['include'] as $include){ + include($folder.'/'.$include); + } + } + recursive_copy($folder,$SERVERROOT.'/plugins/'.$pluginData['info']['id']); + self::savePluginData($SERVERROOT.'/plugins/'.$pluginData['info']['id'].'/plugin.xml',$pluginData); + } + } + delTree($folder); + } + } + } } - ?> diff --git a/settings/index.php b/settings/index.php index 5983eebc0a..ba11da08c0 100644 --- a/settings/index.php +++ b/settings/index.php @@ -34,6 +34,7 @@ OC_CONFIG::addForm('User Settings','/inc/templates/configform.php'); if(OC_USER::ingroup($_SESSION['username'],'admin')){ OC_CONFIG::addForm('System Settings','/inc/templates/adminform.php'); OC_CONFIG::addForm('User Managment','/inc/templates/userform.php'); + OC_CONFIG::addForm('Plugin Managment','/inc/templates/pluginform.php'); } echo('
');