Completed
Branch develop (65a276)
by
unknown
14:42
created
sabre/sabre/dav/lib/CardDAV/Xml/Request/AddressBookMultiGetReport.php 1 patch
Indentation   +75 added lines, -75 removed lines patch added patch discarded remove patch
@@ -23,87 +23,87 @@
 block discarded – undo
23 23
  */
24 24
 class AddressBookMultiGetReport implements XmlDeserializable
25 25
 {
26
-    /**
27
-     * An array with requested properties.
28
-     *
29
-     * @var array
30
-     */
31
-    public $properties;
26
+	/**
27
+	 * An array with requested properties.
28
+	 *
29
+	 * @var array
30
+	 */
31
+	public $properties;
32 32
 
33
-    /**
34
-     * This is an array with the urls that are being requested.
35
-     *
36
-     * @var array
37
-     */
38
-    public $hrefs;
33
+	/**
34
+	 * This is an array with the urls that are being requested.
35
+	 *
36
+	 * @var array
37
+	 */
38
+	public $hrefs;
39 39
 
40
-    /**
41
-     * The mimetype of the content that should be returend. Usually
42
-     * text/vcard.
43
-     *
44
-     * @var string
45
-     */
46
-    public $contentType = null;
40
+	/**
41
+	 * The mimetype of the content that should be returend. Usually
42
+	 * text/vcard.
43
+	 *
44
+	 * @var string
45
+	 */
46
+	public $contentType = null;
47 47
 
48
-    /**
49
-     * The version of vcard data that should be returned. Usually 3.0,
50
-     * referring to vCard 3.0.
51
-     *
52
-     * @var string
53
-     */
54
-    public $version = null;
48
+	/**
49
+	 * The version of vcard data that should be returned. Usually 3.0,
50
+	 * referring to vCard 3.0.
51
+	 *
52
+	 * @var string
53
+	 */
54
+	public $version = null;
55 55
 
56
-    /**
57
-     * The deserialize method is called during xml parsing.
58
-     *
59
-     * This method is called statically, this is because in theory this method
60
-     * may be used as a type of constructor, or factory method.
61
-     *
62
-     * Often you want to return an instance of the current class, but you are
63
-     * free to return other data as well.
64
-     *
65
-     * You are responsible for advancing the reader to the next element. Not
66
-     * doing anything will result in a never-ending loop.
67
-     *
68
-     * If you just want to skip parsing for this element altogether, you can
69
-     * just call $reader->next();
70
-     *
71
-     * $reader->parseInnerTree() will parse the entire sub-tree, and advance to
72
-     * the next element.
73
-     *
74
-     * @return mixed
75
-     */
76
-    public static function xmlDeserialize(Reader $reader)
77
-    {
78
-        $elems = $reader->parseInnerTree([
79
-            '{urn:ietf:params:xml:ns:carddav}address-data' => 'Sabre\\CardDAV\\Xml\\Filter\\AddressData',
80
-            '{DAV:}prop' => 'Sabre\\Xml\\Element\\KeyValue',
81
-        ]);
56
+	/**
57
+	 * The deserialize method is called during xml parsing.
58
+	 *
59
+	 * This method is called statically, this is because in theory this method
60
+	 * may be used as a type of constructor, or factory method.
61
+	 *
62
+	 * Often you want to return an instance of the current class, but you are
63
+	 * free to return other data as well.
64
+	 *
65
+	 * You are responsible for advancing the reader to the next element. Not
66
+	 * doing anything will result in a never-ending loop.
67
+	 *
68
+	 * If you just want to skip parsing for this element altogether, you can
69
+	 * just call $reader->next();
70
+	 *
71
+	 * $reader->parseInnerTree() will parse the entire sub-tree, and advance to
72
+	 * the next element.
73
+	 *
74
+	 * @return mixed
75
+	 */
76
+	public static function xmlDeserialize(Reader $reader)
77
+	{
78
+		$elems = $reader->parseInnerTree([
79
+			'{urn:ietf:params:xml:ns:carddav}address-data' => 'Sabre\\CardDAV\\Xml\\Filter\\AddressData',
80
+			'{DAV:}prop' => 'Sabre\\Xml\\Element\\KeyValue',
81
+		]);
82 82
 
83
-        $newProps = [
84
-            'hrefs' => [],
85
-            'properties' => [],
86
-        ];
83
+		$newProps = [
84
+			'hrefs' => [],
85
+			'properties' => [],
86
+		];
87 87
 
88
-        foreach ($elems as $elem) {
89
-            switch ($elem['name']) {
90
-                case '{DAV:}prop':
91
-                    $newProps['properties'] = array_keys($elem['value']);
92
-                    if (isset($elem['value']['{'.Plugin::NS_CARDDAV.'}address-data'])) {
93
-                        $newProps += $elem['value']['{'.Plugin::NS_CARDDAV.'}address-data'];
94
-                    }
95
-                    break;
96
-                case '{DAV:}href':
97
-                    $newProps['hrefs'][] = Uri\resolve($reader->contextUri, $elem['value']);
98
-                    break;
99
-            }
100
-        }
88
+		foreach ($elems as $elem) {
89
+			switch ($elem['name']) {
90
+				case '{DAV:}prop':
91
+					$newProps['properties'] = array_keys($elem['value']);
92
+					if (isset($elem['value']['{'.Plugin::NS_CARDDAV.'}address-data'])) {
93
+						$newProps += $elem['value']['{'.Plugin::NS_CARDDAV.'}address-data'];
94
+					}
95
+					break;
96
+				case '{DAV:}href':
97
+					$newProps['hrefs'][] = Uri\resolve($reader->contextUri, $elem['value']);
98
+					break;
99
+			}
100
+		}
101 101
 
102
-        $obj = new self();
103
-        foreach ($newProps as $key => $value) {
104
-            $obj->$key = $value;
105
-        }
102
+		$obj = new self();
103
+		foreach ($newProps as $key => $value) {
104
+			$obj->$key = $value;
105
+		}
106 106
 
107
-        return $obj;
108
-    }
107
+		return $obj;
108
+	}
109 109
 }
Please login to merge, or discard this patch.
includes/sabre/sabre/dav/lib/CardDAV/Xml/Request/AddressBookQueryReport.php 1 patch
Indentation   +161 added lines, -161 removed lines patch added patch discarded remove patch
@@ -23,171 +23,171 @@
 block discarded – undo
23 23
  */
24 24
 class AddressBookQueryReport implements XmlDeserializable
25 25
 {
26
-    /**
27
-     * An array with requested properties.
28
-     *
29
-     * @var array
30
-     */
31
-    public $properties;
32
-
33
-    /**
34
-     * An array with requested vcard properties.
35
-     *
36
-     * @var array
37
-     */
38
-    public $addressDataProperties = [];
39
-
40
-    /**
41
-     * List of property/component filters.
42
-     *
43
-     * This is an array with filters. Every item is a property filter. Every
44
-     * property filter has the following keys:
45
-     *   * name - name of the component to filter on
46
-     *   * test - anyof or allof
47
-     *   * is-not-defined - Test for non-existence
48
-     *   * param-filters - A list of parameter filters on the property
49
-     *   * text-matches - A list of text values the filter needs to match
50
-     *
51
-     * Each param-filter has the following keys:
52
-     *   * name - name of the parameter
53
-     *   * is-not-defined - Test for non-existence
54
-     *   * text-match - Match the parameter value
55
-     *
56
-     * Each text-match in property filters, and the single text-match in
57
-     * param-filters have the following keys:
58
-     *
59
-     *   * value - value to match
60
-     *   * match-type - contains, starts-with, ends-with, equals
61
-     *   * negate-condition - Do the opposite match
62
-     *   * collation - Usually i;unicode-casemap
63
-     *
64
-     * @var array
65
-     */
66
-    public $filters;
67
-
68
-    /**
69
-     * The number of results the client wants.
70
-     *
71
-     * null means it wasn't specified, which in most cases means 'all results'.
72
-     *
73
-     * @var int|null
74
-     */
75
-    public $limit;
76
-
77
-    /**
78
-     * Either 'anyof' or 'allof'.
79
-     *
80
-     * @var string
81
-     */
82
-    public $test;
83
-
84
-    /**
85
-     * The mimetype of the content that should be returend. Usually
86
-     * text/vcard.
87
-     *
88
-     * @var string
89
-     */
90
-    public $contentType = null;
91
-
92
-    /**
93
-     * The version of vcard data that should be returned. Usually 3.0,
94
-     * referring to vCard 3.0.
95
-     *
96
-     * @var string
97
-     */
98
-    public $version = null;
99
-
100
-    /**
101
-     * The deserialize method is called during xml parsing.
102
-     *
103
-     * This method is called statically, this is because in theory this method
104
-     * may be used as a type of constructor, or factory method.
105
-     *
106
-     * Often you want to return an instance of the current class, but you are
107
-     * free to return other data as well.
108
-     *
109
-     * You are responsible for advancing the reader to the next element. Not
110
-     * doing anything will result in a never-ending loop.
111
-     *
112
-     * If you just want to skip parsing for this element altogether, you can
113
-     * just call $reader->next();
114
-     *
115
-     * $reader->parseInnerTree() will parse the entire sub-tree, and advance to
116
-     * the next element.
117
-     *
118
-     * @return mixed
119
-     */
120
-    public static function xmlDeserialize(Reader $reader)
121
-    {
122
-        $elems = (array) $reader->parseInnerTree([
123
-            '{urn:ietf:params:xml:ns:carddav}prop-filter' => 'Sabre\\CardDAV\\Xml\\Filter\\PropFilter',
124
-            '{urn:ietf:params:xml:ns:carddav}param-filter' => 'Sabre\\CardDAV\\Xml\\Filter\\ParamFilter',
125
-            '{urn:ietf:params:xml:ns:carddav}address-data' => 'Sabre\\CardDAV\\Xml\\Filter\\AddressData',
126
-            '{DAV:}prop' => 'Sabre\\Xml\\Element\\KeyValue',
127
-        ]);
128
-
129
-        $newProps = [
130
-            'filters' => null,
131
-            'properties' => [],
132
-            'test' => 'anyof',
133
-            'limit' => null,
134
-        ];
135
-
136
-        if (!is_array($elems)) {
137
-            $elems = [];
138
-        }
139
-
140
-        foreach ($elems as $elem) {
141
-            switch ($elem['name']) {
142
-                case '{DAV:}prop':
143
-                    $newProps['properties'] = array_keys($elem['value']);
144
-                    if (isset($elem['value']['{'.Plugin::NS_CARDDAV.'}address-data'])) {
145
-                        $newProps += $elem['value']['{'.Plugin::NS_CARDDAV.'}address-data'];
146
-                    }
147
-                    break;
148
-                case '{'.Plugin::NS_CARDDAV.'}filter':
149
-                    if (!is_null($newProps['filters'])) {
150
-                        throw new BadRequest('You can only include 1 {'.Plugin::NS_CARDDAV.'}filter element');
151
-                    }
152
-                    if (isset($elem['attributes']['test'])) {
153
-                        $newProps['test'] = $elem['attributes']['test'];
154
-                        if ('allof' !== $newProps['test'] && 'anyof' !== $newProps['test']) {
155
-                            throw new BadRequest('The "test" attribute must be one of "allof" or "anyof"');
156
-                        }
157
-                    }
158
-
159
-                    $newProps['filters'] = [];
160
-                    foreach ((array) $elem['value'] as $subElem) {
161
-                        if ($subElem['name'] === '{'.Plugin::NS_CARDDAV.'}prop-filter') {
162
-                            $newProps['filters'][] = $subElem['value'];
163
-                        }
164
-                    }
165
-                    break;
166
-                case '{'.Plugin::NS_CARDDAV.'}limit':
167
-                    foreach ($elem['value'] as $child) {
168
-                        if ($child['name'] === '{'.Plugin::NS_CARDDAV.'}nresults') {
169
-                            $newProps['limit'] = (int) $child['value'];
170
-                        }
171
-                    }
172
-                    break;
173
-            }
174
-        }
175
-
176
-        if (is_null($newProps['filters'])) {
177
-            /*
26
+	/**
27
+	 * An array with requested properties.
28
+	 *
29
+	 * @var array
30
+	 */
31
+	public $properties;
32
+
33
+	/**
34
+	 * An array with requested vcard properties.
35
+	 *
36
+	 * @var array
37
+	 */
38
+	public $addressDataProperties = [];
39
+
40
+	/**
41
+	 * List of property/component filters.
42
+	 *
43
+	 * This is an array with filters. Every item is a property filter. Every
44
+	 * property filter has the following keys:
45
+	 *   * name - name of the component to filter on
46
+	 *   * test - anyof or allof
47
+	 *   * is-not-defined - Test for non-existence
48
+	 *   * param-filters - A list of parameter filters on the property
49
+	 *   * text-matches - A list of text values the filter needs to match
50
+	 *
51
+	 * Each param-filter has the following keys:
52
+	 *   * name - name of the parameter
53
+	 *   * is-not-defined - Test for non-existence
54
+	 *   * text-match - Match the parameter value
55
+	 *
56
+	 * Each text-match in property filters, and the single text-match in
57
+	 * param-filters have the following keys:
58
+	 *
59
+	 *   * value - value to match
60
+	 *   * match-type - contains, starts-with, ends-with, equals
61
+	 *   * negate-condition - Do the opposite match
62
+	 *   * collation - Usually i;unicode-casemap
63
+	 *
64
+	 * @var array
65
+	 */
66
+	public $filters;
67
+
68
+	/**
69
+	 * The number of results the client wants.
70
+	 *
71
+	 * null means it wasn't specified, which in most cases means 'all results'.
72
+	 *
73
+	 * @var int|null
74
+	 */
75
+	public $limit;
76
+
77
+	/**
78
+	 * Either 'anyof' or 'allof'.
79
+	 *
80
+	 * @var string
81
+	 */
82
+	public $test;
83
+
84
+	/**
85
+	 * The mimetype of the content that should be returend. Usually
86
+	 * text/vcard.
87
+	 *
88
+	 * @var string
89
+	 */
90
+	public $contentType = null;
91
+
92
+	/**
93
+	 * The version of vcard data that should be returned. Usually 3.0,
94
+	 * referring to vCard 3.0.
95
+	 *
96
+	 * @var string
97
+	 */
98
+	public $version = null;
99
+
100
+	/**
101
+	 * The deserialize method is called during xml parsing.
102
+	 *
103
+	 * This method is called statically, this is because in theory this method
104
+	 * may be used as a type of constructor, or factory method.
105
+	 *
106
+	 * Often you want to return an instance of the current class, but you are
107
+	 * free to return other data as well.
108
+	 *
109
+	 * You are responsible for advancing the reader to the next element. Not
110
+	 * doing anything will result in a never-ending loop.
111
+	 *
112
+	 * If you just want to skip parsing for this element altogether, you can
113
+	 * just call $reader->next();
114
+	 *
115
+	 * $reader->parseInnerTree() will parse the entire sub-tree, and advance to
116
+	 * the next element.
117
+	 *
118
+	 * @return mixed
119
+	 */
120
+	public static function xmlDeserialize(Reader $reader)
121
+	{
122
+		$elems = (array) $reader->parseInnerTree([
123
+			'{urn:ietf:params:xml:ns:carddav}prop-filter' => 'Sabre\\CardDAV\\Xml\\Filter\\PropFilter',
124
+			'{urn:ietf:params:xml:ns:carddav}param-filter' => 'Sabre\\CardDAV\\Xml\\Filter\\ParamFilter',
125
+			'{urn:ietf:params:xml:ns:carddav}address-data' => 'Sabre\\CardDAV\\Xml\\Filter\\AddressData',
126
+			'{DAV:}prop' => 'Sabre\\Xml\\Element\\KeyValue',
127
+		]);
128
+
129
+		$newProps = [
130
+			'filters' => null,
131
+			'properties' => [],
132
+			'test' => 'anyof',
133
+			'limit' => null,
134
+		];
135
+
136
+		if (!is_array($elems)) {
137
+			$elems = [];
138
+		}
139
+
140
+		foreach ($elems as $elem) {
141
+			switch ($elem['name']) {
142
+				case '{DAV:}prop':
143
+					$newProps['properties'] = array_keys($elem['value']);
144
+					if (isset($elem['value']['{'.Plugin::NS_CARDDAV.'}address-data'])) {
145
+						$newProps += $elem['value']['{'.Plugin::NS_CARDDAV.'}address-data'];
146
+					}
147
+					break;
148
+				case '{'.Plugin::NS_CARDDAV.'}filter':
149
+					if (!is_null($newProps['filters'])) {
150
+						throw new BadRequest('You can only include 1 {'.Plugin::NS_CARDDAV.'}filter element');
151
+					}
152
+					if (isset($elem['attributes']['test'])) {
153
+						$newProps['test'] = $elem['attributes']['test'];
154
+						if ('allof' !== $newProps['test'] && 'anyof' !== $newProps['test']) {
155
+							throw new BadRequest('The "test" attribute must be one of "allof" or "anyof"');
156
+						}
157
+					}
158
+
159
+					$newProps['filters'] = [];
160
+					foreach ((array) $elem['value'] as $subElem) {
161
+						if ($subElem['name'] === '{'.Plugin::NS_CARDDAV.'}prop-filter') {
162
+							$newProps['filters'][] = $subElem['value'];
163
+						}
164
+					}
165
+					break;
166
+				case '{'.Plugin::NS_CARDDAV.'}limit':
167
+					foreach ($elem['value'] as $child) {
168
+						if ($child['name'] === '{'.Plugin::NS_CARDDAV.'}nresults') {
169
+							$newProps['limit'] = (int) $child['value'];
170
+						}
171
+					}
172
+					break;
173
+			}
174
+		}
175
+
176
+		if (is_null($newProps['filters'])) {
177
+			/*
178 178
              * We are supposed to throw this error, but KDE sometimes does not
179 179
              * include the filter element, and we need to treat it as if no
180 180
              * filters are supplied
181 181
              */
182
-            //throw new BadRequest('The {' . Plugin::NS_CARDDAV . '}filter element is required for this request');
183
-            $newProps['filters'] = [];
184
-        }
182
+			//throw new BadRequest('The {' . Plugin::NS_CARDDAV . '}filter element is required for this request');
183
+			$newProps['filters'] = [];
184
+		}
185 185
 
186
-        $obj = new self();
187
-        foreach ($newProps as $key => $value) {
188
-            $obj->$key = $value;
189
-        }
186
+		$obj = new self();
187
+		foreach ($newProps as $key => $value) {
188
+			$obj->$key = $value;
189
+		}
190 190
 
191
-        return $obj;
192
-    }
191
+		return $obj;
192
+	}
193 193
 }
Please login to merge, or discard this patch.
htdocs/includes/sabre/sabre/dav/lib/CardDAV/Xml/Filter/ParamFilter.php 1 patch
Indentation   +53 added lines, -53 removed lines patch added patch discarded remove patch
@@ -25,62 +25,62 @@
 block discarded – undo
25 25
  */
26 26
 abstract class ParamFilter implements Element
27 27
 {
28
-    /**
29
-     * The deserialize method is called during xml parsing.
30
-     *
31
-     * This method is called statically, this is because in theory this method
32
-     * may be used as a type of constructor, or factory method.
33
-     *
34
-     * Often you want to return an instance of the current class, but you are
35
-     * free to return other data as well.
36
-     *
37
-     * You are responsible for advancing the reader to the next element. Not
38
-     * doing anything will result in a never-ending loop.
39
-     *
40
-     * If you just want to skip parsing for this element altogether, you can
41
-     * just call $reader->next();
42
-     *
43
-     * $reader->parseInnerTree() will parse the entire sub-tree, and advance to
44
-     * the next element.
45
-     *
46
-     * @return mixed
47
-     */
48
-    public static function xmlDeserialize(Reader $reader)
49
-    {
50
-        $result = [
51
-            'name' => null,
52
-            'is-not-defined' => false,
53
-            'text-match' => null,
54
-        ];
28
+	/**
29
+	 * The deserialize method is called during xml parsing.
30
+	 *
31
+	 * This method is called statically, this is because in theory this method
32
+	 * may be used as a type of constructor, or factory method.
33
+	 *
34
+	 * Often you want to return an instance of the current class, but you are
35
+	 * free to return other data as well.
36
+	 *
37
+	 * You are responsible for advancing the reader to the next element. Not
38
+	 * doing anything will result in a never-ending loop.
39
+	 *
40
+	 * If you just want to skip parsing for this element altogether, you can
41
+	 * just call $reader->next();
42
+	 *
43
+	 * $reader->parseInnerTree() will parse the entire sub-tree, and advance to
44
+	 * the next element.
45
+	 *
46
+	 * @return mixed
47
+	 */
48
+	public static function xmlDeserialize(Reader $reader)
49
+	{
50
+		$result = [
51
+			'name' => null,
52
+			'is-not-defined' => false,
53
+			'text-match' => null,
54
+		];
55 55
 
56
-        $att = $reader->parseAttributes();
57
-        $result['name'] = $att['name'];
56
+		$att = $reader->parseAttributes();
57
+		$result['name'] = $att['name'];
58 58
 
59
-        $elems = $reader->parseInnerTree();
59
+		$elems = $reader->parseInnerTree();
60 60
 
61
-        if (is_array($elems)) {
62
-            foreach ($elems as $elem) {
63
-                switch ($elem['name']) {
64
-                case '{'.Plugin::NS_CARDDAV.'}is-not-defined':
65
-                    $result['is-not-defined'] = true;
66
-                    break;
67
-                case '{'.Plugin::NS_CARDDAV.'}text-match':
68
-                    $matchType = isset($elem['attributes']['match-type']) ? $elem['attributes']['match-type'] : 'contains';
61
+		if (is_array($elems)) {
62
+			foreach ($elems as $elem) {
63
+				switch ($elem['name']) {
64
+				case '{'.Plugin::NS_CARDDAV.'}is-not-defined':
65
+					$result['is-not-defined'] = true;
66
+					break;
67
+				case '{'.Plugin::NS_CARDDAV.'}text-match':
68
+					$matchType = isset($elem['attributes']['match-type']) ? $elem['attributes']['match-type'] : 'contains';
69 69
 
70
-                    if (!in_array($matchType, ['contains', 'equals', 'starts-with', 'ends-with'])) {
71
-                        throw new BadRequest('Unknown match-type: '.$matchType);
72
-                    }
73
-                    $result['text-match'] = [
74
-                        'negate-condition' => isset($elem['attributes']['negate-condition']) && 'yes' === $elem['attributes']['negate-condition'],
75
-                        'collation' => isset($elem['attributes']['collation']) ? $elem['attributes']['collation'] : 'i;unicode-casemap',
76
-                        'value' => $elem['value'],
77
-                        'match-type' => $matchType,
78
-                    ];
79
-                    break;
80
-            }
81
-            }
82
-        }
70
+					if (!in_array($matchType, ['contains', 'equals', 'starts-with', 'ends-with'])) {
71
+						throw new BadRequest('Unknown match-type: '.$matchType);
72
+					}
73
+					$result['text-match'] = [
74
+						'negate-condition' => isset($elem['attributes']['negate-condition']) && 'yes' === $elem['attributes']['negate-condition'],
75
+						'collation' => isset($elem['attributes']['collation']) ? $elem['attributes']['collation'] : 'i;unicode-casemap',
76
+						'value' => $elem['value'],
77
+						'match-type' => $matchType,
78
+					];
79
+					break;
80
+			}
81
+			}
82
+		}
83 83
 
84
-        return $result;
85
-    }
84
+		return $result;
85
+	}
86 86
 }
Please login to merge, or discard this patch.
htdocs/includes/sabre/sabre/dav/lib/CardDAV/Xml/Filter/PropFilter.php 1 patch
Indentation   +61 added lines, -61 removed lines patch added patch discarded remove patch
@@ -25,71 +25,71 @@
 block discarded – undo
25 25
  */
26 26
 class PropFilter implements XmlDeserializable
27 27
 {
28
-    /**
29
-     * The deserialize method is called during xml parsing.
30
-     *
31
-     * This method is called statically, this is because in theory this method
32
-     * may be used as a type of constructor, or factory method.
33
-     *
34
-     * Often you want to return an instance of the current class, but you are
35
-     * free to return other data as well.
36
-     *
37
-     * You are responsible for advancing the reader to the next element. Not
38
-     * doing anything will result in a never-ending loop.
39
-     *
40
-     * If you just want to skip parsing for this element altogether, you can
41
-     * just call $reader->next();
42
-     *
43
-     * $reader->parseInnerTree() will parse the entire sub-tree, and advance to
44
-     * the next element.
45
-     *
46
-     * @return mixed
47
-     */
48
-    public static function xmlDeserialize(Reader $reader)
49
-    {
50
-        $result = [
51
-            'name' => null,
52
-            'test' => 'anyof',
53
-            'is-not-defined' => false,
54
-            'param-filters' => [],
55
-            'text-matches' => [],
56
-        ];
28
+	/**
29
+	 * The deserialize method is called during xml parsing.
30
+	 *
31
+	 * This method is called statically, this is because in theory this method
32
+	 * may be used as a type of constructor, or factory method.
33
+	 *
34
+	 * Often you want to return an instance of the current class, but you are
35
+	 * free to return other data as well.
36
+	 *
37
+	 * You are responsible for advancing the reader to the next element. Not
38
+	 * doing anything will result in a never-ending loop.
39
+	 *
40
+	 * If you just want to skip parsing for this element altogether, you can
41
+	 * just call $reader->next();
42
+	 *
43
+	 * $reader->parseInnerTree() will parse the entire sub-tree, and advance to
44
+	 * the next element.
45
+	 *
46
+	 * @return mixed
47
+	 */
48
+	public static function xmlDeserialize(Reader $reader)
49
+	{
50
+		$result = [
51
+			'name' => null,
52
+			'test' => 'anyof',
53
+			'is-not-defined' => false,
54
+			'param-filters' => [],
55
+			'text-matches' => [],
56
+		];
57 57
 
58
-        $att = $reader->parseAttributes();
59
-        $result['name'] = $att['name'];
58
+		$att = $reader->parseAttributes();
59
+		$result['name'] = $att['name'];
60 60
 
61
-        if (isset($att['test']) && 'allof' === $att['test']) {
62
-            $result['test'] = 'allof';
63
-        }
61
+		if (isset($att['test']) && 'allof' === $att['test']) {
62
+			$result['test'] = 'allof';
63
+		}
64 64
 
65
-        $elems = $reader->parseInnerTree();
65
+		$elems = $reader->parseInnerTree();
66 66
 
67
-        if (is_array($elems)) {
68
-            foreach ($elems as $elem) {
69
-                switch ($elem['name']) {
70
-                case '{'.Plugin::NS_CARDDAV.'}param-filter':
71
-                    $result['param-filters'][] = $elem['value'];
72
-                    break;
73
-                case '{'.Plugin::NS_CARDDAV.'}is-not-defined':
74
-                    $result['is-not-defined'] = true;
75
-                    break;
76
-                case '{'.Plugin::NS_CARDDAV.'}text-match':
77
-                    $matchType = isset($elem['attributes']['match-type']) ? $elem['attributes']['match-type'] : 'contains';
67
+		if (is_array($elems)) {
68
+			foreach ($elems as $elem) {
69
+				switch ($elem['name']) {
70
+				case '{'.Plugin::NS_CARDDAV.'}param-filter':
71
+					$result['param-filters'][] = $elem['value'];
72
+					break;
73
+				case '{'.Plugin::NS_CARDDAV.'}is-not-defined':
74
+					$result['is-not-defined'] = true;
75
+					break;
76
+				case '{'.Plugin::NS_CARDDAV.'}text-match':
77
+					$matchType = isset($elem['attributes']['match-type']) ? $elem['attributes']['match-type'] : 'contains';
78 78
 
79
-                    if (!in_array($matchType, ['contains', 'equals', 'starts-with', 'ends-with'])) {
80
-                        throw new BadRequest('Unknown match-type: '.$matchType);
81
-                    }
82
-                    $result['text-matches'][] = [
83
-                        'negate-condition' => isset($elem['attributes']['negate-condition']) && 'yes' === $elem['attributes']['negate-condition'],
84
-                        'collation' => isset($elem['attributes']['collation']) ? $elem['attributes']['collation'] : 'i;unicode-casemap',
85
-                        'value' => $elem['value'],
86
-                        'match-type' => $matchType,
87
-                    ];
88
-                    break;
89
-            }
90
-            }
91
-        }
79
+					if (!in_array($matchType, ['contains', 'equals', 'starts-with', 'ends-with'])) {
80
+						throw new BadRequest('Unknown match-type: '.$matchType);
81
+					}
82
+					$result['text-matches'][] = [
83
+						'negate-condition' => isset($elem['attributes']['negate-condition']) && 'yes' === $elem['attributes']['negate-condition'],
84
+						'collation' => isset($elem['attributes']['collation']) ? $elem['attributes']['collation'] : 'i;unicode-casemap',
85
+						'value' => $elem['value'],
86
+						'match-type' => $matchType,
87
+					];
88
+					break;
89
+			}
90
+			}
91
+		}
92 92
 
93
-        return $result;
94
-    }
93
+		return $result;
94
+	}
95 95
 }
Please login to merge, or discard this patch.
htdocs/includes/sabre/sabre/dav/lib/CardDAV/Xml/Filter/AddressData.php 1 patch
Indentation   +36 added lines, -36 removed lines patch added patch discarded remove patch
@@ -25,42 +25,42 @@
 block discarded – undo
25 25
  */
26 26
 class AddressData implements XmlDeserializable
27 27
 {
28
-    /**
29
-     * The deserialize method is called during xml parsing.
30
-     *
31
-     * This method is called statically, this is because in theory this method
32
-     * may be used as a type of constructor, or factory method.
33
-     *
34
-     * Often you want to return an instance of the current class, but you are
35
-     * free to return other data as well.
36
-     *
37
-     * You are responsible for advancing the reader to the next element. Not
38
-     * doing anything will result in a never-ending loop.
39
-     *
40
-     * If you just want to skip parsing for this element altogether, you can
41
-     * just call $reader->next();
42
-     *
43
-     * $reader->parseInnerTree() will parse the entire sub-tree, and advance to
44
-     * the next element.
45
-     *
46
-     * @return mixed
47
-     */
48
-    public static function xmlDeserialize(Reader $reader)
49
-    {
50
-        $result = [
51
-            'contentType' => $reader->getAttribute('content-type') ?: 'text/vcard',
52
-            'version' => $reader->getAttribute('version') ?: '3.0',
53
-        ];
28
+	/**
29
+	 * The deserialize method is called during xml parsing.
30
+	 *
31
+	 * This method is called statically, this is because in theory this method
32
+	 * may be used as a type of constructor, or factory method.
33
+	 *
34
+	 * Often you want to return an instance of the current class, but you are
35
+	 * free to return other data as well.
36
+	 *
37
+	 * You are responsible for advancing the reader to the next element. Not
38
+	 * doing anything will result in a never-ending loop.
39
+	 *
40
+	 * If you just want to skip parsing for this element altogether, you can
41
+	 * just call $reader->next();
42
+	 *
43
+	 * $reader->parseInnerTree() will parse the entire sub-tree, and advance to
44
+	 * the next element.
45
+	 *
46
+	 * @return mixed
47
+	 */
48
+	public static function xmlDeserialize(Reader $reader)
49
+	{
50
+		$result = [
51
+			'contentType' => $reader->getAttribute('content-type') ?: 'text/vcard',
52
+			'version' => $reader->getAttribute('version') ?: '3.0',
53
+		];
54 54
 
55
-        $elems = (array) $reader->parseInnerTree();
56
-        $elems = array_filter($elems, function ($element) {
57
-            return '{urn:ietf:params:xml:ns:carddav}prop' === $element['name'] &&
58
-                isset($element['attributes']['name']);
59
-        });
60
-        $result['addressDataProperties'] = array_map(function ($element) {
61
-            return $element['attributes']['name'];
62
-        }, $elems);
55
+		$elems = (array) $reader->parseInnerTree();
56
+		$elems = array_filter($elems, function ($element) {
57
+			return '{urn:ietf:params:xml:ns:carddav}prop' === $element['name'] &&
58
+				isset($element['attributes']['name']);
59
+		});
60
+		$result['addressDataProperties'] = array_map(function ($element) {
61
+			return $element['attributes']['name'];
62
+		}, $elems);
63 63
 
64
-        return $result;
65
-    }
64
+		return $result;
65
+	}
66 66
 }
Please login to merge, or discard this patch.
includes/sabre/sabre/dav/lib/CardDAV/Xml/Property/SupportedAddressData.php 1 patch
Indentation   +47 added lines, -47 removed lines patch added patch discarded remove patch
@@ -24,54 +24,54 @@
 block discarded – undo
24 24
  */
25 25
 class SupportedAddressData implements XmlSerializable
26 26
 {
27
-    /**
28
-     * supported versions.
29
-     *
30
-     * @var array
31
-     */
32
-    protected $supportedData = [];
27
+	/**
28
+	 * supported versions.
29
+	 *
30
+	 * @var array
31
+	 */
32
+	protected $supportedData = [];
33 33
 
34
-    /**
35
-     * Creates the property.
36
-     */
37
-    public function __construct(array $supportedData = null)
38
-    {
39
-        if (is_null($supportedData)) {
40
-            $supportedData = [
41
-                ['contentType' => 'text/vcard', 'version' => '3.0'],
42
-                ['contentType' => 'text/vcard', 'version' => '4.0'],
43
-                ['contentType' => 'application/vcard+json', 'version' => '4.0'],
44
-            ];
45
-        }
34
+	/**
35
+	 * Creates the property.
36
+	 */
37
+	public function __construct(array $supportedData = null)
38
+	{
39
+		if (is_null($supportedData)) {
40
+			$supportedData = [
41
+				['contentType' => 'text/vcard', 'version' => '3.0'],
42
+				['contentType' => 'text/vcard', 'version' => '4.0'],
43
+				['contentType' => 'application/vcard+json', 'version' => '4.0'],
44
+			];
45
+		}
46 46
 
47
-        $this->supportedData = $supportedData;
48
-    }
47
+		$this->supportedData = $supportedData;
48
+	}
49 49
 
50
-    /**
51
-     * The xmlSerialize method is called during xml writing.
52
-     *
53
-     * Use the $writer argument to write its own xml serialization.
54
-     *
55
-     * An important note: do _not_ create a parent element. Any element
56
-     * implementing XmlSerializable should only ever write what's considered
57
-     * its 'inner xml'.
58
-     *
59
-     * The parent of the current element is responsible for writing a
60
-     * containing element.
61
-     *
62
-     * This allows serializers to be re-used for different element names.
63
-     *
64
-     * If you are opening new elements, you must also close them again.
65
-     */
66
-    public function xmlSerialize(Writer $writer)
67
-    {
68
-        foreach ($this->supportedData as $supported) {
69
-            $writer->startElement('{'.Plugin::NS_CARDDAV.'}address-data-type');
70
-            $writer->writeAttributes([
71
-                'content-type' => $supported['contentType'],
72
-                'version' => $supported['version'],
73
-                ]);
74
-            $writer->endElement(); // address-data-type
75
-        }
76
-    }
50
+	/**
51
+	 * The xmlSerialize method is called during xml writing.
52
+	 *
53
+	 * Use the $writer argument to write its own xml serialization.
54
+	 *
55
+	 * An important note: do _not_ create a parent element. Any element
56
+	 * implementing XmlSerializable should only ever write what's considered
57
+	 * its 'inner xml'.
58
+	 *
59
+	 * The parent of the current element is responsible for writing a
60
+	 * containing element.
61
+	 *
62
+	 * This allows serializers to be re-used for different element names.
63
+	 *
64
+	 * If you are opening new elements, you must also close them again.
65
+	 */
66
+	public function xmlSerialize(Writer $writer)
67
+	{
68
+		foreach ($this->supportedData as $supported) {
69
+			$writer->startElement('{'.Plugin::NS_CARDDAV.'}address-data-type');
70
+			$writer->writeAttributes([
71
+				'content-type' => $supported['contentType'],
72
+				'version' => $supported['version'],
73
+				]);
74
+			$writer->endElement(); // address-data-type
75
+		}
76
+	}
77 77
 }
Please login to merge, or discard this patch.
includes/sabre/sabre/dav/lib/CardDAV/Xml/Property/SupportedCollationSet.php 1 patch
Indentation   +22 added lines, -22 removed lines patch added patch discarded remove patch
@@ -19,26 +19,26 @@
 block discarded – undo
19 19
  */
20 20
 class SupportedCollationSet implements XmlSerializable
21 21
 {
22
-    /**
23
-     * The xmlSerialize method is called during xml writing.
24
-     *
25
-     * Use the $writer argument to write its own xml serialization.
26
-     *
27
-     * An important note: do _not_ create a parent element. Any element
28
-     * implementing XmlSerializable should only ever write what's considered
29
-     * its 'inner xml'.
30
-     *
31
-     * The parent of the current element is responsible for writing a
32
-     * containing element.
33
-     *
34
-     * This allows serializers to be re-used for different element names.
35
-     *
36
-     * If you are opening new elements, you must also close them again.
37
-     */
38
-    public function xmlSerialize(Writer $writer)
39
-    {
40
-        foreach (['i;ascii-casemap', 'i;octet', 'i;unicode-casemap'] as $coll) {
41
-            $writer->writeElement('{urn:ietf:params:xml:ns:carddav}supported-collation', $coll);
42
-        }
43
-    }
22
+	/**
23
+	 * The xmlSerialize method is called during xml writing.
24
+	 *
25
+	 * Use the $writer argument to write its own xml serialization.
26
+	 *
27
+	 * An important note: do _not_ create a parent element. Any element
28
+	 * implementing XmlSerializable should only ever write what's considered
29
+	 * its 'inner xml'.
30
+	 *
31
+	 * The parent of the current element is responsible for writing a
32
+	 * containing element.
33
+	 *
34
+	 * This allows serializers to be re-used for different element names.
35
+	 *
36
+	 * If you are opening new elements, you must also close them again.
37
+	 */
38
+	public function xmlSerialize(Writer $writer)
39
+	{
40
+		foreach (['i;ascii-casemap', 'i;octet', 'i;unicode-casemap'] as $coll) {
41
+			$writer->writeElement('{urn:ietf:params:xml:ns:carddav}supported-collation', $coll);
42
+		}
43
+	}
44 44
 }
Please login to merge, or discard this patch.
htdocs/includes/sabre/sabre/dav/lib/CardDAV/AddressBookHome.php 1 patch
Indentation   +155 added lines, -155 removed lines patch added patch discarded remove patch
@@ -20,159 +20,159 @@
 block discarded – undo
20 20
  */
21 21
 class AddressBookHome extends DAV\Collection implements DAV\IExtendedCollection, DAVACL\IACL
22 22
 {
23
-    use DAVACL\ACLTrait;
24
-
25
-    /**
26
-     * Principal uri.
27
-     *
28
-     * @var array
29
-     */
30
-    protected $principalUri;
31
-
32
-    /**
33
-     * carddavBackend.
34
-     *
35
-     * @var Backend\BackendInterface
36
-     */
37
-    protected $carddavBackend;
38
-
39
-    /**
40
-     * Constructor.
41
-     *
42
-     * @param string $principalUri
43
-     */
44
-    public function __construct(Backend\BackendInterface $carddavBackend, $principalUri)
45
-    {
46
-        $this->carddavBackend = $carddavBackend;
47
-        $this->principalUri = $principalUri;
48
-    }
49
-
50
-    /**
51
-     * Returns the name of this object.
52
-     *
53
-     * @return string
54
-     */
55
-    public function getName()
56
-    {
57
-        list(, $name) = Uri\split($this->principalUri);
58
-
59
-        return $name;
60
-    }
61
-
62
-    /**
63
-     * Updates the name of this object.
64
-     *
65
-     * @param string $name
66
-     */
67
-    public function setName($name)
68
-    {
69
-        throw new DAV\Exception\MethodNotAllowed();
70
-    }
71
-
72
-    /**
73
-     * Deletes this object.
74
-     */
75
-    public function delete()
76
-    {
77
-        throw new DAV\Exception\MethodNotAllowed();
78
-    }
79
-
80
-    /**
81
-     * Returns the last modification date.
82
-     *
83
-     * @return int
84
-     */
85
-    public function getLastModified()
86
-    {
87
-        return null;
88
-    }
89
-
90
-    /**
91
-     * Creates a new file under this object.
92
-     *
93
-     * This is currently not allowed
94
-     *
95
-     * @param string   $filename
96
-     * @param resource $data
97
-     */
98
-    public function createFile($filename, $data = null)
99
-    {
100
-        throw new DAV\Exception\MethodNotAllowed('Creating new files in this collection is not supported');
101
-    }
102
-
103
-    /**
104
-     * Creates a new directory under this object.
105
-     *
106
-     * This is currently not allowed.
107
-     *
108
-     * @param string $filename
109
-     */
110
-    public function createDirectory($filename)
111
-    {
112
-        throw new DAV\Exception\MethodNotAllowed('Creating new collections in this collection is not supported');
113
-    }
114
-
115
-    /**
116
-     * Returns a single addressbook, by name.
117
-     *
118
-     * @param string $name
119
-     *
120
-     * @todo needs optimizing
121
-     *
122
-     * @return AddressBook
123
-     */
124
-    public function getChild($name)
125
-    {
126
-        foreach ($this->getChildren() as $child) {
127
-            if ($name == $child->getName()) {
128
-                return $child;
129
-            }
130
-        }
131
-        throw new DAV\Exception\NotFound('Addressbook with name \''.$name.'\' could not be found');
132
-    }
133
-
134
-    /**
135
-     * Returns a list of addressbooks.
136
-     *
137
-     * @return array
138
-     */
139
-    public function getChildren()
140
-    {
141
-        $addressbooks = $this->carddavBackend->getAddressBooksForUser($this->principalUri);
142
-        $objs = [];
143
-        foreach ($addressbooks as $addressbook) {
144
-            $objs[] = new AddressBook($this->carddavBackend, $addressbook);
145
-        }
146
-
147
-        return $objs;
148
-    }
149
-
150
-    /**
151
-     * Creates a new address book.
152
-     *
153
-     * @param string $name
154
-     *
155
-     * @throws DAV\Exception\InvalidResourceType
156
-     */
157
-    public function createExtendedCollection($name, MkCol $mkCol)
158
-    {
159
-        if (!$mkCol->hasResourceType('{'.Plugin::NS_CARDDAV.'}addressbook')) {
160
-            throw new DAV\Exception\InvalidResourceType('Unknown resourceType for this collection');
161
-        }
162
-        $properties = $mkCol->getRemainingValues();
163
-        $mkCol->setRemainingResultCode(201);
164
-        $this->carddavBackend->createAddressBook($this->principalUri, $name, $properties);
165
-    }
166
-
167
-    /**
168
-     * Returns the owner principal.
169
-     *
170
-     * This must be a url to a principal, or null if there's no owner
171
-     *
172
-     * @return string|null
173
-     */
174
-    public function getOwner()
175
-    {
176
-        return $this->principalUri;
177
-    }
23
+	use DAVACL\ACLTrait;
24
+
25
+	/**
26
+	 * Principal uri.
27
+	 *
28
+	 * @var array
29
+	 */
30
+	protected $principalUri;
31
+
32
+	/**
33
+	 * carddavBackend.
34
+	 *
35
+	 * @var Backend\BackendInterface
36
+	 */
37
+	protected $carddavBackend;
38
+
39
+	/**
40
+	 * Constructor.
41
+	 *
42
+	 * @param string $principalUri
43
+	 */
44
+	public function __construct(Backend\BackendInterface $carddavBackend, $principalUri)
45
+	{
46
+		$this->carddavBackend = $carddavBackend;
47
+		$this->principalUri = $principalUri;
48
+	}
49
+
50
+	/**
51
+	 * Returns the name of this object.
52
+	 *
53
+	 * @return string
54
+	 */
55
+	public function getName()
56
+	{
57
+		list(, $name) = Uri\split($this->principalUri);
58
+
59
+		return $name;
60
+	}
61
+
62
+	/**
63
+	 * Updates the name of this object.
64
+	 *
65
+	 * @param string $name
66
+	 */
67
+	public function setName($name)
68
+	{
69
+		throw new DAV\Exception\MethodNotAllowed();
70
+	}
71
+
72
+	/**
73
+	 * Deletes this object.
74
+	 */
75
+	public function delete()
76
+	{
77
+		throw new DAV\Exception\MethodNotAllowed();
78
+	}
79
+
80
+	/**
81
+	 * Returns the last modification date.
82
+	 *
83
+	 * @return int
84
+	 */
85
+	public function getLastModified()
86
+	{
87
+		return null;
88
+	}
89
+
90
+	/**
91
+	 * Creates a new file under this object.
92
+	 *
93
+	 * This is currently not allowed
94
+	 *
95
+	 * @param string   $filename
96
+	 * @param resource $data
97
+	 */
98
+	public function createFile($filename, $data = null)
99
+	{
100
+		throw new DAV\Exception\MethodNotAllowed('Creating new files in this collection is not supported');
101
+	}
102
+
103
+	/**
104
+	 * Creates a new directory under this object.
105
+	 *
106
+	 * This is currently not allowed.
107
+	 *
108
+	 * @param string $filename
109
+	 */
110
+	public function createDirectory($filename)
111
+	{
112
+		throw new DAV\Exception\MethodNotAllowed('Creating new collections in this collection is not supported');
113
+	}
114
+
115
+	/**
116
+	 * Returns a single addressbook, by name.
117
+	 *
118
+	 * @param string $name
119
+	 *
120
+	 * @todo needs optimizing
121
+	 *
122
+	 * @return AddressBook
123
+	 */
124
+	public function getChild($name)
125
+	{
126
+		foreach ($this->getChildren() as $child) {
127
+			if ($name == $child->getName()) {
128
+				return $child;
129
+			}
130
+		}
131
+		throw new DAV\Exception\NotFound('Addressbook with name \''.$name.'\' could not be found');
132
+	}
133
+
134
+	/**
135
+	 * Returns a list of addressbooks.
136
+	 *
137
+	 * @return array
138
+	 */
139
+	public function getChildren()
140
+	{
141
+		$addressbooks = $this->carddavBackend->getAddressBooksForUser($this->principalUri);
142
+		$objs = [];
143
+		foreach ($addressbooks as $addressbook) {
144
+			$objs[] = new AddressBook($this->carddavBackend, $addressbook);
145
+		}
146
+
147
+		return $objs;
148
+	}
149
+
150
+	/**
151
+	 * Creates a new address book.
152
+	 *
153
+	 * @param string $name
154
+	 *
155
+	 * @throws DAV\Exception\InvalidResourceType
156
+	 */
157
+	public function createExtendedCollection($name, MkCol $mkCol)
158
+	{
159
+		if (!$mkCol->hasResourceType('{'.Plugin::NS_CARDDAV.'}addressbook')) {
160
+			throw new DAV\Exception\InvalidResourceType('Unknown resourceType for this collection');
161
+		}
162
+		$properties = $mkCol->getRemainingValues();
163
+		$mkCol->setRemainingResultCode(201);
164
+		$this->carddavBackend->createAddressBook($this->principalUri, $name, $properties);
165
+	}
166
+
167
+	/**
168
+	 * Returns the owner principal.
169
+	 *
170
+	 * This must be a url to a principal, or null if there's no owner
171
+	 *
172
+	 * @return string|null
173
+	 */
174
+	public function getOwner()
175
+	{
176
+		return $this->principalUri;
177
+	}
178 178
 }
Please login to merge, or discard this patch.
htdocs/includes/sabre/sabre/dav/lib/CardDAV/Card.php 1 patch
Indentation   +183 added lines, -183 removed lines patch added patch discarded remove patch
@@ -16,187 +16,187 @@
 block discarded – undo
16 16
  */
17 17
 class Card extends DAV\File implements ICard, DAVACL\IACL
18 18
 {
19
-    use DAVACL\ACLTrait;
20
-
21
-    /**
22
-     * CardDAV backend.
23
-     *
24
-     * @var Backend\BackendInterface
25
-     */
26
-    protected $carddavBackend;
27
-
28
-    /**
29
-     * Array with information about this Card.
30
-     *
31
-     * @var array
32
-     */
33
-    protected $cardData;
34
-
35
-    /**
36
-     * Array with information about the containing addressbook.
37
-     *
38
-     * @var array
39
-     */
40
-    protected $addressBookInfo;
41
-
42
-    /**
43
-     * Constructor.
44
-     */
45
-    public function __construct(Backend\BackendInterface $carddavBackend, array $addressBookInfo, array $cardData)
46
-    {
47
-        $this->carddavBackend = $carddavBackend;
48
-        $this->addressBookInfo = $addressBookInfo;
49
-        $this->cardData = $cardData;
50
-    }
51
-
52
-    /**
53
-     * Returns the uri for this object.
54
-     *
55
-     * @return string
56
-     */
57
-    public function getName()
58
-    {
59
-        return $this->cardData['uri'];
60
-    }
61
-
62
-    /**
63
-     * Returns the VCard-formatted object.
64
-     *
65
-     * @return string
66
-     */
67
-    public function get()
68
-    {
69
-        // Pre-populating 'carddata' is optional. If we don't yet have it
70
-        // already, we fetch it from the backend.
71
-        if (!isset($this->cardData['carddata'])) {
72
-            $this->cardData = $this->carddavBackend->getCard($this->addressBookInfo['id'], $this->cardData['uri']);
73
-        }
74
-
75
-        return $this->cardData['carddata'];
76
-    }
77
-
78
-    /**
79
-     * Updates the VCard-formatted object.
80
-     *
81
-     * @param string $cardData
82
-     *
83
-     * @return string|null
84
-     */
85
-    public function put($cardData)
86
-    {
87
-        if (is_resource($cardData)) {
88
-            $cardData = stream_get_contents($cardData);
89
-        }
90
-
91
-        // Converting to UTF-8, if needed
92
-        $cardData = DAV\StringUtil::ensureUTF8($cardData);
93
-
94
-        $etag = $this->carddavBackend->updateCard($this->addressBookInfo['id'], $this->cardData['uri'], $cardData);
95
-        $this->cardData['carddata'] = $cardData;
96
-        $this->cardData['etag'] = $etag;
97
-
98
-        return $etag;
99
-    }
100
-
101
-    /**
102
-     * Deletes the card.
103
-     */
104
-    public function delete()
105
-    {
106
-        $this->carddavBackend->deleteCard($this->addressBookInfo['id'], $this->cardData['uri']);
107
-    }
108
-
109
-    /**
110
-     * Returns the mime content-type.
111
-     *
112
-     * @return string
113
-     */
114
-    public function getContentType()
115
-    {
116
-        return 'text/vcard; charset=utf-8';
117
-    }
118
-
119
-    /**
120
-     * Returns an ETag for this object.
121
-     *
122
-     * @return string
123
-     */
124
-    public function getETag()
125
-    {
126
-        if (isset($this->cardData['etag'])) {
127
-            return $this->cardData['etag'];
128
-        } else {
129
-            $data = $this->get();
130
-            if (is_string($data)) {
131
-                return '"'.md5($data).'"';
132
-            } else {
133
-                // We refuse to calculate the md5 if it's a stream.
134
-                return null;
135
-            }
136
-        }
137
-    }
138
-
139
-    /**
140
-     * Returns the last modification date as a unix timestamp.
141
-     *
142
-     * @return int
143
-     */
144
-    public function getLastModified()
145
-    {
146
-        return isset($this->cardData['lastmodified']) ? $this->cardData['lastmodified'] : null;
147
-    }
148
-
149
-    /**
150
-     * Returns the size of this object in bytes.
151
-     *
152
-     * @return int
153
-     */
154
-    public function getSize()
155
-    {
156
-        if (array_key_exists('size', $this->cardData)) {
157
-            return $this->cardData['size'];
158
-        } else {
159
-            return strlen($this->get());
160
-        }
161
-    }
162
-
163
-    /**
164
-     * Returns the owner principal.
165
-     *
166
-     * This must be a url to a principal, or null if there's no owner
167
-     *
168
-     * @return string|null
169
-     */
170
-    public function getOwner()
171
-    {
172
-        return $this->addressBookInfo['principaluri'];
173
-    }
174
-
175
-    /**
176
-     * Returns a list of ACE's for this node.
177
-     *
178
-     * Each ACE has the following properties:
179
-     *   * 'privilege', a string such as {DAV:}read or {DAV:}write. These are
180
-     *     currently the only supported privileges
181
-     *   * 'principal', a url to the principal who owns the node
182
-     *   * 'protected' (optional), indicating that this ACE is not allowed to
183
-     *      be updated.
184
-     *
185
-     * @return array
186
-     */
187
-    public function getACL()
188
-    {
189
-        // An alternative acl may be specified through the cardData array.
190
-        if (isset($this->cardData['acl'])) {
191
-            return $this->cardData['acl'];
192
-        }
193
-
194
-        return [
195
-            [
196
-                'privilege' => '{DAV:}all',
197
-                'principal' => $this->addressBookInfo['principaluri'],
198
-                'protected' => true,
199
-            ],
200
-        ];
201
-    }
19
+	use DAVACL\ACLTrait;
20
+
21
+	/**
22
+	 * CardDAV backend.
23
+	 *
24
+	 * @var Backend\BackendInterface
25
+	 */
26
+	protected $carddavBackend;
27
+
28
+	/**
29
+	 * Array with information about this Card.
30
+	 *
31
+	 * @var array
32
+	 */
33
+	protected $cardData;
34
+
35
+	/**
36
+	 * Array with information about the containing addressbook.
37
+	 *
38
+	 * @var array
39
+	 */
40
+	protected $addressBookInfo;
41
+
42
+	/**
43
+	 * Constructor.
44
+	 */
45
+	public function __construct(Backend\BackendInterface $carddavBackend, array $addressBookInfo, array $cardData)
46
+	{
47
+		$this->carddavBackend = $carddavBackend;
48
+		$this->addressBookInfo = $addressBookInfo;
49
+		$this->cardData = $cardData;
50
+	}
51
+
52
+	/**
53
+	 * Returns the uri for this object.
54
+	 *
55
+	 * @return string
56
+	 */
57
+	public function getName()
58
+	{
59
+		return $this->cardData['uri'];
60
+	}
61
+
62
+	/**
63
+	 * Returns the VCard-formatted object.
64
+	 *
65
+	 * @return string
66
+	 */
67
+	public function get()
68
+	{
69
+		// Pre-populating 'carddata' is optional. If we don't yet have it
70
+		// already, we fetch it from the backend.
71
+		if (!isset($this->cardData['carddata'])) {
72
+			$this->cardData = $this->carddavBackend->getCard($this->addressBookInfo['id'], $this->cardData['uri']);
73
+		}
74
+
75
+		return $this->cardData['carddata'];
76
+	}
77
+
78
+	/**
79
+	 * Updates the VCard-formatted object.
80
+	 *
81
+	 * @param string $cardData
82
+	 *
83
+	 * @return string|null
84
+	 */
85
+	public function put($cardData)
86
+	{
87
+		if (is_resource($cardData)) {
88
+			$cardData = stream_get_contents($cardData);
89
+		}
90
+
91
+		// Converting to UTF-8, if needed
92
+		$cardData = DAV\StringUtil::ensureUTF8($cardData);
93
+
94
+		$etag = $this->carddavBackend->updateCard($this->addressBookInfo['id'], $this->cardData['uri'], $cardData);
95
+		$this->cardData['carddata'] = $cardData;
96
+		$this->cardData['etag'] = $etag;
97
+
98
+		return $etag;
99
+	}
100
+
101
+	/**
102
+	 * Deletes the card.
103
+	 */
104
+	public function delete()
105
+	{
106
+		$this->carddavBackend->deleteCard($this->addressBookInfo['id'], $this->cardData['uri']);
107
+	}
108
+
109
+	/**
110
+	 * Returns the mime content-type.
111
+	 *
112
+	 * @return string
113
+	 */
114
+	public function getContentType()
115
+	{
116
+		return 'text/vcard; charset=utf-8';
117
+	}
118
+
119
+	/**
120
+	 * Returns an ETag for this object.
121
+	 *
122
+	 * @return string
123
+	 */
124
+	public function getETag()
125
+	{
126
+		if (isset($this->cardData['etag'])) {
127
+			return $this->cardData['etag'];
128
+		} else {
129
+			$data = $this->get();
130
+			if (is_string($data)) {
131
+				return '"'.md5($data).'"';
132
+			} else {
133
+				// We refuse to calculate the md5 if it's a stream.
134
+				return null;
135
+			}
136
+		}
137
+	}
138
+
139
+	/**
140
+	 * Returns the last modification date as a unix timestamp.
141
+	 *
142
+	 * @return int
143
+	 */
144
+	public function getLastModified()
145
+	{
146
+		return isset($this->cardData['lastmodified']) ? $this->cardData['lastmodified'] : null;
147
+	}
148
+
149
+	/**
150
+	 * Returns the size of this object in bytes.
151
+	 *
152
+	 * @return int
153
+	 */
154
+	public function getSize()
155
+	{
156
+		if (array_key_exists('size', $this->cardData)) {
157
+			return $this->cardData['size'];
158
+		} else {
159
+			return strlen($this->get());
160
+		}
161
+	}
162
+
163
+	/**
164
+	 * Returns the owner principal.
165
+	 *
166
+	 * This must be a url to a principal, or null if there's no owner
167
+	 *
168
+	 * @return string|null
169
+	 */
170
+	public function getOwner()
171
+	{
172
+		return $this->addressBookInfo['principaluri'];
173
+	}
174
+
175
+	/**
176
+	 * Returns a list of ACE's for this node.
177
+	 *
178
+	 * Each ACE has the following properties:
179
+	 *   * 'privilege', a string such as {DAV:}read or {DAV:}write. These are
180
+	 *     currently the only supported privileges
181
+	 *   * 'principal', a url to the principal who owns the node
182
+	 *   * 'protected' (optional), indicating that this ACE is not allowed to
183
+	 *      be updated.
184
+	 *
185
+	 * @return array
186
+	 */
187
+	public function getACL()
188
+	{
189
+		// An alternative acl may be specified through the cardData array.
190
+		if (isset($this->cardData['acl'])) {
191
+			return $this->cardData['acl'];
192
+		}
193
+
194
+		return [
195
+			[
196
+				'privilege' => '{DAV:}all',
197
+				'principal' => $this->addressBookInfo['principaluri'],
198
+				'protected' => true,
199
+			],
200
+		];
201
+	}
202 202
 }
Please login to merge, or discard this patch.