aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xfiles/api.php16
-rwxr-xr-xinc/HTTP/WebDAV/Server.php1
-rwxr-xr-xinc/HTTP/WebDAV/Server/Filesystem.php25
-rwxr-xr-xinc/lib_files.php35
-rwxr-xr-xwebdav/owncloud.php15
5 files changed, 62 insertions, 30 deletions
diff --git a/files/api.php b/files/api.php
index 12bc49dd7f0..014bbb56bbc 100755
--- a/files/api.php
+++ b/files/api.php
@@ -35,22 +35,28 @@ ob_clean();
if($arguments['action']){
switch($arguments['action']){
case 'delete':
- OC_FILES::delete($arguments['dir'],$arguments['file']);
+ echo (OC_FILES::delete($arguments['dir'],$arguments['file']))?'true':'false';
break;
case 'rename':
- OC_FILES::move($arguments['dir'],$arguments['file'],$arguments['dir'],$arguments['newname']);
+ echo (OC_FILES::move($arguments['dir'],$arguments['file'],$arguments['dir'],$arguments['newname']))?'true':'false';
break;
case 'new':
- OC_FILES::newfile($arguments['dir'],$arguments['name'],$arguments['type']);
+ echo (OC_FILES::newfile($arguments['dir'],$arguments['name'],$arguments['type']))?'true':'false';
break;
case 'move':
- OC_FILES::move($arguments['sourcedir'],$arguments['source'],$arguments['targetdir'],$arguments['target']);
+ echo (OC_FILES::move($arguments['sourcedir'],$arguments['source'],$arguments['targetdir'],$arguments['target']))?'true':'false';
+ break;
+ case 'copy':
+ echo (OC_FILES::copy($arguments['sourcedir'],$arguments['source'],$arguments['targetdir'],$arguments['target']))?'true':'false';
break;
case 'get':
OC_FILES::get($arguments['dir'],$arguments['file']);
break;
case 'getfiles':
- echo json_encode(OC_FILES::getdirectorycontent($CONFIG_DATADIRECTORY.'/'.$arguments['dir']));
+ echo json_encode(OC_FILES::getdirectorycontent($arguments['dir']));
+ break;
+ case 'find':
+ echo json_encode(OC_FILESYSTEM::find($arguments['path']));
break;
case 'login':
if(OC_USER::login($arguments['username'],$arguments['password'])){
diff --git a/inc/HTTP/WebDAV/Server.php b/inc/HTTP/WebDAV/Server.php
index cf8adb31f5c..c407d74c89f 100755
--- a/inc/HTTP/WebDAV/Server.php
+++ b/inc/HTTP/WebDAV/Server.php
@@ -229,6 +229,7 @@ class HTTP_WebDAV_Server
// detect requested method names
$method = strtolower($this->_SERVER["REQUEST_METHOD"]);
+ error_log("serving $method request");
$wrapper = "http_".$method;
// activate HEAD emulation by GET if no HEAD method found
diff --git a/inc/HTTP/WebDAV/Server/Filesystem.php b/inc/HTTP/WebDAV/Server/Filesystem.php
index 69ef7b30187..e11e3b3f5c9 100755
--- a/inc/HTTP/WebDAV/Server/Filesystem.php
+++ b/inc/HTTP/WebDAV/Server/Filesystem.php
@@ -108,21 +108,18 @@
{
// get absolute fs path to requested resource
$fspath = $options["path"];
-
+
// sanity check
- if (!file_exists($fspath)) {
+ if (!OC_FILESYSTEM::file_exists($fspath)) {
return false;
}
// prepare property array
$files["files"] = array();
-
// store information for the requested path itself
$files["files"][] = $this->fileinfo($options["path"]);
-
// information for contained resources requested?
if (!empty($options["depth"]) && OC_FILESYSTEM::is_dir($fspath) && OC_FILESYSTEM::is_readable($fspath)) {
-
// make sure path ends with '/'
$options["path"] = $this->_slashify($options["path"]);
@@ -159,19 +156,16 @@
$info = array();
// TODO remove slash append code when base clase is able to do it itself
$info["path"] = OC_FILESYSTEM::is_dir($fspath) ? $this->_slashify($path) : $path;
- $info["props"] = array();
-
+ $info["props"] = array();
// no special beautified displayname here ...
$info["props"][] = $this->mkprop("displayname", strtoupper($path));
-
+
// creation and modification time
$info["props"][] = $this->mkprop("creationdate", OC_FILESYSTEM::filectime($fspath));
$info["props"][] = $this->mkprop("getlastmodified", OC_FILESYSTEM::filemtime($fspath));
-
// Microsoft extensions: last access time and 'hidden' status
$info["props"][] = $this->mkprop("lastaccessed", OC_FILESYSTEM::fileatime($fspath));
$info["props"][] = $this->mkprop("ishidden", ('.' === substr(basename($fspath), 0, 1)));
-
// type and size (caller already made sure that path exists)
if ( OC_FILESYSTEM::is_dir($fspath)) {
// directory (WebDAV collection)
@@ -187,15 +181,12 @@
}
$info["props"][] = $this->mkprop("getcontentlength", OC_FILESYSTEM::filesize($fspath));
}
-
// get additional properties from database
$query = "SELECT ns, name, value FROM properties WHERE path = '$path'";
- $res = OC_DB::query($query);
- while ($row = OC_DB::fetch_assoc($res)) {
+ $res = OC_DB::select($query);
+ while ($row = $res[0]) {
$info["props"][] = $this->mkprop($row["ns"], $row["name"], $row["value"]);
}
- OC_DB::free_result($res);
-
return $info;
}
@@ -295,7 +286,7 @@
{
// get absolute fs path to requested resource)
$fspath = $options["path"];
- error_log("get '$fspath'");
+ error_log("get $fspath");
// is this a collection?
if (OC_FILESYSTEM::is_dir($fspath)) {
return $this->GetDir($fspath, $options);
@@ -456,7 +447,6 @@
$query = "DELETE FROM properties WHERE path LIKE '".$this->_slashify($options["path"])."%'";
OC_DB::query($query);
// System::rm(array("-rf, $path"));
- error_log('delTree');
OC_FILESYSTEM::delTree($path);
} else {
OC_FILESYSTEM::unlink($path);
@@ -605,6 +595,7 @@
} else {
if (!OC_FILESYSTEM::copy($file, $destfile)) {
+ error_log("copy $file to $destfile failed");
return "409 Conflict";
}
}
diff --git a/inc/lib_files.php b/inc/lib_files.php
index e8aa71f74b7..7073d0326ad 100755
--- a/inc/lib_files.php
+++ b/inc/lib_files.php
@@ -64,6 +64,8 @@ class OC_FILES {
$stat=OC_FILESYSTEM::stat($directory.'/'.$filename);
$file=array_merge($file,$stat);
$file['mime']=OC_FILES::getMimeType($directory .'/'. $filename);
+ $file['readable']=OC_FILESYSTEM::is_readable($directory .'/'. $filename);
+ $file['writeable']=OC_FILESYSTEM::is_writeable($directory .'/'. $filename);
$file['type']=OC_FILESYSTEM::filetype($directory .'/'. $filename);
if($file['type']=='dir'){
$dirs[$file['name']]=$file;
@@ -158,7 +160,23 @@ class OC_FILES {
if(OC_USER::isLoggedIn()){
$targetFile=$targetDir.'/'.$target;
$sourceFile=$sourceDir.'/'.$source;
- OC_FILESYSTEM::rename($sourceFile,$targetFile);
+ return OC_FILESYSTEM::rename($sourceFile,$targetFile);
+ }
+ }
+
+ /**
+ * copy a file or folder
+ *
+ * @param dir $sourceDir
+ * @param file $source
+ * @param dir $targetDir
+ * @param file $target
+ */
+ public static function copy($sourceDir,$source,$targetDir,$target){
+ if(OC_USER::isLoggedIn()){
+ $targetFile=$targetDir.'/'.$target;
+ $sourceFile=$sourceDir.'/'.$source;
+ return OC_FILESYSTEM::copy($sourceFile,$targetFile);
}
}
@@ -173,10 +191,15 @@ class OC_FILES {
if(OC_USER::isLoggedIn()){
$file=$dir.'/'.$name;
if($type=='dir'){
- OC_FILESYSTEM::mkdir($file);
+ return OC_FILESYSTEM::mkdir($file);
}elseif($type=='file'){
- $fileHandle=OC_FILESYSTEM::fopen($file, 'w') or die("can't open file");
- fclose($fileHandle);
+ $fileHandle=OC_FILESYSTEM::fopen($file, 'w');
+ if($fileHandle){
+ fclose($fileHandle);
+ return true;
+ }else{
+ return false;
+ }
}
}
}
@@ -191,9 +214,9 @@ class OC_FILES {
if(OC_USER::isLoggedIn()){
$file=$dir.'/'.$file;
if(OC_FILESYSTEM::is_file($file)){
- OC_FILESYSTEM::unlink($file);
+ return OC_FILESYSTEM::unlink($file);
}elseif(OC_FILESYSTEM::is_dir($file)){
- OC_FILESYSTEM::delTree($file);
+ return OC_FILESYSTEM::delTree($file);
}
}
}
diff --git a/webdav/owncloud.php b/webdav/owncloud.php
index 76a3adf9ae9..575e9b43a92 100755
--- a/webdav/owncloud.php
+++ b/webdav/owncloud.php
@@ -39,11 +39,22 @@ if(empty($_SERVER['PHP_AUTH_USER']) && empty($_SERVER['REDIRECT_REMOTE_USER']))
$user=$_SERVER['PHP_AUTH_USER'];
$passwd=$_SERVER['PHP_AUTH_PW'];
if(OC_USER::login($user,$passwd)){
- $CONFIG_DATADIRECTORY=$CONFIG_DATADIRECTORY_ROOT.'/'.$_SESSION['username_clean'];
+ $CONFIG_DATADIRECTORY=$CONFIG_DATADIRECTORY_ROOT.'/'.$user;
if(!is_dir($CONFIG_DATADIRECTORY)){
mkdir($CONFIG_DATADIRECTORY);
}
$rootStorage=new OC_FILESTORAGE_LOCAL(array('datadir'=>$CONFIG_DATADIRECTORY));
+ if($CONFIG_ENABLEBACKUP){
+ if(!is_dir($CONFIG_BACKUPDIRECTORY)){
+ mkdir($CONFIG_BACKUPDIRECTORY);
+ }
+ if(!is_dir($CONFIG_BACKUPDIRECTORY.'/'.$user)){
+ mkdir($CONFIG_BACKUPDIRECTORY.'/'.$user);
+ }
+ $backupStorage=new OC_FILESTORAGE_LOCAL(array('datadir'=>$CONFIG_BACKUPDIRECTORY.'/'.$user));
+ $backup=new OC_FILEOBSERVER_BACKUP(array('storage'=>$backupStorage));
+ $rootStorage->addObserver($backup);
+ }
OC_FILESYSTEM::mount($rootStorage,'/');
$server = new HTTP_WebDAV_Server_Filesystem();
$server->db_name = $CONFIG_DBNAME;
@@ -57,4 +68,4 @@ if(OC_USER::login($user,$passwd)){
-?>
+?> \ No newline at end of file