Completed
Branch develop (97c2d3)
by
unknown
25:31
created
htdocs/includes/sabre/sabre/dav/lib/CardDAV/VCFExportPlugin.php 2 patches
Indentation   +139 added lines, -139 removed lines patch added patch discarded remove patch
@@ -23,143 +23,143 @@
 block discarded – undo
23 23
  */
24 24
 class VCFExportPlugin extends DAV\ServerPlugin
25 25
 {
26
-    /**
27
-     * Reference to Server class.
28
-     *
29
-     * @var DAV\Server
30
-     */
31
-    protected $server;
32
-
33
-    /**
34
-     * Initializes the plugin and registers event handlers.
35
-     */
36
-    public function initialize(DAV\Server $server)
37
-    {
38
-        $this->server = $server;
39
-        $this->server->on('method:GET', [$this, 'httpGet'], 90);
40
-        $server->on('browserButtonActions', function ($path, $node, &$actions) {
41
-            if ($node instanceof IAddressBook) {
42
-                $actions .= '<a href="'.htmlspecialchars($path, ENT_QUOTES, 'UTF-8').'?export"><span class="oi" data-glyph="book"></span></a>';
43
-            }
44
-        });
45
-    }
46
-
47
-    /**
48
-     * Intercepts GET requests on addressbook urls ending with ?export.
49
-     *
50
-     * @return bool
51
-     */
52
-    public function httpGet(RequestInterface $request, ResponseInterface $response)
53
-    {
54
-        $queryParams = $request->getQueryParameters();
55
-        if (!array_key_exists('export', $queryParams)) {
56
-            return;
57
-        }
58
-
59
-        $path = $request->getPath();
60
-
61
-        $node = $this->server->tree->getNodeForPath($path);
62
-
63
-        if (!($node instanceof IAddressBook)) {
64
-            return;
65
-        }
66
-
67
-        $this->server->transactionType = 'get-addressbook-export';
68
-
69
-        // Checking ACL, if available.
70
-        if ($aclPlugin = $this->server->getPlugin('acl')) {
71
-            $aclPlugin->checkPrivileges($path, '{DAV:}read');
72
-        }
73
-
74
-        $nodes = $this->server->getPropertiesForPath($path, [
75
-            '{'.Plugin::NS_CARDDAV.'}address-data',
76
-        ], 1);
77
-
78
-        $format = 'text/directory';
79
-
80
-        $output = null;
81
-        $filenameExtension = null;
82
-
83
-        switch ($format) {
84
-            case 'text/directory':
85
-                $output = $this->generateVCF($nodes);
86
-                $filenameExtension = '.vcf';
87
-                break;
88
-        }
89
-
90
-        $filename = preg_replace(
91
-            '/[^a-zA-Z0-9-_ ]/um',
92
-            '',
93
-            $node->getName()
94
-        );
95
-        $filename .= '-'.date('Y-m-d').$filenameExtension;
96
-
97
-        $response->setHeader('Content-Disposition', 'attachment; filename="'.$filename.'"');
98
-        $response->setHeader('Content-Type', $format);
99
-
100
-        $response->setStatus(200);
101
-        $response->setBody($output);
102
-
103
-        // Returning false to break the event chain
104
-        return false;
105
-    }
106
-
107
-    /**
108
-     * Merges all vcard objects, and builds one big vcf export.
109
-     *
110
-     * @return string
111
-     */
112
-    public function generateVCF(array $nodes)
113
-    {
114
-        $output = '';
115
-
116
-        foreach ($nodes as $node) {
117
-            if (!isset($node[200]['{'.Plugin::NS_CARDDAV.'}address-data'])) {
118
-                continue;
119
-            }
120
-            $nodeData = $node[200]['{'.Plugin::NS_CARDDAV.'}address-data'];
121
-
122
-            // Parsing this node so VObject can clean up the output.
123
-            $vcard = VObject\Reader::read($nodeData);
124
-            $output .= $vcard->serialize();
125
-
126
-            // Destroy circular references to PHP will GC the object.
127
-            $vcard->destroy();
128
-        }
129
-
130
-        return $output;
131
-    }
132
-
133
-    /**
134
-     * Returns a plugin name.
135
-     *
136
-     * Using this name other plugins will be able to access other plugins
137
-     * using \Sabre\DAV\Server::getPlugin
138
-     *
139
-     * @return string
140
-     */
141
-    public function getPluginName()
142
-    {
143
-        return 'vcf-export';
144
-    }
145
-
146
-    /**
147
-     * Returns a bunch of meta-data about the plugin.
148
-     *
149
-     * Providing this information is optional, and is mainly displayed by the
150
-     * Browser plugin.
151
-     *
152
-     * The description key in the returned array may contain html and will not
153
-     * be sanitized.
154
-     *
155
-     * @return array
156
-     */
157
-    public function getPluginInfo()
158
-    {
159
-        return [
160
-            'name' => $this->getPluginName(),
161
-            'description' => 'Adds the ability to export CardDAV addressbooks as a single vCard file.',
162
-            'link' => 'http://sabre.io/dav/vcf-export-plugin/',
163
-        ];
164
-    }
26
+	/**
27
+	 * Reference to Server class.
28
+	 *
29
+	 * @var DAV\Server
30
+	 */
31
+	protected $server;
32
+
33
+	/**
34
+	 * Initializes the plugin and registers event handlers.
35
+	 */
36
+	public function initialize(DAV\Server $server)
37
+	{
38
+		$this->server = $server;
39
+		$this->server->on('method:GET', [$this, 'httpGet'], 90);
40
+		$server->on('browserButtonActions', function ($path, $node, &$actions) {
41
+			if ($node instanceof IAddressBook) {
42
+				$actions .= '<a href="'.htmlspecialchars($path, ENT_QUOTES, 'UTF-8').'?export"><span class="oi" data-glyph="book"></span></a>';
43
+			}
44
+		});
45
+	}
46
+
47
+	/**
48
+	 * Intercepts GET requests on addressbook urls ending with ?export.
49
+	 *
50
+	 * @return bool
51
+	 */
52
+	public function httpGet(RequestInterface $request, ResponseInterface $response)
53
+	{
54
+		$queryParams = $request->getQueryParameters();
55
+		if (!array_key_exists('export', $queryParams)) {
56
+			return;
57
+		}
58
+
59
+		$path = $request->getPath();
60
+
61
+		$node = $this->server->tree->getNodeForPath($path);
62
+
63
+		if (!($node instanceof IAddressBook)) {
64
+			return;
65
+		}
66
+
67
+		$this->server->transactionType = 'get-addressbook-export';
68
+
69
+		// Checking ACL, if available.
70
+		if ($aclPlugin = $this->server->getPlugin('acl')) {
71
+			$aclPlugin->checkPrivileges($path, '{DAV:}read');
72
+		}
73
+
74
+		$nodes = $this->server->getPropertiesForPath($path, [
75
+			'{'.Plugin::NS_CARDDAV.'}address-data',
76
+		], 1);
77
+
78
+		$format = 'text/directory';
79
+
80
+		$output = null;
81
+		$filenameExtension = null;
82
+
83
+		switch ($format) {
84
+			case 'text/directory':
85
+				$output = $this->generateVCF($nodes);
86
+				$filenameExtension = '.vcf';
87
+				break;
88
+		}
89
+
90
+		$filename = preg_replace(
91
+			'/[^a-zA-Z0-9-_ ]/um',
92
+			'',
93
+			$node->getName()
94
+		);
95
+		$filename .= '-'.date('Y-m-d').$filenameExtension;
96
+
97
+		$response->setHeader('Content-Disposition', 'attachment; filename="'.$filename.'"');
98
+		$response->setHeader('Content-Type', $format);
99
+
100
+		$response->setStatus(200);
101
+		$response->setBody($output);
102
+
103
+		// Returning false to break the event chain
104
+		return false;
105
+	}
106
+
107
+	/**
108
+	 * Merges all vcard objects, and builds one big vcf export.
109
+	 *
110
+	 * @return string
111
+	 */
112
+	public function generateVCF(array $nodes)
113
+	{
114
+		$output = '';
115
+
116
+		foreach ($nodes as $node) {
117
+			if (!isset($node[200]['{'.Plugin::NS_CARDDAV.'}address-data'])) {
118
+				continue;
119
+			}
120
+			$nodeData = $node[200]['{'.Plugin::NS_CARDDAV.'}address-data'];
121
+
122
+			// Parsing this node so VObject can clean up the output.
123
+			$vcard = VObject\Reader::read($nodeData);
124
+			$output .= $vcard->serialize();
125
+
126
+			// Destroy circular references to PHP will GC the object.
127
+			$vcard->destroy();
128
+		}
129
+
130
+		return $output;
131
+	}
132
+
133
+	/**
134
+	 * Returns a plugin name.
135
+	 *
136
+	 * Using this name other plugins will be able to access other plugins
137
+	 * using \Sabre\DAV\Server::getPlugin
138
+	 *
139
+	 * @return string
140
+	 */
141
+	public function getPluginName()
142
+	{
143
+		return 'vcf-export';
144
+	}
145
+
146
+	/**
147
+	 * Returns a bunch of meta-data about the plugin.
148
+	 *
149
+	 * Providing this information is optional, and is mainly displayed by the
150
+	 * Browser plugin.
151
+	 *
152
+	 * The description key in the returned array may contain html and will not
153
+	 * be sanitized.
154
+	 *
155
+	 * @return array
156
+	 */
157
+	public function getPluginInfo()
158
+	{
159
+		return [
160
+			'name' => $this->getPluginName(),
161
+			'description' => 'Adds the ability to export CardDAV addressbooks as a single vCard file.',
162
+			'link' => 'http://sabre.io/dav/vcf-export-plugin/',
163
+		];
164
+	}
165 165
 }
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -37,7 +37,7 @@
 block discarded – undo
37 37
     {
38 38
         $this->server = $server;
39 39
         $this->server->on('method:GET', [$this, 'httpGet'], 90);
40
-        $server->on('browserButtonActions', function ($path, $node, &$actions) {
40
+        $server->on('browserButtonActions', function($path, $node, &$actions) {
41 41
             if ($node instanceof IAddressBook) {
42 42
                 $actions .= '<a href="'.htmlspecialchars($path, ENT_QUOTES, 'UTF-8').'?export"><span class="oi" data-glyph="book"></span></a>';
43 43
             }
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 2 patches
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.
Switch Indentation   +15 added lines, -15 removed lines patch added patch discarded remove patch
@@ -61,22 +61,22 @@
 block discarded – undo
61 61
         if (is_array($elems)) {
62 62
             foreach ($elems as $elem) {
63 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';
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;
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 80
             }
81 81
             }
82 82
         }
Please login to merge, or discard this patch.
htdocs/includes/sabre/sabre/dav/lib/CardDAV/Xml/Filter/PropFilter.php 2 patches
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.
Switch Indentation   +18 added lines, -18 removed lines patch added patch discarded remove patch
@@ -67,25 +67,25 @@
 block discarded – undo
67 67
         if (is_array($elems)) {
68 68
             foreach ($elems as $elem) {
69 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';
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;
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 89
             }
90 90
             }
91 91
         }
Please login to merge, or discard this patch.
htdocs/includes/sabre/sabre/dav/lib/CardDAV/Xml/Filter/AddressData.php 2 patches
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.
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -53,11 +53,11 @@
 block discarded – undo
53 53
         ];
54 54
 
55 55
         $elems = (array) $reader->parseInnerTree();
56
-        $elems = array_filter($elems, function ($element) {
56
+        $elems = array_filter($elems, function($element) {
57 57
             return '{urn:ietf:params:xml:ns:carddav}prop' === $element['name'] &&
58 58
                 isset($element['attributes']['name']);
59 59
         });
60
-        $result['addressDataProperties'] = array_map(function ($element) {
60
+        $result['addressDataProperties'] = array_map(function($element) {
61 61
             return $element['attributes']['name'];
62 62
         }, $elems);
63 63
 
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/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.
htdocs/includes/sabre/sabre/dav/lib/DAVACL/IACL.php 1 patch
Indentation   +48 added lines, -48 removed lines patch added patch discarded remove patch
@@ -17,56 +17,56 @@
 block discarded – undo
17 17
  */
18 18
 interface IACL extends DAV\INode
19 19
 {
20
-    /**
21
-     * Returns the owner principal.
22
-     *
23
-     * This must be a url to a principal, or null if there's no owner
24
-     *
25
-     * @return string|null
26
-     */
27
-    public function getOwner();
20
+	/**
21
+	 * Returns the owner principal.
22
+	 *
23
+	 * This must be a url to a principal, or null if there's no owner
24
+	 *
25
+	 * @return string|null
26
+	 */
27
+	public function getOwner();
28 28
 
29
-    /**
30
-     * Returns a group principal.
31
-     *
32
-     * This must be a url to a principal, or null if there's no owner
33
-     *
34
-     * @return string|null
35
-     */
36
-    public function getGroup();
29
+	/**
30
+	 * Returns a group principal.
31
+	 *
32
+	 * This must be a url to a principal, or null if there's no owner
33
+	 *
34
+	 * @return string|null
35
+	 */
36
+	public function getGroup();
37 37
 
38
-    /**
39
-     * Returns a list of ACE's for this node.
40
-     *
41
-     * Each ACE has the following properties:
42
-     *   * 'privilege', a string such as {DAV:}read or {DAV:}write. These are
43
-     *     currently the only supported privileges
44
-     *   * 'principal', a url to the principal who owns the node
45
-     *   * 'protected' (optional), indicating that this ACE is not allowed to
46
-     *      be updated.
47
-     *
48
-     * @return array
49
-     */
50
-    public function getACL();
38
+	/**
39
+	 * Returns a list of ACE's for this node.
40
+	 *
41
+	 * Each ACE has the following properties:
42
+	 *   * 'privilege', a string such as {DAV:}read or {DAV:}write. These are
43
+	 *     currently the only supported privileges
44
+	 *   * 'principal', a url to the principal who owns the node
45
+	 *   * 'protected' (optional), indicating that this ACE is not allowed to
46
+	 *      be updated.
47
+	 *
48
+	 * @return array
49
+	 */
50
+	public function getACL();
51 51
 
52
-    /**
53
-     * Updates the ACL.
54
-     *
55
-     * This method will receive a list of new ACE's as an array argument.
56
-     */
57
-    public function setACL(array $acl);
52
+	/**
53
+	 * Updates the ACL.
54
+	 *
55
+	 * This method will receive a list of new ACE's as an array argument.
56
+	 */
57
+	public function setACL(array $acl);
58 58
 
59
-    /**
60
-     * Returns the list of supported privileges for this node.
61
-     *
62
-     * The returned data structure is a list of nested privileges.
63
-     * See Sabre\DAVACL\Plugin::getDefaultSupportedPrivilegeSet for a simple
64
-     * standard structure.
65
-     *
66
-     * If null is returned from this method, the default privilege set is used,
67
-     * which is fine for most common usecases.
68
-     *
69
-     * @return array|null
70
-     */
71
-    public function getSupportedPrivilegeSet();
59
+	/**
60
+	 * Returns the list of supported privileges for this node.
61
+	 *
62
+	 * The returned data structure is a list of nested privileges.
63
+	 * See Sabre\DAVACL\Plugin::getDefaultSupportedPrivilegeSet for a simple
64
+	 * standard structure.
65
+	 *
66
+	 * If null is returned from this method, the default privilege set is used,
67
+	 * which is fine for most common usecases.
68
+	 *
69
+	 * @return array|null
70
+	 */
71
+	public function getSupportedPrivilegeSet();
72 72
 }
Please login to merge, or discard this patch.