Fix webdav destination header when overwriting folders

The trailing slash is needed when talking to Apache's mod_dav server
This commit is contained in:
Vincent Petry 2015-07-03 19:49:25 +02:00
parent a76498f245
commit 6f346b4b1f
No known key found for this signature in database
GPG Key ID: AF8F9EFC56562186
1 changed files with 23 additions and 6 deletions

View File

@ -506,13 +506,18 @@ class DAV extends Common {
$path1 = $this->cleanPath($path1);
$path2 = $this->cleanPath($path2);
try {
// overwrite directory ?
if ($this->is_dir($path2)) {
// needs trailing slash in destination
$path2 = rtrim($path2, '/') . '/';
}
$this->client->request(
'MOVE',
$this->encodePath($path1),
null,
array(
'Destination' => $this->createBaseUri() . $this->encodePath($path2)
)
[
'Destination' => $this->createBaseUri() . $this->encodePath($path2),
]
);
$this->statCache->clear($path1 . '/');
$this->statCache->clear($path2 . '/');
@ -530,10 +535,22 @@ class DAV extends Common {
/** {@inheritdoc} */
public function copy($path1, $path2) {
$this->init();
$path1 = $this->encodePath($this->cleanPath($path1));
$path2 = $this->createBaseUri() . $this->encodePath($this->cleanPath($path2));
$path1 = $this->cleanPath($path1);
$path2 = $this->cleanPath($path2);
try {
$this->client->request('COPY', $path1, null, array('Destination' => $path2));
// overwrite directory ?
if ($this->is_dir($path2)) {
// needs trailing slash in destination
$path2 = rtrim($path2, '/') . '/';
}
$this->client->request(
'COPY',
$this->encodePath($path1),
null,
[
'Destination' => $this->createBaseUri() . $this->encodePath($path2),
]
);
$this->statCache->clear($path2 . '/');
$this->statCache->set($path2, true);
$this->removeCachedFile($path2);