aboutsummaryrefslogtreecommitdiffstats
path: root/inc/lib_plugin.php
diff options
context:
space:
mode:
Diffstat (limited to 'inc/lib_plugin.php')
-rw-r--r--inc/lib_plugin.php39
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);
+ }
+ }
+ }
}
-
?>