aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobin Appelman <icewind1991@gmail.com>2010-10-15 23:42:58 +0000
committerRobin Appelman <icewind1991@gmail.com>2010-10-15 23:42:58 +0000
commita98dfbbf71336f4f0fbf4299c101239aaa65826b (patch)
tree230278a4053e35506018652d017f4266ca04d12f
parent494d88a4353799ae2fbc2631578664715c063c7e (diff)
downloadnextcloud-server-a98dfbbf71336f4f0fbf4299c101239aaa65826b.tar.gz
nextcloud-server-a98dfbbf71336f4f0fbf4299c101239aaa65826b.zip
plugin manager and plugin installer
-rw-r--r--css/default.php20
-rwxr-xr-xinc/lib_files.php34
-rw-r--r--inc/lib_filestorage.php5
-rw-r--r--inc/lib_plugin.php39
-rw-r--r--settings/index.php1
5 files changed, 86 insertions, 13 deletions
diff --git a/css/default.php b/css/default.php
index 5f69eeaa1ba..1c7e6e7beeb 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 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);
+ }
+ }
+ }
}
-
?>
diff --git a/settings/index.php b/settings/index.php
index 5983eebc0a7..ba11da08c0b 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('<div class="center">');