diff --git a/inc/HTTP/WebDAV/Server/Filesystem.php b/inc/HTTP/WebDAV/Server/Filesystem.php index e11e3b3f5c9bf3b28f06d592fd6a76f7287b67b0..66d040ba0e258ae761b2f7b584d63506c88b5832 100755 --- a/inc/HTTP/WebDAV/Server/Filesystem.php +++ b/inc/HTTP/WebDAV/Server/Filesystem.php @@ -31,6 +31,7 @@ | ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | | POSSIBILITY OF SUCH DAMAGE. | +----------------------------------------------------------------------+ + --- modified for ownCloud --- */ require_once("../inc/lib_base.php"); oc_require_once("HTTP/WebDAV/Server.php"); @@ -539,6 +540,8 @@ $stat = $this->DELETE(array("path" => $options["dest"])); if (($stat{0} != "2") && (substr($stat, 0, 3) != "404")) { return $stat; + }else{ + $new=true; } } else { return "412 precondition failed"; @@ -547,7 +550,7 @@ if ($del) { if (!OC_FILESYSTEM::rename($source, $dest)) { - return "500 Internal server error"; + return "500 Internal server error 1"; } $destpath = $this->_unslashify($options["dest"]); if (is_dir($source)) { @@ -578,7 +581,6 @@ if (OC_FILESYSTEM::is_dir($file)) { $file = $this->_slashify($file); } - $destfile = str_replace($source, $dest, $file); if (OC_FILESYSTEM::is_dir($file)) { @@ -593,9 +595,7 @@ return "409 Conflict"; } } else { - if (!OC_FILESYSTEM::copy($file, $destfile)) { - error_log("copy $file to $destfile failed"); return "409 Conflict"; } } diff --git a/inc/lib_filestorage.php b/inc/lib_filestorage.php index 3c34cc2110249ab20d13960d61203d11ea0bb313..8448eddd74a0024443748b474af350c6c1a19545 100644 --- a/inc/lib_filestorage.php +++ b/inc/lib_filestorage.php @@ -104,7 +104,7 @@ class OC_FILESTORAGE_LOCAL extends OC_FILESTORAGE{ return $return; } public function is_dir($path){ - return is_dir($this->datadir.$path); + return (is_dir($this->datadir.$path) or substr($path,-1)=='/'); } public function is_file($path){ return is_file($this->datadir.$path); @@ -166,7 +166,19 @@ class OC_FILESTORAGE_LOCAL extends OC_FILESTORAGE{ return $return; } public function copy($path1,$path2){ + if($this->is_dir($path2)){ + if(!$this->file_exists($path2)){ + $this->mkdir($path2); + } + $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; @@ -346,7 +358,11 @@ class OC_FILESTORAGE_LOCAL extends OC_FILESTORAGE{ } public function find($path){ - return System::find($this->datadir.$path); + $return=System::find($this->datadir.$path); + foreach($return as &$file){ + $file=str_replace($file,$this->datadir,''); + } + return $return; } } ?> \ No newline at end of file diff --git a/inc/lib_filesystem.php b/inc/lib_filesystem.php index 934da6b0e3e6d801b8c2a6b1529d306797174ee8..1e50ab34ae91cb9e5898e26e85bace4c2f9ef4ed 100755 --- a/inc/lib_filesystem.php +++ b/inc/lib_filesystem.php @@ -258,8 +258,13 @@ class OC_FILESYSTEM{ } static public function find($path){ if($storage=self::getStorage($path)){ - return $storage->find(substr($path,strlen(self::getMountPoint($path)))); + $mp=self::getMountPoint($path); + $return=$storage->find(substr($path,strlen($mp))); + foreach($return as &$file){ + $file=$mp.$file; + } } + return $return; } } ?>