Completed
Branch develop (fc1aaa)
by
unknown
18:31
created
htdocs/includes/sabre/sabre/dav/lib/DAV/Exception/NotFound.php 1 patch
Indentation   +9 added lines, -9 removed lines patch added patch discarded remove patch
@@ -17,13 +17,13 @@
 block discarded – undo
17 17
  */
18 18
 class NotFound extends DAV\Exception
19 19
 {
20
-    /**
21
-     * Returns the HTTP statuscode for this exception.
22
-     *
23
-     * @return int
24
-     */
25
-    public function getHTTPCode()
26
-    {
27
-        return 404;
28
-    }
20
+	/**
21
+	 * Returns the HTTP statuscode for this exception.
22
+	 *
23
+	 * @return int
24
+	 */
25
+	public function getHTTPCode()
26
+	{
27
+		return 404;
28
+	}
29 29
 }
Please login to merge, or discard this patch.
htdocs/includes/sabre/sabre/dav/lib/DAV/Exception/ServiceUnavailable.php 1 patch
Indentation   +9 added lines, -9 removed lines patch added patch discarded remove patch
@@ -18,13 +18,13 @@
 block discarded – undo
18 18
  */
19 19
 class ServiceUnavailable extends DAV\Exception
20 20
 {
21
-    /**
22
-     * Returns the HTTP statuscode for this exception.
23
-     *
24
-     * @return int
25
-     */
26
-    public function getHTTPCode()
27
-    {
28
-        return 503;
29
-    }
21
+	/**
22
+	 * Returns the HTTP statuscode for this exception.
23
+	 *
24
+	 * @return int
25
+	 */
26
+	public function getHTTPCode()
27
+	{
28
+		return 503;
29
+	}
30 30
 }
Please login to merge, or discard this patch.
htdocs/includes/sabre/sabre/dav/lib/DAV/Exception/UnsupportedMediaType.php 1 patch
Indentation   +9 added lines, -9 removed lines patch added patch discarded remove patch
@@ -18,13 +18,13 @@
 block discarded – undo
18 18
  */
19 19
 class UnsupportedMediaType extends DAV\Exception
20 20
 {
21
-    /**
22
-     * returns the http statuscode for this exception.
23
-     *
24
-     * @return int
25
-     */
26
-    public function getHTTPCode()
27
-    {
28
-        return 415;
29
-    }
21
+	/**
22
+	 * returns the http statuscode for this exception.
23
+	 *
24
+	 * @return int
25
+	 */
26
+	public function getHTTPCode()
27
+	{
28
+		return 415;
29
+	}
30 30
 }
Please login to merge, or discard this patch.
htdocs/includes/sabre/sabre/dav/lib/DAV/Exception/NotAuthenticated.php 1 patch
Indentation   +9 added lines, -9 removed lines patch added patch discarded remove patch
@@ -18,13 +18,13 @@
 block discarded – undo
18 18
  */
19 19
 class NotAuthenticated extends DAV\Exception
20 20
 {
21
-    /**
22
-     * Returns the HTTP statuscode for this exception.
23
-     *
24
-     * @return int
25
-     */
26
-    public function getHTTPCode()
27
-    {
28
-        return 401;
29
-    }
21
+	/**
22
+	 * Returns the HTTP statuscode for this exception.
23
+	 *
24
+	 * @return int
25
+	 */
26
+	public function getHTTPCode()
27
+	{
28
+		return 401;
29
+	}
30 30
 }
Please login to merge, or discard this patch.
htdocs/includes/sabre/sabre/dav/lib/DAV/Exception/PreconditionFailed.php 1 patch
Indentation   +40 added lines, -40 removed lines patch added patch discarded remove patch
@@ -19,47 +19,47 @@
 block discarded – undo
19 19
  */
20 20
 class PreconditionFailed extends DAV\Exception
21 21
 {
22
-    /**
23
-     * When this exception is thrown, the header-name might be set.
24
-     *
25
-     * This allows the exception-catching code to determine which HTTP header
26
-     * caused the exception.
27
-     *
28
-     * @var string
29
-     */
30
-    public $header = null;
22
+	/**
23
+	 * When this exception is thrown, the header-name might be set.
24
+	 *
25
+	 * This allows the exception-catching code to determine which HTTP header
26
+	 * caused the exception.
27
+	 *
28
+	 * @var string
29
+	 */
30
+	public $header = null;
31 31
 
32
-    /**
33
-     * Create the exception.
34
-     *
35
-     * @param string $message
36
-     * @param string $header
37
-     */
38
-    public function __construct($message, $header = null)
39
-    {
40
-        parent::__construct($message);
41
-        $this->header = $header;
42
-    }
32
+	/**
33
+	 * Create the exception.
34
+	 *
35
+	 * @param string $message
36
+	 * @param string $header
37
+	 */
38
+	public function __construct($message, $header = null)
39
+	{
40
+		parent::__construct($message);
41
+		$this->header = $header;
42
+	}
43 43
 
44
-    /**
45
-     * Returns the HTTP statuscode for this exception.
46
-     *
47
-     * @return int
48
-     */
49
-    public function getHTTPCode()
50
-    {
51
-        return 412;
52
-    }
44
+	/**
45
+	 * Returns the HTTP statuscode for this exception.
46
+	 *
47
+	 * @return int
48
+	 */
49
+	public function getHTTPCode()
50
+	{
51
+		return 412;
52
+	}
53 53
 
54
-    /**
55
-     * This method allows the exception to include additional information into the WebDAV error response.
56
-     */
57
-    public function serialize(DAV\Server $server, \DOMElement $errorNode)
58
-    {
59
-        if ($this->header) {
60
-            $prop = $errorNode->ownerDocument->createElement('s:header');
61
-            $prop->nodeValue = $this->header;
62
-            $errorNode->appendChild($prop);
63
-        }
64
-    }
54
+	/**
55
+	 * This method allows the exception to include additional information into the WebDAV error response.
56
+	 */
57
+	public function serialize(DAV\Server $server, \DOMElement $errorNode)
58
+	{
59
+		if ($this->header) {
60
+			$prop = $errorNode->ownerDocument->createElement('s:header');
61
+			$prop->nodeValue = $this->header;
62
+			$errorNode->appendChild($prop);
63
+		}
64
+	}
65 65
 }
Please login to merge, or discard this patch.
htdocs/includes/sabre/sabre/dav/lib/DAV/Node.php 1 patch
Indentation   +31 added lines, -31 removed lines patch added patch discarded remove patch
@@ -15,37 +15,37 @@
 block discarded – undo
15 15
  */
16 16
 abstract class Node implements INode
17 17
 {
18
-    /**
19
-     * Returns the last modification time as a unix timestamp.
20
-     *
21
-     * If the information is not available, return null.
22
-     *
23
-     * @return int
24
-     */
25
-    public function getLastModified()
26
-    {
27
-        return null;
28
-    }
18
+	/**
19
+	 * Returns the last modification time as a unix timestamp.
20
+	 *
21
+	 * If the information is not available, return null.
22
+	 *
23
+	 * @return int
24
+	 */
25
+	public function getLastModified()
26
+	{
27
+		return null;
28
+	}
29 29
 
30
-    /**
31
-     * Deletes the current node.
32
-     *
33
-     * @throws Exception\Forbidden
34
-     */
35
-    public function delete()
36
-    {
37
-        throw new Exception\Forbidden('Permission denied to delete node');
38
-    }
30
+	/**
31
+	 * Deletes the current node.
32
+	 *
33
+	 * @throws Exception\Forbidden
34
+	 */
35
+	public function delete()
36
+	{
37
+		throw new Exception\Forbidden('Permission denied to delete node');
38
+	}
39 39
 
40
-    /**
41
-     * Renames the node.
42
-     *
43
-     * @param string $name The new name
44
-     *
45
-     * @throws Exception\Forbidden
46
-     */
47
-    public function setName($name)
48
-    {
49
-        throw new Exception\Forbidden('Permission denied to rename file');
50
-    }
40
+	/**
41
+	 * Renames the node.
42
+	 *
43
+	 * @param string $name The new name
44
+	 *
45
+	 * @throws Exception\Forbidden
46
+	 */
47
+	public function setName($name)
48
+	{
49
+		throw new Exception\Forbidden('Permission denied to rename file');
50
+	}
51 51
 }
Please login to merge, or discard this patch.
htdocs/includes/sabre/sabre/dav/lib/DAV/PropFind.php 1 patch
Indentation   +294 added lines, -294 removed lines patch added patch discarded remove patch
@@ -12,324 +12,324 @@
 block discarded – undo
12 12
  */
13 13
 class PropFind
14 14
 {
15
-    /**
16
-     * A normal propfind.
17
-     */
18
-    const NORMAL = 0;
15
+	/**
16
+	 * A normal propfind.
17
+	 */
18
+	const NORMAL = 0;
19 19
 
20
-    /**
21
-     * An allprops request.
22
-     *
23
-     * While this was originally intended for instructing the server to really
24
-     * fetch every property, because it was used so often and it's so heavy
25
-     * this turned into a small list of default properties after a while.
26
-     *
27
-     * So 'all properties' now means a hardcoded list.
28
-     */
29
-    const ALLPROPS = 1;
20
+	/**
21
+	 * An allprops request.
22
+	 *
23
+	 * While this was originally intended for instructing the server to really
24
+	 * fetch every property, because it was used so often and it's so heavy
25
+	 * this turned into a small list of default properties after a while.
26
+	 *
27
+	 * So 'all properties' now means a hardcoded list.
28
+	 */
29
+	const ALLPROPS = 1;
30 30
 
31
-    /**
32
-     * A propname request. This just returns a list of properties that are
33
-     * defined on a node, without their values.
34
-     */
35
-    const PROPNAME = 2;
31
+	/**
32
+	 * A propname request. This just returns a list of properties that are
33
+	 * defined on a node, without their values.
34
+	 */
35
+	const PROPNAME = 2;
36 36
 
37
-    /**
38
-     * Creates the PROPFIND object.
39
-     *
40
-     * @param string $path
41
-     * @param int    $depth
42
-     * @param int    $requestType
43
-     */
44
-    public function __construct($path, array $properties, $depth = 0, $requestType = self::NORMAL)
45
-    {
46
-        $this->path = $path;
47
-        $this->properties = $properties;
48
-        $this->depth = $depth;
49
-        $this->requestType = $requestType;
37
+	/**
38
+	 * Creates the PROPFIND object.
39
+	 *
40
+	 * @param string $path
41
+	 * @param int    $depth
42
+	 * @param int    $requestType
43
+	 */
44
+	public function __construct($path, array $properties, $depth = 0, $requestType = self::NORMAL)
45
+	{
46
+		$this->path = $path;
47
+		$this->properties = $properties;
48
+		$this->depth = $depth;
49
+		$this->requestType = $requestType;
50 50
 
51
-        if (self::ALLPROPS === $requestType) {
52
-            $this->properties = [
53
-                '{DAV:}getlastmodified',
54
-                '{DAV:}getcontentlength',
55
-                '{DAV:}resourcetype',
56
-                '{DAV:}quota-used-bytes',
57
-                '{DAV:}quota-available-bytes',
58
-                '{DAV:}getetag',
59
-                '{DAV:}getcontenttype',
60
-            ];
61
-        }
51
+		if (self::ALLPROPS === $requestType) {
52
+			$this->properties = [
53
+				'{DAV:}getlastmodified',
54
+				'{DAV:}getcontentlength',
55
+				'{DAV:}resourcetype',
56
+				'{DAV:}quota-used-bytes',
57
+				'{DAV:}quota-available-bytes',
58
+				'{DAV:}getetag',
59
+				'{DAV:}getcontenttype',
60
+			];
61
+		}
62 62
 
63
-        foreach ($this->properties as $propertyName) {
64
-            // Seeding properties with 404's.
65
-            $this->result[$propertyName] = [404, null];
66
-        }
67
-        $this->itemsLeft = count($this->result);
68
-    }
63
+		foreach ($this->properties as $propertyName) {
64
+			// Seeding properties with 404's.
65
+			$this->result[$propertyName] = [404, null];
66
+		}
67
+		$this->itemsLeft = count($this->result);
68
+	}
69 69
 
70
-    /**
71
-     * Handles a specific property.
72
-     *
73
-     * This method checks whether the specified property was requested in this
74
-     * PROPFIND request, and if so, it will call the callback and use the
75
-     * return value for it's value.
76
-     *
77
-     * Example:
78
-     *
79
-     * $propFind->handle('{DAV:}displayname', function() {
80
-     *      return 'hello';
81
-     * });
82
-     *
83
-     * Note that handle will only work the first time. If null is returned, the
84
-     * value is ignored.
85
-     *
86
-     * It's also possible to not pass a callback, but immediately pass a value
87
-     *
88
-     * @param string $propertyName
89
-     * @param mixed  $valueOrCallBack
90
-     */
91
-    public function handle($propertyName, $valueOrCallBack)
92
-    {
93
-        if ($this->itemsLeft && isset($this->result[$propertyName]) && 404 === $this->result[$propertyName][0]) {
94
-            if (is_callable($valueOrCallBack)) {
95
-                $value = $valueOrCallBack();
96
-            } else {
97
-                $value = $valueOrCallBack;
98
-            }
99
-            if (!is_null($value)) {
100
-                --$this->itemsLeft;
101
-                $this->result[$propertyName] = [200, $value];
102
-            }
103
-        }
104
-    }
70
+	/**
71
+	 * Handles a specific property.
72
+	 *
73
+	 * This method checks whether the specified property was requested in this
74
+	 * PROPFIND request, and if so, it will call the callback and use the
75
+	 * return value for it's value.
76
+	 *
77
+	 * Example:
78
+	 *
79
+	 * $propFind->handle('{DAV:}displayname', function() {
80
+	 *      return 'hello';
81
+	 * });
82
+	 *
83
+	 * Note that handle will only work the first time. If null is returned, the
84
+	 * value is ignored.
85
+	 *
86
+	 * It's also possible to not pass a callback, but immediately pass a value
87
+	 *
88
+	 * @param string $propertyName
89
+	 * @param mixed  $valueOrCallBack
90
+	 */
91
+	public function handle($propertyName, $valueOrCallBack)
92
+	{
93
+		if ($this->itemsLeft && isset($this->result[$propertyName]) && 404 === $this->result[$propertyName][0]) {
94
+			if (is_callable($valueOrCallBack)) {
95
+				$value = $valueOrCallBack();
96
+			} else {
97
+				$value = $valueOrCallBack;
98
+			}
99
+			if (!is_null($value)) {
100
+				--$this->itemsLeft;
101
+				$this->result[$propertyName] = [200, $value];
102
+			}
103
+		}
104
+	}
105 105
 
106
-    /**
107
-     * Sets the value of the property.
108
-     *
109
-     * If status is not supplied, the status will default to 200 for non-null
110
-     * properties, and 404 for null properties.
111
-     *
112
-     * @param string $propertyName
113
-     * @param mixed  $value
114
-     * @param int    $status
115
-     */
116
-    public function set($propertyName, $value, $status = null)
117
-    {
118
-        if (is_null($status)) {
119
-            $status = is_null($value) ? 404 : 200;
120
-        }
121
-        // If this is an ALLPROPS request and the property is
122
-        // unknown, add it to the result; else ignore it:
123
-        if (!isset($this->result[$propertyName])) {
124
-            if (self::ALLPROPS === $this->requestType) {
125
-                $this->result[$propertyName] = [$status, $value];
126
-            }
106
+	/**
107
+	 * Sets the value of the property.
108
+	 *
109
+	 * If status is not supplied, the status will default to 200 for non-null
110
+	 * properties, and 404 for null properties.
111
+	 *
112
+	 * @param string $propertyName
113
+	 * @param mixed  $value
114
+	 * @param int    $status
115
+	 */
116
+	public function set($propertyName, $value, $status = null)
117
+	{
118
+		if (is_null($status)) {
119
+			$status = is_null($value) ? 404 : 200;
120
+		}
121
+		// If this is an ALLPROPS request and the property is
122
+		// unknown, add it to the result; else ignore it:
123
+		if (!isset($this->result[$propertyName])) {
124
+			if (self::ALLPROPS === $this->requestType) {
125
+				$this->result[$propertyName] = [$status, $value];
126
+			}
127 127
 
128
-            return;
129
-        }
130
-        if (404 !== $status && 404 === $this->result[$propertyName][0]) {
131
-            --$this->itemsLeft;
132
-        } elseif (404 === $status && 404 !== $this->result[$propertyName][0]) {
133
-            ++$this->itemsLeft;
134
-        }
135
-        $this->result[$propertyName] = [$status, $value];
136
-    }
128
+			return;
129
+		}
130
+		if (404 !== $status && 404 === $this->result[$propertyName][0]) {
131
+			--$this->itemsLeft;
132
+		} elseif (404 === $status && 404 !== $this->result[$propertyName][0]) {
133
+			++$this->itemsLeft;
134
+		}
135
+		$this->result[$propertyName] = [$status, $value];
136
+	}
137 137
 
138
-    /**
139
-     * Returns the current value for a property.
140
-     *
141
-     * @param string $propertyName
142
-     *
143
-     * @return mixed
144
-     */
145
-    public function get($propertyName)
146
-    {
147
-        return isset($this->result[$propertyName]) ? $this->result[$propertyName][1] : null;
148
-    }
138
+	/**
139
+	 * Returns the current value for a property.
140
+	 *
141
+	 * @param string $propertyName
142
+	 *
143
+	 * @return mixed
144
+	 */
145
+	public function get($propertyName)
146
+	{
147
+		return isset($this->result[$propertyName]) ? $this->result[$propertyName][1] : null;
148
+	}
149 149
 
150
-    /**
151
-     * Returns the current status code for a property name.
152
-     *
153
-     * If the property does not appear in the list of requested properties,
154
-     * null will be returned.
155
-     *
156
-     * @param string $propertyName
157
-     *
158
-     * @return int|null
159
-     */
160
-    public function getStatus($propertyName)
161
-    {
162
-        return isset($this->result[$propertyName]) ? $this->result[$propertyName][0] : null;
163
-    }
150
+	/**
151
+	 * Returns the current status code for a property name.
152
+	 *
153
+	 * If the property does not appear in the list of requested properties,
154
+	 * null will be returned.
155
+	 *
156
+	 * @param string $propertyName
157
+	 *
158
+	 * @return int|null
159
+	 */
160
+	public function getStatus($propertyName)
161
+	{
162
+		return isset($this->result[$propertyName]) ? $this->result[$propertyName][0] : null;
163
+	}
164 164
 
165
-    /**
166
-     * Updates the path for this PROPFIND.
167
-     *
168
-     * @param string $path
169
-     */
170
-    public function setPath($path)
171
-    {
172
-        $this->path = $path;
173
-    }
165
+	/**
166
+	 * Updates the path for this PROPFIND.
167
+	 *
168
+	 * @param string $path
169
+	 */
170
+	public function setPath($path)
171
+	{
172
+		$this->path = $path;
173
+	}
174 174
 
175
-    /**
176
-     * Returns the path this PROPFIND request is for.
177
-     *
178
-     * @return string
179
-     */
180
-    public function getPath()
181
-    {
182
-        return $this->path;
183
-    }
175
+	/**
176
+	 * Returns the path this PROPFIND request is for.
177
+	 *
178
+	 * @return string
179
+	 */
180
+	public function getPath()
181
+	{
182
+		return $this->path;
183
+	}
184 184
 
185
-    /**
186
-     * Returns the depth of this propfind request.
187
-     *
188
-     * @return int
189
-     */
190
-    public function getDepth()
191
-    {
192
-        return $this->depth;
193
-    }
185
+	/**
186
+	 * Returns the depth of this propfind request.
187
+	 *
188
+	 * @return int
189
+	 */
190
+	public function getDepth()
191
+	{
192
+		return $this->depth;
193
+	}
194 194
 
195
-    /**
196
-     * Updates the depth of this propfind request.
197
-     *
198
-     * @param int $depth
199
-     */
200
-    public function setDepth($depth)
201
-    {
202
-        $this->depth = $depth;
203
-    }
195
+	/**
196
+	 * Updates the depth of this propfind request.
197
+	 *
198
+	 * @param int $depth
199
+	 */
200
+	public function setDepth($depth)
201
+	{
202
+		$this->depth = $depth;
203
+	}
204 204
 
205
-    /**
206
-     * Returns all propertynames that have a 404 status, and thus don't have a
207
-     * value yet.
208
-     *
209
-     * @return array
210
-     */
211
-    public function get404Properties()
212
-    {
213
-        if (0 === $this->itemsLeft) {
214
-            return [];
215
-        }
216
-        $result = [];
217
-        foreach ($this->result as $propertyName => $stuff) {
218
-            if (404 === $stuff[0]) {
219
-                $result[] = $propertyName;
220
-            }
221
-        }
205
+	/**
206
+	 * Returns all propertynames that have a 404 status, and thus don't have a
207
+	 * value yet.
208
+	 *
209
+	 * @return array
210
+	 */
211
+	public function get404Properties()
212
+	{
213
+		if (0 === $this->itemsLeft) {
214
+			return [];
215
+		}
216
+		$result = [];
217
+		foreach ($this->result as $propertyName => $stuff) {
218
+			if (404 === $stuff[0]) {
219
+				$result[] = $propertyName;
220
+			}
221
+		}
222 222
 
223
-        return $result;
224
-    }
223
+		return $result;
224
+	}
225 225
 
226
-    /**
227
-     * Returns the full list of requested properties.
228
-     *
229
-     * This returns just their names, not a status or value.
230
-     *
231
-     * @return array
232
-     */
233
-    public function getRequestedProperties()
234
-    {
235
-        return $this->properties;
236
-    }
226
+	/**
227
+	 * Returns the full list of requested properties.
228
+	 *
229
+	 * This returns just their names, not a status or value.
230
+	 *
231
+	 * @return array
232
+	 */
233
+	public function getRequestedProperties()
234
+	{
235
+		return $this->properties;
236
+	}
237 237
 
238
-    /**
239
-     * Returns true if this was an '{DAV:}allprops' request.
240
-     *
241
-     * @return bool
242
-     */
243
-    public function isAllProps()
244
-    {
245
-        return self::ALLPROPS === $this->requestType;
246
-    }
238
+	/**
239
+	 * Returns true if this was an '{DAV:}allprops' request.
240
+	 *
241
+	 * @return bool
242
+	 */
243
+	public function isAllProps()
244
+	{
245
+		return self::ALLPROPS === $this->requestType;
246
+	}
247 247
 
248
-    /**
249
-     * Returns a result array that's often used in multistatus responses.
250
-     *
251
-     * The array uses status codes as keys, and property names and value pairs
252
-     * as the value of the top array.. such as :
253
-     *
254
-     * [
255
-     *  200 => [ '{DAV:}displayname' => 'foo' ],
256
-     * ]
257
-     *
258
-     * @return array
259
-     */
260
-    public function getResultForMultiStatus()
261
-    {
262
-        $r = [
263
-            200 => [],
264
-            404 => [],
265
-        ];
266
-        foreach ($this->result as $propertyName => $info) {
267
-            if (!isset($r[$info[0]])) {
268
-                $r[$info[0]] = [$propertyName => $info[1]];
269
-            } else {
270
-                $r[$info[0]][$propertyName] = $info[1];
271
-            }
272
-        }
273
-        // Removing the 404's for multi-status requests.
274
-        if (self::ALLPROPS === $this->requestType) {
275
-            unset($r[404]);
276
-        }
248
+	/**
249
+	 * Returns a result array that's often used in multistatus responses.
250
+	 *
251
+	 * The array uses status codes as keys, and property names and value pairs
252
+	 * as the value of the top array.. such as :
253
+	 *
254
+	 * [
255
+	 *  200 => [ '{DAV:}displayname' => 'foo' ],
256
+	 * ]
257
+	 *
258
+	 * @return array
259
+	 */
260
+	public function getResultForMultiStatus()
261
+	{
262
+		$r = [
263
+			200 => [],
264
+			404 => [],
265
+		];
266
+		foreach ($this->result as $propertyName => $info) {
267
+			if (!isset($r[$info[0]])) {
268
+				$r[$info[0]] = [$propertyName => $info[1]];
269
+			} else {
270
+				$r[$info[0]][$propertyName] = $info[1];
271
+			}
272
+		}
273
+		// Removing the 404's for multi-status requests.
274
+		if (self::ALLPROPS === $this->requestType) {
275
+			unset($r[404]);
276
+		}
277 277
 
278
-        return $r;
279
-    }
278
+		return $r;
279
+	}
280 280
 
281
-    /**
282
-     * The path that we're fetching properties for.
283
-     *
284
-     * @var string
285
-     */
286
-    protected $path;
281
+	/**
282
+	 * The path that we're fetching properties for.
283
+	 *
284
+	 * @var string
285
+	 */
286
+	protected $path;
287 287
 
288
-    /**
289
-     * The Depth of the request.
290
-     *
291
-     * 0 means only the current item. 1 means the current item + its children.
292
-     * It can also be DEPTH_INFINITY if this is enabled in the server.
293
-     *
294
-     * @var int
295
-     */
296
-    protected $depth = 0;
288
+	/**
289
+	 * The Depth of the request.
290
+	 *
291
+	 * 0 means only the current item. 1 means the current item + its children.
292
+	 * It can also be DEPTH_INFINITY if this is enabled in the server.
293
+	 *
294
+	 * @var int
295
+	 */
296
+	protected $depth = 0;
297 297
 
298
-    /**
299
-     * The type of request. See the TYPE constants.
300
-     */
301
-    protected $requestType;
298
+	/**
299
+	 * The type of request. See the TYPE constants.
300
+	 */
301
+	protected $requestType;
302 302
 
303
-    /**
304
-     * A list of requested properties.
305
-     *
306
-     * @var array
307
-     */
308
-    protected $properties = [];
303
+	/**
304
+	 * A list of requested properties.
305
+	 *
306
+	 * @var array
307
+	 */
308
+	protected $properties = [];
309 309
 
310
-    /**
311
-     * The result of the operation.
312
-     *
313
-     * The keys in this array are property names.
314
-     * The values are an array with two elements: the http status code and then
315
-     * optionally a value.
316
-     *
317
-     * Example:
318
-     *
319
-     * [
320
-     *    "{DAV:}owner" : [404],
321
-     *    "{DAV:}displayname" : [200, "Admin"]
322
-     * ]
323
-     *
324
-     * @var array
325
-     */
326
-    protected $result = [];
310
+	/**
311
+	 * The result of the operation.
312
+	 *
313
+	 * The keys in this array are property names.
314
+	 * The values are an array with two elements: the http status code and then
315
+	 * optionally a value.
316
+	 *
317
+	 * Example:
318
+	 *
319
+	 * [
320
+	 *    "{DAV:}owner" : [404],
321
+	 *    "{DAV:}displayname" : [200, "Admin"]
322
+	 * ]
323
+	 *
324
+	 * @var array
325
+	 */
326
+	protected $result = [];
327 327
 
328
-    /**
329
-     * This is used as an internal counter for the number of properties that do
330
-     * not yet have a value.
331
-     *
332
-     * @var int
333
-     */
334
-    protected $itemsLeft;
328
+	/**
329
+	 * This is used as an internal counter for the number of properties that do
330
+	 * not yet have a value.
331
+	 *
332
+	 * @var int
333
+	 */
334
+	protected $itemsLeft;
335 335
 }
Please login to merge, or discard this patch.
htdocs/includes/sabre/sabre/dav/lib/DAV/PartialUpdate/Plugin.php 1 patch
Indentation   +185 added lines, -185 removed lines patch added patch discarded remove patch
@@ -24,189 +24,189 @@
 block discarded – undo
24 24
  */
25 25
 class Plugin extends DAV\ServerPlugin
26 26
 {
27
-    const RANGE_APPEND = 1;
28
-    const RANGE_START = 2;
29
-    const RANGE_END = 3;
30
-
31
-    /**
32
-     * Reference to server.
33
-     *
34
-     * @var DAV\Server
35
-     */
36
-    protected $server;
37
-
38
-    /**
39
-     * Initializes the plugin.
40
-     *
41
-     * This method is automatically called by the Server class after addPlugin.
42
-     */
43
-    public function initialize(DAV\Server $server)
44
-    {
45
-        $this->server = $server;
46
-        $server->on('method:PATCH', [$this, 'httpPatch']);
47
-    }
48
-
49
-    /**
50
-     * Returns a plugin name.
51
-     *
52
-     * Using this name other plugins will be able to access other plugins
53
-     * using DAV\Server::getPlugin
54
-     *
55
-     * @return string
56
-     */
57
-    public function getPluginName()
58
-    {
59
-        return 'partialupdate';
60
-    }
61
-
62
-    /**
63
-     * Use this method to tell the server this plugin defines additional
64
-     * HTTP methods.
65
-     *
66
-     * This method is passed a uri. It should only return HTTP methods that are
67
-     * available for the specified uri.
68
-     *
69
-     * We claim to support PATCH method (partirl update) if and only if
70
-     *     - the node exist
71
-     *     - the node implements our partial update interface
72
-     *
73
-     * @param string $uri
74
-     *
75
-     * @return array
76
-     */
77
-    public function getHTTPMethods($uri)
78
-    {
79
-        $tree = $this->server->tree;
80
-
81
-        if ($tree->nodeExists($uri)) {
82
-            $node = $tree->getNodeForPath($uri);
83
-            if ($node instanceof IPatchSupport) {
84
-                return ['PATCH'];
85
-            }
86
-        }
87
-
88
-        return [];
89
-    }
90
-
91
-    /**
92
-     * Returns a list of features for the HTTP OPTIONS Dav: header.
93
-     *
94
-     * @return array
95
-     */
96
-    public function getFeatures()
97
-    {
98
-        return ['sabredav-partialupdate'];
99
-    }
100
-
101
-    /**
102
-     * Patch an uri.
103
-     *
104
-     * The WebDAV patch request can be used to modify only a part of an
105
-     * existing resource. If the resource does not exist yet and the first
106
-     * offset is not 0, the request fails
107
-     */
108
-    public function httpPatch(RequestInterface $request, ResponseInterface $response)
109
-    {
110
-        $path = $request->getPath();
111
-
112
-        // Get the node. Will throw a 404 if not found
113
-        $node = $this->server->tree->getNodeForPath($path);
114
-        if (!$node instanceof IPatchSupport) {
115
-            throw new DAV\Exception\MethodNotAllowed('The target resource does not support the PATCH method.');
116
-        }
117
-
118
-        $range = $this->getHTTPUpdateRange($request);
119
-
120
-        if (!$range) {
121
-            throw new DAV\Exception\BadRequest('No valid "X-Update-Range" found in the headers');
122
-        }
123
-
124
-        $contentType = strtolower(
125
-            (string) $request->getHeader('Content-Type')
126
-        );
127
-
128
-        if ('application/x-sabredav-partialupdate' != $contentType) {
129
-            throw new DAV\Exception\UnsupportedMediaType('Unknown Content-Type header "'.$contentType.'"');
130
-        }
131
-
132
-        $len = $this->server->httpRequest->getHeader('Content-Length');
133
-        if (!$len) {
134
-            throw new DAV\Exception\LengthRequired('A Content-Length header is required');
135
-        }
136
-        switch ($range[0]) {
137
-            case self::RANGE_START:
138
-                // Calculate the end-range if it doesn't exist.
139
-                if (!$range[2]) {
140
-                    $range[2] = $range[1] + $len - 1;
141
-                } else {
142
-                    if ($range[2] < $range[1]) {
143
-                        throw new DAV\Exception\RequestedRangeNotSatisfiable('The end offset ('.$range[2].') is lower than the start offset ('.$range[1].')');
144
-                    }
145
-                    if ($range[2] - $range[1] + 1 != $len) {
146
-                        throw new DAV\Exception\RequestedRangeNotSatisfiable('Actual data length ('.$len.') is not consistent with begin ('.$range[1].') and end ('.$range[2].') offsets');
147
-                    }
148
-                }
149
-                break;
150
-        }
151
-
152
-        if (!$this->server->emit('beforeWriteContent', [$path, $node, null])) {
153
-            return;
154
-        }
155
-
156
-        $body = $this->server->httpRequest->getBody();
157
-
158
-        $etag = $node->patch($body, $range[0], isset($range[1]) ? $range[1] : null);
159
-
160
-        $this->server->emit('afterWriteContent', [$path, $node]);
161
-
162
-        $response->setHeader('Content-Length', '0');
163
-        if ($etag) {
164
-            $response->setHeader('ETag', $etag);
165
-        }
166
-        $response->setStatus(204);
167
-
168
-        // Breaks the event chain
169
-        return false;
170
-    }
171
-
172
-    /**
173
-     * Returns the HTTP custom range update header.
174
-     *
175
-     * This method returns null if there is no well-formed HTTP range request
176
-     * header. It returns array(1) if it was an append request, array(2,
177
-     * $start, $end) if it's a start and end range, lastly it's array(3,
178
-     * $endoffset) if the offset was negative, and should be calculated from
179
-     * the end of the file.
180
-     *
181
-     * Examples:
182
-     *
183
-     * null - invalid
184
-     * [1] - append
185
-     * [2,10,15] - update bytes 10, 11, 12, 13, 14, 15
186
-     * [2,10,null] - update bytes 10 until the end of the patch body
187
-     * [3,-5] - update from 5 bytes from the end of the file.
188
-     *
189
-     * @return array|null
190
-     */
191
-    public function getHTTPUpdateRange(RequestInterface $request)
192
-    {
193
-        $range = $request->getHeader('X-Update-Range');
194
-        if (is_null($range)) {
195
-            return null;
196
-        }
197
-
198
-        // Matching "Range: bytes=1234-5678: both numbers are optional
199
-
200
-        if (!preg_match('/^(append)|(?:bytes=([0-9]+)-([0-9]*))|(?:bytes=(-[0-9]+))$/i', $range, $matches)) {
201
-            return null;
202
-        }
203
-
204
-        if ('append' === $matches[1]) {
205
-            return [self::RANGE_APPEND];
206
-        } elseif (strlen($matches[2]) > 0) {
207
-            return [self::RANGE_START, (int) $matches[2], (int) $matches[3] ?: null];
208
-        } else {
209
-            return [self::RANGE_END, (int) $matches[4]];
210
-        }
211
-    }
27
+	const RANGE_APPEND = 1;
28
+	const RANGE_START = 2;
29
+	const RANGE_END = 3;
30
+
31
+	/**
32
+	 * Reference to server.
33
+	 *
34
+	 * @var DAV\Server
35
+	 */
36
+	protected $server;
37
+
38
+	/**
39
+	 * Initializes the plugin.
40
+	 *
41
+	 * This method is automatically called by the Server class after addPlugin.
42
+	 */
43
+	public function initialize(DAV\Server $server)
44
+	{
45
+		$this->server = $server;
46
+		$server->on('method:PATCH', [$this, 'httpPatch']);
47
+	}
48
+
49
+	/**
50
+	 * Returns a plugin name.
51
+	 *
52
+	 * Using this name other plugins will be able to access other plugins
53
+	 * using DAV\Server::getPlugin
54
+	 *
55
+	 * @return string
56
+	 */
57
+	public function getPluginName()
58
+	{
59
+		return 'partialupdate';
60
+	}
61
+
62
+	/**
63
+	 * Use this method to tell the server this plugin defines additional
64
+	 * HTTP methods.
65
+	 *
66
+	 * This method is passed a uri. It should only return HTTP methods that are
67
+	 * available for the specified uri.
68
+	 *
69
+	 * We claim to support PATCH method (partirl update) if and only if
70
+	 *     - the node exist
71
+	 *     - the node implements our partial update interface
72
+	 *
73
+	 * @param string $uri
74
+	 *
75
+	 * @return array
76
+	 */
77
+	public function getHTTPMethods($uri)
78
+	{
79
+		$tree = $this->server->tree;
80
+
81
+		if ($tree->nodeExists($uri)) {
82
+			$node = $tree->getNodeForPath($uri);
83
+			if ($node instanceof IPatchSupport) {
84
+				return ['PATCH'];
85
+			}
86
+		}
87
+
88
+		return [];
89
+	}
90
+
91
+	/**
92
+	 * Returns a list of features for the HTTP OPTIONS Dav: header.
93
+	 *
94
+	 * @return array
95
+	 */
96
+	public function getFeatures()
97
+	{
98
+		return ['sabredav-partialupdate'];
99
+	}
100
+
101
+	/**
102
+	 * Patch an uri.
103
+	 *
104
+	 * The WebDAV patch request can be used to modify only a part of an
105
+	 * existing resource. If the resource does not exist yet and the first
106
+	 * offset is not 0, the request fails
107
+	 */
108
+	public function httpPatch(RequestInterface $request, ResponseInterface $response)
109
+	{
110
+		$path = $request->getPath();
111
+
112
+		// Get the node. Will throw a 404 if not found
113
+		$node = $this->server->tree->getNodeForPath($path);
114
+		if (!$node instanceof IPatchSupport) {
115
+			throw new DAV\Exception\MethodNotAllowed('The target resource does not support the PATCH method.');
116
+		}
117
+
118
+		$range = $this->getHTTPUpdateRange($request);
119
+
120
+		if (!$range) {
121
+			throw new DAV\Exception\BadRequest('No valid "X-Update-Range" found in the headers');
122
+		}
123
+
124
+		$contentType = strtolower(
125
+			(string) $request->getHeader('Content-Type')
126
+		);
127
+
128
+		if ('application/x-sabredav-partialupdate' != $contentType) {
129
+			throw new DAV\Exception\UnsupportedMediaType('Unknown Content-Type header "'.$contentType.'"');
130
+		}
131
+
132
+		$len = $this->server->httpRequest->getHeader('Content-Length');
133
+		if (!$len) {
134
+			throw new DAV\Exception\LengthRequired('A Content-Length header is required');
135
+		}
136
+		switch ($range[0]) {
137
+			case self::RANGE_START:
138
+				// Calculate the end-range if it doesn't exist.
139
+				if (!$range[2]) {
140
+					$range[2] = $range[1] + $len - 1;
141
+				} else {
142
+					if ($range[2] < $range[1]) {
143
+						throw new DAV\Exception\RequestedRangeNotSatisfiable('The end offset ('.$range[2].') is lower than the start offset ('.$range[1].')');
144
+					}
145
+					if ($range[2] - $range[1] + 1 != $len) {
146
+						throw new DAV\Exception\RequestedRangeNotSatisfiable('Actual data length ('.$len.') is not consistent with begin ('.$range[1].') and end ('.$range[2].') offsets');
147
+					}
148
+				}
149
+				break;
150
+		}
151
+
152
+		if (!$this->server->emit('beforeWriteContent', [$path, $node, null])) {
153
+			return;
154
+		}
155
+
156
+		$body = $this->server->httpRequest->getBody();
157
+
158
+		$etag = $node->patch($body, $range[0], isset($range[1]) ? $range[1] : null);
159
+
160
+		$this->server->emit('afterWriteContent', [$path, $node]);
161
+
162
+		$response->setHeader('Content-Length', '0');
163
+		if ($etag) {
164
+			$response->setHeader('ETag', $etag);
165
+		}
166
+		$response->setStatus(204);
167
+
168
+		// Breaks the event chain
169
+		return false;
170
+	}
171
+
172
+	/**
173
+	 * Returns the HTTP custom range update header.
174
+	 *
175
+	 * This method returns null if there is no well-formed HTTP range request
176
+	 * header. It returns array(1) if it was an append request, array(2,
177
+	 * $start, $end) if it's a start and end range, lastly it's array(3,
178
+	 * $endoffset) if the offset was negative, and should be calculated from
179
+	 * the end of the file.
180
+	 *
181
+	 * Examples:
182
+	 *
183
+	 * null - invalid
184
+	 * [1] - append
185
+	 * [2,10,15] - update bytes 10, 11, 12, 13, 14, 15
186
+	 * [2,10,null] - update bytes 10 until the end of the patch body
187
+	 * [3,-5] - update from 5 bytes from the end of the file.
188
+	 *
189
+	 * @return array|null
190
+	 */
191
+	public function getHTTPUpdateRange(RequestInterface $request)
192
+	{
193
+		$range = $request->getHeader('X-Update-Range');
194
+		if (is_null($range)) {
195
+			return null;
196
+		}
197
+
198
+		// Matching "Range: bytes=1234-5678: both numbers are optional
199
+
200
+		if (!preg_match('/^(append)|(?:bytes=([0-9]+)-([0-9]*))|(?:bytes=(-[0-9]+))$/i', $range, $matches)) {
201
+			return null;
202
+		}
203
+
204
+		if ('append' === $matches[1]) {
205
+			return [self::RANGE_APPEND];
206
+		} elseif (strlen($matches[2]) > 0) {
207
+			return [self::RANGE_START, (int) $matches[2], (int) $matches[3] ?: null];
208
+		} else {
209
+			return [self::RANGE_END, (int) $matches[4]];
210
+		}
211
+	}
212 212
 }
Please login to merge, or discard this patch.
htdocs/includes/sabre/sabre/dav/lib/DAV/PartialUpdate/IPatchSupport.php 1 patch
Indentation   +29 added lines, -29 removed lines patch added patch discarded remove patch
@@ -17,33 +17,33 @@
 block discarded – undo
17 17
  */
18 18
 interface IPatchSupport extends DAV\IFile
19 19
 {
20
-    /**
21
-     * Updates the file based on a range specification.
22
-     *
23
-     * The first argument is the data, which is either a readable stream
24
-     * resource or a string.
25
-     *
26
-     * The second argument is the type of update we're doing.
27
-     * This is either:
28
-     * * 1. append
29
-     * * 2. update based on a start byte
30
-     * * 3. update based on an end byte
31
-     *;
32
-     * The third argument is the start or end byte.
33
-     *
34
-     * After a successful put operation, you may choose to return an ETag. The
35
-     * etag must always be surrounded by double-quotes. These quotes must
36
-     * appear in the actual string you're returning.
37
-     *
38
-     * Clients may use the ETag from a PUT request to later on make sure that
39
-     * when they update the file, the contents haven't changed in the mean
40
-     * time.
41
-     *
42
-     * @param resource|string $data
43
-     * @param int             $rangeType
44
-     * @param int             $offset
45
-     *
46
-     * @return string|null
47
-     */
48
-    public function patch($data, $rangeType, $offset = null);
20
+	/**
21
+	 * Updates the file based on a range specification.
22
+	 *
23
+	 * The first argument is the data, which is either a readable stream
24
+	 * resource or a string.
25
+	 *
26
+	 * The second argument is the type of update we're doing.
27
+	 * This is either:
28
+	 * * 1. append
29
+	 * * 2. update based on a start byte
30
+	 * * 3. update based on an end byte
31
+	 *;
32
+	 * The third argument is the start or end byte.
33
+	 *
34
+	 * After a successful put operation, you may choose to return an ETag. The
35
+	 * etag must always be surrounded by double-quotes. These quotes must
36
+	 * appear in the actual string you're returning.
37
+	 *
38
+	 * Clients may use the ETag from a PUT request to later on make sure that
39
+	 * when they update the file, the contents haven't changed in the mean
40
+	 * time.
41
+	 *
42
+	 * @param resource|string $data
43
+	 * @param int             $rangeType
44
+	 * @param int             $offset
45
+	 *
46
+	 * @return string|null
47
+	 */
48
+	public function patch($data, $rangeType, $offset = null);
49 49
 }
Please login to merge, or discard this patch.