diff options
author | Robin Appelman <icewind1991@gmail.com> | 2010-10-15 23:42:58 +0000 |
---|---|---|
committer | Robin Appelman <icewind1991@gmail.com> | 2010-10-15 23:42:58 +0000 |
commit | a98dfbbf71336f4f0fbf4299c101239aaa65826b (patch) | |
tree | 230278a4053e35506018652d017f4266ca04d12f /inc | |
parent | 494d88a4353799ae2fbc2631578664715c063c7e (diff) | |
download | nextcloud-server-a98dfbbf71336f4f0fbf4299c101239aaa65826b.tar.gz nextcloud-server-a98dfbbf71336f4f0fbf4299c101239aaa65826b.zip |
plugin manager and plugin installer
Diffstat (limited to 'inc')
-rwxr-xr-x | inc/lib_files.php | 34 | ||||
-rw-r--r-- | inc/lib_filestorage.php | 5 | ||||
-rw-r--r-- | inc/lib_plugin.php | 39 |
3 files changed, 68 insertions, 10 deletions
diff --git a/inc/lib_files.php b/inc/lib_files.php index 94eff9ce59c..c8c26df9726 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 3e53e266279..7dbdfe2457e 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 3fe92bd7719..76f94a1156d 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); + } + } + } } - ?> |