blob: 72fdb5ec84dcd655ea6ec62a4e9a45d4b939ec52 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
<?php
declare(strict_types=1);
namespace Sabre\DAV\PartialUpdate;
use Sabre\DAV;
class FileMock implements IPatchSupport
{
protected $data = '';
public function put($str)
{
if (is_resource($str)) {
$str = stream_get_contents($str);
}
$this->data = $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
*/
public function patch($data, $rangeType, $offset = null)
{
if (is_resource($data)) {
$data = stream_get_contents($data);
}
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;
}
}
public function get()
{
return $this->data;
}
public function getContentType()
{
return 'text/plain';
}
public function getSize()
{
return strlen($this->data);
}
public function getETag()
{
return '"'.$this->data.'"';
}
public function delete()
{
throw new DAV\Exception\MethodNotAllowed();
}
public function setName($name)
{
throw new DAV\Exception\MethodNotAllowed();
}
public function getName()
{
return 'partial';
}
public function getLastModified()
{
return null;
}
}
|