aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/sabre/dav/tests/Sabre/DAV/PartialUpdate/FileMock.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/sabre/dav/tests/Sabre/DAV/PartialUpdate/FileMock.php')
-rw-r--r--vendor/sabre/dav/tests/Sabre/DAV/PartialUpdate/FileMock.php54
1 files changed, 48 insertions, 6 deletions
diff --git a/vendor/sabre/dav/tests/Sabre/DAV/PartialUpdate/FileMock.php b/vendor/sabre/dav/tests/Sabre/DAV/PartialUpdate/FileMock.php
index e8cdc1666..d6cc406be 100644
--- a/vendor/sabre/dav/tests/Sabre/DAV/PartialUpdate/FileMock.php
+++ b/vendor/sabre/dav/tests/Sabre/DAV/PartialUpdate/FileMock.php
@@ -3,7 +3,7 @@
namespace Sabre\DAV\PartialUpdate;
use Sabre\DAV;
-class FileMock implements IFile {
+class FileMock implements IPatchSupport {
protected $data = '';
@@ -16,14 +16,56 @@ class FileMock implements IFile {
}
- function putRange($str,$start) {
-
- if (is_resource($str)) {
- $str = stream_get_contents($str);
+ /**
+ * Updates the file based on a range specification.
+ *
+ * The first argument is the data, which is either a readable stream
+ * resource or a string.
+ *
+ * The second argument is the type of update we're doing.
+ * This is either:
+ * * 1. append
+ * * 2. update based on a start byte
+ * * 3. update based on an end byte
+ *;
+ * The third argument is the start or end byte.
+ *
+ * After a successful put operation, you may choose to return an ETag. The
+ * etag must always be surrounded by double-quotes. These quotes must
+ * appear in the actual string you're returning.
+ *
+ * Clients may use the ETag from a PUT request to later on make sure that
+ * when they update the file, the contents haven't changed in the mean
+ * time.
+ *
+ * @param resource|string $data
+ * @param int $rangeType
+ * @param int $offset
+ * @return string|null
+ */
+ function patch($data, $rangeType, $offset = null) {
+
+ if (is_resource($data)) {
+ $data = stream_get_contents($data);
}
- $this->data = substr($this->data, 0, $start) . $str . substr($this->data, $start + strlen($str));
+ switch($rangeType) {
+
+ case 1 :
+ $this->data.=$data;
+ break;
+ case 3 :
+ // Turn the offset into an offset-offset.
+ $offset = strlen($this->data) - $offset;
+ // No break is intentional
+ case 2 :
+ $this->data =
+ substr($this->data, 0, $offset) .
+ $data .
+ substr($this->data, $offset + strlen($data));
+ break;
+ }
}