Passed
Push — master ( 41d2e2...e93478 )
by Roeland
20:11 queued 09:24
created
apps/files_external/lib/Controller/StoragesController.php 2 patches
Indentation   +272 added lines, -272 removed lines patch added patch discarded remove patch
@@ -47,298 +47,298 @@
 block discarded – undo
47 47
  */
48 48
 abstract class StoragesController extends Controller {
49 49
 
50
-	/**
51
-	 * L10N service
52
-	 *
53
-	 * @var IL10N
54
-	 */
55
-	protected $l10n;
50
+    /**
51
+     * L10N service
52
+     *
53
+     * @var IL10N
54
+     */
55
+    protected $l10n;
56 56
 
57
-	/**
58
-	 * Storages service
59
-	 *
60
-	 * @var StoragesService
61
-	 */
62
-	protected $service;
57
+    /**
58
+     * Storages service
59
+     *
60
+     * @var StoragesService
61
+     */
62
+    protected $service;
63 63
 
64
-	/**
65
-	 * @var ILogger
66
-	 */
67
-	protected $logger;
64
+    /**
65
+     * @var ILogger
66
+     */
67
+    protected $logger;
68 68
 
69
-	/**
70
-	 * Creates a new storages controller.
71
-	 *
72
-	 * @param string $AppName application name
73
-	 * @param IRequest $request request object
74
-	 * @param IL10N $l10n l10n service
75
-	 * @param StoragesService $storagesService storage service
76
-	 * @param ILogger $logger
77
-	 */
78
-	public function __construct(
79
-		$AppName,
80
-		IRequest $request,
81
-		IL10N $l10n,
82
-		StoragesService $storagesService,
83
-		ILogger $logger
84
-	) {
85
-		parent::__construct($AppName, $request);
86
-		$this->l10n = $l10n;
87
-		$this->service = $storagesService;
88
-		$this->logger = $logger;
89
-	}
69
+    /**
70
+     * Creates a new storages controller.
71
+     *
72
+     * @param string $AppName application name
73
+     * @param IRequest $request request object
74
+     * @param IL10N $l10n l10n service
75
+     * @param StoragesService $storagesService storage service
76
+     * @param ILogger $logger
77
+     */
78
+    public function __construct(
79
+        $AppName,
80
+        IRequest $request,
81
+        IL10N $l10n,
82
+        StoragesService $storagesService,
83
+        ILogger $logger
84
+    ) {
85
+        parent::__construct($AppName, $request);
86
+        $this->l10n = $l10n;
87
+        $this->service = $storagesService;
88
+        $this->logger = $logger;
89
+    }
90 90
 
91
-	/**
92
-	 * Create a storage from its parameters
93
-	 *
94
-	 * @param string $mountPoint storage mount point
95
-	 * @param string $backend backend identifier
96
-	 * @param string $authMechanism authentication mechanism identifier
97
-	 * @param array $backendOptions backend-specific options
98
-	 * @param array|null $mountOptions mount-specific options
99
-	 * @param array|null $applicableUsers users for which to mount the storage
100
-	 * @param array|null $applicableGroups groups for which to mount the storage
101
-	 * @param int|null $priority priority
102
-	 *
103
-	 * @return StorageConfig|DataResponse
104
-	 */
105
-	protected function createStorage(
106
-		$mountPoint,
107
-		$backend,
108
-		$authMechanism,
109
-		$backendOptions,
110
-		$mountOptions = null,
111
-		$applicableUsers = null,
112
-		$applicableGroups = null,
113
-		$priority = null
114
-	) {
115
-		try {
116
-			return $this->service->createStorage(
117
-				$mountPoint,
118
-				$backend,
119
-				$authMechanism,
120
-				$backendOptions,
121
-				$mountOptions,
122
-				$applicableUsers,
123
-				$applicableGroups,
124
-				$priority
125
-			);
126
-		} catch (\InvalidArgumentException $e) {
127
-			$this->logger->logException($e);
128
-			return new DataResponse(
129
-				[
130
-					'message' => (string)$this->l10n->t('Invalid backend or authentication mechanism class')
131
-				],
132
-				Http::STATUS_UNPROCESSABLE_ENTITY
133
-			);
134
-		}
135
-	}
91
+    /**
92
+     * Create a storage from its parameters
93
+     *
94
+     * @param string $mountPoint storage mount point
95
+     * @param string $backend backend identifier
96
+     * @param string $authMechanism authentication mechanism identifier
97
+     * @param array $backendOptions backend-specific options
98
+     * @param array|null $mountOptions mount-specific options
99
+     * @param array|null $applicableUsers users for which to mount the storage
100
+     * @param array|null $applicableGroups groups for which to mount the storage
101
+     * @param int|null $priority priority
102
+     *
103
+     * @return StorageConfig|DataResponse
104
+     */
105
+    protected function createStorage(
106
+        $mountPoint,
107
+        $backend,
108
+        $authMechanism,
109
+        $backendOptions,
110
+        $mountOptions = null,
111
+        $applicableUsers = null,
112
+        $applicableGroups = null,
113
+        $priority = null
114
+    ) {
115
+        try {
116
+            return $this->service->createStorage(
117
+                $mountPoint,
118
+                $backend,
119
+                $authMechanism,
120
+                $backendOptions,
121
+                $mountOptions,
122
+                $applicableUsers,
123
+                $applicableGroups,
124
+                $priority
125
+            );
126
+        } catch (\InvalidArgumentException $e) {
127
+            $this->logger->logException($e);
128
+            return new DataResponse(
129
+                [
130
+                    'message' => (string)$this->l10n->t('Invalid backend or authentication mechanism class')
131
+                ],
132
+                Http::STATUS_UNPROCESSABLE_ENTITY
133
+            );
134
+        }
135
+    }
136 136
 
137
-	/**
138
-	 * Validate storage config
139
-	 *
140
-	 * @param StorageConfig $storage storage config
141
-	 *1
142
-	 * @return DataResponse|null returns response in case of validation error
143
-	 */
144
-	protected function validate(StorageConfig $storage) {
145
-		$mountPoint = $storage->getMountPoint();
146
-		if ($mountPoint === '') {
147
-			return new DataResponse(
148
-				array(
149
-					'message' => (string)$this->l10n->t('Invalid mount point')
150
-				),
151
-				Http::STATUS_UNPROCESSABLE_ENTITY
152
-			);
153
-		}
137
+    /**
138
+     * Validate storage config
139
+     *
140
+     * @param StorageConfig $storage storage config
141
+     *1
142
+     * @return DataResponse|null returns response in case of validation error
143
+     */
144
+    protected function validate(StorageConfig $storage) {
145
+        $mountPoint = $storage->getMountPoint();
146
+        if ($mountPoint === '') {
147
+            return new DataResponse(
148
+                array(
149
+                    'message' => (string)$this->l10n->t('Invalid mount point')
150
+                ),
151
+                Http::STATUS_UNPROCESSABLE_ENTITY
152
+            );
153
+        }
154 154
 
155
-		if ($storage->getBackendOption('objectstore')) {
156
-			// objectstore must not be sent from client side
157
-			return new DataResponse(
158
-				array(
159
-					'message' => (string)$this->l10n->t('Objectstore forbidden')
160
-				),
161
-				Http::STATUS_UNPROCESSABLE_ENTITY
162
-			);
163
-		}
155
+        if ($storage->getBackendOption('objectstore')) {
156
+            // objectstore must not be sent from client side
157
+            return new DataResponse(
158
+                array(
159
+                    'message' => (string)$this->l10n->t('Objectstore forbidden')
160
+                ),
161
+                Http::STATUS_UNPROCESSABLE_ENTITY
162
+            );
163
+        }
164 164
 
165
-		/** @var Backend */
166
-		$backend = $storage->getBackend();
167
-		/** @var AuthMechanism */
168
-		$authMechanism = $storage->getAuthMechanism();
169
-		if ($backend->checkDependencies()) {
170
-			// invalid backend
171
-			return new DataResponse(
172
-				array(
173
-					'message' => (string)$this->l10n->t('Invalid storage backend "%s"', [
174
-						$backend->getIdentifier()
175
-					])
176
-				),
177
-				Http::STATUS_UNPROCESSABLE_ENTITY
178
-			);
179
-		}
165
+        /** @var Backend */
166
+        $backend = $storage->getBackend();
167
+        /** @var AuthMechanism */
168
+        $authMechanism = $storage->getAuthMechanism();
169
+        if ($backend->checkDependencies()) {
170
+            // invalid backend
171
+            return new DataResponse(
172
+                array(
173
+                    'message' => (string)$this->l10n->t('Invalid storage backend "%s"', [
174
+                        $backend->getIdentifier()
175
+                    ])
176
+                ),
177
+                Http::STATUS_UNPROCESSABLE_ENTITY
178
+            );
179
+        }
180 180
 
181
-		if (!$backend->isVisibleFor($this->service->getVisibilityType())) {
182
-			// not permitted to use backend
183
-			return new DataResponse(
184
-				array(
185
-					'message' => (string)$this->l10n->t('Not permitted to use backend "%s"', [
186
-						$backend->getIdentifier()
187
-					])
188
-				),
189
-				Http::STATUS_UNPROCESSABLE_ENTITY
190
-			);
191
-		}
192
-		if (!$authMechanism->isVisibleFor($this->service->getVisibilityType())) {
193
-			// not permitted to use auth mechanism
194
-			return new DataResponse(
195
-				array(
196
-					'message' => (string)$this->l10n->t('Not permitted to use authentication mechanism "%s"', [
197
-						$authMechanism->getIdentifier()
198
-					])
199
-				),
200
-				Http::STATUS_UNPROCESSABLE_ENTITY
201
-			);
202
-		}
181
+        if (!$backend->isVisibleFor($this->service->getVisibilityType())) {
182
+            // not permitted to use backend
183
+            return new DataResponse(
184
+                array(
185
+                    'message' => (string)$this->l10n->t('Not permitted to use backend "%s"', [
186
+                        $backend->getIdentifier()
187
+                    ])
188
+                ),
189
+                Http::STATUS_UNPROCESSABLE_ENTITY
190
+            );
191
+        }
192
+        if (!$authMechanism->isVisibleFor($this->service->getVisibilityType())) {
193
+            // not permitted to use auth mechanism
194
+            return new DataResponse(
195
+                array(
196
+                    'message' => (string)$this->l10n->t('Not permitted to use authentication mechanism "%s"', [
197
+                        $authMechanism->getIdentifier()
198
+                    ])
199
+                ),
200
+                Http::STATUS_UNPROCESSABLE_ENTITY
201
+            );
202
+        }
203 203
 
204
-		if (!$backend->validateStorage($storage)) {
205
-			// unsatisfied parameters
206
-			return new DataResponse(
207
-				array(
208
-					'message' => (string)$this->l10n->t('Unsatisfied backend parameters')
209
-				),
210
-				Http::STATUS_UNPROCESSABLE_ENTITY
211
-			);
212
-		}
213
-		if (!$authMechanism->validateStorage($storage)) {
214
-			// unsatisfied parameters
215
-			return new DataResponse(
216
-				[
217
-					'message' => (string)$this->l10n->t('Unsatisfied authentication mechanism parameters')
218
-				],
219
-				Http::STATUS_UNPROCESSABLE_ENTITY
220
-			);
221
-		}
204
+        if (!$backend->validateStorage($storage)) {
205
+            // unsatisfied parameters
206
+            return new DataResponse(
207
+                array(
208
+                    'message' => (string)$this->l10n->t('Unsatisfied backend parameters')
209
+                ),
210
+                Http::STATUS_UNPROCESSABLE_ENTITY
211
+            );
212
+        }
213
+        if (!$authMechanism->validateStorage($storage)) {
214
+            // unsatisfied parameters
215
+            return new DataResponse(
216
+                [
217
+                    'message' => (string)$this->l10n->t('Unsatisfied authentication mechanism parameters')
218
+                ],
219
+                Http::STATUS_UNPROCESSABLE_ENTITY
220
+            );
221
+        }
222 222
 
223
-		return null;
224
-	}
223
+        return null;
224
+    }
225 225
 
226
-	protected function manipulateStorageConfig(StorageConfig $storage) {
227
-		/** @var AuthMechanism */
228
-		$authMechanism = $storage->getAuthMechanism();
229
-		$authMechanism->manipulateStorageConfig($storage);
230
-		/** @var Backend */
231
-		$backend = $storage->getBackend();
232
-		$backend->manipulateStorageConfig($storage);
233
-	}
226
+    protected function manipulateStorageConfig(StorageConfig $storage) {
227
+        /** @var AuthMechanism */
228
+        $authMechanism = $storage->getAuthMechanism();
229
+        $authMechanism->manipulateStorageConfig($storage);
230
+        /** @var Backend */
231
+        $backend = $storage->getBackend();
232
+        $backend->manipulateStorageConfig($storage);
233
+    }
234 234
 
235
-	/**
236
-	 * Check whether the given storage is available / valid.
237
-	 *
238
-	 * Note that this operation can be time consuming depending
239
-	 * on whether the remote storage is available or not.
240
-	 *
241
-	 * @param StorageConfig $storage storage configuration
242
-	 * @param bool $testOnly whether to storage should only test the connection or do more things
243
-	 */
244
-	protected function updateStorageStatus(StorageConfig &$storage, $testOnly = true) {
245
-		try {
246
-			$this->manipulateStorageConfig($storage);
235
+    /**
236
+     * Check whether the given storage is available / valid.
237
+     *
238
+     * Note that this operation can be time consuming depending
239
+     * on whether the remote storage is available or not.
240
+     *
241
+     * @param StorageConfig $storage storage configuration
242
+     * @param bool $testOnly whether to storage should only test the connection or do more things
243
+     */
244
+    protected function updateStorageStatus(StorageConfig &$storage, $testOnly = true) {
245
+        try {
246
+            $this->manipulateStorageConfig($storage);
247 247
 
248
-			/** @var Backend */
249
-			$backend = $storage->getBackend();
250
-			// update status (can be time-consuming)
251
-			$storage->setStatus(
252
-				\OC_Mount_Config::getBackendStatus(
253
-					$backend->getStorageClass(),
254
-					$storage->getBackendOptions(),
255
-					false,
256
-					$testOnly
257
-				)
258
-			);
259
-		} catch (InsufficientDataForMeaningfulAnswerException $e) {
260
-			$status = $e->getCode() ? $e->getCode() : StorageNotAvailableException::STATUS_INDETERMINATE;
261
-			$storage->setStatus(
262
-				$status,
263
-				$this->l10n->t('Insufficient data: %s', [$e->getMessage()])
264
-			);
265
-		} catch (StorageNotAvailableException $e) {
266
-			$storage->setStatus(
267
-				$e->getCode(),
268
-				$this->l10n->t('%s', [$e->getMessage()])
269
-			);
270
-		} catch (\Exception $e) {
271
-			// FIXME: convert storage exceptions to StorageNotAvailableException
272
-			$storage->setStatus(
273
-				StorageNotAvailableException::STATUS_ERROR,
274
-				get_class($e).': '.$e->getMessage()
275
-			);
276
-		}
277
-	}
248
+            /** @var Backend */
249
+            $backend = $storage->getBackend();
250
+            // update status (can be time-consuming)
251
+            $storage->setStatus(
252
+                \OC_Mount_Config::getBackendStatus(
253
+                    $backend->getStorageClass(),
254
+                    $storage->getBackendOptions(),
255
+                    false,
256
+                    $testOnly
257
+                )
258
+            );
259
+        } catch (InsufficientDataForMeaningfulAnswerException $e) {
260
+            $status = $e->getCode() ? $e->getCode() : StorageNotAvailableException::STATUS_INDETERMINATE;
261
+            $storage->setStatus(
262
+                $status,
263
+                $this->l10n->t('Insufficient data: %s', [$e->getMessage()])
264
+            );
265
+        } catch (StorageNotAvailableException $e) {
266
+            $storage->setStatus(
267
+                $e->getCode(),
268
+                $this->l10n->t('%s', [$e->getMessage()])
269
+            );
270
+        } catch (\Exception $e) {
271
+            // FIXME: convert storage exceptions to StorageNotAvailableException
272
+            $storage->setStatus(
273
+                StorageNotAvailableException::STATUS_ERROR,
274
+                get_class($e).': '.$e->getMessage()
275
+            );
276
+        }
277
+    }
278 278
 
279
-	/**
280
-	 * Get all storage entries
281
-	 *
282
-	 * @return DataResponse
283
-	 */
284
-	public function index() {
285
-		$storages = $this->service->getStorages();
279
+    /**
280
+     * Get all storage entries
281
+     *
282
+     * @return DataResponse
283
+     */
284
+    public function index() {
285
+        $storages = $this->service->getStorages();
286 286
 
287
-		return new DataResponse(
288
-			$storages,
289
-			Http::STATUS_OK
290
-		);
291
-	}
287
+        return new DataResponse(
288
+            $storages,
289
+            Http::STATUS_OK
290
+        );
291
+    }
292 292
 
293
-	/**
294
-	 * Get an external storage entry.
295
-	 *
296
-	 * @param int $id storage id
297
-	 * @param bool $testOnly whether to storage should only test the connection or do more things
298
-	 *
299
-	 * @return DataResponse
300
-	 */
301
-	public function show($id, $testOnly = true) {
302
-		try {
303
-			$storage = $this->service->getStorage($id);
293
+    /**
294
+     * Get an external storage entry.
295
+     *
296
+     * @param int $id storage id
297
+     * @param bool $testOnly whether to storage should only test the connection or do more things
298
+     *
299
+     * @return DataResponse
300
+     */
301
+    public function show($id, $testOnly = true) {
302
+        try {
303
+            $storage = $this->service->getStorage($id);
304 304
 
305
-			$this->updateStorageStatus($storage, $testOnly);
306
-		} catch (NotFoundException $e) {
307
-			return new DataResponse(
308
-				[
309
-					'message' => (string)$this->l10n->t('Storage with ID "%d" not found', array($id))
310
-				],
311
-				Http::STATUS_NOT_FOUND
312
-			);
313
-		}
305
+            $this->updateStorageStatus($storage, $testOnly);
306
+        } catch (NotFoundException $e) {
307
+            return new DataResponse(
308
+                [
309
+                    'message' => (string)$this->l10n->t('Storage with ID "%d" not found', array($id))
310
+                ],
311
+                Http::STATUS_NOT_FOUND
312
+            );
313
+        }
314 314
 
315
-		return new DataResponse(
316
-			$storage,
317
-			Http::STATUS_OK
318
-		);
319
-	}
315
+        return new DataResponse(
316
+            $storage,
317
+            Http::STATUS_OK
318
+        );
319
+    }
320 320
 
321
-	/**
322
-	 * Deletes the storage with the given id.
323
-	 *
324
-	 * @param int $id storage id
325
-	 *
326
-	 * @return DataResponse
327
-	 */
328
-	public function destroy($id) {
329
-		try {
330
-			$this->service->removeStorage($id);
331
-		} catch (NotFoundException $e) {
332
-			return new DataResponse(
333
-				[
334
-					'message' => (string)$this->l10n->t('Storage with ID "%d" not found', array($id))
335
-				],
336
-				Http::STATUS_NOT_FOUND
337
-			);
338
-		}
321
+    /**
322
+     * Deletes the storage with the given id.
323
+     *
324
+     * @param int $id storage id
325
+     *
326
+     * @return DataResponse
327
+     */
328
+    public function destroy($id) {
329
+        try {
330
+            $this->service->removeStorage($id);
331
+        } catch (NotFoundException $e) {
332
+            return new DataResponse(
333
+                [
334
+                    'message' => (string)$this->l10n->t('Storage with ID "%d" not found', array($id))
335
+                ],
336
+                Http::STATUS_NOT_FOUND
337
+            );
338
+        }
339 339
 
340
-		return new DataResponse([], Http::STATUS_NO_CONTENT);
341
-	}
340
+        return new DataResponse([], Http::STATUS_NO_CONTENT);
341
+    }
342 342
 
343 343
 }
344 344
 
Please login to merge, or discard this patch.
Spacing   +10 added lines, -10 removed lines patch added patch discarded remove patch
@@ -127,7 +127,7 @@  discard block
 block discarded – undo
127 127
 			$this->logger->logException($e);
128 128
 			return new DataResponse(
129 129
 				[
130
-					'message' => (string)$this->l10n->t('Invalid backend or authentication mechanism class')
130
+					'message' => (string) $this->l10n->t('Invalid backend or authentication mechanism class')
131 131
 				],
132 132
 				Http::STATUS_UNPROCESSABLE_ENTITY
133 133
 			);
@@ -146,7 +146,7 @@  discard block
 block discarded – undo
146 146
 		if ($mountPoint === '') {
147 147
 			return new DataResponse(
148 148
 				array(
149
-					'message' => (string)$this->l10n->t('Invalid mount point')
149
+					'message' => (string) $this->l10n->t('Invalid mount point')
150 150
 				),
151 151
 				Http::STATUS_UNPROCESSABLE_ENTITY
152 152
 			);
@@ -156,7 +156,7 @@  discard block
 block discarded – undo
156 156
 			// objectstore must not be sent from client side
157 157
 			return new DataResponse(
158 158
 				array(
159
-					'message' => (string)$this->l10n->t('Objectstore forbidden')
159
+					'message' => (string) $this->l10n->t('Objectstore forbidden')
160 160
 				),
161 161
 				Http::STATUS_UNPROCESSABLE_ENTITY
162 162
 			);
@@ -170,7 +170,7 @@  discard block
 block discarded – undo
170 170
 			// invalid backend
171 171
 			return new DataResponse(
172 172
 				array(
173
-					'message' => (string)$this->l10n->t('Invalid storage backend "%s"', [
173
+					'message' => (string) $this->l10n->t('Invalid storage backend "%s"', [
174 174
 						$backend->getIdentifier()
175 175
 					])
176 176
 				),
@@ -182,7 +182,7 @@  discard block
 block discarded – undo
182 182
 			// not permitted to use backend
183 183
 			return new DataResponse(
184 184
 				array(
185
-					'message' => (string)$this->l10n->t('Not permitted to use backend "%s"', [
185
+					'message' => (string) $this->l10n->t('Not permitted to use backend "%s"', [
186 186
 						$backend->getIdentifier()
187 187
 					])
188 188
 				),
@@ -193,7 +193,7 @@  discard block
 block discarded – undo
193 193
 			// not permitted to use auth mechanism
194 194
 			return new DataResponse(
195 195
 				array(
196
-					'message' => (string)$this->l10n->t('Not permitted to use authentication mechanism "%s"', [
196
+					'message' => (string) $this->l10n->t('Not permitted to use authentication mechanism "%s"', [
197 197
 						$authMechanism->getIdentifier()
198 198
 					])
199 199
 				),
@@ -205,7 +205,7 @@  discard block
 block discarded – undo
205 205
 			// unsatisfied parameters
206 206
 			return new DataResponse(
207 207
 				array(
208
-					'message' => (string)$this->l10n->t('Unsatisfied backend parameters')
208
+					'message' => (string) $this->l10n->t('Unsatisfied backend parameters')
209 209
 				),
210 210
 				Http::STATUS_UNPROCESSABLE_ENTITY
211 211
 			);
@@ -214,7 +214,7 @@  discard block
 block discarded – undo
214 214
 			// unsatisfied parameters
215 215
 			return new DataResponse(
216 216
 				[
217
-					'message' => (string)$this->l10n->t('Unsatisfied authentication mechanism parameters')
217
+					'message' => (string) $this->l10n->t('Unsatisfied authentication mechanism parameters')
218 218
 				],
219 219
 				Http::STATUS_UNPROCESSABLE_ENTITY
220 220
 			);
@@ -306,7 +306,7 @@  discard block
 block discarded – undo
306 306
 		} catch (NotFoundException $e) {
307 307
 			return new DataResponse(
308 308
 				[
309
-					'message' => (string)$this->l10n->t('Storage with ID "%d" not found', array($id))
309
+					'message' => (string) $this->l10n->t('Storage with ID "%d" not found', array($id))
310 310
 				],
311 311
 				Http::STATUS_NOT_FOUND
312 312
 			);
@@ -331,7 +331,7 @@  discard block
 block discarded – undo
331 331
 		} catch (NotFoundException $e) {
332 332
 			return new DataResponse(
333 333
 				[
334
-					'message' => (string)$this->l10n->t('Storage with ID "%d" not found', array($id))
334
+					'message' => (string) $this->l10n->t('Storage with ID "%d" not found', array($id))
335 335
 				],
336 336
 				Http::STATUS_NOT_FOUND
337 337
 			);
Please login to merge, or discard this patch.
apps/files_external/lib/Controller/UserGlobalStoragesController.php 2 patches
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -122,7 +122,7 @@  discard block
 block discarded – undo
122 122
 		} catch (NotFoundException $e) {
123 123
 			return new DataResponse(
124 124
 				[
125
-					'message' => (string)$this->l10n->t('Storage with ID "%d" not found', array($id))
125
+					'message' => (string) $this->l10n->t('Storage with ID "%d" not found', array($id))
126 126
 				],
127 127
 				Http::STATUS_NOT_FOUND
128 128
 			);
@@ -162,7 +162,7 @@  discard block
 block discarded – undo
162 162
 			} else {
163 163
 				return new DataResponse(
164 164
 					[
165
-						'message' => (string)$this->l10n->t('Storage with ID "%d" is not user editable', array($id))
165
+						'message' => (string) $this->l10n->t('Storage with ID "%d" is not user editable', array($id))
166 166
 					],
167 167
 					Http::STATUS_FORBIDDEN
168 168
 				);
@@ -170,7 +170,7 @@  discard block
 block discarded – undo
170 170
 		} catch (NotFoundException $e) {
171 171
 			return new DataResponse(
172 172
 				[
173
-					'message' => (string)$this->l10n->t('Storage with ID "%d" not found', array($id))
173
+					'message' => (string) $this->l10n->t('Storage with ID "%d" not found', array($id))
174 174
 				],
175 175
 				Http::STATUS_NOT_FOUND
176 176
 			);
Please login to merge, or discard this patch.
Indentation   +160 added lines, -160 removed lines patch added patch discarded remove patch
@@ -44,165 +44,165 @@
 block discarded – undo
44 44
  * User global storages controller
45 45
  */
46 46
 class UserGlobalStoragesController extends StoragesController {
47
-	/**
48
-	 * @var IUserSession
49
-	 */
50
-	private $userSession;
51
-
52
-	/**
53
-	 * Creates a new user global storages controller.
54
-	 *
55
-	 * @param string $AppName application name
56
-	 * @param IRequest $request request object
57
-	 * @param IL10N $l10n l10n service
58
-	 * @param UserGlobalStoragesService $userGlobalStoragesService storage service
59
-	 * @param IUserSession $userSession
60
-	 */
61
-	public function __construct(
62
-		$AppName,
63
-		IRequest $request,
64
-		IL10N $l10n,
65
-		UserGlobalStoragesService $userGlobalStoragesService,
66
-		IUserSession $userSession,
67
-		ILogger $logger
68
-	) {
69
-		parent::__construct(
70
-			$AppName,
71
-			$request,
72
-			$l10n,
73
-			$userGlobalStoragesService,
74
-			$logger
75
-		);
76
-		$this->userSession = $userSession;
77
-	}
78
-
79
-	/**
80
-	 * Get all storage entries
81
-	 *
82
-	 * @return DataResponse
83
-	 *
84
-	 * @NoAdminRequired
85
-	 */
86
-	public function index() {
87
-		$storages = $this->service->getUniqueStorages();
88
-
89
-		// remove configuration data, this must be kept private
90
-		foreach ($storages as $storage) {
91
-			$this->sanitizeStorage($storage);
92
-		}
93
-
94
-		return new DataResponse(
95
-			$storages,
96
-			Http::STATUS_OK
97
-		);
98
-	}
99
-
100
-	protected function manipulateStorageConfig(StorageConfig $storage) {
101
-		/** @var AuthMechanism */
102
-		$authMechanism = $storage->getAuthMechanism();
103
-		$authMechanism->manipulateStorageConfig($storage, $this->userSession->getUser());
104
-		/** @var Backend */
105
-		$backend = $storage->getBackend();
106
-		$backend->manipulateStorageConfig($storage, $this->userSession->getUser());
107
-	}
108
-
109
-	/**
110
-	 * Get an external storage entry.
111
-	 *
112
-	 * @param int $id storage id
113
-	 * @param bool $testOnly whether to storage should only test the connection or do more things
114
-	 * @return DataResponse
115
-	 *
116
-	 * @NoAdminRequired
117
-	 */
118
-	public function show($id, $testOnly = true) {
119
-		try {
120
-			$storage = $this->service->getStorage($id);
121
-
122
-			$this->updateStorageStatus($storage, $testOnly);
123
-		} catch (NotFoundException $e) {
124
-			return new DataResponse(
125
-				[
126
-					'message' => (string)$this->l10n->t('Storage with ID "%d" not found', array($id))
127
-				],
128
-				Http::STATUS_NOT_FOUND
129
-			);
130
-		}
131
-
132
-		$this->sanitizeStorage($storage);
133
-
134
-		return new DataResponse(
135
-			$storage,
136
-			Http::STATUS_OK
137
-		);
138
-	}
139
-
140
-	/**
141
-	 * Update an external storage entry.
142
-	 * Only allows setting user provided backend fields
143
-	 *
144
-	 * @param int $id storage id
145
-	 * @param array $backendOptions backend-specific options
146
-	 * @param bool $testOnly whether to storage should only test the connection or do more things
147
-	 *
148
-	 * @return DataResponse
149
-	 *
150
-	 * @NoAdminRequired
151
-	 */
152
-	public function update(
153
-		$id,
154
-		$backendOptions,
155
-		$testOnly = true
156
-	) {
157
-		try {
158
-			$storage = $this->service->getStorage($id);
159
-			$authMechanism = $storage->getAuthMechanism();
160
-			if ($authMechanism instanceof IUserProvided || $authMechanism instanceof  UserGlobalAuth) {
161
-				$authMechanism->saveBackendOptions($this->userSession->getUser(), $id, $backendOptions);
162
-				$authMechanism->manipulateStorageConfig($storage, $this->userSession->getUser());
163
-			} else {
164
-				return new DataResponse(
165
-					[
166
-						'message' => (string)$this->l10n->t('Storage with ID "%d" is not user editable', array($id))
167
-					],
168
-					Http::STATUS_FORBIDDEN
169
-				);
170
-			}
171
-		} catch (NotFoundException $e) {
172
-			return new DataResponse(
173
-				[
174
-					'message' => (string)$this->l10n->t('Storage with ID "%d" not found', array($id))
175
-				],
176
-				Http::STATUS_NOT_FOUND
177
-			);
178
-		}
179
-
180
-		$this->updateStorageStatus($storage, $testOnly);
181
-		$this->sanitizeStorage($storage);
182
-
183
-		return new DataResponse(
184
-			$storage,
185
-			Http::STATUS_OK
186
-		);
187
-
188
-	}
189
-
190
-	/**
191
-	 * Remove sensitive data from a StorageConfig before returning it to the user
192
-	 *
193
-	 * @param StorageConfig $storage
194
-	 */
195
-	protected function sanitizeStorage(StorageConfig $storage) {
196
-		$storage->setBackendOptions([]);
197
-		$storage->setMountOptions([]);
198
-
199
-		if ($storage->getAuthMechanism() instanceof IUserProvided) {
200
-			try {
201
-				$storage->getAuthMechanism()->manipulateStorageConfig($storage, $this->userSession->getUser());
202
-			} catch (InsufficientDataForMeaningfulAnswerException $e) {
203
-				// not configured yet
204
-			}
205
-		}
206
-	}
47
+    /**
48
+     * @var IUserSession
49
+     */
50
+    private $userSession;
51
+
52
+    /**
53
+     * Creates a new user global storages controller.
54
+     *
55
+     * @param string $AppName application name
56
+     * @param IRequest $request request object
57
+     * @param IL10N $l10n l10n service
58
+     * @param UserGlobalStoragesService $userGlobalStoragesService storage service
59
+     * @param IUserSession $userSession
60
+     */
61
+    public function __construct(
62
+        $AppName,
63
+        IRequest $request,
64
+        IL10N $l10n,
65
+        UserGlobalStoragesService $userGlobalStoragesService,
66
+        IUserSession $userSession,
67
+        ILogger $logger
68
+    ) {
69
+        parent::__construct(
70
+            $AppName,
71
+            $request,
72
+            $l10n,
73
+            $userGlobalStoragesService,
74
+            $logger
75
+        );
76
+        $this->userSession = $userSession;
77
+    }
78
+
79
+    /**
80
+     * Get all storage entries
81
+     *
82
+     * @return DataResponse
83
+     *
84
+     * @NoAdminRequired
85
+     */
86
+    public function index() {
87
+        $storages = $this->service->getUniqueStorages();
88
+
89
+        // remove configuration data, this must be kept private
90
+        foreach ($storages as $storage) {
91
+            $this->sanitizeStorage($storage);
92
+        }
93
+
94
+        return new DataResponse(
95
+            $storages,
96
+            Http::STATUS_OK
97
+        );
98
+    }
99
+
100
+    protected function manipulateStorageConfig(StorageConfig $storage) {
101
+        /** @var AuthMechanism */
102
+        $authMechanism = $storage->getAuthMechanism();
103
+        $authMechanism->manipulateStorageConfig($storage, $this->userSession->getUser());
104
+        /** @var Backend */
105
+        $backend = $storage->getBackend();
106
+        $backend->manipulateStorageConfig($storage, $this->userSession->getUser());
107
+    }
108
+
109
+    /**
110
+     * Get an external storage entry.
111
+     *
112
+     * @param int $id storage id
113
+     * @param bool $testOnly whether to storage should only test the connection or do more things
114
+     * @return DataResponse
115
+     *
116
+     * @NoAdminRequired
117
+     */
118
+    public function show($id, $testOnly = true) {
119
+        try {
120
+            $storage = $this->service->getStorage($id);
121
+
122
+            $this->updateStorageStatus($storage, $testOnly);
123
+        } catch (NotFoundException $e) {
124
+            return new DataResponse(
125
+                [
126
+                    'message' => (string)$this->l10n->t('Storage with ID "%d" not found', array($id))
127
+                ],
128
+                Http::STATUS_NOT_FOUND
129
+            );
130
+        }
131
+
132
+        $this->sanitizeStorage($storage);
133
+
134
+        return new DataResponse(
135
+            $storage,
136
+            Http::STATUS_OK
137
+        );
138
+    }
139
+
140
+    /**
141
+     * Update an external storage entry.
142
+     * Only allows setting user provided backend fields
143
+     *
144
+     * @param int $id storage id
145
+     * @param array $backendOptions backend-specific options
146
+     * @param bool $testOnly whether to storage should only test the connection or do more things
147
+     *
148
+     * @return DataResponse
149
+     *
150
+     * @NoAdminRequired
151
+     */
152
+    public function update(
153
+        $id,
154
+        $backendOptions,
155
+        $testOnly = true
156
+    ) {
157
+        try {
158
+            $storage = $this->service->getStorage($id);
159
+            $authMechanism = $storage->getAuthMechanism();
160
+            if ($authMechanism instanceof IUserProvided || $authMechanism instanceof  UserGlobalAuth) {
161
+                $authMechanism->saveBackendOptions($this->userSession->getUser(), $id, $backendOptions);
162
+                $authMechanism->manipulateStorageConfig($storage, $this->userSession->getUser());
163
+            } else {
164
+                return new DataResponse(
165
+                    [
166
+                        'message' => (string)$this->l10n->t('Storage with ID "%d" is not user editable', array($id))
167
+                    ],
168
+                    Http::STATUS_FORBIDDEN
169
+                );
170
+            }
171
+        } catch (NotFoundException $e) {
172
+            return new DataResponse(
173
+                [
174
+                    'message' => (string)$this->l10n->t('Storage with ID "%d" not found', array($id))
175
+                ],
176
+                Http::STATUS_NOT_FOUND
177
+            );
178
+        }
179
+
180
+        $this->updateStorageStatus($storage, $testOnly);
181
+        $this->sanitizeStorage($storage);
182
+
183
+        return new DataResponse(
184
+            $storage,
185
+            Http::STATUS_OK
186
+        );
187
+
188
+    }
189
+
190
+    /**
191
+     * Remove sensitive data from a StorageConfig before returning it to the user
192
+     *
193
+     * @param StorageConfig $storage
194
+     */
195
+    protected function sanitizeStorage(StorageConfig $storage) {
196
+        $storage->setBackendOptions([]);
197
+        $storage->setMountOptions([]);
198
+
199
+        if ($storage->getAuthMechanism() instanceof IUserProvided) {
200
+            try {
201
+                $storage->getAuthMechanism()->manipulateStorageConfig($storage, $this->userSession->getUser());
202
+            } catch (InsufficientDataForMeaningfulAnswerException $e) {
203
+                // not configured yet
204
+            }
205
+        }
206
+    }
207 207
 
208 208
 }
Please login to merge, or discard this patch.
apps/user_ldap/templates/settings.php 3 patches
Braces   +13 added lines, -1 removed lines patch added patch discarded remove patch
@@ -97,7 +97,19 @@
 block discarded – undo
97 97
 				<p><label for="ldap_group_display_name"><?php p($l->t('Group Display Name Field'));?></label><input type="text" id="ldap_group_display_name" name="ldap_group_display_name" data-default="<?php p($_['ldap_group_display_name_default']); ?>" title="<?php p($l->t('The LDAP attribute to use to generate the groups\'s display name.'));?>" /></p>
98 98
 				<p><label for="ldap_base_groups"><?php p($l->t('Base Group Tree'));?></label><textarea id="ldap_base_groups" name="ldap_base_groups" placeholder="<?php p($l->t('One Group Base DN per line'));?>" data-default="<?php p($_['ldap_base_groups_default']); ?>" title="<?php p($l->t('Base Group Tree'));?>"></textarea></p>
99 99
 				<p><label for="ldap_attributes_for_group_search"><?php p($l->t('Group Search Attributes'));?></label><textarea id="ldap_attributes_for_group_search" name="ldap_attributes_for_group_search" placeholder="<?php p($l->t('Optional; one attribute per line'));?>" data-default="<?php p($_['ldap_attributes_for_group_search_default']); ?>" title="<?php p($l->t('Group Search Attributes'));?>"></textarea></p>
100
-				<p><label for="ldap_group_member_assoc_attribute"><?php p($l->t('Group-Member association'));?></label><select id="ldap_group_member_assoc_attribute" name="ldap_group_member_assoc_attribute" data-default="<?php p($_['ldap_group_member_assoc_attribute_default']); ?>" ><option value="uniqueMember"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] === 'uniqueMember')) p(' selected'); ?>>uniqueMember</option><option value="memberUid"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] === 'memberUid')) p(' selected'); ?>>memberUid</option><option value="member"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] === 'member')) p(' selected'); ?>>member (AD)</option><option value="gidNumber"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] === 'gidNumber')) p(' selected'); ?>>gidNumber</option></select></p>				<p><label for="ldap_dynamic_group_member_url"><?php p($l->t('Dynamic Group Member URL'));?></label><input type="text" id="ldap_dynamic_group_member_url" name="ldap_dynamic_group_member_url" title="<?php p($l->t('The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)'));?>" data-default="<?php p($_['ldap_dynamic_group_member_url_default']); ?>" /></p>
100
+				<p><label for="ldap_group_member_assoc_attribute"><?php p($l->t('Group-Member association'));?></label><select id="ldap_group_member_assoc_attribute" name="ldap_group_member_assoc_attribute" data-default="<?php p($_['ldap_group_member_assoc_attribute_default']); ?>" ><option value="uniqueMember"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] === 'uniqueMember')) {
101
+    p(' selected');
102
+}
103
+?>>uniqueMember</option><option value="memberUid"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] === 'memberUid')) {
104
+    p(' selected');
105
+}
106
+?>>memberUid</option><option value="member"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] === 'member')) {
107
+    p(' selected');
108
+}
109
+?>>member (AD)</option><option value="gidNumber"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] === 'gidNumber')) {
110
+    p(' selected');
111
+}
112
+?>>gidNumber</option></select></p>				<p><label for="ldap_dynamic_group_member_url"><?php p($l->t('Dynamic Group Member URL'));?></label><input type="text" id="ldap_dynamic_group_member_url" name="ldap_dynamic_group_member_url" title="<?php p($l->t('The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)'));?>" data-default="<?php p($_['ldap_dynamic_group_member_url_default']); ?>" /></p>
101 113
 				<p><label for="ldap_nested_groups"><?php p($l->t('Nested Groups'));?></label><input type="checkbox" id="ldap_nested_groups" name="ldap_nested_groups" value="1" data-default="<?php p($_['ldap_nested_groups_default']); ?>"  title="<?php p($l->t('When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)'));?>" /></p>
102 114
 				<p><label for="ldap_paging_size"><?php p($l->t('Paging chunksize'));?></label><input type="number" id="ldap_paging_size" name="ldap_paging_size" title="<?php p($l->t('Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)'));?>" data-default="<?php p($_['ldap_paging_size_default']); ?>" /></p>
103 115
 				<p><label for="ldap_turn_on_pwd_change"><?php p($l->t('Enable LDAP password changes per user'));?></label><span class="inlinetable"><span class="tablerow left"><input type="checkbox" id="ldap_turn_on_pwd_change" name="ldap_turn_on_pwd_change" value="1" data-default="<?php p($_['ldap_turn_on_pwd_change_default']); ?>" title="<?php p($l->t('Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server.'));?>" /><span class="tablecell"><?php p($l->t('(New password is sent as plain text to LDAP)'));?></span></span>
Please login to merge, or discard this patch.
Indentation   +44 added lines, -44 removed lines patch added patch discarded remove patch
@@ -5,46 +5,46 @@  discard block
 block discarded – undo
5 5
 vendor_style('user_ldap', 'ui-multiselect/jquery.multiselect');
6 6
 
7 7
 script('user_ldap', [
8
-	'wizard/controller',
9
-	'wizard/configModel',
10
-	'wizard/view',
11
-	'wizard/wizardObject',
12
-	'wizard/wizardTabGeneric',
13
-	'wizard/wizardTabElementary',
14
-	'wizard/wizardTabAbstractFilter',
15
-	'wizard/wizardTabUserFilter',
16
-	'wizard/wizardTabLoginFilter',
17
-	'wizard/wizardTabGroupFilter',
18
-	'wizard/wizardTabAdvanced',
19
-	'wizard/wizardTabExpert',
20
-	'wizard/wizardDetectorQueue',
21
-	'wizard/wizardDetectorGeneric',
22
-	'wizard/wizardDetectorPort',
23
-	'wizard/wizardDetectorBaseDN',
24
-	'wizard/wizardDetectorFeatureAbstract',
25
-	'wizard/wizardDetectorUserObjectClasses',
26
-	'wizard/wizardDetectorGroupObjectClasses',
27
-	'wizard/wizardDetectorGroupsForUsers',
28
-	'wizard/wizardDetectorGroupsForGroups',
29
-	'wizard/wizardDetectorSimpleRequestAbstract',
30
-	'wizard/wizardDetectorFilterUser',
31
-	'wizard/wizardDetectorFilterLogin',
32
-	'wizard/wizardDetectorFilterGroup',
33
-	'wizard/wizardDetectorUserCount',
34
-	'wizard/wizardDetectorGroupCount',
35
-	'wizard/wizardDetectorEmailAttribute',
36
-	'wizard/wizardDetectorUserDisplayNameAttribute',
37
-	'wizard/wizardDetectorUserGroupAssociation',
38
-	'wizard/wizardDetectorAvailableAttributes',
39
-	'wizard/wizardDetectorTestAbstract',
40
-	'wizard/wizardDetectorTestLoginName',
41
-	'wizard/wizardDetectorTestBaseDN',
42
-	'wizard/wizardDetectorTestConfiguration',
43
-	'wizard/wizardDetectorClearUserMappings',
44
-	'wizard/wizardDetectorClearGroupMappings',
45
-	'wizard/wizardFilterOnType',
46
-	'wizard/wizardFilterOnTypeFactory',
47
-	'wizard/wizard'
8
+    'wizard/controller',
9
+    'wizard/configModel',
10
+    'wizard/view',
11
+    'wizard/wizardObject',
12
+    'wizard/wizardTabGeneric',
13
+    'wizard/wizardTabElementary',
14
+    'wizard/wizardTabAbstractFilter',
15
+    'wizard/wizardTabUserFilter',
16
+    'wizard/wizardTabLoginFilter',
17
+    'wizard/wizardTabGroupFilter',
18
+    'wizard/wizardTabAdvanced',
19
+    'wizard/wizardTabExpert',
20
+    'wizard/wizardDetectorQueue',
21
+    'wizard/wizardDetectorGeneric',
22
+    'wizard/wizardDetectorPort',
23
+    'wizard/wizardDetectorBaseDN',
24
+    'wizard/wizardDetectorFeatureAbstract',
25
+    'wizard/wizardDetectorUserObjectClasses',
26
+    'wizard/wizardDetectorGroupObjectClasses',
27
+    'wizard/wizardDetectorGroupsForUsers',
28
+    'wizard/wizardDetectorGroupsForGroups',
29
+    'wizard/wizardDetectorSimpleRequestAbstract',
30
+    'wizard/wizardDetectorFilterUser',
31
+    'wizard/wizardDetectorFilterLogin',
32
+    'wizard/wizardDetectorFilterGroup',
33
+    'wizard/wizardDetectorUserCount',
34
+    'wizard/wizardDetectorGroupCount',
35
+    'wizard/wizardDetectorEmailAttribute',
36
+    'wizard/wizardDetectorUserDisplayNameAttribute',
37
+    'wizard/wizardDetectorUserGroupAssociation',
38
+    'wizard/wizardDetectorAvailableAttributes',
39
+    'wizard/wizardDetectorTestAbstract',
40
+    'wizard/wizardDetectorTestLoginName',
41
+    'wizard/wizardDetectorTestBaseDN',
42
+    'wizard/wizardDetectorTestConfiguration',
43
+    'wizard/wizardDetectorClearUserMappings',
44
+    'wizard/wizardDetectorClearGroupMappings',
45
+    'wizard/wizardFilterOnType',
46
+    'wizard/wizardFilterOnTypeFactory',
47
+    'wizard/wizard'
48 48
 ]);
49 49
 
50 50
 style('user_ldap', 'settings');
@@ -67,10 +67,10 @@  discard block
 block discarded – undo
67 67
 		<li class="ldapSettingsTabs"><a href="#ldapSettings-1"><?php p($l->t('Advanced'));?></a></li>
68 68
 	</ul>
69 69
 	<?php
70
-	if(!function_exists('ldap_connect')) {
71
-		print_unescaped('<p class="ldapwarning">'.$l->t('<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it.').'</p>');
72
-	}
73
-	?>
70
+    if(!function_exists('ldap_connect')) {
71
+        print_unescaped('<p class="ldapwarning">'.$l->t('<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it.').'</p>');
72
+    }
73
+    ?>
74 74
 	<?php require_once __DIR__ . '/part.wizard-server.php'; ?>
75 75
 	<?php require_once __DIR__ . '/part.wizard-userfilter.php'; ?>
76 76
 	<?php require_once __DIR__ . '/part.wizard-loginfilter.php'; ?>
Please login to merge, or discard this patch.
Spacing   +46 added lines, -46 removed lines patch added patch discarded remove patch
@@ -59,71 +59,71 @@
 block discarded – undo
59 59
 
60 60
 	<div id="ldapSettings">
61 61
 	<ul>
62
-		<li id="#ldapWizard1"><a href="#ldapWizard1"><?php p($l->t('Server'));?></a></li>
63
-		<li id="#ldapWizard2"><a href="#ldapWizard2"><?php p($l->t('Users'));?></a></li>
64
-		<li id="#ldapWizard3"><a href="#ldapWizard3"><?php p($l->t('Login Attributes'));?></a></li>
65
-		<li id="#ldapWizard4"><a href="#ldapWizard4"><?php p($l->t('Groups'));?></a></li>
66
-		<li class="ldapSettingsTabs"><a href="#ldapSettings-2"><?php p($l->t('Expert'));?></a></li>
67
-		<li class="ldapSettingsTabs"><a href="#ldapSettings-1"><?php p($l->t('Advanced'));?></a></li>
62
+		<li id="#ldapWizard1"><a href="#ldapWizard1"><?php p($l->t('Server')); ?></a></li>
63
+		<li id="#ldapWizard2"><a href="#ldapWizard2"><?php p($l->t('Users')); ?></a></li>
64
+		<li id="#ldapWizard3"><a href="#ldapWizard3"><?php p($l->t('Login Attributes')); ?></a></li>
65
+		<li id="#ldapWizard4"><a href="#ldapWizard4"><?php p($l->t('Groups')); ?></a></li>
66
+		<li class="ldapSettingsTabs"><a href="#ldapSettings-2"><?php p($l->t('Expert')); ?></a></li>
67
+		<li class="ldapSettingsTabs"><a href="#ldapSettings-1"><?php p($l->t('Advanced')); ?></a></li>
68 68
 	</ul>
69 69
 	<?php
70
-	if(!function_exists('ldap_connect')) {
70
+	if (!function_exists('ldap_connect')) {
71 71
 		print_unescaped('<p class="ldapwarning">'.$l->t('<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it.').'</p>');
72 72
 	}
73 73
 	?>
74
-	<?php require_once __DIR__ . '/part.wizard-server.php'; ?>
75
-	<?php require_once __DIR__ . '/part.wizard-userfilter.php'; ?>
76
-	<?php require_once __DIR__ . '/part.wizard-loginfilter.php'; ?>
77
-	<?php require_once __DIR__ . '/part.wizard-groupfilter.php'; ?>
74
+	<?php require_once __DIR__.'/part.wizard-server.php'; ?>
75
+	<?php require_once __DIR__.'/part.wizard-userfilter.php'; ?>
76
+	<?php require_once __DIR__.'/part.wizard-loginfilter.php'; ?>
77
+	<?php require_once __DIR__.'/part.wizard-groupfilter.php'; ?>
78 78
 	<fieldset id="ldapSettings-1">
79 79
 		<div id="ldapAdvancedAccordion">
80
-			<h3><?php p($l->t('Connection Settings'));?></h3>
80
+			<h3><?php p($l->t('Connection Settings')); ?></h3>
81 81
 			<div>
82
-				<p><label for="ldap_configuration_active"><?php p($l->t('Configuration Active'));?></label><input type="checkbox" id="ldap_configuration_active" name="ldap_configuration_active" value="1" data-default="<?php p($_['ldap_configuration_active_default']); ?>"  title="<?php p($l->t('When unchecked, this configuration will be skipped.'));?>" /></p>
83
-				<p><label for="ldap_backup_host"><?php p($l->t('Backup (Replica) Host'));?></label><input type="text" id="ldap_backup_host" name="ldap_backup_host" data-default="<?php p($_['ldap_backup_host_default']); ?>" title="<?php p($l->t('Give an optional backup host. It must be a replica of the main LDAP/AD server.'));?>"></p>
84
-				<p><label for="ldap_backup_port"><?php p($l->t('Backup (Replica) Port'));?></label><input type="number" id="ldap_backup_port" name="ldap_backup_port" data-default="<?php p($_['ldap_backup_port_default']); ?>"  /></p>
85
-				<p><label for="ldap_override_main_server"><?php p($l->t('Disable Main Server'));?></label><input type="checkbox" id="ldap_override_main_server" name="ldap_override_main_server" value="1" data-default="<?php p($_['ldap_override_main_server_default']); ?>"  title="<?php p($l->t('Only connect to the replica server.'));?>" /></p>
86
-				<p><label for="ldap_turn_off_cert_check"><?php p($l->t('Turn off SSL certificate validation.'));?></label><input type="checkbox" id="ldap_turn_off_cert_check" name="ldap_turn_off_cert_check" title="<?php p($l->t('Not recommended, use it for testing only! If connection only works with this option, import the LDAP server\'s SSL certificate in your %s server.', [$theme->getName()] ));?>" data-default="<?php p($_['ldap_turn_off_cert_check_default']); ?>" value="1"><br/></p>
87
-				<p><label for="ldap_cache_ttl"><?php p($l->t('Cache Time-To-Live'));?></label><input type="number" id="ldap_cache_ttl" name="ldap_cache_ttl" title="<?php p($l->t('in seconds. A change empties the cache.'));?>" data-default="<?php p($_['ldap_cache_ttl_default']); ?>" /></p>
82
+				<p><label for="ldap_configuration_active"><?php p($l->t('Configuration Active')); ?></label><input type="checkbox" id="ldap_configuration_active" name="ldap_configuration_active" value="1" data-default="<?php p($_['ldap_configuration_active_default']); ?>"  title="<?php p($l->t('When unchecked, this configuration will be skipped.')); ?>" /></p>
83
+				<p><label for="ldap_backup_host"><?php p($l->t('Backup (Replica) Host')); ?></label><input type="text" id="ldap_backup_host" name="ldap_backup_host" data-default="<?php p($_['ldap_backup_host_default']); ?>" title="<?php p($l->t('Give an optional backup host. It must be a replica of the main LDAP/AD server.')); ?>"></p>
84
+				<p><label for="ldap_backup_port"><?php p($l->t('Backup (Replica) Port')); ?></label><input type="number" id="ldap_backup_port" name="ldap_backup_port" data-default="<?php p($_['ldap_backup_port_default']); ?>"  /></p>
85
+				<p><label for="ldap_override_main_server"><?php p($l->t('Disable Main Server')); ?></label><input type="checkbox" id="ldap_override_main_server" name="ldap_override_main_server" value="1" data-default="<?php p($_['ldap_override_main_server_default']); ?>"  title="<?php p($l->t('Only connect to the replica server.')); ?>" /></p>
86
+				<p><label for="ldap_turn_off_cert_check"><?php p($l->t('Turn off SSL certificate validation.')); ?></label><input type="checkbox" id="ldap_turn_off_cert_check" name="ldap_turn_off_cert_check" title="<?php p($l->t('Not recommended, use it for testing only! If connection only works with this option, import the LDAP server\'s SSL certificate in your %s server.', [$theme->getName()])); ?>" data-default="<?php p($_['ldap_turn_off_cert_check_default']); ?>" value="1"><br/></p>
87
+				<p><label for="ldap_cache_ttl"><?php p($l->t('Cache Time-To-Live')); ?></label><input type="number" id="ldap_cache_ttl" name="ldap_cache_ttl" title="<?php p($l->t('in seconds. A change empties the cache.')); ?>" data-default="<?php p($_['ldap_cache_ttl_default']); ?>" /></p>
88 88
 			</div>
89
-			<h3><?php p($l->t('Directory Settings'));?></h3>
89
+			<h3><?php p($l->t('Directory Settings')); ?></h3>
90 90
 			<div>
91
-				<p><label for="ldap_display_name"><?php p($l->t('User Display Name Field'));?></label><input type="text" id="ldap_display_name" name="ldap_display_name" data-default="<?php p($_['ldap_display_name_default']); ?>" title="<?php p($l->t('The LDAP attribute to use to generate the user\'s display name.'));?>" /></p>
92
-				<p><label for="ldap_user_display_name_2"><?php p($l->t('2nd User Display Name Field'));?></label><input type="text" id="ldap_user_display_name_2" name="ldap_user_display_name_2" data-default="<?php p($_['ldap_user_display_name_2_default']); ?>" title="<?php p($l->t('Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe ([email protected])«.'));?>" /></p>
93
-				<p><label for="ldap_base_users"><?php p($l->t('Base User Tree'));?></label><textarea id="ldap_base_users" name="ldap_base_users" placeholder="<?php p($l->t('One User Base DN per line'));?>" data-default="<?php p($_['ldap_base_users_default']); ?>" title="<?php p($l->t('Base User Tree'));?>"></textarea></p>
94
-				<p><label for="ldap_attributes_for_user_search"><?php p($l->t('User Search Attributes'));?></label><textarea id="ldap_attributes_for_user_search" name="ldap_attributes_for_user_search" placeholder="<?php p($l->t('Optional; one attribute per line'));?>" data-default="<?php p($_['ldap_attributes_for_user_search_default']); ?>" title="<?php p($l->t('User Search Attributes'));?>"></textarea></p>
95
-				<p><label for="ldap_group_display_name"><?php p($l->t('Group Display Name Field'));?></label><input type="text" id="ldap_group_display_name" name="ldap_group_display_name" data-default="<?php p($_['ldap_group_display_name_default']); ?>" title="<?php p($l->t('The LDAP attribute to use to generate the groups\'s display name.'));?>" /></p>
96
-				<p><label for="ldap_base_groups"><?php p($l->t('Base Group Tree'));?></label><textarea id="ldap_base_groups" name="ldap_base_groups" placeholder="<?php p($l->t('One Group Base DN per line'));?>" data-default="<?php p($_['ldap_base_groups_default']); ?>" title="<?php p($l->t('Base Group Tree'));?>"></textarea></p>
97
-				<p><label for="ldap_attributes_for_group_search"><?php p($l->t('Group Search Attributes'));?></label><textarea id="ldap_attributes_for_group_search" name="ldap_attributes_for_group_search" placeholder="<?php p($l->t('Optional; one attribute per line'));?>" data-default="<?php p($_['ldap_attributes_for_group_search_default']); ?>" title="<?php p($l->t('Group Search Attributes'));?>"></textarea></p>
98
-				<p><label for="ldap_group_member_assoc_attribute"><?php p($l->t('Group-Member association'));?></label><select id="ldap_group_member_assoc_attribute" name="ldap_group_member_assoc_attribute" data-default="<?php p($_['ldap_group_member_assoc_attribute_default']); ?>" ><option value="uniqueMember"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] === 'uniqueMember')) p(' selected'); ?>>uniqueMember</option><option value="memberUid"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] === 'memberUid')) p(' selected'); ?>>memberUid</option><option value="member"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] === 'member')) p(' selected'); ?>>member (AD)</option><option value="gidNumber"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] === 'gidNumber')) p(' selected'); ?>>gidNumber</option></select></p>				<p><label for="ldap_dynamic_group_member_url"><?php p($l->t('Dynamic Group Member URL'));?></label><input type="text" id="ldap_dynamic_group_member_url" name="ldap_dynamic_group_member_url" title="<?php p($l->t('The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)'));?>" data-default="<?php p($_['ldap_dynamic_group_member_url_default']); ?>" /></p>
99
-				<p><label for="ldap_nested_groups"><?php p($l->t('Nested Groups'));?></label><input type="checkbox" id="ldap_nested_groups" name="ldap_nested_groups" value="1" data-default="<?php p($_['ldap_nested_groups_default']); ?>"  title="<?php p($l->t('When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)'));?>" /></p>
100
-				<p><label for="ldap_paging_size"><?php p($l->t('Paging chunksize'));?></label><input type="number" id="ldap_paging_size" name="ldap_paging_size" title="<?php p($l->t('Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)'));?>" data-default="<?php p($_['ldap_paging_size_default']); ?>" /></p>
101
-				<p><label for="ldap_turn_on_pwd_change"><?php p($l->t('Enable LDAP password changes per user'));?></label><span class="inlinetable"><span class="tablerow left"><input type="checkbox" id="ldap_turn_on_pwd_change" name="ldap_turn_on_pwd_change" value="1" data-default="<?php p($_['ldap_turn_on_pwd_change_default']); ?>" title="<?php p($l->t('Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server.'));?>" /><span class="tablecell"><?php p($l->t('(New password is sent as plain text to LDAP)'));?></span></span>
91
+				<p><label for="ldap_display_name"><?php p($l->t('User Display Name Field')); ?></label><input type="text" id="ldap_display_name" name="ldap_display_name" data-default="<?php p($_['ldap_display_name_default']); ?>" title="<?php p($l->t('The LDAP attribute to use to generate the user\'s display name.')); ?>" /></p>
92
+				<p><label for="ldap_user_display_name_2"><?php p($l->t('2nd User Display Name Field')); ?></label><input type="text" id="ldap_user_display_name_2" name="ldap_user_display_name_2" data-default="<?php p($_['ldap_user_display_name_2_default']); ?>" title="<?php p($l->t('Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe ([email protected])«.')); ?>" /></p>
93
+				<p><label for="ldap_base_users"><?php p($l->t('Base User Tree')); ?></label><textarea id="ldap_base_users" name="ldap_base_users" placeholder="<?php p($l->t('One User Base DN per line')); ?>" data-default="<?php p($_['ldap_base_users_default']); ?>" title="<?php p($l->t('Base User Tree')); ?>"></textarea></p>
94
+				<p><label for="ldap_attributes_for_user_search"><?php p($l->t('User Search Attributes')); ?></label><textarea id="ldap_attributes_for_user_search" name="ldap_attributes_for_user_search" placeholder="<?php p($l->t('Optional; one attribute per line')); ?>" data-default="<?php p($_['ldap_attributes_for_user_search_default']); ?>" title="<?php p($l->t('User Search Attributes')); ?>"></textarea></p>
95
+				<p><label for="ldap_group_display_name"><?php p($l->t('Group Display Name Field')); ?></label><input type="text" id="ldap_group_display_name" name="ldap_group_display_name" data-default="<?php p($_['ldap_group_display_name_default']); ?>" title="<?php p($l->t('The LDAP attribute to use to generate the groups\'s display name.')); ?>" /></p>
96
+				<p><label for="ldap_base_groups"><?php p($l->t('Base Group Tree')); ?></label><textarea id="ldap_base_groups" name="ldap_base_groups" placeholder="<?php p($l->t('One Group Base DN per line')); ?>" data-default="<?php p($_['ldap_base_groups_default']); ?>" title="<?php p($l->t('Base Group Tree')); ?>"></textarea></p>
97
+				<p><label for="ldap_attributes_for_group_search"><?php p($l->t('Group Search Attributes')); ?></label><textarea id="ldap_attributes_for_group_search" name="ldap_attributes_for_group_search" placeholder="<?php p($l->t('Optional; one attribute per line')); ?>" data-default="<?php p($_['ldap_attributes_for_group_search_default']); ?>" title="<?php p($l->t('Group Search Attributes')); ?>"></textarea></p>
98
+				<p><label for="ldap_group_member_assoc_attribute"><?php p($l->t('Group-Member association')); ?></label><select id="ldap_group_member_assoc_attribute" name="ldap_group_member_assoc_attribute" data-default="<?php p($_['ldap_group_member_assoc_attribute_default']); ?>" ><option value="uniqueMember"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] === 'uniqueMember')) p(' selected'); ?>>uniqueMember</option><option value="memberUid"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] === 'memberUid')) p(' selected'); ?>>memberUid</option><option value="member"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] === 'member')) p(' selected'); ?>>member (AD)</option><option value="gidNumber"<?php if (isset($_['ldap_group_member_assoc_attribute']) && ($_['ldap_group_member_assoc_attribute'] === 'gidNumber')) p(' selected'); ?>>gidNumber</option></select></p>				<p><label for="ldap_dynamic_group_member_url"><?php p($l->t('Dynamic Group Member URL')); ?></label><input type="text" id="ldap_dynamic_group_member_url" name="ldap_dynamic_group_member_url" title="<?php p($l->t('The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)')); ?>" data-default="<?php p($_['ldap_dynamic_group_member_url_default']); ?>" /></p>
99
+				<p><label for="ldap_nested_groups"><?php p($l->t('Nested Groups')); ?></label><input type="checkbox" id="ldap_nested_groups" name="ldap_nested_groups" value="1" data-default="<?php p($_['ldap_nested_groups_default']); ?>"  title="<?php p($l->t('When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)')); ?>" /></p>
100
+				<p><label for="ldap_paging_size"><?php p($l->t('Paging chunksize')); ?></label><input type="number" id="ldap_paging_size" name="ldap_paging_size" title="<?php p($l->t('Chunksize used for paged LDAP searches that may return bulky results like user or group enumeration. (Setting it 0 disables paged LDAP searches in those situations.)')); ?>" data-default="<?php p($_['ldap_paging_size_default']); ?>" /></p>
101
+				<p><label for="ldap_turn_on_pwd_change"><?php p($l->t('Enable LDAP password changes per user')); ?></label><span class="inlinetable"><span class="tablerow left"><input type="checkbox" id="ldap_turn_on_pwd_change" name="ldap_turn_on_pwd_change" value="1" data-default="<?php p($_['ldap_turn_on_pwd_change_default']); ?>" title="<?php p($l->t('Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server.')); ?>" /><span class="tablecell"><?php p($l->t('(New password is sent as plain text to LDAP)')); ?></span></span>
102 102
 			</span><br/></p>
103
-				<p><label for="ldap_default_ppolicy_dn"><?php p($l->t('Default password policy DN'));?></label><input type="text" id="ldap_default_ppolicy_dn" name="ldap_default_ppolicy_dn" title="<?php p($l->t('The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling.'));?>" data-default="<?php p($_['ldap_default_ppolicy_dn_default']); ?>" /></p>
103
+				<p><label for="ldap_default_ppolicy_dn"><?php p($l->t('Default password policy DN')); ?></label><input type="text" id="ldap_default_ppolicy_dn" name="ldap_default_ppolicy_dn" title="<?php p($l->t('The DN of a default password policy that will be used for password expiry handling. Works only when LDAP password changes per user are enabled and is only supported by OpenLDAP. Leave empty to disable password expiry handling.')); ?>" data-default="<?php p($_['ldap_default_ppolicy_dn_default']); ?>" /></p>
104 104
 			</div>
105
-			<h3><?php p($l->t('Special Attributes'));?></h3>
105
+			<h3><?php p($l->t('Special Attributes')); ?></h3>
106 106
 			<div>
107
-				<p><label for="ldap_quota_attr"><?php p($l->t('Quota Field'));?></label><input type="text" id="ldap_quota_attr" name="ldap_quota_attr" data-default="<?php p($_['ldap_quota_attr_default']); ?>" title="<?php p($l->t('Leave empty for user\'s default quota. Otherwise, specify an LDAP/AD attribute.'));?>" /></p>
108
-				<p><label for="ldap_quota_def"><?php p($l->t('Quota Default'));?></label><input type="text" id="ldap_quota_def" name="ldap_quota_def" data-default="<?php p($_['ldap_quota_def_default']); ?>" title="<?php p($l->t('Override default quota for LDAP users who do not have a quota set in the Quota Field.'));?>" /></p>
109
-				<p><label for="ldap_email_attr"><?php p($l->t('Email Field'));?></label><input type="text" id="ldap_email_attr" name="ldap_email_attr" data-default="<?php p($_['ldap_email_attr_default']); ?>" title="<?php p($l->t('Set the user\'s email from their LDAP attribute. Leave it empty for default behaviour.'));?>" /></p>
110
-				<p><label for="home_folder_naming_rule"><?php p($l->t('User Home Folder Naming Rule'));?></label><input type="text" id="home_folder_naming_rule" name="home_folder_naming_rule" title="<?php p($l->t('Leave empty for username (default). Otherwise, specify an LDAP/AD attribute.'));?>" data-default="<?php p($_['home_folder_naming_rule_default']); ?>" /></p>
107
+				<p><label for="ldap_quota_attr"><?php p($l->t('Quota Field')); ?></label><input type="text" id="ldap_quota_attr" name="ldap_quota_attr" data-default="<?php p($_['ldap_quota_attr_default']); ?>" title="<?php p($l->t('Leave empty for user\'s default quota. Otherwise, specify an LDAP/AD attribute.')); ?>" /></p>
108
+				<p><label for="ldap_quota_def"><?php p($l->t('Quota Default')); ?></label><input type="text" id="ldap_quota_def" name="ldap_quota_def" data-default="<?php p($_['ldap_quota_def_default']); ?>" title="<?php p($l->t('Override default quota for LDAP users who do not have a quota set in the Quota Field.')); ?>" /></p>
109
+				<p><label for="ldap_email_attr"><?php p($l->t('Email Field')); ?></label><input type="text" id="ldap_email_attr" name="ldap_email_attr" data-default="<?php p($_['ldap_email_attr_default']); ?>" title="<?php p($l->t('Set the user\'s email from their LDAP attribute. Leave it empty for default behaviour.')); ?>" /></p>
110
+				<p><label for="home_folder_naming_rule"><?php p($l->t('User Home Folder Naming Rule')); ?></label><input type="text" id="home_folder_naming_rule" name="home_folder_naming_rule" title="<?php p($l->t('Leave empty for username (default). Otherwise, specify an LDAP/AD attribute.')); ?>" data-default="<?php p($_['home_folder_naming_rule_default']); ?>" /></p>
111 111
 				<p><label for="ldap_ext_storage_home_attribute"> <?php p($l->t('"$home" Placeholder Field')); ?></label><input type="text" id="ldap_ext_storage_home_attribute" name="ldap_ext_storage_home_attribute" title="<?php p($l->t('$home in an external storage configuration will be replaced with the value of the specified attribute')); ?>" data-default="<?php p($_['ldap_ext_storage_home_attribute_default']); ?>"></p>
112 112
 			</div>
113 113
 		</div>
114 114
 		<?php print_unescaped($_['settingControls']); ?>
115 115
 	</fieldset>
116 116
 	<fieldset id="ldapSettings-2">
117
-		<p><strong><?php p($l->t('Internal Username'));?></strong></p>
118
-		<p class="ldapIndent"><?php p($l->t('By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ].  Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users.'));?></p>
119
-		<p class="ldapIndent"><label for="ldap_expert_username_attr"><?php p($l->t('Internal Username Attribute:'));?></label><input type="text" id="ldap_expert_username_attr" name="ldap_expert_username_attr" data-default="<?php p($_['ldap_expert_username_attr_default']); ?>" /></p>
120
-		<p><strong><?php p($l->t('Override UUID detection'));?></strong></p>
121
-		<p class="ldapIndent"><?php p($l->t('By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups.'));?></p>
122
-		<p class="ldapIndent"><label for="ldap_expert_uuid_user_attr"><?php p($l->t('UUID Attribute for Users:'));?></label><input type="text" id="ldap_expert_uuid_user_attr" name="ldap_expert_uuid_user_attr" data-default="<?php p($_['ldap_expert_uuid_user_attr_default']); ?>" /></p>
123
-		<p class="ldapIndent"><label for="ldap_expert_uuid_group_attr"><?php p($l->t('UUID Attribute for Groups:'));?></label><input type="text" id="ldap_expert_uuid_group_attr" name="ldap_expert_uuid_group_attr" data-default="<?php p($_['ldap_expert_uuid_group_attr_default']); ?>" /></p>
124
-		<p><strong><?php p($l->t('Username-LDAP User Mapping'));?></strong></p>
125
-		<p class="ldapIndent"><?php p($l->t('Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage.'));?></p>
126
-		<p class="ldapIndent"><button type="button" id="ldap_action_clear_user_mappings" name="ldap_action_clear_user_mappings"><?php p($l->t('Clear Username-LDAP User Mapping'));?></button><br/><button type="button" id="ldap_action_clear_group_mappings" name="ldap_action_clear_group_mappings"><?php p($l->t('Clear Groupname-LDAP Group Mapping'));?></button></p>
117
+		<p><strong><?php p($l->t('Internal Username')); ?></strong></p>
118
+		<p class="ldapIndent"><?php p($l->t('By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ].  Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users.')); ?></p>
119
+		<p class="ldapIndent"><label for="ldap_expert_username_attr"><?php p($l->t('Internal Username Attribute:')); ?></label><input type="text" id="ldap_expert_username_attr" name="ldap_expert_username_attr" data-default="<?php p($_['ldap_expert_username_attr_default']); ?>" /></p>
120
+		<p><strong><?php p($l->t('Override UUID detection')); ?></strong></p>
121
+		<p class="ldapIndent"><?php p($l->t('By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups.')); ?></p>
122
+		<p class="ldapIndent"><label for="ldap_expert_uuid_user_attr"><?php p($l->t('UUID Attribute for Users:')); ?></label><input type="text" id="ldap_expert_uuid_user_attr" name="ldap_expert_uuid_user_attr" data-default="<?php p($_['ldap_expert_uuid_user_attr_default']); ?>" /></p>
123
+		<p class="ldapIndent"><label for="ldap_expert_uuid_group_attr"><?php p($l->t('UUID Attribute for Groups:')); ?></label><input type="text" id="ldap_expert_uuid_group_attr" name="ldap_expert_uuid_group_attr" data-default="<?php p($_['ldap_expert_uuid_group_attr_default']); ?>" /></p>
124
+		<p><strong><?php p($l->t('Username-LDAP User Mapping')); ?></strong></p>
125
+		<p class="ldapIndent"><?php p($l->t('Usernames are used to store and assign metadata. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage.')); ?></p>
126
+		<p class="ldapIndent"><button type="button" id="ldap_action_clear_user_mappings" name="ldap_action_clear_user_mappings"><?php p($l->t('Clear Username-LDAP User Mapping')); ?></button><br/><button type="button" id="ldap_action_clear_group_mappings" name="ldap_action_clear_group_mappings"><?php p($l->t('Clear Groupname-LDAP Group Mapping')); ?></button></p>
127 127
 		<?php print_unescaped($_['settingControls']); ?>
128 128
 	</fieldset>
129 129
 	</div>
Please login to merge, or discard this patch.
apps/dav/lib/Migration/BuildCalendarSearchIndexBackgroundJob.php 2 patches
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -69,7 +69,7 @@  discard block
 block discarded – undo
69 69
 		$offset = $arguments['offset'];
70 70
 		$stopAt = $arguments['stopAt'];
71 71
 
72
-		$this->logger->info('Building calendar index (' . $offset .'/' . $stopAt . ')');
72
+		$this->logger->info('Building calendar index ('.$offset.'/'.$stopAt.')');
73 73
 
74 74
 		$offset = $this->buildIndex($offset, $stopAt);
75 75
 
@@ -80,7 +80,7 @@  discard block
 block discarded – undo
80 80
 				'offset' => $offset,
81 81
 				'stopAt' => $stopAt
82 82
 			]);
83
-			$this->logger->info('New building calendar index job scheduled with offset ' . $offset);
83
+			$this->logger->info('New building calendar index job scheduled with offset '.$offset);
84 84
 		}
85 85
 	}
86 86
 
@@ -100,7 +100,7 @@  discard block
 block discarded – undo
100 100
 			->orderBy('id', 'ASC');
101 101
 
102 102
 		$stmt = $query->execute();
103
-		while($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
103
+		while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
104 104
 			$offset = $row['id'];
105 105
 
106 106
 			$calendarData = $row['calendardata'];
Please login to merge, or discard this patch.
Indentation   +86 added lines, -86 removed lines patch added patch discarded remove patch
@@ -31,90 +31,90 @@
 block discarded – undo
31 31
 
32 32
 class BuildCalendarSearchIndexBackgroundJob extends QueuedJob {
33 33
 
34
-	/** @var IDBConnection */
35
-	private $db;
36
-
37
-	/** @var CalDavBackend */
38
-	private $calDavBackend;
39
-
40
-	/** @var ILogger */
41
-	private $logger;
42
-
43
-	/** @var IJobList */
44
-	private $jobList;
45
-
46
-	/** @var ITimeFactory */
47
-	private $timeFactory;
48
-
49
-	/**
50
-	 * @param IDBConnection $db
51
-	 * @param CalDavBackend $calDavBackend
52
-	 * @param ILogger $logger
53
-	 * @param IJobList $jobList
54
-	 * @param ITimeFactory $timeFactory
55
-	 */
56
-	public function __construct(IDBConnection $db,
57
-								CalDavBackend $calDavBackend,
58
-								ILogger $logger,
59
-								IJobList $jobList,
60
-								ITimeFactory $timeFactory) {
61
-		$this->db = $db;
62
-		$this->calDavBackend = $calDavBackend;
63
-		$this->logger = $logger;
64
-		$this->jobList = $jobList;
65
-		$this->timeFactory = $timeFactory;
66
-	}
67
-
68
-	public function run($arguments) {
69
-		$offset = $arguments['offset'];
70
-		$stopAt = $arguments['stopAt'];
71
-
72
-		$this->logger->info('Building calendar index (' . $offset .'/' . $stopAt . ')');
73
-
74
-		$offset = $this->buildIndex($offset, $stopAt);
75
-
76
-		if ($offset >= $stopAt) {
77
-			$this->logger->info('Building calendar index done');
78
-		} else {
79
-			$this->jobList->add(self::class, [
80
-				'offset' => $offset,
81
-				'stopAt' => $stopAt
82
-			]);
83
-			$this->logger->info('New building calendar index job scheduled with offset ' . $offset);
84
-		}
85
-	}
86
-
87
-	/**
88
-	 * @param int $offset
89
-	 * @param int $stopAt
90
-	 * @return int
91
-	 */
92
-	private function buildIndex($offset, $stopAt) {
93
-		$startTime = $this->timeFactory->getTime();
94
-
95
-		$query = $this->db->getQueryBuilder();
96
-		$query->select(['id', 'calendarid', 'uri', 'calendardata'])
97
-			->from('calendarobjects')
98
-			->where($query->expr()->lte('id', $query->createNamedParameter($stopAt)))
99
-			->andWhere($query->expr()->gt('id', $query->createNamedParameter($offset)))
100
-			->orderBy('id', 'ASC');
101
-
102
-		$stmt = $query->execute();
103
-		while($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
104
-			$offset = $row['id'];
105
-
106
-			$calendarData = $row['calendardata'];
107
-			if (is_resource($calendarData)) {
108
-				$calendarData = stream_get_contents($calendarData);
109
-			}
110
-
111
-			$this->calDavBackend->updateProperties($row['calendarid'], $row['uri'], $calendarData);
112
-
113
-			if (($this->timeFactory->getTime() - $startTime) > 15) {
114
-				return $offset;
115
-			}
116
-		}
117
-
118
-		return $stopAt;
119
-	}
34
+    /** @var IDBConnection */
35
+    private $db;
36
+
37
+    /** @var CalDavBackend */
38
+    private $calDavBackend;
39
+
40
+    /** @var ILogger */
41
+    private $logger;
42
+
43
+    /** @var IJobList */
44
+    private $jobList;
45
+
46
+    /** @var ITimeFactory */
47
+    private $timeFactory;
48
+
49
+    /**
50
+     * @param IDBConnection $db
51
+     * @param CalDavBackend $calDavBackend
52
+     * @param ILogger $logger
53
+     * @param IJobList $jobList
54
+     * @param ITimeFactory $timeFactory
55
+     */
56
+    public function __construct(IDBConnection $db,
57
+                                CalDavBackend $calDavBackend,
58
+                                ILogger $logger,
59
+                                IJobList $jobList,
60
+                                ITimeFactory $timeFactory) {
61
+        $this->db = $db;
62
+        $this->calDavBackend = $calDavBackend;
63
+        $this->logger = $logger;
64
+        $this->jobList = $jobList;
65
+        $this->timeFactory = $timeFactory;
66
+    }
67
+
68
+    public function run($arguments) {
69
+        $offset = $arguments['offset'];
70
+        $stopAt = $arguments['stopAt'];
71
+
72
+        $this->logger->info('Building calendar index (' . $offset .'/' . $stopAt . ')');
73
+
74
+        $offset = $this->buildIndex($offset, $stopAt);
75
+
76
+        if ($offset >= $stopAt) {
77
+            $this->logger->info('Building calendar index done');
78
+        } else {
79
+            $this->jobList->add(self::class, [
80
+                'offset' => $offset,
81
+                'stopAt' => $stopAt
82
+            ]);
83
+            $this->logger->info('New building calendar index job scheduled with offset ' . $offset);
84
+        }
85
+    }
86
+
87
+    /**
88
+     * @param int $offset
89
+     * @param int $stopAt
90
+     * @return int
91
+     */
92
+    private function buildIndex($offset, $stopAt) {
93
+        $startTime = $this->timeFactory->getTime();
94
+
95
+        $query = $this->db->getQueryBuilder();
96
+        $query->select(['id', 'calendarid', 'uri', 'calendardata'])
97
+            ->from('calendarobjects')
98
+            ->where($query->expr()->lte('id', $query->createNamedParameter($stopAt)))
99
+            ->andWhere($query->expr()->gt('id', $query->createNamedParameter($offset)))
100
+            ->orderBy('id', 'ASC');
101
+
102
+        $stmt = $query->execute();
103
+        while($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
104
+            $offset = $row['id'];
105
+
106
+            $calendarData = $row['calendardata'];
107
+            if (is_resource($calendarData)) {
108
+                $calendarData = stream_get_contents($calendarData);
109
+            }
110
+
111
+            $this->calDavBackend->updateProperties($row['calendarid'], $row['uri'], $calendarData);
112
+
113
+            if (($this->timeFactory->getTime() - $startTime) > 15) {
114
+                return $offset;
115
+            }
116
+        }
117
+
118
+        return $stopAt;
119
+    }
120 120
 }
Please login to merge, or discard this patch.
apps/sharebymail/templates/settings-admin.php 2 patches
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -11,9 +11,9 @@
 block discarded – undo
11 11
 	<p class="settings-hint"><?php p($l->t('Allows users to share a personalized link to a file or folder by putting in an email address.')); ?></p>
12 12
 
13 13
 	<p>
14
-		<input id="sendPasswordMail" type="checkbox" class="checkbox" <?php if($_['sendPasswordMail']) p('checked'); ?> />
14
+		<input id="sendPasswordMail" type="checkbox" class="checkbox" <?php if ($_['sendPasswordMail']) p('checked'); ?> />
15 15
 		<label for="sendPasswordMail"><?php p($l->t('Send password by mail')); ?></label><br/>
16
-		<input id="enforcePasswordProtection" type="checkbox" class="checkbox" <?php if($_['enforcePasswordProtection']) p('checked'); ?> />
16
+		<input id="enforcePasswordProtection" type="checkbox" class="checkbox" <?php if ($_['enforcePasswordProtection']) p('checked'); ?> />
17 17
 		<label for="enforcePasswordProtection"><?php p($l->t('Enforce password protection')); ?></label>
18 18
 	</p>
19 19
 
Please login to merge, or discard this patch.
Braces   +8 added lines, -2 removed lines patch added patch discarded remove patch
@@ -11,9 +11,15 @@
 block discarded – undo
11 11
 	<p class="settings-hint"><?php p($l->t('Allows users to share a personalized link to a file or folder by putting in an email address.')); ?></p>
12 12
 
13 13
 	<p>
14
-		<input id="sendPasswordMail" type="checkbox" class="checkbox" <?php if($_['sendPasswordMail']) p('checked'); ?> />
14
+		<input id="sendPasswordMail" type="checkbox" class="checkbox" <?php if($_['sendPasswordMail']) {
15
+    p('checked');
16
+}
17
+?> />
15 18
 		<label for="sendPasswordMail"><?php p($l->t('Send password by mail')); ?></label><br/>
16
-		<input id="enforcePasswordProtection" type="checkbox" class="checkbox" <?php if($_['enforcePasswordProtection']) p('checked'); ?> />
19
+		<input id="enforcePasswordProtection" type="checkbox" class="checkbox" <?php if($_['enforcePasswordProtection']) {
20
+    p('checked');
21
+}
22
+?> />
17 23
 		<label for="enforcePasswordProtection"><?php p($l->t('Enforce password protection')); ?></label>
18 24
 	</p>
19 25
 
Please login to merge, or discard this patch.
apps/dav/lib/Connector/Sabre/TagsPlugin.php 2 patches
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -220,9 +220,9 @@  discard block
 block discarded – undo
220 220
 		)) {
221 221
 			// note: pre-fetching only supported for depth <= 1
222 222
 			$folderContent = $node->getChildren();
223
-			$fileIds[] = (int)$node->getId();
223
+			$fileIds[] = (int) $node->getId();
224 224
 			foreach ($folderContent as $info) {
225
-				$fileIds[] = (int)$info->getId();
225
+				$fileIds[] = (int) $info->getId();
226 226
 			}
227 227
 			$tags = $this->getTagger()->getTagsForObjects($fileIds);
228 228
 			if ($tags === false) {
@@ -278,7 +278,7 @@  discard block
 block discarded – undo
278 278
 		});
279 279
 
280 280
 		$propPatch->handle(self::FAVORITE_PROPERTYNAME, function($favState) use ($node) {
281
-			if ((int)$favState === 1 || $favState === 'true') {
281
+			if ((int) $favState === 1 || $favState === 'true') {
282 282
 				$this->getTagger()->tagAs($node->getId(), self::TAG_FAVORITE);
283 283
 			} else {
284 284
 				$this->getTagger()->unTag($node->getId(), self::TAG_FAVORITE);
Please login to merge, or discard this patch.
Indentation   +217 added lines, -217 removed lines patch added patch discarded remove patch
@@ -51,246 +51,246 @@
 block discarded – undo
51 51
 class TagsPlugin extends \Sabre\DAV\ServerPlugin
52 52
 {
53 53
 
54
-	// namespace
55
-	const NS_OWNCLOUD = 'http://owncloud.org/ns';
56
-	const TAGS_PROPERTYNAME = '{http://owncloud.org/ns}tags';
57
-	const FAVORITE_PROPERTYNAME = '{http://owncloud.org/ns}favorite';
58
-	const TAG_FAVORITE = '_$!<Favorite>!$_';
54
+    // namespace
55
+    const NS_OWNCLOUD = 'http://owncloud.org/ns';
56
+    const TAGS_PROPERTYNAME = '{http://owncloud.org/ns}tags';
57
+    const FAVORITE_PROPERTYNAME = '{http://owncloud.org/ns}favorite';
58
+    const TAG_FAVORITE = '_$!<Favorite>!$_';
59 59
 
60
-	/**
61
-	 * Reference to main server object
62
-	 *
63
-	 * @var \Sabre\DAV\Server
64
-	 */
65
-	private $server;
60
+    /**
61
+     * Reference to main server object
62
+     *
63
+     * @var \Sabre\DAV\Server
64
+     */
65
+    private $server;
66 66
 
67
-	/**
68
-	 * @var \OCP\ITagManager
69
-	 */
70
-	private $tagManager;
67
+    /**
68
+     * @var \OCP\ITagManager
69
+     */
70
+    private $tagManager;
71 71
 
72
-	/**
73
-	 * @var \OCP\ITags
74
-	 */
75
-	private $tagger;
72
+    /**
73
+     * @var \OCP\ITags
74
+     */
75
+    private $tagger;
76 76
 
77
-	/**
78
-	 * Array of file id to tags array
79
-	 * The null value means the cache wasn't initialized.
80
-	 *
81
-	 * @var array
82
-	 */
83
-	private $cachedTags;
77
+    /**
78
+     * Array of file id to tags array
79
+     * The null value means the cache wasn't initialized.
80
+     *
81
+     * @var array
82
+     */
83
+    private $cachedTags;
84 84
 
85
-	/**
86
-	 * @var \Sabre\DAV\Tree
87
-	 */
88
-	private $tree;
85
+    /**
86
+     * @var \Sabre\DAV\Tree
87
+     */
88
+    private $tree;
89 89
 
90
-	/**
91
-	 * @param \Sabre\DAV\Tree $tree tree
92
-	 * @param \OCP\ITagManager $tagManager tag manager
93
-	 */
94
-	public function __construct(\Sabre\DAV\Tree $tree, \OCP\ITagManager $tagManager) {
95
-		$this->tree = $tree;
96
-		$this->tagManager = $tagManager;
97
-		$this->tagger = null;
98
-		$this->cachedTags = array();
99
-	}
90
+    /**
91
+     * @param \Sabre\DAV\Tree $tree tree
92
+     * @param \OCP\ITagManager $tagManager tag manager
93
+     */
94
+    public function __construct(\Sabre\DAV\Tree $tree, \OCP\ITagManager $tagManager) {
95
+        $this->tree = $tree;
96
+        $this->tagManager = $tagManager;
97
+        $this->tagger = null;
98
+        $this->cachedTags = array();
99
+    }
100 100
 
101
-	/**
102
-	 * This initializes the plugin.
103
-	 *
104
-	 * This function is called by \Sabre\DAV\Server, after
105
-	 * addPlugin is called.
106
-	 *
107
-	 * This method should set up the required event subscriptions.
108
-	 *
109
-	 * @param \Sabre\DAV\Server $server
110
-	 * @return void
111
-	 */
112
-	public function initialize(\Sabre\DAV\Server $server) {
101
+    /**
102
+     * This initializes the plugin.
103
+     *
104
+     * This function is called by \Sabre\DAV\Server, after
105
+     * addPlugin is called.
106
+     *
107
+     * This method should set up the required event subscriptions.
108
+     *
109
+     * @param \Sabre\DAV\Server $server
110
+     * @return void
111
+     */
112
+    public function initialize(\Sabre\DAV\Server $server) {
113 113
 
114
-		$server->xml->namespaceMap[self::NS_OWNCLOUD] = 'oc';
115
-		$server->xml->elementMap[self::TAGS_PROPERTYNAME] = TagList::class;
114
+        $server->xml->namespaceMap[self::NS_OWNCLOUD] = 'oc';
115
+        $server->xml->elementMap[self::TAGS_PROPERTYNAME] = TagList::class;
116 116
 
117
-		$this->server = $server;
118
-		$this->server->on('propFind', array($this, 'handleGetProperties'));
119
-		$this->server->on('propPatch', array($this, 'handleUpdateProperties'));
120
-	}
117
+        $this->server = $server;
118
+        $this->server->on('propFind', array($this, 'handleGetProperties'));
119
+        $this->server->on('propPatch', array($this, 'handleUpdateProperties'));
120
+    }
121 121
 
122
-	/**
123
-	 * Returns the tagger
124
-	 *
125
-	 * @return \OCP\ITags tagger
126
-	 */
127
-	private function getTagger() {
128
-		if (!$this->tagger) {
129
-			$this->tagger = $this->tagManager->load('files');
130
-		}
131
-		return $this->tagger;
132
-	}
122
+    /**
123
+     * Returns the tagger
124
+     *
125
+     * @return \OCP\ITags tagger
126
+     */
127
+    private function getTagger() {
128
+        if (!$this->tagger) {
129
+            $this->tagger = $this->tagManager->load('files');
130
+        }
131
+        return $this->tagger;
132
+    }
133 133
 
134
-	/**
135
-	 * Returns tags and favorites.
136
-	 *
137
-	 * @param integer $fileId file id
138
-	 * @return array list($tags, $favorite) with $tags as tag array
139
-	 * and $favorite is a boolean whether the file was favorited
140
-	 */
141
-	private function getTagsAndFav($fileId) {
142
-		$isFav = false;
143
-		$tags = $this->getTags($fileId);
144
-		if ($tags) {
145
-			$favPos = array_search(self::TAG_FAVORITE, $tags);
146
-			if ($favPos !== false) {
147
-				$isFav = true;
148
-				unset($tags[$favPos]);
149
-			}
150
-		}
151
-		return array($tags, $isFav);
152
-	}
134
+    /**
135
+     * Returns tags and favorites.
136
+     *
137
+     * @param integer $fileId file id
138
+     * @return array list($tags, $favorite) with $tags as tag array
139
+     * and $favorite is a boolean whether the file was favorited
140
+     */
141
+    private function getTagsAndFav($fileId) {
142
+        $isFav = false;
143
+        $tags = $this->getTags($fileId);
144
+        if ($tags) {
145
+            $favPos = array_search(self::TAG_FAVORITE, $tags);
146
+            if ($favPos !== false) {
147
+                $isFav = true;
148
+                unset($tags[$favPos]);
149
+            }
150
+        }
151
+        return array($tags, $isFav);
152
+    }
153 153
 
154
-	/**
155
-	 * Returns tags for the given file id
156
-	 *
157
-	 * @param integer $fileId file id
158
-	 * @return array list of tags for that file
159
-	 */
160
-	private function getTags($fileId) {
161
-		if (isset($this->cachedTags[$fileId])) {
162
-			return $this->cachedTags[$fileId];
163
-		} else {
164
-			$tags = $this->getTagger()->getTagsForObjects(array($fileId));
165
-			if ($tags !== false) {
166
-				if (empty($tags)) {
167
-					return array();
168
-				}
169
-				return current($tags);
170
-			}
171
-		}
172
-		return null;
173
-	}
154
+    /**
155
+     * Returns tags for the given file id
156
+     *
157
+     * @param integer $fileId file id
158
+     * @return array list of tags for that file
159
+     */
160
+    private function getTags($fileId) {
161
+        if (isset($this->cachedTags[$fileId])) {
162
+            return $this->cachedTags[$fileId];
163
+        } else {
164
+            $tags = $this->getTagger()->getTagsForObjects(array($fileId));
165
+            if ($tags !== false) {
166
+                if (empty($tags)) {
167
+                    return array();
168
+                }
169
+                return current($tags);
170
+            }
171
+        }
172
+        return null;
173
+    }
174 174
 
175
-	/**
176
-	 * Updates the tags of the given file id
177
-	 *
178
-	 * @param int $fileId
179
-	 * @param array $tags array of tag strings
180
-	 */
181
-	private function updateTags($fileId, $tags) {
182
-		$tagger = $this->getTagger();
183
-		$currentTags = $this->getTags($fileId);
175
+    /**
176
+     * Updates the tags of the given file id
177
+     *
178
+     * @param int $fileId
179
+     * @param array $tags array of tag strings
180
+     */
181
+    private function updateTags($fileId, $tags) {
182
+        $tagger = $this->getTagger();
183
+        $currentTags = $this->getTags($fileId);
184 184
 
185
-		$newTags = array_diff($tags, $currentTags);
186
-		foreach ($newTags as $tag) {
187
-			if ($tag === self::TAG_FAVORITE) {
188
-				continue;
189
-			}
190
-			$tagger->tagAs($fileId, $tag);
191
-		}
192
-		$deletedTags = array_diff($currentTags, $tags);
193
-		foreach ($deletedTags as $tag) {
194
-			if ($tag === self::TAG_FAVORITE) {
195
-				continue;
196
-			}
197
-			$tagger->unTag($fileId, $tag);
198
-		}
199
-	}
185
+        $newTags = array_diff($tags, $currentTags);
186
+        foreach ($newTags as $tag) {
187
+            if ($tag === self::TAG_FAVORITE) {
188
+                continue;
189
+            }
190
+            $tagger->tagAs($fileId, $tag);
191
+        }
192
+        $deletedTags = array_diff($currentTags, $tags);
193
+        foreach ($deletedTags as $tag) {
194
+            if ($tag === self::TAG_FAVORITE) {
195
+                continue;
196
+            }
197
+            $tagger->unTag($fileId, $tag);
198
+        }
199
+    }
200 200
 
201
-	/**
202
-	 * Adds tags and favorites properties to the response,
203
-	 * if requested.
204
-	 *
205
-	 * @param PropFind $propFind
206
-	 * @param \Sabre\DAV\INode $node
207
-	 * @return void
208
-	 */
209
-	public function handleGetProperties(
210
-		PropFind $propFind,
211
-		\Sabre\DAV\INode $node
212
-	) {
213
-		if (!($node instanceof \OCA\DAV\Connector\Sabre\Node)) {
214
-			return;
215
-		}
201
+    /**
202
+     * Adds tags and favorites properties to the response,
203
+     * if requested.
204
+     *
205
+     * @param PropFind $propFind
206
+     * @param \Sabre\DAV\INode $node
207
+     * @return void
208
+     */
209
+    public function handleGetProperties(
210
+        PropFind $propFind,
211
+        \Sabre\DAV\INode $node
212
+    ) {
213
+        if (!($node instanceof \OCA\DAV\Connector\Sabre\Node)) {
214
+            return;
215
+        }
216 216
 
217
-		// need prefetch ?
218
-		if ($node instanceof \OCA\DAV\Connector\Sabre\Directory
219
-			&& $propFind->getDepth() !== 0
220
-			&& (!is_null($propFind->getStatus(self::TAGS_PROPERTYNAME))
221
-			|| !is_null($propFind->getStatus(self::FAVORITE_PROPERTYNAME))
222
-		)) {
223
-			// note: pre-fetching only supported for depth <= 1
224
-			$folderContent = $node->getChildren();
225
-			$fileIds[] = (int)$node->getId();
226
-			foreach ($folderContent as $info) {
227
-				$fileIds[] = (int)$info->getId();
228
-			}
229
-			$tags = $this->getTagger()->getTagsForObjects($fileIds);
230
-			if ($tags === false) {
231
-				// the tags API returns false on error...
232
-				$tags = array();
233
-			}
217
+        // need prefetch ?
218
+        if ($node instanceof \OCA\DAV\Connector\Sabre\Directory
219
+            && $propFind->getDepth() !== 0
220
+            && (!is_null($propFind->getStatus(self::TAGS_PROPERTYNAME))
221
+            || !is_null($propFind->getStatus(self::FAVORITE_PROPERTYNAME))
222
+        )) {
223
+            // note: pre-fetching only supported for depth <= 1
224
+            $folderContent = $node->getChildren();
225
+            $fileIds[] = (int)$node->getId();
226
+            foreach ($folderContent as $info) {
227
+                $fileIds[] = (int)$info->getId();
228
+            }
229
+            $tags = $this->getTagger()->getTagsForObjects($fileIds);
230
+            if ($tags === false) {
231
+                // the tags API returns false on error...
232
+                $tags = array();
233
+            }
234 234
 
235
-			$this->cachedTags = $this->cachedTags + $tags;
236
-			$emptyFileIds = array_diff($fileIds, array_keys($tags));
237
-			// also cache the ones that were not found
238
-			foreach ($emptyFileIds as $fileId) {
239
-				$this->cachedTags[$fileId] = [];
240
-			}
241
-		}
235
+            $this->cachedTags = $this->cachedTags + $tags;
236
+            $emptyFileIds = array_diff($fileIds, array_keys($tags));
237
+            // also cache the ones that were not found
238
+            foreach ($emptyFileIds as $fileId) {
239
+                $this->cachedTags[$fileId] = [];
240
+            }
241
+        }
242 242
 
243
-		$isFav = null;
243
+        $isFav = null;
244 244
 
245
-		$propFind->handle(self::TAGS_PROPERTYNAME, function() use (&$isFav, $node) {
246
-			list($tags, $isFav) = $this->getTagsAndFav($node->getId());
247
-			return new TagList($tags);
248
-		});
245
+        $propFind->handle(self::TAGS_PROPERTYNAME, function() use (&$isFav, $node) {
246
+            list($tags, $isFav) = $this->getTagsAndFav($node->getId());
247
+            return new TagList($tags);
248
+        });
249 249
 
250
-		$propFind->handle(self::FAVORITE_PROPERTYNAME, function() use ($isFav, $node) {
251
-			if (is_null($isFav)) {
252
-				list(, $isFav) = $this->getTagsAndFav($node->getId());
253
-			}
254
-			if ($isFav) {
255
-				return 1;
256
-			} else {
257
-				return 0;
258
-			}
259
-		});
260
-	}
250
+        $propFind->handle(self::FAVORITE_PROPERTYNAME, function() use ($isFav, $node) {
251
+            if (is_null($isFav)) {
252
+                list(, $isFav) = $this->getTagsAndFav($node->getId());
253
+            }
254
+            if ($isFav) {
255
+                return 1;
256
+            } else {
257
+                return 0;
258
+            }
259
+        });
260
+    }
261 261
 
262
-	/**
263
-	 * Updates tags and favorites properties, if applicable.
264
-	 *
265
-	 * @param string $path
266
-	 * @param PropPatch $propPatch
267
-	 *
268
-	 * @return void
269
-	 */
270
-	public function handleUpdateProperties($path, PropPatch $propPatch) {
271
-		$node = $this->tree->getNodeForPath($path);
272
-		if (!($node instanceof \OCA\DAV\Connector\Sabre\Node)) {
273
-			return;
274
-		}
262
+    /**
263
+     * Updates tags and favorites properties, if applicable.
264
+     *
265
+     * @param string $path
266
+     * @param PropPatch $propPatch
267
+     *
268
+     * @return void
269
+     */
270
+    public function handleUpdateProperties($path, PropPatch $propPatch) {
271
+        $node = $this->tree->getNodeForPath($path);
272
+        if (!($node instanceof \OCA\DAV\Connector\Sabre\Node)) {
273
+            return;
274
+        }
275 275
 
276
-		$propPatch->handle(self::TAGS_PROPERTYNAME, function($tagList) use ($node) {
277
-			$this->updateTags($node->getId(), $tagList->getTags());
278
-			return true;
279
-		});
276
+        $propPatch->handle(self::TAGS_PROPERTYNAME, function($tagList) use ($node) {
277
+            $this->updateTags($node->getId(), $tagList->getTags());
278
+            return true;
279
+        });
280 280
 
281
-		$propPatch->handle(self::FAVORITE_PROPERTYNAME, function($favState) use ($node) {
282
-			if ((int)$favState === 1 || $favState === 'true') {
283
-				$this->getTagger()->tagAs($node->getId(), self::TAG_FAVORITE);
284
-			} else {
285
-				$this->getTagger()->unTag($node->getId(), self::TAG_FAVORITE);
286
-			}
281
+        $propPatch->handle(self::FAVORITE_PROPERTYNAME, function($favState) use ($node) {
282
+            if ((int)$favState === 1 || $favState === 'true') {
283
+                $this->getTagger()->tagAs($node->getId(), self::TAG_FAVORITE);
284
+            } else {
285
+                $this->getTagger()->unTag($node->getId(), self::TAG_FAVORITE);
286
+            }
287 287
 
288
-			if (is_null($favState)) {
289
-				// confirm deletion
290
-				return 204;
291
-			}
288
+            if (is_null($favState)) {
289
+                // confirm deletion
290
+                return 204;
291
+            }
292 292
 
293
-			return 200;
294
-		});
295
-	}
293
+            return 200;
294
+        });
295
+    }
296 296
 }
Please login to merge, or discard this patch.
lib/private/App/AppStore/Bundles/BundleFetcher.php 2 patches
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -68,8 +68,8 @@
 block discarded – undo
68 68
 			$this->getBundles(),
69 69
 			$this->getDefaultInstallationBundle()
70 70
 		);
71
-		foreach($bundles as $bundle) {
72
-			if($bundle->getIdentifier() === $identifier) {
71
+		foreach ($bundles as $bundle) {
72
+			if ($bundle->getIdentifier() === $identifier) {
73 73
 				return $bundle;
74 74
 			}
75 75
 		}
Please login to merge, or discard this patch.
Indentation   +50 added lines, -50 removed lines patch added patch discarded remove patch
@@ -26,59 +26,59 @@
 block discarded – undo
26 26
 use OCP\IL10N;
27 27
 
28 28
 class BundleFetcher {
29
-	/** @var IL10N */
30
-	private $l10n;
29
+    /** @var IL10N */
30
+    private $l10n;
31 31
 
32
-	/**
33
-	 * @param IL10N $l10n
34
-	 */
35
-	public function __construct(IL10N $l10n) {
36
-		$this->l10n = $l10n;
37
-	}
32
+    /**
33
+     * @param IL10N $l10n
34
+     */
35
+    public function __construct(IL10N $l10n) {
36
+        $this->l10n = $l10n;
37
+    }
38 38
 
39
-	/**
40
-	 * @return Bundle[]
41
-	 */
42
-	public function getBundles() {
43
-		return [
44
-			new EnterpriseBundle($this->l10n),
45
-			new HubBundle($this->l10n),
46
-			new GroupwareBundle($this->l10n),
47
-			new SocialSharingBundle($this->l10n),
48
-			new EducationBundle($this->l10n),
49
-		];
50
-	}
39
+    /**
40
+     * @return Bundle[]
41
+     */
42
+    public function getBundles() {
43
+        return [
44
+            new EnterpriseBundle($this->l10n),
45
+            new HubBundle($this->l10n),
46
+            new GroupwareBundle($this->l10n),
47
+            new SocialSharingBundle($this->l10n),
48
+            new EducationBundle($this->l10n),
49
+        ];
50
+    }
51 51
 
52
-	/**
53
-	 * Bundles that should be installed by default after installation
54
-	 *
55
-	 * @return Bundle[]
56
-	 */
57
-	public function getDefaultInstallationBundle() {
58
-		return [
59
-			new CoreBundle($this->l10n),
60
-		];
61
-	}
52
+    /**
53
+     * Bundles that should be installed by default after installation
54
+     *
55
+     * @return Bundle[]
56
+     */
57
+    public function getDefaultInstallationBundle() {
58
+        return [
59
+            new CoreBundle($this->l10n),
60
+        ];
61
+    }
62 62
 
63
-	/**
64
-	 * Get the bundle with the specified identifier
65
-	 *
66
-	 * @param string $identifier
67
-	 * @return Bundle
68
-	 * @throws \BadMethodCallException If the bundle does not exist
69
-	 */
70
-	public function getBundleByIdentifier($identifier) {
71
-		/** @var Bundle[] $bundles */
72
-		$bundles = array_merge(
73
-			$this->getBundles(),
74
-			$this->getDefaultInstallationBundle()
75
-		);
76
-		foreach($bundles as $bundle) {
77
-			if($bundle->getIdentifier() === $identifier) {
78
-				return $bundle;
79
-			}
80
-		}
63
+    /**
64
+     * Get the bundle with the specified identifier
65
+     *
66
+     * @param string $identifier
67
+     * @return Bundle
68
+     * @throws \BadMethodCallException If the bundle does not exist
69
+     */
70
+    public function getBundleByIdentifier($identifier) {
71
+        /** @var Bundle[] $bundles */
72
+        $bundles = array_merge(
73
+            $this->getBundles(),
74
+            $this->getDefaultInstallationBundle()
75
+        );
76
+        foreach($bundles as $bundle) {
77
+            if($bundle->getIdentifier() === $identifier) {
78
+                return $bundle;
79
+            }
80
+        }
81 81
 
82
-		throw new \BadMethodCallException('Bundle with specified identifier does not exist');
83
-	}
82
+        throw new \BadMethodCallException('Bundle with specified identifier does not exist');
83
+    }
84 84
 }
Please login to merge, or discard this patch.
lib/public/BackgroundJob/IJobList.php 1 patch
Indentation   +86 added lines, -86 removed lines patch added patch discarded remove patch
@@ -32,100 +32,100 @@
 block discarded – undo
32 32
  * @since 7.0.0
33 33
  */
34 34
 interface IJobList {
35
-	/**
36
-	 * Add a job to the list
37
-	 *
38
-	 * @param \OCP\BackgroundJob\IJob|string $job
39
-	 * @param mixed $argument The argument to be passed to $job->run() when the job is exectured
40
-	 * @since 7.0.0
41
-	 */
42
-	public function add($job, $argument = null);
35
+    /**
36
+     * Add a job to the list
37
+     *
38
+     * @param \OCP\BackgroundJob\IJob|string $job
39
+     * @param mixed $argument The argument to be passed to $job->run() when the job is exectured
40
+     * @since 7.0.0
41
+     */
42
+    public function add($job, $argument = null);
43 43
 
44
-	/**
45
-	 * Remove a job from the list
46
-	 *
47
-	 * @param \OCP\BackgroundJob\IJob|string $job
48
-	 * @param mixed $argument
49
-	 * @since 7.0.0
50
-	 */
51
-	public function remove($job, $argument = null);
44
+    /**
45
+     * Remove a job from the list
46
+     *
47
+     * @param \OCP\BackgroundJob\IJob|string $job
48
+     * @param mixed $argument
49
+     * @since 7.0.0
50
+     */
51
+    public function remove($job, $argument = null);
52 52
 
53
-	/**
54
-	 * check if a job is in the list
55
-	 *
56
-	 * @param \OCP\BackgroundJob\IJob|string $job
57
-	 * @param mixed $argument
58
-	 * @return bool
59
-	 * @since 7.0.0
60
-	 */
61
-	public function has($job, $argument);
53
+    /**
54
+     * check if a job is in the list
55
+     *
56
+     * @param \OCP\BackgroundJob\IJob|string $job
57
+     * @param mixed $argument
58
+     * @return bool
59
+     * @since 7.0.0
60
+     */
61
+    public function has($job, $argument);
62 62
 
63
-	/**
64
-	 * get all jobs in the list
65
-	 *
66
-	 * @return \OCP\BackgroundJob\IJob[]
67
-	 * @since 7.0.0
68
-	 * @deprecated 9.0.0 - This method is dangerous since it can cause load and
69
-	 * memory problems when creating too many instances.
70
-	 */
71
-	public function getAll();
63
+    /**
64
+     * get all jobs in the list
65
+     *
66
+     * @return \OCP\BackgroundJob\IJob[]
67
+     * @since 7.0.0
68
+     * @deprecated 9.0.0 - This method is dangerous since it can cause load and
69
+     * memory problems when creating too many instances.
70
+     */
71
+    public function getAll();
72 72
 
73
-	/**
74
-	 * get the next job in the list
75
-	 *
76
-	 * @return \OCP\BackgroundJob\IJob|null
77
-	 * @since 7.0.0
78
-	 */
79
-	public function getNext();
73
+    /**
74
+     * get the next job in the list
75
+     *
76
+     * @return \OCP\BackgroundJob\IJob|null
77
+     * @since 7.0.0
78
+     */
79
+    public function getNext();
80 80
 
81
-	/**
82
-	 * @param int $id
83
-	 * @return \OCP\BackgroundJob\IJob|null
84
-	 * @since 7.0.0
85
-	 */
86
-	public function getById($id);
81
+    /**
82
+     * @param int $id
83
+     * @return \OCP\BackgroundJob\IJob|null
84
+     * @since 7.0.0
85
+     */
86
+    public function getById($id);
87 87
 
88
-	/**
89
-	 * set the job that was last ran to the current time
90
-	 *
91
-	 * @param \OCP\BackgroundJob\IJob $job
92
-	 * @since 7.0.0
93
-	 */
94
-	public function setLastJob(IJob $job);
88
+    /**
89
+     * set the job that was last ran to the current time
90
+     *
91
+     * @param \OCP\BackgroundJob\IJob $job
92
+     * @since 7.0.0
93
+     */
94
+    public function setLastJob(IJob $job);
95 95
 
96
-	/**
97
-	 * Remove the reservation for a job
98
-	 *
99
-	 * @param IJob $job
100
-	 * @since 9.1.0
101
-	 */
102
-	public function unlockJob(IJob $job);
96
+    /**
97
+     * Remove the reservation for a job
98
+     *
99
+     * @param IJob $job
100
+     * @since 9.1.0
101
+     */
102
+    public function unlockJob(IJob $job);
103 103
 
104
-	/**
105
-	 * get the id of the last ran job
106
-	 *
107
-	 * @return int
108
-	 * @since 7.0.0
109
-	 * @deprecated 9.1.0 - The functionality behind the value is deprecated, it
110
-	 *    only tells you which job finished last, but since we now allow multiple
111
-	 *    executors to run in parallel, it's not used to calculate the next job.
112
-	 */
113
-	public function getLastJob();
104
+    /**
105
+     * get the id of the last ran job
106
+     *
107
+     * @return int
108
+     * @since 7.0.0
109
+     * @deprecated 9.1.0 - The functionality behind the value is deprecated, it
110
+     *    only tells you which job finished last, but since we now allow multiple
111
+     *    executors to run in parallel, it's not used to calculate the next job.
112
+     */
113
+    public function getLastJob();
114 114
 
115
-	/**
116
-	 * set the lastRun of $job to now
117
-	 *
118
-	 * @param IJob $job
119
-	 * @since 7.0.0
120
-	 */
121
-	public function setLastRun(IJob $job);
115
+    /**
116
+     * set the lastRun of $job to now
117
+     *
118
+     * @param IJob $job
119
+     * @since 7.0.0
120
+     */
121
+    public function setLastRun(IJob $job);
122 122
 
123
-	/**
124
-	 * set the run duration of $job
125
-	 *
126
-	 * @param IJob $job
127
-	 * @param $timeTaken
128
-	 * @since 12.0.0
129
-	 */
130
-	public function setExecutionTime(IJob $job, $timeTaken);
123
+    /**
124
+     * set the run duration of $job
125
+     *
126
+     * @param IJob $job
127
+     * @param $timeTaken
128
+     * @since 12.0.0
129
+     */
130
+    public function setExecutionTime(IJob $job, $timeTaken);
131 131
 }
Please login to merge, or discard this patch.
apps/dav/lib/CalDAV/Search/Xml/Request/CalendarSearchReport.php 2 patches
Indentation   +129 added lines, -129 removed lines patch added patch discarded remove patch
@@ -35,133 +35,133 @@
 block discarded – undo
35 35
  */
36 36
 class CalendarSearchReport implements XmlDeserializable {
37 37
 
38
-	/**
39
-	 * An array with requested properties.
40
-	 *
41
-	 * @var array
42
-	 */
43
-	public $properties;
44
-
45
-	/**
46
-	 * List of property/component filters.
47
-	 *
48
-	 * @var array
49
-	 */
50
-	public $filters;
51
-
52
-	/**
53
-	 * @var int
54
-	 */
55
-	public $limit;
56
-
57
-	/**
58
-	 * @var int
59
-	 */
60
-	public $offset;
61
-
62
-	/**
63
-	 * The deserialize method is called during xml parsing.
64
-	 *
65
-	 * This method is called statically, this is because in theory this method
66
-	 * may be used as a type of constructor, or factory method.
67
-	 *
68
-	 * Often you want to return an instance of the current class, but you are
69
-	 * free to return other data as well.
70
-	 *
71
-	 * You are responsible for advancing the reader to the next element. Not
72
-	 * doing anything will result in a never-ending loop.
73
-	 *
74
-	 * If you just want to skip parsing for this element altogether, you can
75
-	 * just call $reader->next();
76
-	 *
77
-	 * $reader->parseInnerTree() will parse the entire sub-tree, and advance to
78
-	 * the next element.
79
-	 *
80
-	 * @param Reader $reader
81
-	 * @return mixed
82
-	 */
83
-	static function xmlDeserialize(Reader $reader) {
84
-		$elems = $reader->parseInnerTree([
85
-			'{http://nextcloud.com/ns}comp-filter'  => 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\CompFilter',
86
-			'{http://nextcloud.com/ns}prop-filter'  => 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\PropFilter',
87
-			'{http://nextcloud.com/ns}param-filter' => 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\ParamFilter',
88
-			'{http://nextcloud.com/ns}search-term'  => 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\SearchTermFilter',
89
-			'{http://nextcloud.com/ns}limit'        => 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\LimitFilter',
90
-			'{http://nextcloud.com/ns}offset'       => 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\OffsetFilter',
91
-			'{DAV:}prop'                            => 'Sabre\\Xml\\Element\\KeyValue',
92
-		]);
93
-
94
-		$newProps = [
95
-			'filters'    => [],
96
-			'properties' => [],
97
-			'limit'      => null,
98
-			'offset'     => null
99
-		];
100
-
101
-		if (!is_array($elems)) {
102
-			$elems = [];
103
-		}
104
-
105
-		foreach ($elems as $elem) {
106
-			switch ($elem['name']) {
107
-				case '{DAV:}prop':
108
-					$newProps['properties'] = array_keys($elem['value']);
109
-					break;
110
-				case '{' . SearchPlugin::NS_Nextcloud . '}filter':
111
-					foreach ($elem['value'] as $subElem) {
112
-						if ($subElem['name'] === '{' . SearchPlugin::NS_Nextcloud . '}comp-filter') {
113
-							if (!isset($newProps['filters']['comps']) || !is_array($newProps['filters']['comps'])) {
114
-								$newProps['filters']['comps'] = [];
115
-							}
116
-							$newProps['filters']['comps'][] = $subElem['value'];
117
-						} elseif ($subElem['name'] === '{' . SearchPlugin::NS_Nextcloud . '}prop-filter') {
118
-							if (!isset($newProps['filters']['props']) || !is_array($newProps['filters']['props'])) {
119
-								$newProps['filters']['props'] = [];
120
-							}
121
-							$newProps['filters']['props'][] = $subElem['value'];
122
-						} elseif ($subElem['name'] === '{' . SearchPlugin::NS_Nextcloud . '}param-filter') {
123
-							if (!isset($newProps['filters']['params']) || !is_array($newProps['filters']['params'])) {
124
-								$newProps['filters']['params'] = [];
125
-							}
126
-							$newProps['filters']['params'][] = $subElem['value'];
127
-						} elseif ($subElem['name'] === '{' . SearchPlugin::NS_Nextcloud . '}search-term') {
128
-							$newProps['filters']['search-term'] = $subElem['value'];
129
-						}
130
-					}
131
-					break;
132
-				case '{' . SearchPlugin::NS_Nextcloud . '}limit':
133
-					$newProps['limit'] = $elem['value'];
134
-					break;
135
-				case '{' . SearchPlugin::NS_Nextcloud . '}offset':
136
-					$newProps['offset'] = $elem['value'];
137
-					break;
138
-
139
-			}
140
-		}
141
-
142
-		if (empty($newProps['filters'])) {
143
-			throw new BadRequest('The {' . SearchPlugin::NS_Nextcloud . '}filter element is required for this request');
144
-		}
145
-
146
-		$propsOrParamsDefined = (!empty($newProps['filters']['props']) || !empty($newProps['filters']['params']));
147
-		$noCompsDefined = empty($newProps['filters']['comps']);
148
-		if ($propsOrParamsDefined && $noCompsDefined) {
149
-			throw new BadRequest('{' . SearchPlugin::NS_Nextcloud . '}prop-filter or {' . SearchPlugin::NS_Nextcloud . '}param-filter given without any {' . SearchPlugin::NS_Nextcloud . '}comp-filter');
150
-		}
151
-
152
-		if (!isset($newProps['filters']['search-term'])) {
153
-			throw new BadRequest('{' . SearchPlugin::NS_Nextcloud . '}search-term is required for this request');
154
-		}
155
-
156
-		if (empty($newProps['filters']['props']) && empty($newProps['filters']['params'])) {
157
-			throw new BadRequest('At least one{' . SearchPlugin::NS_Nextcloud . '}prop-filter or {' . SearchPlugin::NS_Nextcloud . '}param-filter is required for this request');
158
-		}
159
-
160
-
161
-		$obj = new self();
162
-		foreach ($newProps as $key => $value) {
163
-			$obj->$key = $value;
164
-		}
165
-		return $obj;
166
-	}
38
+    /**
39
+     * An array with requested properties.
40
+     *
41
+     * @var array
42
+     */
43
+    public $properties;
44
+
45
+    /**
46
+     * List of property/component filters.
47
+     *
48
+     * @var array
49
+     */
50
+    public $filters;
51
+
52
+    /**
53
+     * @var int
54
+     */
55
+    public $limit;
56
+
57
+    /**
58
+     * @var int
59
+     */
60
+    public $offset;
61
+
62
+    /**
63
+     * The deserialize method is called during xml parsing.
64
+     *
65
+     * This method is called statically, this is because in theory this method
66
+     * may be used as a type of constructor, or factory method.
67
+     *
68
+     * Often you want to return an instance of the current class, but you are
69
+     * free to return other data as well.
70
+     *
71
+     * You are responsible for advancing the reader to the next element. Not
72
+     * doing anything will result in a never-ending loop.
73
+     *
74
+     * If you just want to skip parsing for this element altogether, you can
75
+     * just call $reader->next();
76
+     *
77
+     * $reader->parseInnerTree() will parse the entire sub-tree, and advance to
78
+     * the next element.
79
+     *
80
+     * @param Reader $reader
81
+     * @return mixed
82
+     */
83
+    static function xmlDeserialize(Reader $reader) {
84
+        $elems = $reader->parseInnerTree([
85
+            '{http://nextcloud.com/ns}comp-filter'  => 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\CompFilter',
86
+            '{http://nextcloud.com/ns}prop-filter'  => 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\PropFilter',
87
+            '{http://nextcloud.com/ns}param-filter' => 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\ParamFilter',
88
+            '{http://nextcloud.com/ns}search-term'  => 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\SearchTermFilter',
89
+            '{http://nextcloud.com/ns}limit'        => 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\LimitFilter',
90
+            '{http://nextcloud.com/ns}offset'       => 'OCA\\DAV\\CalDAV\\Search\\Xml\\Filter\\OffsetFilter',
91
+            '{DAV:}prop'                            => 'Sabre\\Xml\\Element\\KeyValue',
92
+        ]);
93
+
94
+        $newProps = [
95
+            'filters'    => [],
96
+            'properties' => [],
97
+            'limit'      => null,
98
+            'offset'     => null
99
+        ];
100
+
101
+        if (!is_array($elems)) {
102
+            $elems = [];
103
+        }
104
+
105
+        foreach ($elems as $elem) {
106
+            switch ($elem['name']) {
107
+                case '{DAV:}prop':
108
+                    $newProps['properties'] = array_keys($elem['value']);
109
+                    break;
110
+                case '{' . SearchPlugin::NS_Nextcloud . '}filter':
111
+                    foreach ($elem['value'] as $subElem) {
112
+                        if ($subElem['name'] === '{' . SearchPlugin::NS_Nextcloud . '}comp-filter') {
113
+                            if (!isset($newProps['filters']['comps']) || !is_array($newProps['filters']['comps'])) {
114
+                                $newProps['filters']['comps'] = [];
115
+                            }
116
+                            $newProps['filters']['comps'][] = $subElem['value'];
117
+                        } elseif ($subElem['name'] === '{' . SearchPlugin::NS_Nextcloud . '}prop-filter') {
118
+                            if (!isset($newProps['filters']['props']) || !is_array($newProps['filters']['props'])) {
119
+                                $newProps['filters']['props'] = [];
120
+                            }
121
+                            $newProps['filters']['props'][] = $subElem['value'];
122
+                        } elseif ($subElem['name'] === '{' . SearchPlugin::NS_Nextcloud . '}param-filter') {
123
+                            if (!isset($newProps['filters']['params']) || !is_array($newProps['filters']['params'])) {
124
+                                $newProps['filters']['params'] = [];
125
+                            }
126
+                            $newProps['filters']['params'][] = $subElem['value'];
127
+                        } elseif ($subElem['name'] === '{' . SearchPlugin::NS_Nextcloud . '}search-term') {
128
+                            $newProps['filters']['search-term'] = $subElem['value'];
129
+                        }
130
+                    }
131
+                    break;
132
+                case '{' . SearchPlugin::NS_Nextcloud . '}limit':
133
+                    $newProps['limit'] = $elem['value'];
134
+                    break;
135
+                case '{' . SearchPlugin::NS_Nextcloud . '}offset':
136
+                    $newProps['offset'] = $elem['value'];
137
+                    break;
138
+
139
+            }
140
+        }
141
+
142
+        if (empty($newProps['filters'])) {
143
+            throw new BadRequest('The {' . SearchPlugin::NS_Nextcloud . '}filter element is required for this request');
144
+        }
145
+
146
+        $propsOrParamsDefined = (!empty($newProps['filters']['props']) || !empty($newProps['filters']['params']));
147
+        $noCompsDefined = empty($newProps['filters']['comps']);
148
+        if ($propsOrParamsDefined && $noCompsDefined) {
149
+            throw new BadRequest('{' . SearchPlugin::NS_Nextcloud . '}prop-filter or {' . SearchPlugin::NS_Nextcloud . '}param-filter given without any {' . SearchPlugin::NS_Nextcloud . '}comp-filter');
150
+        }
151
+
152
+        if (!isset($newProps['filters']['search-term'])) {
153
+            throw new BadRequest('{' . SearchPlugin::NS_Nextcloud . '}search-term is required for this request');
154
+        }
155
+
156
+        if (empty($newProps['filters']['props']) && empty($newProps['filters']['params'])) {
157
+            throw new BadRequest('At least one{' . SearchPlugin::NS_Nextcloud . '}prop-filter or {' . SearchPlugin::NS_Nextcloud . '}param-filter is required for this request');
158
+        }
159
+
160
+
161
+        $obj = new self();
162
+        foreach ($newProps as $key => $value) {
163
+            $obj->$key = $value;
164
+        }
165
+        return $obj;
166
+    }
167 167
 }
Please login to merge, or discard this patch.
Spacing   +11 added lines, -11 removed lines patch added patch discarded remove patch
@@ -107,32 +107,32 @@  discard block
 block discarded – undo
107 107
 				case '{DAV:}prop':
108 108
 					$newProps['properties'] = array_keys($elem['value']);
109 109
 					break;
110
-				case '{' . SearchPlugin::NS_Nextcloud . '}filter':
110
+				case '{'.SearchPlugin::NS_Nextcloud.'}filter':
111 111
 					foreach ($elem['value'] as $subElem) {
112
-						if ($subElem['name'] === '{' . SearchPlugin::NS_Nextcloud . '}comp-filter') {
112
+						if ($subElem['name'] === '{'.SearchPlugin::NS_Nextcloud.'}comp-filter') {
113 113
 							if (!isset($newProps['filters']['comps']) || !is_array($newProps['filters']['comps'])) {
114 114
 								$newProps['filters']['comps'] = [];
115 115
 							}
116 116
 							$newProps['filters']['comps'][] = $subElem['value'];
117
-						} elseif ($subElem['name'] === '{' . SearchPlugin::NS_Nextcloud . '}prop-filter') {
117
+						} elseif ($subElem['name'] === '{'.SearchPlugin::NS_Nextcloud.'}prop-filter') {
118 118
 							if (!isset($newProps['filters']['props']) || !is_array($newProps['filters']['props'])) {
119 119
 								$newProps['filters']['props'] = [];
120 120
 							}
121 121
 							$newProps['filters']['props'][] = $subElem['value'];
122
-						} elseif ($subElem['name'] === '{' . SearchPlugin::NS_Nextcloud . '}param-filter') {
122
+						} elseif ($subElem['name'] === '{'.SearchPlugin::NS_Nextcloud.'}param-filter') {
123 123
 							if (!isset($newProps['filters']['params']) || !is_array($newProps['filters']['params'])) {
124 124
 								$newProps['filters']['params'] = [];
125 125
 							}
126 126
 							$newProps['filters']['params'][] = $subElem['value'];
127
-						} elseif ($subElem['name'] === '{' . SearchPlugin::NS_Nextcloud . '}search-term') {
127
+						} elseif ($subElem['name'] === '{'.SearchPlugin::NS_Nextcloud.'}search-term') {
128 128
 							$newProps['filters']['search-term'] = $subElem['value'];
129 129
 						}
130 130
 					}
131 131
 					break;
132
-				case '{' . SearchPlugin::NS_Nextcloud . '}limit':
132
+				case '{'.SearchPlugin::NS_Nextcloud.'}limit':
133 133
 					$newProps['limit'] = $elem['value'];
134 134
 					break;
135
-				case '{' . SearchPlugin::NS_Nextcloud . '}offset':
135
+				case '{'.SearchPlugin::NS_Nextcloud.'}offset':
136 136
 					$newProps['offset'] = $elem['value'];
137 137
 					break;
138 138
 
@@ -140,21 +140,21 @@  discard block
 block discarded – undo
140 140
 		}
141 141
 
142 142
 		if (empty($newProps['filters'])) {
143
-			throw new BadRequest('The {' . SearchPlugin::NS_Nextcloud . '}filter element is required for this request');
143
+			throw new BadRequest('The {'.SearchPlugin::NS_Nextcloud.'}filter element is required for this request');
144 144
 		}
145 145
 
146 146
 		$propsOrParamsDefined = (!empty($newProps['filters']['props']) || !empty($newProps['filters']['params']));
147 147
 		$noCompsDefined = empty($newProps['filters']['comps']);
148 148
 		if ($propsOrParamsDefined && $noCompsDefined) {
149
-			throw new BadRequest('{' . SearchPlugin::NS_Nextcloud . '}prop-filter or {' . SearchPlugin::NS_Nextcloud . '}param-filter given without any {' . SearchPlugin::NS_Nextcloud . '}comp-filter');
149
+			throw new BadRequest('{'.SearchPlugin::NS_Nextcloud.'}prop-filter or {'.SearchPlugin::NS_Nextcloud.'}param-filter given without any {'.SearchPlugin::NS_Nextcloud.'}comp-filter');
150 150
 		}
151 151
 
152 152
 		if (!isset($newProps['filters']['search-term'])) {
153
-			throw new BadRequest('{' . SearchPlugin::NS_Nextcloud . '}search-term is required for this request');
153
+			throw new BadRequest('{'.SearchPlugin::NS_Nextcloud.'}search-term is required for this request');
154 154
 		}
155 155
 
156 156
 		if (empty($newProps['filters']['props']) && empty($newProps['filters']['params'])) {
157
-			throw new BadRequest('At least one{' . SearchPlugin::NS_Nextcloud . '}prop-filter or {' . SearchPlugin::NS_Nextcloud . '}param-filter is required for this request');
157
+			throw new BadRequest('At least one{'.SearchPlugin::NS_Nextcloud.'}prop-filter or {'.SearchPlugin::NS_Nextcloud.'}param-filter is required for this request');
158 158
 		}
159 159
 
160 160
 
Please login to merge, or discard this patch.