diff --git a/files/api.php b/files/api.php index 12bc49dd7f..014bbb56bb 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 cf8adb31f5..c407d74c89 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 69ef7b3018..e11e3b3f5c 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 e8aa71f74b..7073d0326a 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 76a3adf9ae..575e9b43a9 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