diff options
Diffstat (limited to 'inc/lib_plugin.php')
-rw-r--r-- | inc/lib_plugin.php | 39 |
1 files changed, 34 insertions, 5 deletions
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); + } + } + } } - ?> |