diff --git a/lib/CalDAV/CalendarObject.php b/lib/CalDAV/CalendarObject.php index 671f4b5dbc..1fb042d23b 100644 --- a/lib/CalDAV/CalendarObject.php +++ b/lib/CalDAV/CalendarObject.php @@ -92,10 +92,11 @@ public function get() * Updates the ICalendar-formatted object. * * @param string|resource $calendarData + * @param object|null $params * * @return string */ - public function put($calendarData) + public function put($calendarData, $params = null) { if (is_resource($calendarData)) { $calendarData = stream_get_contents($calendarData); diff --git a/lib/CalDAV/Schedule/SchedulingObject.php b/lib/CalDAV/Schedule/SchedulingObject.php index b40f28a947..532fd8b06a 100644 --- a/lib/CalDAV/Schedule/SchedulingObject.php +++ b/lib/CalDAV/Schedule/SchedulingObject.php @@ -59,10 +59,11 @@ public function get() * Updates the ICalendar-formatted object. * * @param string|resource $calendarData + * @param object|null $params * * @return string */ - public function put($calendarData) + public function put($calendarData, $params = null) { throw new MethodNotAllowed('Updating scheduling objects is not supported'); } diff --git a/lib/CardDAV/Card.php b/lib/CardDAV/Card.php index c9cd2bbf61..44bbf3c2d3 100644 --- a/lib/CardDAV/Card.php +++ b/lib/CardDAV/Card.php @@ -78,11 +78,12 @@ public function get() /** * Updates the VCard-formatted object. * - * @param string $cardData + * @param string $cardData + * @param object|null $params * * @return string|null */ - public function put($cardData) + public function put($cardData, $params = null) { if (is_resource($cardData)) { $cardData = stream_get_contents($cardData); diff --git a/lib/DAV/CorePlugin.php b/lib/DAV/CorePlugin.php index 74350c28d6..afb424f770 100644 --- a/lib/DAV/CorePlugin.php +++ b/lib/DAV/CorePlugin.php @@ -429,6 +429,7 @@ public function httpPut(RequestInterface $request, ResponseInterface $response) { $body = $request->getBodyAsStream(); $path = $request->getPath(); + $params = (object) ['versioning' => $request->getHeader('versioning')]; // Intercepting Content-Range if ($request->getHeader('Content-Range')) { @@ -489,7 +490,7 @@ public function httpPut(RequestInterface $request, ResponseInterface $response) if (!($node instanceof IFile)) { throw new Exception\Conflict('PUT is not allowed on non-files.'); } - if (!$this->server->updateFile($path, $body, $etag)) { + if (!$this->server->updateFile($path, $body, $etag, $params)) { return false; } diff --git a/lib/DAV/FS/File.php b/lib/DAV/FS/File.php index b78a801389..2fb96d0820 100644 --- a/lib/DAV/FS/File.php +++ b/lib/DAV/FS/File.php @@ -18,9 +18,10 @@ class File extends Node implements DAV\IFile /** * Updates the data. * - * @param resource $data + * @param resource $data + * @param object|null $params */ - public function put($data) + public function put($data, $params = null) { file_put_contents($this->path, $data); clearstatcache(true, $this->path); diff --git a/lib/DAV/FSExt/File.php b/lib/DAV/FSExt/File.php index 74849b564e..a867b95c67 100644 --- a/lib/DAV/FSExt/File.php +++ b/lib/DAV/FSExt/File.php @@ -22,10 +22,11 @@ class File extends Node implements DAV\PartialUpdate\IPatchSupport * Data is a readable stream resource. * * @param resource|string $data + * @param object|null $params * * @return string */ - public function put($data) + public function put($data, $params = null) { file_put_contents($this->path, $data); clearstatcache(true, $this->path); diff --git a/lib/DAV/File.php b/lib/DAV/File.php index daf83aa4d8..42ec3e8b95 100644 --- a/lib/DAV/File.php +++ b/lib/DAV/File.php @@ -34,10 +34,11 @@ abstract class File extends Node implements IFile * return an ETag, and just return null. * * @param string|resource $data + * @param object|null $params * * @return string|null */ - public function put($data) + public function put($data, $params = null) { throw new Exception\Forbidden('Permission denied to change data'); } diff --git a/lib/DAV/IFile.php b/lib/DAV/IFile.php index 974aee00dd..c96b62d9f6 100644 --- a/lib/DAV/IFile.php +++ b/lib/DAV/IFile.php @@ -35,10 +35,11 @@ interface IFile extends INode * return an ETag, and just return null. * * @param resource|string $data + * @param object|null $params * * @return string|null */ - public function put($data); + public function put($data, $params = null); /** * Returns the data. diff --git a/lib/DAV/Server.php b/lib/DAV/Server.php index 1f8300d4a5..883e219a5f 100644 --- a/lib/DAV/Server.php +++ b/lib/DAV/Server.php @@ -1114,13 +1114,14 @@ public function createFile($uri, $data, &$etag = null) * * This method will return true if the file was actually updated * - * @param string $uri - * @param resource $data - * @param string $etag + * @param string $uri + * @param resource $data + * @param string $etag + * @param object|null $params * * @return bool */ - public function updateFile($uri, $data, &$etag = null) + public function updateFile($uri, $data, &$etag = null, $params = null) { $node = $this->tree->getNodeForPath($uri); @@ -1133,8 +1134,7 @@ public function updateFile($uri, $data, &$etag = null) if (!$this->emit('beforeWriteContent', [$uri, $node, &$data, &$modified])) { return false; } - - $etag = $node->put($data); + $etag = $node->put($data, $params); if ($modified) { $etag = null; } diff --git a/tests/Sabre/DAV/Mock/File.php b/tests/Sabre/DAV/Mock/File.php index d48ddaa922..cf4a7fed3c 100644 --- a/tests/Sabre/DAV/Mock/File.php +++ b/tests/Sabre/DAV/Mock/File.php @@ -82,11 +82,12 @@ public function setName($name) * different object on a subsequent GET you are strongly recommended to not * return an ETag, and just return null. * - * @param resource $data + * @param resource $data + * @param object|null $params * * @return string|null */ - public function put($data) + public function put($data, $params = null) { if (is_resource($data)) { $data = stream_get_contents($data); diff --git a/tests/Sabre/DAV/Mock/StreamingFile.php b/tests/Sabre/DAV/Mock/StreamingFile.php index 951327e334..1815f81f3d 100644 --- a/tests/Sabre/DAV/Mock/StreamingFile.php +++ b/tests/Sabre/DAV/Mock/StreamingFile.php @@ -35,11 +35,12 @@ class StreamingFile extends File * different object on a subsequent GET you are strongly recommended to not * return an ETag, and just return null. * - * @param resource $data + * @param resource $data + * @param object|null $params * * @return string|null */ - public function put($data) + public function put($data, $params = null) { if (is_string($data)) { $stream = fopen('php://memory', 'r+'); diff --git a/tests/Sabre/DAV/PartialUpdate/FileMock.php b/tests/Sabre/DAV/PartialUpdate/FileMock.php index 72fdb5ec84..374c32fbd0 100644 --- a/tests/Sabre/DAV/PartialUpdate/FileMock.php +++ b/tests/Sabre/DAV/PartialUpdate/FileMock.php @@ -10,12 +10,12 @@ class FileMock implements IPatchSupport { protected $data = ''; - public function put($str) + public function put($data, $params = null) { - if (is_resource($str)) { - $str = stream_get_contents($str); + if (is_resource($data)) { + $data = stream_get_contents($data); } - $this->data = $str; + $this->data = $data; } /**