Completed
Pull Request — master (#1234)
by Christoph
14:33
created
settings/users.php 2 patches
Indentation   +38 added lines, -38 removed lines patch added patch discarded remove patch
@@ -46,13 +46,13 @@  discard block
 block discarded – undo
46 46
 $sortGroupsBy = \OC\Group\MetaData::SORT_USERCOUNT;
47 47
 
48 48
 if (\OC_App::isEnabled('user_ldap')) {
49
-	$isLDAPUsed =
50
-		   $groupManager->isBackendUsed('\OCA\User_LDAP\Group_LDAP')
51
-		|| $groupManager->isBackendUsed('\OCA\User_LDAP\Group_Proxy');
52
-	if ($isLDAPUsed) {
53
-		// LDAP user count can be slow, so we sort by group name here
54
-		$sortGroupsBy = \OC\Group\MetaData::SORT_GROUPNAME;
55
-	}
49
+    $isLDAPUsed =
50
+            $groupManager->isBackendUsed('\OCA\User_LDAP\Group_LDAP')
51
+        || $groupManager->isBackendUsed('\OCA\User_LDAP\Group_Proxy');
52
+    if ($isLDAPUsed) {
53
+        // LDAP user count can be slow, so we sort by group name here
54
+        $sortGroupsBy = \OC\Group\MetaData::SORT_GROUPNAME;
55
+    }
56 56
 }
57 57
 
58 58
 $config = \OC::$server->getConfig();
@@ -62,62 +62,62 @@  discard block
 block discarded – undo
62 62
 $isDisabled = !OC_User::isEnabled(OC_User::getUser());
63 63
 
64 64
 $groupsInfo = new \OC\Group\MetaData(
65
-	OC_User::getUser(),
66
-	$isAdmin,
67
-	$groupManager,
68
-	\OC::$server->getUserSession()
65
+    OC_User::getUser(),
66
+    $isAdmin,
67
+    $groupManager,
68
+    \OC::$server->getUserSession()
69 69
 );
70 70
 
71 71
 $groupsInfo->setSorting($sortGroupsBy);
72 72
 list($adminGroup, $groups) = $groupsInfo->get();
73 73
 
74 74
 $recoveryAdminEnabled = OC_App::isEnabled('encryption') &&
75
-					    $config->getAppValue( 'encryption', 'recoveryAdminEnabled', null );
75
+                        $config->getAppValue( 'encryption', 'recoveryAdminEnabled', null );
76 76
 
77 77
 if($isAdmin) {
78
-	$subAdmins = \OC::$server->getGroupManager()->getSubAdmin()->getAllSubAdmins();
79
-	// New class returns IUser[] so convert back
80
-	$result = [];
81
-	foreach ($subAdmins as $subAdmin) {
82
-		$result[] = [
83
-			'gid' => $subAdmin['group']->getGID(),
84
-			'uid' => $subAdmin['user']->getUID(),
85
-		];
86
-	}
87
-	$subAdmins = $result;
78
+    $subAdmins = \OC::$server->getGroupManager()->getSubAdmin()->getAllSubAdmins();
79
+    // New class returns IUser[] so convert back
80
+    $result = [];
81
+    foreach ($subAdmins as $subAdmin) {
82
+        $result[] = [
83
+            'gid' => $subAdmin['group']->getGID(),
84
+            'uid' => $subAdmin['user']->getUID(),
85
+        ];
86
+    }
87
+    $subAdmins = $result;
88 88
 }else{
89
-	/* Retrieve group IDs from $groups array, so we can pass that information into OC_Group::displayNamesInGroups() */
90
-	$gids = array();
91
-	foreach($groups as $group) {
92
-		if (isset($group['id'])) {
93
-			$gids[] = $group['id'];
94
-		}
95
-	}
96
-	$subAdmins = false;
89
+    /* Retrieve group IDs from $groups array, so we can pass that information into OC_Group::displayNamesInGroups() */
90
+    $gids = array();
91
+    foreach($groups as $group) {
92
+        if (isset($group['id'])) {
93
+            $gids[] = $group['id'];
94
+        }
95
+    }
96
+    $subAdmins = false;
97 97
 }
98 98
 $disabledUsers = 0;
99 99
 foreach (OC_User::getUsers() as $uid) {
100
-	if(!$userManager->get($uid)->isEnabled()) {
101
-		$disabledUsers++;
102
-	}
100
+    if(!$userManager->get($uid)->isEnabled()) {
101
+        $disabledUsers++;
102
+    }
103 103
 }
104 104
 $disabledUsersGroup = array(
105
-	'id' => '_disabledUsers',
106
-	'name' => '_disabledUsers',
107
-	'usercount' => $disabledUsers
105
+    'id' => '_disabledUsers',
106
+    'name' => '_disabledUsers',
107
+    'usercount' => $disabledUsers
108 108
 );
109 109
 
110 110
 // load preset quotas
111 111
 $quotaPreset=$config->getAppValue('files', 'quota_preset', '1 GB, 5 GB, 10 GB');
112 112
 $quotaPreset=explode(',', $quotaPreset);
113 113
 foreach($quotaPreset as &$preset) {
114
-	$preset=trim($preset);
114
+    $preset=trim($preset);
115 115
 }
116 116
 $quotaPreset=array_diff($quotaPreset, array('default', 'none'));
117 117
 
118 118
 $defaultQuota=$config->getAppValue('files', 'default_quota', 'none');
119 119
 $defaultQuotaIsUserDefined=array_search($defaultQuota, $quotaPreset)===false
120
-	&& array_search($defaultQuota, array('none', 'default'))===false;
120
+    && array_search($defaultQuota, array('none', 'default'))===false;
121 121
 
122 122
 \OC::$server->getEventDispatcher()->dispatch('OC\Settings\Users::loadAdditionalScripts');
123 123
 
Please login to merge, or discard this patch.
Spacing   +14 added lines, -14 removed lines patch added patch discarded remove patch
@@ -72,9 +72,9 @@  discard block
 block discarded – undo
72 72
 list($adminGroup, $groups) = $groupsInfo->get();
73 73
 
74 74
 $recoveryAdminEnabled = OC_App::isEnabled('encryption') &&
75
-					    $config->getAppValue( 'encryption', 'recoveryAdminEnabled', null );
75
+					    $config->getAppValue('encryption', 'recoveryAdminEnabled', null);
76 76
 
77
-if($isAdmin) {
77
+if ($isAdmin) {
78 78
 	$subAdmins = \OC::$server->getGroupManager()->getSubAdmin()->getAllSubAdmins();
79 79
 	// New class returns IUser[] so convert back
80 80
 	$result = [];
@@ -85,10 +85,10 @@  discard block
 block discarded – undo
85 85
 		];
86 86
 	}
87 87
 	$subAdmins = $result;
88
-}else{
88
+} else {
89 89
 	/* Retrieve group IDs from $groups array, so we can pass that information into OC_Group::displayNamesInGroups() */
90 90
 	$gids = array();
91
-	foreach($groups as $group) {
91
+	foreach ($groups as $group) {
92 92
 		if (isset($group['id'])) {
93 93
 			$gids[] = $group['id'];
94 94
 		}
@@ -97,7 +97,7 @@  discard block
 block discarded – undo
97 97
 }
98 98
 $disabledUsers = 0;
99 99
 foreach (OC_User::getUsers() as $uid) {
100
-	if(!$userManager->get($uid)->isEnabled()) {
100
+	if (!$userManager->get($uid)->isEnabled()) {
101 101
 		$disabledUsers++;
102 102
 	}
103 103
 }
@@ -108,16 +108,16 @@  discard block
 block discarded – undo
108 108
 );
109 109
 
110 110
 // load preset quotas
111
-$quotaPreset=$config->getAppValue('files', 'quota_preset', '1 GB, 5 GB, 10 GB');
112
-$quotaPreset=explode(',', $quotaPreset);
113
-foreach($quotaPreset as &$preset) {
114
-	$preset=trim($preset);
111
+$quotaPreset = $config->getAppValue('files', 'quota_preset', '1 GB, 5 GB, 10 GB');
112
+$quotaPreset = explode(',', $quotaPreset);
113
+foreach ($quotaPreset as &$preset) {
114
+	$preset = trim($preset);
115 115
 }
116
-$quotaPreset=array_diff($quotaPreset, array('default', 'none'));
116
+$quotaPreset = array_diff($quotaPreset, array('default', 'none'));
117 117
 
118
-$defaultQuota=$config->getAppValue('files', 'default_quota', 'none');
119
-$defaultQuotaIsUserDefined=array_search($defaultQuota, $quotaPreset)===false
120
-	&& array_search($defaultQuota, array('none', 'default'))===false;
118
+$defaultQuota = $config->getAppValue('files', 'default_quota', 'none');
119
+$defaultQuotaIsUserDefined = array_search($defaultQuota, $quotaPreset) === false
120
+	&& array_search($defaultQuota, array('none', 'default')) === false;
121 121
 
122 122
 \OC::$server->getEventDispatcher()->dispatch('OC\Settings\Users::loadAdditionalScripts');
123 123
 
@@ -126,7 +126,7 @@  discard block
 block discarded – undo
126 126
 $tmpl->assign('sortGroups', $sortGroupsBy);
127 127
 $tmpl->assign('adminGroup', $adminGroup);
128 128
 $tmpl->assign('disabledUsersGroup', $disabledUsersGroup);
129
-$tmpl->assign('isAdmin', (int)$isAdmin);
129
+$tmpl->assign('isAdmin', (int) $isAdmin);
130 130
 $tmpl->assign('subadmins', $subAdmins);
131 131
 $tmpl->assign('numofgroups', count($groups) + count($adminGroup));
132 132
 $tmpl->assign('quota_preset', $quotaPreset);
Please login to merge, or discard this patch.
settings/Controller/UsersController.php 2 patches
Indentation   +885 added lines, -885 removed lines patch added patch discarded remove patch
@@ -54,890 +54,890 @@
 block discarded – undo
54 54
  * @package OC\Settings\Controller
55 55
  */
56 56
 class UsersController extends Controller {
57
-	/** @var IL10N */
58
-	private $l10n;
59
-	/** @var IUserSession */
60
-	private $userSession;
61
-	/** @var bool */
62
-	private $isAdmin;
63
-	/** @var IUserManager */
64
-	private $userManager;
65
-	/** @var IGroupManager */
66
-	private $groupManager;
67
-	/** @var IConfig */
68
-	private $config;
69
-	/** @var ILogger */
70
-	private $log;
71
-	/** @var IMailer */
72
-	private $mailer;
73
-	/** @var bool contains the state of the encryption app */
74
-	private $isEncryptionAppEnabled;
75
-	/** @var bool contains the state of the admin recovery setting */
76
-	private $isRestoreEnabled = false;
77
-	/** @var IAvatarManager */
78
-	private $avatarManager;
79
-	/** @var AccountManager */
80
-	private $accountManager;
81
-	/** @var ISecureRandom */
82
-	private $secureRandom;
83
-	/** @var NewUserMailHelper */
84
-	private $newUserMailHelper;
85
-
86
-	/**
87
-	 * @param string $appName
88
-	 * @param IRequest $request
89
-	 * @param IUserManager $userManager
90
-	 * @param IGroupManager $groupManager
91
-	 * @param IUserSession $userSession
92
-	 * @param IConfig $config
93
-	 * @param bool $isAdmin
94
-	 * @param IL10N $l10n
95
-	 * @param ILogger $log
96
-	 * @param IMailer $mailer
97
-	 * @param IURLGenerator $urlGenerator
98
-	 * @param IAppManager $appManager
99
-	 * @param IAvatarManager $avatarManager
100
-	 * @param AccountManager $accountManager
101
-	 * @param ISecureRandom $secureRandom
102
-	 * @param NewUserMailHelper $newUserMailHelper
103
-	 */
104
-	public function __construct($appName,
105
-								IRequest $request,
106
-								IUserManager $userManager,
107
-								IGroupManager $groupManager,
108
-								IUserSession $userSession,
109
-								IConfig $config,
110
-								$isAdmin,
111
-								IL10N $l10n,
112
-								ILogger $log,
113
-								IMailer $mailer,
114
-								IURLGenerator $urlGenerator,
115
-								IAppManager $appManager,
116
-								IAvatarManager $avatarManager,
117
-								AccountManager $accountManager,
118
-								ISecureRandom $secureRandom,
119
-								NewUserMailHelper $newUserMailHelper) {
120
-		parent::__construct($appName, $request);
121
-		$this->userManager = $userManager;
122
-		$this->groupManager = $groupManager;
123
-		$this->userSession = $userSession;
124
-		$this->config = $config;
125
-		$this->isAdmin = $isAdmin;
126
-		$this->l10n = $l10n;
127
-		$this->log = $log;
128
-		$this->mailer = $mailer;
129
-		$this->avatarManager = $avatarManager;
130
-		$this->accountManager = $accountManager;
131
-		$this->secureRandom = $secureRandom;
132
-		$this->newUserMailHelper = $newUserMailHelper;
133
-
134
-		// check for encryption state - TODO see formatUserForIndex
135
-		$this->isEncryptionAppEnabled = $appManager->isEnabledForUser('encryption');
136
-		if($this->isEncryptionAppEnabled) {
137
-			// putting this directly in empty is possible in PHP 5.5+
138
-			$result = $config->getAppValue('encryption', 'recoveryAdminEnabled', 0);
139
-			$this->isRestoreEnabled = !empty($result);
140
-		}
141
-	}
142
-
143
-	/**
144
-	 * @param IUser $user
145
-	 * @param array $userGroups
146
-	 * @return array
147
-	 */
148
-	private function formatUserForIndex(IUser $user, array $userGroups = null) {
149
-
150
-		// TODO: eliminate this encryption specific code below and somehow
151
-		// hook in additional user info from other apps
152
-
153
-		// recovery isn't possible if admin or user has it disabled and encryption
154
-		// is enabled - so we eliminate the else paths in the conditional tree
155
-		// below
156
-		$restorePossible = false;
157
-
158
-		if ($this->isEncryptionAppEnabled) {
159
-			if ($this->isRestoreEnabled) {
160
-				// check for the users recovery setting
161
-				$recoveryMode = $this->config->getUserValue($user->getUID(), 'encryption', 'recoveryEnabled', '0');
162
-				// method call inside empty is possible with PHP 5.5+
163
-				$recoveryModeEnabled = !empty($recoveryMode);
164
-				if ($recoveryModeEnabled) {
165
-					// user also has recovery mode enabled
166
-					$restorePossible = true;
167
-				}
168
-			}
169
-		} else {
170
-			// recovery is possible if encryption is disabled (plain files are
171
-			// available)
172
-			$restorePossible = true;
173
-		}
174
-
175
-		$subAdminGroups = $this->groupManager->getSubAdmin()->getSubAdminsGroups($user);
176
-		foreach($subAdminGroups as $key => $subAdminGroup) {
177
-			$subAdminGroups[$key] = $subAdminGroup->getGID();
178
-		}
179
-
180
-		$displayName = $user->getEMailAddress();
181
-		if (is_null($displayName)) {
182
-			$displayName = '';
183
-		}
184
-
185
-		$avatarAvailable = false;
186
-		try {
187
-			$avatarAvailable = $this->avatarManager->getAvatar($user->getUID())->exists();
188
-		} catch (\Exception $e) {
189
-			//No avatar yet
190
-		}
191
-
192
-		return [
193
-			'name' => $user->getUID(),
194
-			'displayname' => $user->getDisplayName(),
195
-			'groups' => (empty($userGroups)) ? $this->groupManager->getUserGroupIds($user) : $userGroups,
196
-			'subadmin' => $subAdminGroups,
197
-			'quota' => $user->getQuota(),
198
-			'storageLocation' => $user->getHome(),
199
-			'lastLogin' => $user->getLastLogin() * 1000,
200
-			'backend' => $user->getBackendClassName(),
201
-			'email' => $displayName,
202
-			'isRestoreDisabled' => !$restorePossible,
203
-			'isAvatarAvailable' => $avatarAvailable,
204
-			'isEnabled' => $user->isEnabled(),
205
-		];
206
-	}
207
-
208
-	/**
209
-	 * @param array $userIDs Array with schema [$uid => $displayName]
210
-	 * @return IUser[]
211
-	 */
212
-	private function getUsersForUID(array $userIDs) {
213
-		$users = [];
214
-		foreach ($userIDs as $uid => $displayName) {
215
-			$users[$uid] = $this->userManager->get($uid);
216
-		}
217
-		return $users;
218
-	}
219
-
220
-	/**
221
-	 * @NoAdminRequired
222
-	 *
223
-	 * @param int $offset
224
-	 * @param int $limit
225
-	 * @param string $gid GID to filter for
226
-	 * @param string $pattern Pattern to search for in the username
227
-	 * @param string $backend Backend to filter for (class-name)
228
-	 * @return DataResponse
229
-	 *
230
-	 * TODO: Tidy up and write unit tests - code is mainly static method calls
231
-	 */
232
-	public function index($offset = 0, $limit = 10, $gid = '', $pattern = '', $backend = '') {
233
-		// Remove backends
234
-		if(!empty($backend)) {
235
-			$activeBackends = $this->userManager->getBackends();
236
-			$this->userManager->clearBackends();
237
-			foreach($activeBackends as $singleActiveBackend) {
238
-				if($backend === get_class($singleActiveBackend)) {
239
-					$this->userManager->registerBackend($singleActiveBackend);
240
-					break;
241
-				}
242
-			}
243
-		}
244
-
245
-		$users = [];
246
-		if ($this->isAdmin) {
247
-			if($gid !== '' && $gid !== '_disabledUsers') {
248
-				$batch = $this->getUsersForUID($this->groupManager->displayNamesInGroup($gid, $pattern, $limit, $offset));
249
-			} else {
250
-				$batch = $this->userManager->search($pattern, $limit, $offset);
251
-			}
252
-
253
-			foreach ($batch as $user) {
254
-				if( ($gid !== '_disabledUsers' && $user->isEnabled()) ||
255
-					($gid === '_disabledUsers' && !$user->isEnabled())
256
-				) {
257
-					$users[] = $this->formatUserForIndex($user);
258
-				}
259
-			}
260
-
261
-		} else {
262
-			$subAdminOfGroups = $this->groupManager->getSubAdmin()->getSubAdminsGroups($this->userSession->getUser());
263
-			// New class returns IGroup[] so convert back
264
-			$gids = [];
265
-			foreach ($subAdminOfGroups as $group) {
266
-				$gids[] = $group->getGID();
267
-			}
268
-			$subAdminOfGroups = $gids;
269
-
270
-			// Set the $gid parameter to an empty value if the subadmin has no rights to access a specific group
271
-			if($gid !== '' && $gid !== '_disabledUsers' && !in_array($gid, $subAdminOfGroups)) {
272
-				$gid = '';
273
-			}
274
-
275
-			// Batch all groups the user is subadmin of when a group is specified
276
-			$batch = [];
277
-			if($gid === '') {
278
-				foreach($subAdminOfGroups as $group) {
279
-					$groupUsers = $this->groupManager->displayNamesInGroup($group, $pattern, $limit, $offset);
280
-
281
-					foreach($groupUsers as $uid => $displayName) {
282
-						$batch[$uid] = $displayName;
283
-					}
284
-				}
285
-			} else {
286
-				$batch = $this->groupManager->displayNamesInGroup($gid, $pattern, $limit, $offset);
287
-			}
288
-			$batch = $this->getUsersForUID($batch);
289
-
290
-			foreach ($batch as $user) {
291
-				// Only add the groups, this user is a subadmin of
292
-				$userGroups = array_values(array_intersect(
293
-					$this->groupManager->getUserGroupIds($user),
294
-					$subAdminOfGroups
295
-				));
296
-				if( ($gid !== '_disabledUsers' && $user->isEnabled()) ||
297
-					($gid === '_disabledUsers' && !$user->isEnabled())
298
-				) {
299
-					$users[] = $this->formatUserForIndex($user, $userGroups);
300
-				}
301
-			}
302
-		}
303
-
304
-		return new DataResponse($users);
305
-	}
306
-
307
-	/**
308
-	 * @NoAdminRequired
309
-	 * @PasswordConfirmationRequired
310
-	 *
311
-	 * @param string $username
312
-	 * @param string $password
313
-	 * @param array $groups
314
-	 * @param string $email
315
-	 * @return DataResponse
316
-	 */
317
-	public function create($username, $password, array $groups=array(), $email='') {
318
-		if($email !== '' && !$this->mailer->validateMailAddress($email)) {
319
-			return new DataResponse(
320
-				array(
321
-					'message' => (string)$this->l10n->t('Invalid mail address')
322
-				),
323
-				Http::STATUS_UNPROCESSABLE_ENTITY
324
-			);
325
-		}
326
-
327
-		$currentUser = $this->userSession->getUser();
328
-
329
-		if (!$this->isAdmin) {
330
-			if (!empty($groups)) {
331
-				foreach ($groups as $key => $group) {
332
-					$groupObject = $this->groupManager->get($group);
333
-					if($groupObject === null) {
334
-						unset($groups[$key]);
335
-						continue;
336
-					}
337
-
338
-					if (!$this->groupManager->getSubAdmin()->isSubAdminofGroup($currentUser, $groupObject)) {
339
-						unset($groups[$key]);
340
-					}
341
-				}
342
-			}
343
-
344
-			if (empty($groups)) {
345
-				return new DataResponse(
346
-					array(
347
-						'message' => $this->l10n->t('No valid group selected'),
348
-					),
349
-					Http::STATUS_FORBIDDEN
350
-				);
351
-			}
352
-		}
353
-
354
-		if ($this->userManager->userExists($username)) {
355
-			return new DataResponse(
356
-				array(
357
-					'message' => (string)$this->l10n->t('A user with that name already exists.')
358
-				),
359
-				Http::STATUS_CONFLICT
360
-			);
361
-		}
362
-
363
-		$generatePasswordResetToken = false;
364
-		if ($password === '') {
365
-			if ($email === '') {
366
-				return new DataResponse(
367
-					array(
368
-						'message' => (string)$this->l10n->t('To send a password link to the user an email address is required.')
369
-					),
370
-					Http::STATUS_UNPROCESSABLE_ENTITY
371
-				);
372
-			}
373
-
374
-			$password = $this->secureRandom->generate(32);
375
-			$generatePasswordResetToken = true;
376
-		}
377
-
378
-		try {
379
-			$user = $this->userManager->createUser($username, $password);
380
-		} catch (\Exception $exception) {
381
-			$message = $exception->getMessage();
382
-			if (!$message) {
383
-				$message = $this->l10n->t('Unable to create user.');
384
-			}
385
-			return new DataResponse(
386
-				array(
387
-					'message' => (string) $message,
388
-				),
389
-				Http::STATUS_FORBIDDEN
390
-			);
391
-		}
392
-
393
-		if($user instanceof IUser) {
394
-			if($groups !== null) {
395
-				foreach($groups as $groupName) {
396
-					$group = $this->groupManager->get($groupName);
397
-
398
-					if(empty($group)) {
399
-						$group = $this->groupManager->createGroup($groupName);
400
-					}
401
-					$group->addUser($user);
402
-				}
403
-			}
404
-			/**
405
-			 * Send new user mail only if a mail is set
406
-			 */
407
-			if($email !== '') {
408
-				$user->setEMailAddress($email);
409
-				try {
410
-					$emailTemplate = $this->newUserMailHelper->generateTemplate($user, $generatePasswordResetToken);
411
-					$this->newUserMailHelper->sendMail($user, $emailTemplate);
412
-				} catch(\Exception $e) {
413
-					$this->log->error("Can't send new user mail to $email: " . $e->getMessage(), array('app' => 'settings'));
414
-				}
415
-			}
416
-			// fetch users groups
417
-			$userGroups = $this->groupManager->getUserGroupIds($user);
418
-
419
-			return new DataResponse(
420
-				$this->formatUserForIndex($user, $userGroups),
421
-				Http::STATUS_CREATED
422
-			);
423
-		}
424
-
425
-		return new DataResponse(
426
-			array(
427
-				'message' => (string)$this->l10n->t('Unable to create user.')
428
-			),
429
-			Http::STATUS_FORBIDDEN
430
-		);
431
-
432
-	}
433
-
434
-	/**
435
-	 * @NoAdminRequired
436
-	 * @PasswordConfirmationRequired
437
-	 *
438
-	 * @param string $id
439
-	 * @return DataResponse
440
-	 */
441
-	public function destroy($id) {
442
-		$userId = $this->userSession->getUser()->getUID();
443
-		$user = $this->userManager->get($id);
444
-
445
-		if($userId === $id) {
446
-			return new DataResponse(
447
-				array(
448
-					'status' => 'error',
449
-					'data' => array(
450
-						'message' => (string)$this->l10n->t('Unable to delete user.')
451
-					)
452
-				),
453
-				Http::STATUS_FORBIDDEN
454
-			);
455
-		}
456
-
457
-		if(!$this->isAdmin && !$this->groupManager->getSubAdmin()->isUserAccessible($this->userSession->getUser(), $user)) {
458
-			return new DataResponse(
459
-				array(
460
-					'status' => 'error',
461
-					'data' => array(
462
-						'message' => (string)$this->l10n->t('Authentication error')
463
-					)
464
-				),
465
-				Http::STATUS_FORBIDDEN
466
-			);
467
-		}
468
-
469
-		if($user) {
470
-			if($user->delete()) {
471
-				return new DataResponse(
472
-					array(
473
-						'status' => 'success',
474
-						'data' => array(
475
-							'username' => $id
476
-						)
477
-					),
478
-					Http::STATUS_NO_CONTENT
479
-				);
480
-			}
481
-		}
482
-
483
-		return new DataResponse(
484
-			array(
485
-				'status' => 'error',
486
-				'data' => array(
487
-					'message' => (string)$this->l10n->t('Unable to delete user.')
488
-				)
489
-			),
490
-			Http::STATUS_FORBIDDEN
491
-		);
492
-	}
493
-
494
-	/**
495
-	 * @NoAdminRequired
496
-	 *
497
-	 * @param string $id
498
-	 * @return DataResponse
499
-	 */
500
-	public function disable($id) {
501
-		$userId = $this->userSession->getUser()->getUID();
502
-		$user = $this->userManager->get($id);
503
-
504
-		if($userId === $id) {
505
-			return new DataResponse(
506
-				array(
507
-					'status' => 'error',
508
-					'data' => array(
509
-						'message' => (string)$this->l10n->t('Error while disabling user.')
510
-					)
511
-				),
512
-				Http::STATUS_FORBIDDEN
513
-			);
514
-		}
515
-
516
-		if($user) {
517
-			if(!$this->isAdmin && !$this->groupManager->getSubAdmin()->isUserAccessible($this->userSession->getUser(), $user)) {
518
-				return new DataResponse(
519
-					array(
520
-						'status' => 'error',
521
-						'data' => array(
522
-							'message' => (string)$this->l10n->t('Authentication error')
523
-						)
524
-					),
525
-					Http::STATUS_FORBIDDEN
526
-				);
527
-			}
528
-
529
-			$user->setEnabled(false);
530
-			return new DataResponse(
531
-				array(
532
-					'status' => 'success',
533
-					'data' => array(
534
-						'username' => $id,
535
-						'enabled' => 0
536
-					)
537
-				)
538
-			);
539
-		} else {
540
-			return new DataResponse(
541
-				array(
542
-					'status' => 'error',
543
-					'data' => array(
544
-						'message' => (string)$this->l10n->t('Error while disabling user.')
545
-					)
546
-				),
547
-				Http::STATUS_FORBIDDEN
548
-			);
549
-		}
550
-	}
551
-
552
-	/**
553
-	 * @NoAdminRequired
554
-	 *
555
-	 * @param string $id
556
-	 * @return DataResponse
557
-	 */
558
-	public function enable($id) {
559
-		$userId = $this->userSession->getUser()->getUID();
560
-		$user = $this->userManager->get($id);
561
-
562
-		if($userId === $id) {
563
-			return new DataResponse(
564
-				array(
565
-					'status' => 'error',
566
-					'data' => array(
567
-						'message' => (string)$this->l10n->t('Error while enabling user.')
568
-					)
569
-				),
570
-				Http::STATUS_FORBIDDEN
571
-			);
572
-		}
573
-
574
-		if($user) {
575
-			if(!$this->isAdmin && !$this->groupManager->getSubAdmin()->isUserAccessible($this->userSession->getUser(), $user)) {
576
-				return new DataResponse(
577
-					array(
578
-						'status' => 'error',
579
-						'data' => array(
580
-							'message' => (string)$this->l10n->t('Authentication error')
581
-						)
582
-					),
583
-					Http::STATUS_FORBIDDEN
584
-				);
585
-			}
586
-
587
-			$user->setEnabled(true);
588
-			return new DataResponse(
589
-				array(
590
-					'status' => 'success',
591
-					'data' => array(
592
-						'username' => $id,
593
-						'enabled' => 1
594
-					)
595
-				)
596
-			);
597
-		} else {
598
-			return new DataResponse(
599
-				array(
600
-					'status' => 'error',
601
-					'data' => array(
602
-						'message' => (string)$this->l10n->t('Error while enabling user.')
603
-					)
604
-				),
605
-				Http::STATUS_FORBIDDEN
606
-			);
607
-		}
608
-	}
609
-
610
-	/**
611
-	 * @NoAdminRequired
612
-	 *
613
-	 * @param string $id
614
-	 * @param int $enabled
615
-	 * @return DataResponse
616
-	 */
617
-	public function setEnabled($id, $enabled) {
618
-		if((bool)$enabled) {
619
-			return $this->enable($id);
620
-		} else {
621
-			return $this->disable($id);
622
-		}
623
-	}
624
-
625
-	/**
626
-	 * Set the mail address of a user
627
-	 *
628
-	 * @NoAdminRequired
629
-	 * @NoSubadminRequired
630
-	 * @PasswordConfirmationRequired
631
-	 *
632
-	 * @param string $avatarScope
633
-	 * @param string $displayname
634
-	 * @param string $displaynameScope
635
-	 * @param string $phone
636
-	 * @param string $phoneScope
637
-	 * @param string $email
638
-	 * @param string $emailScope
639
-	 * @param string $website
640
-	 * @param string $websiteScope
641
-	 * @param string $address
642
-	 * @param string $addressScope
643
-	 * @param string $twitter
644
-	 * @param string $twitterScope
645
-	 * @return DataResponse
646
-	 */
647
-	public function setUserSettings($avatarScope,
648
-									$displayname,
649
-									$displaynameScope,
650
-									$phone,
651
-									$phoneScope,
652
-									$email,
653
-									$emailScope,
654
-									$website,
655
-									$websiteScope,
656
-									$address,
657
-									$addressScope,
658
-									$twitter,
659
-									$twitterScope
660
-	) {
661
-
662
-		if(!empty($email) && !$this->mailer->validateMailAddress($email)) {
663
-			return new DataResponse(
664
-				array(
665
-					'status' => 'error',
666
-					'data' => array(
667
-						'message' => (string)$this->l10n->t('Invalid mail address')
668
-					)
669
-				),
670
-				Http::STATUS_UNPROCESSABLE_ENTITY
671
-			);
672
-		}
673
-
674
-		$data = [
675
-			AccountManager::PROPERTY_AVATAR =>  ['scope' => $avatarScope],
676
-			AccountManager::PROPERTY_DISPLAYNAME => ['value' => $displayname, 'scope' => $displaynameScope],
677
-			AccountManager::PROPERTY_EMAIL=> ['value' => $email, 'scope' => $emailScope],
678
-			AccountManager::PROPERTY_WEBSITE => ['value' => $website, 'scope' => $websiteScope],
679
-			AccountManager::PROPERTY_ADDRESS => ['value' => $address, 'scope' => $addressScope],
680
-			AccountManager::PROPERTY_PHONE => ['value' => $phone, 'scope' => $phoneScope],
681
-			AccountManager::PROPERTY_TWITTER => ['value' => $twitter, 'scope' => $twitterScope]
682
-		];
683
-
684
-		$user = $this->userSession->getUser();
685
-
686
-		try {
687
-			$this->saveUserSettings($user, $data);
688
-			return new DataResponse(
689
-				array(
690
-					'status' => 'success',
691
-					'data' => array(
692
-						'userId' => $user->getUID(),
693
-						'avatarScope' => $avatarScope,
694
-						'displayname' => $displayname,
695
-						'displaynameScope' => $displaynameScope,
696
-						'email' => $email,
697
-						'emailScope' => $emailScope,
698
-						'website' => $website,
699
-						'websiteScope' => $websiteScope,
700
-						'address' => $address,
701
-						'addressScope' => $addressScope,
702
-						'message' => (string)$this->l10n->t('Settings saved')
703
-					)
704
-				),
705
-				Http::STATUS_OK
706
-			);
707
-		} catch (ForbiddenException $e) {
708
-			return new DataResponse([
709
-				'status' => 'error',
710
-				'data' => [
711
-					'message' => $e->getMessage()
712
-				],
713
-			]);
714
-		}
715
-
716
-	}
717
-
718
-
719
-	/**
720
-	 * update account manager with new user data
721
-	 *
722
-	 * @param IUser $user
723
-	 * @param array $data
724
-	 * @throws ForbiddenException
725
-	 */
726
-	protected function saveUserSettings(IUser $user, $data) {
727
-
728
-		// keep the user back-end up-to-date with the latest display name and email
729
-		// address
730
-		$oldDisplayName = $user->getDisplayName();
731
-		$oldDisplayName = is_null($oldDisplayName) ? '' : $oldDisplayName;
732
-		if (isset($data[AccountManager::PROPERTY_DISPLAYNAME]['value'])
733
-			&& $oldDisplayName !== $data[AccountManager::PROPERTY_DISPLAYNAME]['value']
734
-		) {
735
-			$result = $user->setDisplayName($data[AccountManager::PROPERTY_DISPLAYNAME]['value']);
736
-			if ($result === false) {
737
-				throw new ForbiddenException($this->l10n->t('Unable to change full name'));
738
-			}
739
-		}
740
-
741
-		$oldEmailAddress = $user->getEMailAddress();
742
-		$oldEmailAddress = is_null($oldEmailAddress) ? '' : $oldEmailAddress;
743
-		if (isset($data[AccountManager::PROPERTY_EMAIL]['value'])
744
-			&& $oldEmailAddress !== $data[AccountManager::PROPERTY_EMAIL]['value']
745
-		) {
746
-			// this is the only permission a backend provides and is also used
747
-			// for the permission of setting a email address
748
-			if (!$user->canChangeDisplayName()) {
749
-				throw new ForbiddenException($this->l10n->t('Unable to change email address'));
750
-			}
751
-			$user->setEMailAddress($data[AccountManager::PROPERTY_EMAIL]['value']);
752
-		}
753
-
754
-		$this->accountManager->updateUser($user, $data);
755
-	}
756
-
757
-	/**
758
-	 * Count all unique users visible for the current admin/subadmin.
759
-	 *
760
-	 * @NoAdminRequired
761
-	 *
762
-	 * @return DataResponse
763
-	 */
764
-	public function stats() {
765
-		$userCount = 0;
766
-		if ($this->isAdmin) {
767
-			$countByBackend = $this->userManager->countUsers();
768
-
769
-			if (!empty($countByBackend)) {
770
-				foreach ($countByBackend as $count) {
771
-					$userCount += $count;
772
-				}
773
-			}
774
-		} else {
775
-			$groups = $this->groupManager->getSubAdmin()->getSubAdminsGroups($this->userSession->getUser());
776
-
777
-			$uniqueUsers = [];
778
-			foreach ($groups as $group) {
779
-				foreach($group->getUsers() as $uid => $displayName) {
780
-					$uniqueUsers[$uid] = true;
781
-				}
782
-			}
783
-
784
-			$userCount = count($uniqueUsers);
785
-		}
786
-
787
-		return new DataResponse(
788
-			[
789
-				'totalUsers' => $userCount
790
-			]
791
-		);
792
-	}
793
-
794
-
795
-	/**
796
-	 * Set the displayName of a user
797
-	 *
798
-	 * @NoAdminRequired
799
-	 * @NoSubadminRequired
800
-	 * @PasswordConfirmationRequired
801
-	 * @todo merge into saveUserSettings
802
-	 *
803
-	 * @param string $username
804
-	 * @param string $displayName
805
-	 * @return DataResponse
806
-	 */
807
-	public function setDisplayName($username, $displayName) {
808
-		$currentUser = $this->userSession->getUser();
809
-		$user = $this->userManager->get($username);
810
-
811
-		if ($user === null ||
812
-			!$user->canChangeDisplayName() ||
813
-			(
814
-				!$this->groupManager->isAdmin($currentUser->getUID()) &&
815
-				!$this->groupManager->getSubAdmin()->isUserAccessible($currentUser, $user) &&
816
-				$currentUser->getUID() !== $username
817
-
818
-			)
819
-		) {
820
-			return new DataResponse([
821
-				'status' => 'error',
822
-				'data' => [
823
-					'message' => $this->l10n->t('Authentication error'),
824
-				],
825
-			]);
826
-		}
827
-
828
-		$userData = $this->accountManager->getUser($user);
829
-		$userData[AccountManager::PROPERTY_DISPLAYNAME]['value'] = $displayName;
830
-
831
-
832
-		try {
833
-			$this->saveUserSettings($user, $userData);
834
-			return new DataResponse([
835
-				'status' => 'success',
836
-				'data' => [
837
-					'message' => $this->l10n->t('Your full name has been changed.'),
838
-					'username' => $username,
839
-					'displayName' => $displayName,
840
-				],
841
-			]);
842
-		} catch (ForbiddenException $e) {
843
-			return new DataResponse([
844
-				'status' => 'error',
845
-				'data' => [
846
-					'message' => $e->getMessage(),
847
-					'displayName' => $user->getDisplayName(),
848
-				],
849
-			]);
850
-		}
851
-	}
852
-
853
-	/**
854
-	 * Set the mail address of a user
855
-	 *
856
-	 * @NoAdminRequired
857
-	 * @NoSubadminRequired
858
-	 * @PasswordConfirmationRequired
859
-	 *
860
-	 * @param string $id
861
-	 * @param string $mailAddress
862
-	 * @return DataResponse
863
-	 */
864
-	public function setEMailAddress($id, $mailAddress) {
865
-		$user = $this->userManager->get($id);
866
-		if (!$this->isAdmin
867
-			&& !$this->groupManager->getSubAdmin()->isUserAccessible($this->userSession->getUser(), $user)
868
-		) {
869
-			return new DataResponse(
870
-				array(
871
-					'status' => 'error',
872
-					'data' => array(
873
-						'message' => (string)$this->l10n->t('Forbidden')
874
-					)
875
-				),
876
-				Http::STATUS_FORBIDDEN
877
-			);
878
-		}
879
-
880
-		if($mailAddress !== '' && !$this->mailer->validateMailAddress($mailAddress)) {
881
-			return new DataResponse(
882
-				array(
883
-					'status' => 'error',
884
-					'data' => array(
885
-						'message' => (string)$this->l10n->t('Invalid mail address')
886
-					)
887
-				),
888
-				Http::STATUS_UNPROCESSABLE_ENTITY
889
-			);
890
-		}
891
-
892
-		if (!$user) {
893
-			return new DataResponse(
894
-				array(
895
-					'status' => 'error',
896
-					'data' => array(
897
-						'message' => (string)$this->l10n->t('Invalid user')
898
-					)
899
-				),
900
-				Http::STATUS_UNPROCESSABLE_ENTITY
901
-			);
902
-		}
903
-		// this is the only permission a backend provides and is also used
904
-		// for the permission of setting a email address
905
-		if (!$user->canChangeDisplayName()) {
906
-			return new DataResponse(
907
-				array(
908
-					'status' => 'error',
909
-					'data' => array(
910
-						'message' => (string)$this->l10n->t('Unable to change mail address')
911
-					)
912
-				),
913
-				Http::STATUS_FORBIDDEN
914
-			);
915
-		}
916
-
917
-		$userData = $this->accountManager->getUser($user);
918
-		$userData[AccountManager::PROPERTY_EMAIL]['value'] = $mailAddress;
919
-
920
-		try {
921
-			$this->saveUserSettings($user, $userData);
922
-			return new DataResponse(
923
-				array(
924
-					'status' => 'success',
925
-					'data' => array(
926
-						'username' => $id,
927
-						'mailAddress' => $mailAddress,
928
-						'message' => (string)$this->l10n->t('Email saved')
929
-					)
930
-				),
931
-				Http::STATUS_OK
932
-			);
933
-		} catch (ForbiddenException $e) {
934
-			return new DataResponse([
935
-				'status' => 'error',
936
-				'data' => [
937
-					'message' => $e->getMessage()
938
-				],
939
-			]);
940
-		}
941
-	}
57
+    /** @var IL10N */
58
+    private $l10n;
59
+    /** @var IUserSession */
60
+    private $userSession;
61
+    /** @var bool */
62
+    private $isAdmin;
63
+    /** @var IUserManager */
64
+    private $userManager;
65
+    /** @var IGroupManager */
66
+    private $groupManager;
67
+    /** @var IConfig */
68
+    private $config;
69
+    /** @var ILogger */
70
+    private $log;
71
+    /** @var IMailer */
72
+    private $mailer;
73
+    /** @var bool contains the state of the encryption app */
74
+    private $isEncryptionAppEnabled;
75
+    /** @var bool contains the state of the admin recovery setting */
76
+    private $isRestoreEnabled = false;
77
+    /** @var IAvatarManager */
78
+    private $avatarManager;
79
+    /** @var AccountManager */
80
+    private $accountManager;
81
+    /** @var ISecureRandom */
82
+    private $secureRandom;
83
+    /** @var NewUserMailHelper */
84
+    private $newUserMailHelper;
85
+
86
+    /**
87
+     * @param string $appName
88
+     * @param IRequest $request
89
+     * @param IUserManager $userManager
90
+     * @param IGroupManager $groupManager
91
+     * @param IUserSession $userSession
92
+     * @param IConfig $config
93
+     * @param bool $isAdmin
94
+     * @param IL10N $l10n
95
+     * @param ILogger $log
96
+     * @param IMailer $mailer
97
+     * @param IURLGenerator $urlGenerator
98
+     * @param IAppManager $appManager
99
+     * @param IAvatarManager $avatarManager
100
+     * @param AccountManager $accountManager
101
+     * @param ISecureRandom $secureRandom
102
+     * @param NewUserMailHelper $newUserMailHelper
103
+     */
104
+    public function __construct($appName,
105
+                                IRequest $request,
106
+                                IUserManager $userManager,
107
+                                IGroupManager $groupManager,
108
+                                IUserSession $userSession,
109
+                                IConfig $config,
110
+                                $isAdmin,
111
+                                IL10N $l10n,
112
+                                ILogger $log,
113
+                                IMailer $mailer,
114
+                                IURLGenerator $urlGenerator,
115
+                                IAppManager $appManager,
116
+                                IAvatarManager $avatarManager,
117
+                                AccountManager $accountManager,
118
+                                ISecureRandom $secureRandom,
119
+                                NewUserMailHelper $newUserMailHelper) {
120
+        parent::__construct($appName, $request);
121
+        $this->userManager = $userManager;
122
+        $this->groupManager = $groupManager;
123
+        $this->userSession = $userSession;
124
+        $this->config = $config;
125
+        $this->isAdmin = $isAdmin;
126
+        $this->l10n = $l10n;
127
+        $this->log = $log;
128
+        $this->mailer = $mailer;
129
+        $this->avatarManager = $avatarManager;
130
+        $this->accountManager = $accountManager;
131
+        $this->secureRandom = $secureRandom;
132
+        $this->newUserMailHelper = $newUserMailHelper;
133
+
134
+        // check for encryption state - TODO see formatUserForIndex
135
+        $this->isEncryptionAppEnabled = $appManager->isEnabledForUser('encryption');
136
+        if($this->isEncryptionAppEnabled) {
137
+            // putting this directly in empty is possible in PHP 5.5+
138
+            $result = $config->getAppValue('encryption', 'recoveryAdminEnabled', 0);
139
+            $this->isRestoreEnabled = !empty($result);
140
+        }
141
+    }
142
+
143
+    /**
144
+     * @param IUser $user
145
+     * @param array $userGroups
146
+     * @return array
147
+     */
148
+    private function formatUserForIndex(IUser $user, array $userGroups = null) {
149
+
150
+        // TODO: eliminate this encryption specific code below and somehow
151
+        // hook in additional user info from other apps
152
+
153
+        // recovery isn't possible if admin or user has it disabled and encryption
154
+        // is enabled - so we eliminate the else paths in the conditional tree
155
+        // below
156
+        $restorePossible = false;
157
+
158
+        if ($this->isEncryptionAppEnabled) {
159
+            if ($this->isRestoreEnabled) {
160
+                // check for the users recovery setting
161
+                $recoveryMode = $this->config->getUserValue($user->getUID(), 'encryption', 'recoveryEnabled', '0');
162
+                // method call inside empty is possible with PHP 5.5+
163
+                $recoveryModeEnabled = !empty($recoveryMode);
164
+                if ($recoveryModeEnabled) {
165
+                    // user also has recovery mode enabled
166
+                    $restorePossible = true;
167
+                }
168
+            }
169
+        } else {
170
+            // recovery is possible if encryption is disabled (plain files are
171
+            // available)
172
+            $restorePossible = true;
173
+        }
174
+
175
+        $subAdminGroups = $this->groupManager->getSubAdmin()->getSubAdminsGroups($user);
176
+        foreach($subAdminGroups as $key => $subAdminGroup) {
177
+            $subAdminGroups[$key] = $subAdminGroup->getGID();
178
+        }
179
+
180
+        $displayName = $user->getEMailAddress();
181
+        if (is_null($displayName)) {
182
+            $displayName = '';
183
+        }
184
+
185
+        $avatarAvailable = false;
186
+        try {
187
+            $avatarAvailable = $this->avatarManager->getAvatar($user->getUID())->exists();
188
+        } catch (\Exception $e) {
189
+            //No avatar yet
190
+        }
191
+
192
+        return [
193
+            'name' => $user->getUID(),
194
+            'displayname' => $user->getDisplayName(),
195
+            'groups' => (empty($userGroups)) ? $this->groupManager->getUserGroupIds($user) : $userGroups,
196
+            'subadmin' => $subAdminGroups,
197
+            'quota' => $user->getQuota(),
198
+            'storageLocation' => $user->getHome(),
199
+            'lastLogin' => $user->getLastLogin() * 1000,
200
+            'backend' => $user->getBackendClassName(),
201
+            'email' => $displayName,
202
+            'isRestoreDisabled' => !$restorePossible,
203
+            'isAvatarAvailable' => $avatarAvailable,
204
+            'isEnabled' => $user->isEnabled(),
205
+        ];
206
+    }
207
+
208
+    /**
209
+     * @param array $userIDs Array with schema [$uid => $displayName]
210
+     * @return IUser[]
211
+     */
212
+    private function getUsersForUID(array $userIDs) {
213
+        $users = [];
214
+        foreach ($userIDs as $uid => $displayName) {
215
+            $users[$uid] = $this->userManager->get($uid);
216
+        }
217
+        return $users;
218
+    }
219
+
220
+    /**
221
+     * @NoAdminRequired
222
+     *
223
+     * @param int $offset
224
+     * @param int $limit
225
+     * @param string $gid GID to filter for
226
+     * @param string $pattern Pattern to search for in the username
227
+     * @param string $backend Backend to filter for (class-name)
228
+     * @return DataResponse
229
+     *
230
+     * TODO: Tidy up and write unit tests - code is mainly static method calls
231
+     */
232
+    public function index($offset = 0, $limit = 10, $gid = '', $pattern = '', $backend = '') {
233
+        // Remove backends
234
+        if(!empty($backend)) {
235
+            $activeBackends = $this->userManager->getBackends();
236
+            $this->userManager->clearBackends();
237
+            foreach($activeBackends as $singleActiveBackend) {
238
+                if($backend === get_class($singleActiveBackend)) {
239
+                    $this->userManager->registerBackend($singleActiveBackend);
240
+                    break;
241
+                }
242
+            }
243
+        }
244
+
245
+        $users = [];
246
+        if ($this->isAdmin) {
247
+            if($gid !== '' && $gid !== '_disabledUsers') {
248
+                $batch = $this->getUsersForUID($this->groupManager->displayNamesInGroup($gid, $pattern, $limit, $offset));
249
+            } else {
250
+                $batch = $this->userManager->search($pattern, $limit, $offset);
251
+            }
252
+
253
+            foreach ($batch as $user) {
254
+                if( ($gid !== '_disabledUsers' && $user->isEnabled()) ||
255
+                    ($gid === '_disabledUsers' && !$user->isEnabled())
256
+                ) {
257
+                    $users[] = $this->formatUserForIndex($user);
258
+                }
259
+            }
260
+
261
+        } else {
262
+            $subAdminOfGroups = $this->groupManager->getSubAdmin()->getSubAdminsGroups($this->userSession->getUser());
263
+            // New class returns IGroup[] so convert back
264
+            $gids = [];
265
+            foreach ($subAdminOfGroups as $group) {
266
+                $gids[] = $group->getGID();
267
+            }
268
+            $subAdminOfGroups = $gids;
269
+
270
+            // Set the $gid parameter to an empty value if the subadmin has no rights to access a specific group
271
+            if($gid !== '' && $gid !== '_disabledUsers' && !in_array($gid, $subAdminOfGroups)) {
272
+                $gid = '';
273
+            }
274
+
275
+            // Batch all groups the user is subadmin of when a group is specified
276
+            $batch = [];
277
+            if($gid === '') {
278
+                foreach($subAdminOfGroups as $group) {
279
+                    $groupUsers = $this->groupManager->displayNamesInGroup($group, $pattern, $limit, $offset);
280
+
281
+                    foreach($groupUsers as $uid => $displayName) {
282
+                        $batch[$uid] = $displayName;
283
+                    }
284
+                }
285
+            } else {
286
+                $batch = $this->groupManager->displayNamesInGroup($gid, $pattern, $limit, $offset);
287
+            }
288
+            $batch = $this->getUsersForUID($batch);
289
+
290
+            foreach ($batch as $user) {
291
+                // Only add the groups, this user is a subadmin of
292
+                $userGroups = array_values(array_intersect(
293
+                    $this->groupManager->getUserGroupIds($user),
294
+                    $subAdminOfGroups
295
+                ));
296
+                if( ($gid !== '_disabledUsers' && $user->isEnabled()) ||
297
+                    ($gid === '_disabledUsers' && !$user->isEnabled())
298
+                ) {
299
+                    $users[] = $this->formatUserForIndex($user, $userGroups);
300
+                }
301
+            }
302
+        }
303
+
304
+        return new DataResponse($users);
305
+    }
306
+
307
+    /**
308
+     * @NoAdminRequired
309
+     * @PasswordConfirmationRequired
310
+     *
311
+     * @param string $username
312
+     * @param string $password
313
+     * @param array $groups
314
+     * @param string $email
315
+     * @return DataResponse
316
+     */
317
+    public function create($username, $password, array $groups=array(), $email='') {
318
+        if($email !== '' && !$this->mailer->validateMailAddress($email)) {
319
+            return new DataResponse(
320
+                array(
321
+                    'message' => (string)$this->l10n->t('Invalid mail address')
322
+                ),
323
+                Http::STATUS_UNPROCESSABLE_ENTITY
324
+            );
325
+        }
326
+
327
+        $currentUser = $this->userSession->getUser();
328
+
329
+        if (!$this->isAdmin) {
330
+            if (!empty($groups)) {
331
+                foreach ($groups as $key => $group) {
332
+                    $groupObject = $this->groupManager->get($group);
333
+                    if($groupObject === null) {
334
+                        unset($groups[$key]);
335
+                        continue;
336
+                    }
337
+
338
+                    if (!$this->groupManager->getSubAdmin()->isSubAdminofGroup($currentUser, $groupObject)) {
339
+                        unset($groups[$key]);
340
+                    }
341
+                }
342
+            }
343
+
344
+            if (empty($groups)) {
345
+                return new DataResponse(
346
+                    array(
347
+                        'message' => $this->l10n->t('No valid group selected'),
348
+                    ),
349
+                    Http::STATUS_FORBIDDEN
350
+                );
351
+            }
352
+        }
353
+
354
+        if ($this->userManager->userExists($username)) {
355
+            return new DataResponse(
356
+                array(
357
+                    'message' => (string)$this->l10n->t('A user with that name already exists.')
358
+                ),
359
+                Http::STATUS_CONFLICT
360
+            );
361
+        }
362
+
363
+        $generatePasswordResetToken = false;
364
+        if ($password === '') {
365
+            if ($email === '') {
366
+                return new DataResponse(
367
+                    array(
368
+                        'message' => (string)$this->l10n->t('To send a password link to the user an email address is required.')
369
+                    ),
370
+                    Http::STATUS_UNPROCESSABLE_ENTITY
371
+                );
372
+            }
373
+
374
+            $password = $this->secureRandom->generate(32);
375
+            $generatePasswordResetToken = true;
376
+        }
377
+
378
+        try {
379
+            $user = $this->userManager->createUser($username, $password);
380
+        } catch (\Exception $exception) {
381
+            $message = $exception->getMessage();
382
+            if (!$message) {
383
+                $message = $this->l10n->t('Unable to create user.');
384
+            }
385
+            return new DataResponse(
386
+                array(
387
+                    'message' => (string) $message,
388
+                ),
389
+                Http::STATUS_FORBIDDEN
390
+            );
391
+        }
392
+
393
+        if($user instanceof IUser) {
394
+            if($groups !== null) {
395
+                foreach($groups as $groupName) {
396
+                    $group = $this->groupManager->get($groupName);
397
+
398
+                    if(empty($group)) {
399
+                        $group = $this->groupManager->createGroup($groupName);
400
+                    }
401
+                    $group->addUser($user);
402
+                }
403
+            }
404
+            /**
405
+             * Send new user mail only if a mail is set
406
+             */
407
+            if($email !== '') {
408
+                $user->setEMailAddress($email);
409
+                try {
410
+                    $emailTemplate = $this->newUserMailHelper->generateTemplate($user, $generatePasswordResetToken);
411
+                    $this->newUserMailHelper->sendMail($user, $emailTemplate);
412
+                } catch(\Exception $e) {
413
+                    $this->log->error("Can't send new user mail to $email: " . $e->getMessage(), array('app' => 'settings'));
414
+                }
415
+            }
416
+            // fetch users groups
417
+            $userGroups = $this->groupManager->getUserGroupIds($user);
418
+
419
+            return new DataResponse(
420
+                $this->formatUserForIndex($user, $userGroups),
421
+                Http::STATUS_CREATED
422
+            );
423
+        }
424
+
425
+        return new DataResponse(
426
+            array(
427
+                'message' => (string)$this->l10n->t('Unable to create user.')
428
+            ),
429
+            Http::STATUS_FORBIDDEN
430
+        );
431
+
432
+    }
433
+
434
+    /**
435
+     * @NoAdminRequired
436
+     * @PasswordConfirmationRequired
437
+     *
438
+     * @param string $id
439
+     * @return DataResponse
440
+     */
441
+    public function destroy($id) {
442
+        $userId = $this->userSession->getUser()->getUID();
443
+        $user = $this->userManager->get($id);
444
+
445
+        if($userId === $id) {
446
+            return new DataResponse(
447
+                array(
448
+                    'status' => 'error',
449
+                    'data' => array(
450
+                        'message' => (string)$this->l10n->t('Unable to delete user.')
451
+                    )
452
+                ),
453
+                Http::STATUS_FORBIDDEN
454
+            );
455
+        }
456
+
457
+        if(!$this->isAdmin && !$this->groupManager->getSubAdmin()->isUserAccessible($this->userSession->getUser(), $user)) {
458
+            return new DataResponse(
459
+                array(
460
+                    'status' => 'error',
461
+                    'data' => array(
462
+                        'message' => (string)$this->l10n->t('Authentication error')
463
+                    )
464
+                ),
465
+                Http::STATUS_FORBIDDEN
466
+            );
467
+        }
468
+
469
+        if($user) {
470
+            if($user->delete()) {
471
+                return new DataResponse(
472
+                    array(
473
+                        'status' => 'success',
474
+                        'data' => array(
475
+                            'username' => $id
476
+                        )
477
+                    ),
478
+                    Http::STATUS_NO_CONTENT
479
+                );
480
+            }
481
+        }
482
+
483
+        return new DataResponse(
484
+            array(
485
+                'status' => 'error',
486
+                'data' => array(
487
+                    'message' => (string)$this->l10n->t('Unable to delete user.')
488
+                )
489
+            ),
490
+            Http::STATUS_FORBIDDEN
491
+        );
492
+    }
493
+
494
+    /**
495
+     * @NoAdminRequired
496
+     *
497
+     * @param string $id
498
+     * @return DataResponse
499
+     */
500
+    public function disable($id) {
501
+        $userId = $this->userSession->getUser()->getUID();
502
+        $user = $this->userManager->get($id);
503
+
504
+        if($userId === $id) {
505
+            return new DataResponse(
506
+                array(
507
+                    'status' => 'error',
508
+                    'data' => array(
509
+                        'message' => (string)$this->l10n->t('Error while disabling user.')
510
+                    )
511
+                ),
512
+                Http::STATUS_FORBIDDEN
513
+            );
514
+        }
515
+
516
+        if($user) {
517
+            if(!$this->isAdmin && !$this->groupManager->getSubAdmin()->isUserAccessible($this->userSession->getUser(), $user)) {
518
+                return new DataResponse(
519
+                    array(
520
+                        'status' => 'error',
521
+                        'data' => array(
522
+                            'message' => (string)$this->l10n->t('Authentication error')
523
+                        )
524
+                    ),
525
+                    Http::STATUS_FORBIDDEN
526
+                );
527
+            }
528
+
529
+            $user->setEnabled(false);
530
+            return new DataResponse(
531
+                array(
532
+                    'status' => 'success',
533
+                    'data' => array(
534
+                        'username' => $id,
535
+                        'enabled' => 0
536
+                    )
537
+                )
538
+            );
539
+        } else {
540
+            return new DataResponse(
541
+                array(
542
+                    'status' => 'error',
543
+                    'data' => array(
544
+                        'message' => (string)$this->l10n->t('Error while disabling user.')
545
+                    )
546
+                ),
547
+                Http::STATUS_FORBIDDEN
548
+            );
549
+        }
550
+    }
551
+
552
+    /**
553
+     * @NoAdminRequired
554
+     *
555
+     * @param string $id
556
+     * @return DataResponse
557
+     */
558
+    public function enable($id) {
559
+        $userId = $this->userSession->getUser()->getUID();
560
+        $user = $this->userManager->get($id);
561
+
562
+        if($userId === $id) {
563
+            return new DataResponse(
564
+                array(
565
+                    'status' => 'error',
566
+                    'data' => array(
567
+                        'message' => (string)$this->l10n->t('Error while enabling user.')
568
+                    )
569
+                ),
570
+                Http::STATUS_FORBIDDEN
571
+            );
572
+        }
573
+
574
+        if($user) {
575
+            if(!$this->isAdmin && !$this->groupManager->getSubAdmin()->isUserAccessible($this->userSession->getUser(), $user)) {
576
+                return new DataResponse(
577
+                    array(
578
+                        'status' => 'error',
579
+                        'data' => array(
580
+                            'message' => (string)$this->l10n->t('Authentication error')
581
+                        )
582
+                    ),
583
+                    Http::STATUS_FORBIDDEN
584
+                );
585
+            }
586
+
587
+            $user->setEnabled(true);
588
+            return new DataResponse(
589
+                array(
590
+                    'status' => 'success',
591
+                    'data' => array(
592
+                        'username' => $id,
593
+                        'enabled' => 1
594
+                    )
595
+                )
596
+            );
597
+        } else {
598
+            return new DataResponse(
599
+                array(
600
+                    'status' => 'error',
601
+                    'data' => array(
602
+                        'message' => (string)$this->l10n->t('Error while enabling user.')
603
+                    )
604
+                ),
605
+                Http::STATUS_FORBIDDEN
606
+            );
607
+        }
608
+    }
609
+
610
+    /**
611
+     * @NoAdminRequired
612
+     *
613
+     * @param string $id
614
+     * @param int $enabled
615
+     * @return DataResponse
616
+     */
617
+    public function setEnabled($id, $enabled) {
618
+        if((bool)$enabled) {
619
+            return $this->enable($id);
620
+        } else {
621
+            return $this->disable($id);
622
+        }
623
+    }
624
+
625
+    /**
626
+     * Set the mail address of a user
627
+     *
628
+     * @NoAdminRequired
629
+     * @NoSubadminRequired
630
+     * @PasswordConfirmationRequired
631
+     *
632
+     * @param string $avatarScope
633
+     * @param string $displayname
634
+     * @param string $displaynameScope
635
+     * @param string $phone
636
+     * @param string $phoneScope
637
+     * @param string $email
638
+     * @param string $emailScope
639
+     * @param string $website
640
+     * @param string $websiteScope
641
+     * @param string $address
642
+     * @param string $addressScope
643
+     * @param string $twitter
644
+     * @param string $twitterScope
645
+     * @return DataResponse
646
+     */
647
+    public function setUserSettings($avatarScope,
648
+                                    $displayname,
649
+                                    $displaynameScope,
650
+                                    $phone,
651
+                                    $phoneScope,
652
+                                    $email,
653
+                                    $emailScope,
654
+                                    $website,
655
+                                    $websiteScope,
656
+                                    $address,
657
+                                    $addressScope,
658
+                                    $twitter,
659
+                                    $twitterScope
660
+    ) {
661
+
662
+        if(!empty($email) && !$this->mailer->validateMailAddress($email)) {
663
+            return new DataResponse(
664
+                array(
665
+                    'status' => 'error',
666
+                    'data' => array(
667
+                        'message' => (string)$this->l10n->t('Invalid mail address')
668
+                    )
669
+                ),
670
+                Http::STATUS_UNPROCESSABLE_ENTITY
671
+            );
672
+        }
673
+
674
+        $data = [
675
+            AccountManager::PROPERTY_AVATAR =>  ['scope' => $avatarScope],
676
+            AccountManager::PROPERTY_DISPLAYNAME => ['value' => $displayname, 'scope' => $displaynameScope],
677
+            AccountManager::PROPERTY_EMAIL=> ['value' => $email, 'scope' => $emailScope],
678
+            AccountManager::PROPERTY_WEBSITE => ['value' => $website, 'scope' => $websiteScope],
679
+            AccountManager::PROPERTY_ADDRESS => ['value' => $address, 'scope' => $addressScope],
680
+            AccountManager::PROPERTY_PHONE => ['value' => $phone, 'scope' => $phoneScope],
681
+            AccountManager::PROPERTY_TWITTER => ['value' => $twitter, 'scope' => $twitterScope]
682
+        ];
683
+
684
+        $user = $this->userSession->getUser();
685
+
686
+        try {
687
+            $this->saveUserSettings($user, $data);
688
+            return new DataResponse(
689
+                array(
690
+                    'status' => 'success',
691
+                    'data' => array(
692
+                        'userId' => $user->getUID(),
693
+                        'avatarScope' => $avatarScope,
694
+                        'displayname' => $displayname,
695
+                        'displaynameScope' => $displaynameScope,
696
+                        'email' => $email,
697
+                        'emailScope' => $emailScope,
698
+                        'website' => $website,
699
+                        'websiteScope' => $websiteScope,
700
+                        'address' => $address,
701
+                        'addressScope' => $addressScope,
702
+                        'message' => (string)$this->l10n->t('Settings saved')
703
+                    )
704
+                ),
705
+                Http::STATUS_OK
706
+            );
707
+        } catch (ForbiddenException $e) {
708
+            return new DataResponse([
709
+                'status' => 'error',
710
+                'data' => [
711
+                    'message' => $e->getMessage()
712
+                ],
713
+            ]);
714
+        }
715
+
716
+    }
717
+
718
+
719
+    /**
720
+     * update account manager with new user data
721
+     *
722
+     * @param IUser $user
723
+     * @param array $data
724
+     * @throws ForbiddenException
725
+     */
726
+    protected function saveUserSettings(IUser $user, $data) {
727
+
728
+        // keep the user back-end up-to-date with the latest display name and email
729
+        // address
730
+        $oldDisplayName = $user->getDisplayName();
731
+        $oldDisplayName = is_null($oldDisplayName) ? '' : $oldDisplayName;
732
+        if (isset($data[AccountManager::PROPERTY_DISPLAYNAME]['value'])
733
+            && $oldDisplayName !== $data[AccountManager::PROPERTY_DISPLAYNAME]['value']
734
+        ) {
735
+            $result = $user->setDisplayName($data[AccountManager::PROPERTY_DISPLAYNAME]['value']);
736
+            if ($result === false) {
737
+                throw new ForbiddenException($this->l10n->t('Unable to change full name'));
738
+            }
739
+        }
740
+
741
+        $oldEmailAddress = $user->getEMailAddress();
742
+        $oldEmailAddress = is_null($oldEmailAddress) ? '' : $oldEmailAddress;
743
+        if (isset($data[AccountManager::PROPERTY_EMAIL]['value'])
744
+            && $oldEmailAddress !== $data[AccountManager::PROPERTY_EMAIL]['value']
745
+        ) {
746
+            // this is the only permission a backend provides and is also used
747
+            // for the permission of setting a email address
748
+            if (!$user->canChangeDisplayName()) {
749
+                throw new ForbiddenException($this->l10n->t('Unable to change email address'));
750
+            }
751
+            $user->setEMailAddress($data[AccountManager::PROPERTY_EMAIL]['value']);
752
+        }
753
+
754
+        $this->accountManager->updateUser($user, $data);
755
+    }
756
+
757
+    /**
758
+     * Count all unique users visible for the current admin/subadmin.
759
+     *
760
+     * @NoAdminRequired
761
+     *
762
+     * @return DataResponse
763
+     */
764
+    public function stats() {
765
+        $userCount = 0;
766
+        if ($this->isAdmin) {
767
+            $countByBackend = $this->userManager->countUsers();
768
+
769
+            if (!empty($countByBackend)) {
770
+                foreach ($countByBackend as $count) {
771
+                    $userCount += $count;
772
+                }
773
+            }
774
+        } else {
775
+            $groups = $this->groupManager->getSubAdmin()->getSubAdminsGroups($this->userSession->getUser());
776
+
777
+            $uniqueUsers = [];
778
+            foreach ($groups as $group) {
779
+                foreach($group->getUsers() as $uid => $displayName) {
780
+                    $uniqueUsers[$uid] = true;
781
+                }
782
+            }
783
+
784
+            $userCount = count($uniqueUsers);
785
+        }
786
+
787
+        return new DataResponse(
788
+            [
789
+                'totalUsers' => $userCount
790
+            ]
791
+        );
792
+    }
793
+
794
+
795
+    /**
796
+     * Set the displayName of a user
797
+     *
798
+     * @NoAdminRequired
799
+     * @NoSubadminRequired
800
+     * @PasswordConfirmationRequired
801
+     * @todo merge into saveUserSettings
802
+     *
803
+     * @param string $username
804
+     * @param string $displayName
805
+     * @return DataResponse
806
+     */
807
+    public function setDisplayName($username, $displayName) {
808
+        $currentUser = $this->userSession->getUser();
809
+        $user = $this->userManager->get($username);
810
+
811
+        if ($user === null ||
812
+            !$user->canChangeDisplayName() ||
813
+            (
814
+                !$this->groupManager->isAdmin($currentUser->getUID()) &&
815
+                !$this->groupManager->getSubAdmin()->isUserAccessible($currentUser, $user) &&
816
+                $currentUser->getUID() !== $username
817
+
818
+            )
819
+        ) {
820
+            return new DataResponse([
821
+                'status' => 'error',
822
+                'data' => [
823
+                    'message' => $this->l10n->t('Authentication error'),
824
+                ],
825
+            ]);
826
+        }
827
+
828
+        $userData = $this->accountManager->getUser($user);
829
+        $userData[AccountManager::PROPERTY_DISPLAYNAME]['value'] = $displayName;
830
+
831
+
832
+        try {
833
+            $this->saveUserSettings($user, $userData);
834
+            return new DataResponse([
835
+                'status' => 'success',
836
+                'data' => [
837
+                    'message' => $this->l10n->t('Your full name has been changed.'),
838
+                    'username' => $username,
839
+                    'displayName' => $displayName,
840
+                ],
841
+            ]);
842
+        } catch (ForbiddenException $e) {
843
+            return new DataResponse([
844
+                'status' => 'error',
845
+                'data' => [
846
+                    'message' => $e->getMessage(),
847
+                    'displayName' => $user->getDisplayName(),
848
+                ],
849
+            ]);
850
+        }
851
+    }
852
+
853
+    /**
854
+     * Set the mail address of a user
855
+     *
856
+     * @NoAdminRequired
857
+     * @NoSubadminRequired
858
+     * @PasswordConfirmationRequired
859
+     *
860
+     * @param string $id
861
+     * @param string $mailAddress
862
+     * @return DataResponse
863
+     */
864
+    public function setEMailAddress($id, $mailAddress) {
865
+        $user = $this->userManager->get($id);
866
+        if (!$this->isAdmin
867
+            && !$this->groupManager->getSubAdmin()->isUserAccessible($this->userSession->getUser(), $user)
868
+        ) {
869
+            return new DataResponse(
870
+                array(
871
+                    'status' => 'error',
872
+                    'data' => array(
873
+                        'message' => (string)$this->l10n->t('Forbidden')
874
+                    )
875
+                ),
876
+                Http::STATUS_FORBIDDEN
877
+            );
878
+        }
879
+
880
+        if($mailAddress !== '' && !$this->mailer->validateMailAddress($mailAddress)) {
881
+            return new DataResponse(
882
+                array(
883
+                    'status' => 'error',
884
+                    'data' => array(
885
+                        'message' => (string)$this->l10n->t('Invalid mail address')
886
+                    )
887
+                ),
888
+                Http::STATUS_UNPROCESSABLE_ENTITY
889
+            );
890
+        }
891
+
892
+        if (!$user) {
893
+            return new DataResponse(
894
+                array(
895
+                    'status' => 'error',
896
+                    'data' => array(
897
+                        'message' => (string)$this->l10n->t('Invalid user')
898
+                    )
899
+                ),
900
+                Http::STATUS_UNPROCESSABLE_ENTITY
901
+            );
902
+        }
903
+        // this is the only permission a backend provides and is also used
904
+        // for the permission of setting a email address
905
+        if (!$user->canChangeDisplayName()) {
906
+            return new DataResponse(
907
+                array(
908
+                    'status' => 'error',
909
+                    'data' => array(
910
+                        'message' => (string)$this->l10n->t('Unable to change mail address')
911
+                    )
912
+                ),
913
+                Http::STATUS_FORBIDDEN
914
+            );
915
+        }
916
+
917
+        $userData = $this->accountManager->getUser($user);
918
+        $userData[AccountManager::PROPERTY_EMAIL]['value'] = $mailAddress;
919
+
920
+        try {
921
+            $this->saveUserSettings($user, $userData);
922
+            return new DataResponse(
923
+                array(
924
+                    'status' => 'success',
925
+                    'data' => array(
926
+                        'username' => $id,
927
+                        'mailAddress' => $mailAddress,
928
+                        'message' => (string)$this->l10n->t('Email saved')
929
+                    )
930
+                ),
931
+                Http::STATUS_OK
932
+            );
933
+        } catch (ForbiddenException $e) {
934
+            return new DataResponse([
935
+                'status' => 'error',
936
+                'data' => [
937
+                    'message' => $e->getMessage()
938
+                ],
939
+            ]);
940
+        }
941
+    }
942 942
 
943 943
 }
Please login to merge, or discard this patch.
Spacing   +56 added lines, -56 removed lines patch added patch discarded remove patch
@@ -133,7 +133,7 @@  discard block
 block discarded – undo
133 133
 
134 134
 		// check for encryption state - TODO see formatUserForIndex
135 135
 		$this->isEncryptionAppEnabled = $appManager->isEnabledForUser('encryption');
136
-		if($this->isEncryptionAppEnabled) {
136
+		if ($this->isEncryptionAppEnabled) {
137 137
 			// putting this directly in empty is possible in PHP 5.5+
138 138
 			$result = $config->getAppValue('encryption', 'recoveryAdminEnabled', 0);
139 139
 			$this->isRestoreEnabled = !empty($result);
@@ -173,7 +173,7 @@  discard block
 block discarded – undo
173 173
 		}
174 174
 
175 175
 		$subAdminGroups = $this->groupManager->getSubAdmin()->getSubAdminsGroups($user);
176
-		foreach($subAdminGroups as $key => $subAdminGroup) {
176
+		foreach ($subAdminGroups as $key => $subAdminGroup) {
177 177
 			$subAdminGroups[$key] = $subAdminGroup->getGID();
178 178
 		}
179 179
 
@@ -231,11 +231,11 @@  discard block
 block discarded – undo
231 231
 	 */
232 232
 	public function index($offset = 0, $limit = 10, $gid = '', $pattern = '', $backend = '') {
233 233
 		// Remove backends
234
-		if(!empty($backend)) {
234
+		if (!empty($backend)) {
235 235
 			$activeBackends = $this->userManager->getBackends();
236 236
 			$this->userManager->clearBackends();
237
-			foreach($activeBackends as $singleActiveBackend) {
238
-				if($backend === get_class($singleActiveBackend)) {
237
+			foreach ($activeBackends as $singleActiveBackend) {
238
+				if ($backend === get_class($singleActiveBackend)) {
239 239
 					$this->userManager->registerBackend($singleActiveBackend);
240 240
 					break;
241 241
 				}
@@ -244,14 +244,14 @@  discard block
 block discarded – undo
244 244
 
245 245
 		$users = [];
246 246
 		if ($this->isAdmin) {
247
-			if($gid !== '' && $gid !== '_disabledUsers') {
247
+			if ($gid !== '' && $gid !== '_disabledUsers') {
248 248
 				$batch = $this->getUsersForUID($this->groupManager->displayNamesInGroup($gid, $pattern, $limit, $offset));
249 249
 			} else {
250 250
 				$batch = $this->userManager->search($pattern, $limit, $offset);
251 251
 			}
252 252
 
253 253
 			foreach ($batch as $user) {
254
-				if( ($gid !== '_disabledUsers' && $user->isEnabled()) ||
254
+				if (($gid !== '_disabledUsers' && $user->isEnabled()) ||
255 255
 					($gid === '_disabledUsers' && !$user->isEnabled())
256 256
 				) {
257 257
 					$users[] = $this->formatUserForIndex($user);
@@ -268,17 +268,17 @@  discard block
 block discarded – undo
268 268
 			$subAdminOfGroups = $gids;
269 269
 
270 270
 			// Set the $gid parameter to an empty value if the subadmin has no rights to access a specific group
271
-			if($gid !== '' && $gid !== '_disabledUsers' && !in_array($gid, $subAdminOfGroups)) {
271
+			if ($gid !== '' && $gid !== '_disabledUsers' && !in_array($gid, $subAdminOfGroups)) {
272 272
 				$gid = '';
273 273
 			}
274 274
 
275 275
 			// Batch all groups the user is subadmin of when a group is specified
276 276
 			$batch = [];
277
-			if($gid === '') {
278
-				foreach($subAdminOfGroups as $group) {
277
+			if ($gid === '') {
278
+				foreach ($subAdminOfGroups as $group) {
279 279
 					$groupUsers = $this->groupManager->displayNamesInGroup($group, $pattern, $limit, $offset);
280 280
 
281
-					foreach($groupUsers as $uid => $displayName) {
281
+					foreach ($groupUsers as $uid => $displayName) {
282 282
 						$batch[$uid] = $displayName;
283 283
 					}
284 284
 				}
@@ -293,7 +293,7 @@  discard block
 block discarded – undo
293 293
 					$this->groupManager->getUserGroupIds($user),
294 294
 					$subAdminOfGroups
295 295
 				));
296
-				if( ($gid !== '_disabledUsers' && $user->isEnabled()) ||
296
+				if (($gid !== '_disabledUsers' && $user->isEnabled()) ||
297 297
 					($gid === '_disabledUsers' && !$user->isEnabled())
298 298
 				) {
299 299
 					$users[] = $this->formatUserForIndex($user, $userGroups);
@@ -314,11 +314,11 @@  discard block
 block discarded – undo
314 314
 	 * @param string $email
315 315
 	 * @return DataResponse
316 316
 	 */
317
-	public function create($username, $password, array $groups=array(), $email='') {
318
-		if($email !== '' && !$this->mailer->validateMailAddress($email)) {
317
+	public function create($username, $password, array $groups = array(), $email = '') {
318
+		if ($email !== '' && !$this->mailer->validateMailAddress($email)) {
319 319
 			return new DataResponse(
320 320
 				array(
321
-					'message' => (string)$this->l10n->t('Invalid mail address')
321
+					'message' => (string) $this->l10n->t('Invalid mail address')
322 322
 				),
323 323
 				Http::STATUS_UNPROCESSABLE_ENTITY
324 324
 			);
@@ -330,7 +330,7 @@  discard block
 block discarded – undo
330 330
 			if (!empty($groups)) {
331 331
 				foreach ($groups as $key => $group) {
332 332
 					$groupObject = $this->groupManager->get($group);
333
-					if($groupObject === null) {
333
+					if ($groupObject === null) {
334 334
 						unset($groups[$key]);
335 335
 						continue;
336 336
 					}
@@ -354,7 +354,7 @@  discard block
 block discarded – undo
354 354
 		if ($this->userManager->userExists($username)) {
355 355
 			return new DataResponse(
356 356
 				array(
357
-					'message' => (string)$this->l10n->t('A user with that name already exists.')
357
+					'message' => (string) $this->l10n->t('A user with that name already exists.')
358 358
 				),
359 359
 				Http::STATUS_CONFLICT
360 360
 			);
@@ -365,7 +365,7 @@  discard block
 block discarded – undo
365 365
 			if ($email === '') {
366 366
 				return new DataResponse(
367 367
 					array(
368
-						'message' => (string)$this->l10n->t('To send a password link to the user an email address is required.')
368
+						'message' => (string) $this->l10n->t('To send a password link to the user an email address is required.')
369 369
 					),
370 370
 					Http::STATUS_UNPROCESSABLE_ENTITY
371 371
 				);
@@ -390,12 +390,12 @@  discard block
 block discarded – undo
390 390
 			);
391 391
 		}
392 392
 
393
-		if($user instanceof IUser) {
394
-			if($groups !== null) {
395
-				foreach($groups as $groupName) {
393
+		if ($user instanceof IUser) {
394
+			if ($groups !== null) {
395
+				foreach ($groups as $groupName) {
396 396
 					$group = $this->groupManager->get($groupName);
397 397
 
398
-					if(empty($group)) {
398
+					if (empty($group)) {
399 399
 						$group = $this->groupManager->createGroup($groupName);
400 400
 					}
401 401
 					$group->addUser($user);
@@ -404,13 +404,13 @@  discard block
 block discarded – undo
404 404
 			/**
405 405
 			 * Send new user mail only if a mail is set
406 406
 			 */
407
-			if($email !== '') {
407
+			if ($email !== '') {
408 408
 				$user->setEMailAddress($email);
409 409
 				try {
410 410
 					$emailTemplate = $this->newUserMailHelper->generateTemplate($user, $generatePasswordResetToken);
411 411
 					$this->newUserMailHelper->sendMail($user, $emailTemplate);
412
-				} catch(\Exception $e) {
413
-					$this->log->error("Can't send new user mail to $email: " . $e->getMessage(), array('app' => 'settings'));
412
+				} catch (\Exception $e) {
413
+					$this->log->error("Can't send new user mail to $email: ".$e->getMessage(), array('app' => 'settings'));
414 414
 				}
415 415
 			}
416 416
 			// fetch users groups
@@ -424,7 +424,7 @@  discard block
 block discarded – undo
424 424
 
425 425
 		return new DataResponse(
426 426
 			array(
427
-				'message' => (string)$this->l10n->t('Unable to create user.')
427
+				'message' => (string) $this->l10n->t('Unable to create user.')
428 428
 			),
429 429
 			Http::STATUS_FORBIDDEN
430 430
 		);
@@ -442,32 +442,32 @@  discard block
 block discarded – undo
442 442
 		$userId = $this->userSession->getUser()->getUID();
443 443
 		$user = $this->userManager->get($id);
444 444
 
445
-		if($userId === $id) {
445
+		if ($userId === $id) {
446 446
 			return new DataResponse(
447 447
 				array(
448 448
 					'status' => 'error',
449 449
 					'data' => array(
450
-						'message' => (string)$this->l10n->t('Unable to delete user.')
450
+						'message' => (string) $this->l10n->t('Unable to delete user.')
451 451
 					)
452 452
 				),
453 453
 				Http::STATUS_FORBIDDEN
454 454
 			);
455 455
 		}
456 456
 
457
-		if(!$this->isAdmin && !$this->groupManager->getSubAdmin()->isUserAccessible($this->userSession->getUser(), $user)) {
457
+		if (!$this->isAdmin && !$this->groupManager->getSubAdmin()->isUserAccessible($this->userSession->getUser(), $user)) {
458 458
 			return new DataResponse(
459 459
 				array(
460 460
 					'status' => 'error',
461 461
 					'data' => array(
462
-						'message' => (string)$this->l10n->t('Authentication error')
462
+						'message' => (string) $this->l10n->t('Authentication error')
463 463
 					)
464 464
 				),
465 465
 				Http::STATUS_FORBIDDEN
466 466
 			);
467 467
 		}
468 468
 
469
-		if($user) {
470
-			if($user->delete()) {
469
+		if ($user) {
470
+			if ($user->delete()) {
471 471
 				return new DataResponse(
472 472
 					array(
473 473
 						'status' => 'success',
@@ -484,7 +484,7 @@  discard block
 block discarded – undo
484 484
 			array(
485 485
 				'status' => 'error',
486 486
 				'data' => array(
487
-					'message' => (string)$this->l10n->t('Unable to delete user.')
487
+					'message' => (string) $this->l10n->t('Unable to delete user.')
488 488
 				)
489 489
 			),
490 490
 			Http::STATUS_FORBIDDEN
@@ -501,25 +501,25 @@  discard block
 block discarded – undo
501 501
 		$userId = $this->userSession->getUser()->getUID();
502 502
 		$user = $this->userManager->get($id);
503 503
 
504
-		if($userId === $id) {
504
+		if ($userId === $id) {
505 505
 			return new DataResponse(
506 506
 				array(
507 507
 					'status' => 'error',
508 508
 					'data' => array(
509
-						'message' => (string)$this->l10n->t('Error while disabling user.')
509
+						'message' => (string) $this->l10n->t('Error while disabling user.')
510 510
 					)
511 511
 				),
512 512
 				Http::STATUS_FORBIDDEN
513 513
 			);
514 514
 		}
515 515
 
516
-		if($user) {
517
-			if(!$this->isAdmin && !$this->groupManager->getSubAdmin()->isUserAccessible($this->userSession->getUser(), $user)) {
516
+		if ($user) {
517
+			if (!$this->isAdmin && !$this->groupManager->getSubAdmin()->isUserAccessible($this->userSession->getUser(), $user)) {
518 518
 				return new DataResponse(
519 519
 					array(
520 520
 						'status' => 'error',
521 521
 						'data' => array(
522
-							'message' => (string)$this->l10n->t('Authentication error')
522
+							'message' => (string) $this->l10n->t('Authentication error')
523 523
 						)
524 524
 					),
525 525
 					Http::STATUS_FORBIDDEN
@@ -541,7 +541,7 @@  discard block
 block discarded – undo
541 541
 				array(
542 542
 					'status' => 'error',
543 543
 					'data' => array(
544
-						'message' => (string)$this->l10n->t('Error while disabling user.')
544
+						'message' => (string) $this->l10n->t('Error while disabling user.')
545 545
 					)
546 546
 				),
547 547
 				Http::STATUS_FORBIDDEN
@@ -559,25 +559,25 @@  discard block
 block discarded – undo
559 559
 		$userId = $this->userSession->getUser()->getUID();
560 560
 		$user = $this->userManager->get($id);
561 561
 
562
-		if($userId === $id) {
562
+		if ($userId === $id) {
563 563
 			return new DataResponse(
564 564
 				array(
565 565
 					'status' => 'error',
566 566
 					'data' => array(
567
-						'message' => (string)$this->l10n->t('Error while enabling user.')
567
+						'message' => (string) $this->l10n->t('Error while enabling user.')
568 568
 					)
569 569
 				),
570 570
 				Http::STATUS_FORBIDDEN
571 571
 			);
572 572
 		}
573 573
 
574
-		if($user) {
575
-			if(!$this->isAdmin && !$this->groupManager->getSubAdmin()->isUserAccessible($this->userSession->getUser(), $user)) {
574
+		if ($user) {
575
+			if (!$this->isAdmin && !$this->groupManager->getSubAdmin()->isUserAccessible($this->userSession->getUser(), $user)) {
576 576
 				return new DataResponse(
577 577
 					array(
578 578
 						'status' => 'error',
579 579
 						'data' => array(
580
-							'message' => (string)$this->l10n->t('Authentication error')
580
+							'message' => (string) $this->l10n->t('Authentication error')
581 581
 						)
582 582
 					),
583 583
 					Http::STATUS_FORBIDDEN
@@ -599,7 +599,7 @@  discard block
 block discarded – undo
599 599
 				array(
600 600
 					'status' => 'error',
601 601
 					'data' => array(
602
-						'message' => (string)$this->l10n->t('Error while enabling user.')
602
+						'message' => (string) $this->l10n->t('Error while enabling user.')
603 603
 					)
604 604
 				),
605 605
 				Http::STATUS_FORBIDDEN
@@ -615,7 +615,7 @@  discard block
 block discarded – undo
615 615
 	 * @return DataResponse
616 616
 	 */
617 617
 	public function setEnabled($id, $enabled) {
618
-		if((bool)$enabled) {
618
+		if ((bool) $enabled) {
619 619
 			return $this->enable($id);
620 620
 		} else {
621 621
 			return $this->disable($id);
@@ -659,12 +659,12 @@  discard block
 block discarded – undo
659 659
 									$twitterScope
660 660
 	) {
661 661
 
662
-		if(!empty($email) && !$this->mailer->validateMailAddress($email)) {
662
+		if (!empty($email) && !$this->mailer->validateMailAddress($email)) {
663 663
 			return new DataResponse(
664 664
 				array(
665 665
 					'status' => 'error',
666 666
 					'data' => array(
667
-						'message' => (string)$this->l10n->t('Invalid mail address')
667
+						'message' => (string) $this->l10n->t('Invalid mail address')
668 668
 					)
669 669
 				),
670 670
 				Http::STATUS_UNPROCESSABLE_ENTITY
@@ -699,7 +699,7 @@  discard block
 block discarded – undo
699 699
 						'websiteScope' => $websiteScope,
700 700
 						'address' => $address,
701 701
 						'addressScope' => $addressScope,
702
-						'message' => (string)$this->l10n->t('Settings saved')
702
+						'message' => (string) $this->l10n->t('Settings saved')
703 703
 					)
704 704
 				),
705 705
 				Http::STATUS_OK
@@ -776,7 +776,7 @@  discard block
 block discarded – undo
776 776
 
777 777
 			$uniqueUsers = [];
778 778
 			foreach ($groups as $group) {
779
-				foreach($group->getUsers() as $uid => $displayName) {
779
+				foreach ($group->getUsers() as $uid => $displayName) {
780 780
 					$uniqueUsers[$uid] = true;
781 781
 				}
782 782
 			}
@@ -870,19 +870,19 @@  discard block
 block discarded – undo
870 870
 				array(
871 871
 					'status' => 'error',
872 872
 					'data' => array(
873
-						'message' => (string)$this->l10n->t('Forbidden')
873
+						'message' => (string) $this->l10n->t('Forbidden')
874 874
 					)
875 875
 				),
876 876
 				Http::STATUS_FORBIDDEN
877 877
 			);
878 878
 		}
879 879
 
880
-		if($mailAddress !== '' && !$this->mailer->validateMailAddress($mailAddress)) {
880
+		if ($mailAddress !== '' && !$this->mailer->validateMailAddress($mailAddress)) {
881 881
 			return new DataResponse(
882 882
 				array(
883 883
 					'status' => 'error',
884 884
 					'data' => array(
885
-						'message' => (string)$this->l10n->t('Invalid mail address')
885
+						'message' => (string) $this->l10n->t('Invalid mail address')
886 886
 					)
887 887
 				),
888 888
 				Http::STATUS_UNPROCESSABLE_ENTITY
@@ -894,7 +894,7 @@  discard block
 block discarded – undo
894 894
 				array(
895 895
 					'status' => 'error',
896 896
 					'data' => array(
897
-						'message' => (string)$this->l10n->t('Invalid user')
897
+						'message' => (string) $this->l10n->t('Invalid user')
898 898
 					)
899 899
 				),
900 900
 				Http::STATUS_UNPROCESSABLE_ENTITY
@@ -907,7 +907,7 @@  discard block
 block discarded – undo
907 907
 				array(
908 908
 					'status' => 'error',
909 909
 					'data' => array(
910
-						'message' => (string)$this->l10n->t('Unable to change mail address')
910
+						'message' => (string) $this->l10n->t('Unable to change mail address')
911 911
 					)
912 912
 				),
913 913
 				Http::STATUS_FORBIDDEN
@@ -925,7 +925,7 @@  discard block
 block discarded – undo
925 925
 					'data' => array(
926 926
 						'username' => $id,
927 927
 						'mailAddress' => $mailAddress,
928
-						'message' => (string)$this->l10n->t('Email saved')
928
+						'message' => (string) $this->l10n->t('Email saved')
929 929
 					)
930 930
 				),
931 931
 				Http::STATUS_OK
Please login to merge, or discard this patch.
settings/templates/users/part.grouplist.php 1 patch
Spacing   +8 added lines, -8 removed lines patch added patch discarded remove patch
@@ -28,33 +28,33 @@
 block discarded – undo
28 28
 	</li>
29 29
 
30 30
 	<!-- The Admin Group -->
31
-	<?php foreach($_["adminGroup"] as $adminGroup): ?>
32
-		<li data-gid="admin" data-usercount="<?php if($adminGroup['usercount'] > 0) { p($adminGroup['usercount']); } ?>" class="isgroup">
31
+	<?php foreach ($_["adminGroup"] as $adminGroup): ?>
32
+		<li data-gid="admin" data-usercount="<?php if ($adminGroup['usercount'] > 0) { p($adminGroup['usercount']); } ?>" class="isgroup">
33 33
 			<a href="#"><span class="groupname"><?php p($l->t('Admins')); ?></span></a>
34 34
 			<span class="utils">
35
-				<span class="usercount"><?php if($adminGroup['usercount'] > 0) { p($adminGroup['usercount']); } ?></span>
35
+				<span class="usercount"><?php if ($adminGroup['usercount'] > 0) { p($adminGroup['usercount']); } ?></span>
36 36
 			</span>
37 37
 		</li>
38 38
 	<?php endforeach; ?>
39 39
 
40 40
 	<!-- Disabled Users -->
41 41
 	<?php $disabledUsersGroup = $_["disabledUsersGroup"] ?>
42
-	<li data-gid="_disabledUsers" data-usercount="<?php if($disabledUsersGroup['usercount'] > 0) { p($disabledUsersGroup['usercount']); } ?>" class="isgroup">
42
+	<li data-gid="_disabledUsers" data-usercount="<?php if ($disabledUsersGroup['usercount'] > 0) { p($disabledUsersGroup['usercount']); } ?>" class="isgroup">
43 43
 		<a href="#"><span class="groupname"><?php p($l->t('Disabled')); ?></span></a>
44 44
 		<span class="utils">
45
-			<span class="usercount"><?php if($disabledUsersGroup['usercount'] > 0) { p($disabledUsersGroup['usercount']); } ?></span>
45
+			<span class="usercount"><?php if ($disabledUsersGroup['usercount'] > 0) { p($disabledUsersGroup['usercount']); } ?></span>
46 46
 		</span>
47 47
 	</li>
48 48
 
49 49
 	<!--List of Groups-->
50
-	<?php foreach($_["groups"] as $group): ?>
50
+	<?php foreach ($_["groups"] as $group): ?>
51 51
 		<li data-gid="<?php p($group['name']) ?>" data-usercount="<?php p($group['usercount']) ?>" class="isgroup">
52 52
 			<a href="#" class="dorename">
53 53
 				<span class="groupname"><?php p($group['name']); ?></span>
54 54
 			</a>
55 55
 			<span class="utils">
56
-				<span class="usercount"><?php if($group['usercount'] > 0) { p($group['usercount']); } ?></span>
57
-				<?php if($_['isAdmin']): ?>
56
+				<span class="usercount"><?php if ($group['usercount'] > 0) { p($group['usercount']); } ?></span>
57
+				<?php if ($_['isAdmin']): ?>
58 58
 				<a href="#" class="action delete" original-title="<?php p($l->t('Delete'))?>">
59 59
 					<img src="<?php print_unescaped(image_path('core', 'actions/delete.svg')) ?>" />
60 60
 				</a>
Please login to merge, or discard this patch.
settings/routes.php 1 patch
Indentation   +48 added lines, -48 removed lines patch added patch discarded remove patch
@@ -36,73 +36,73 @@
 block discarded – undo
36 36
 
37 37
 $application = new Application();
38 38
 $application->registerRoutes($this, [
39
-	'resources' => [
40
-		'groups' => ['url' => '/settings/users/groups'],
41
-		'users' => ['url' => '/settings/users/users'],
42
-		'AuthSettings' => ['url' => '/settings/personal/authtokens'],
43
-	],
44
-	'routes' => [
45
-		['name' => 'MailSettings#setMailSettings', 'url' => '/settings/admin/mailsettings', 'verb' => 'POST'],
46
-		['name' => 'MailSettings#storeCredentials', 'url' => '/settings/admin/mailsettings/credentials', 'verb' => 'POST'],
47
-		['name' => 'MailSettings#sendTestMail', 'url' => '/settings/admin/mailtest', 'verb' => 'POST'],
48
-		['name' => 'Encryption#startMigration', 'url' => '/settings/admin/startmigration', 'verb' => 'POST'],
49
-		['name' => 'AppSettings#listCategories', 'url' => '/settings/apps/categories', 'verb' => 'GET'],
50
-		['name' => 'AppSettings#viewApps', 'url' => '/settings/apps', 'verb' => 'GET'],
51
-		['name' => 'AppSettings#listApps', 'url' => '/settings/apps/list', 'verb' => 'GET'],
52
-		['name' => 'SecuritySettings#trustedDomains', 'url' => '/settings/admin/security/trustedDomains', 'verb' => 'POST'],
53
-		['name' => 'Users#setDisplayName', 'url' => '/settings/users/{username}/displayName', 'verb' => 'POST'],
54
-		['name' => 'Users#setEMailAddress', 'url' => '/settings/users/{id}/mailAddress', 'verb' => 'PUT'],
55
-		['name' => 'Users#setUserSettings', 'url' => '/settings/users/{username}/settings', 'verb' => 'PUT'],
56
-		['name' => 'Users#setEnabled', 'url' => '/settings/users/{id}/setEnabled', 'verb' => 'POST'],
57
-		['name' => 'Users#stats', 'url' => '/settings/users/stats', 'verb' => 'GET'],
58
-		['name' => 'LogSettings#setLogLevel', 'url' => '/settings/admin/log/level', 'verb' => 'POST'],
59
-		['name' => 'LogSettings#getEntries', 'url' => '/settings/admin/log/entries', 'verb' => 'GET'],
60
-		['name' => 'LogSettings#download', 'url' => '/settings/admin/log/download', 'verb' => 'GET'],
61
-		['name' => 'CheckSetup#check', 'url' => '/settings/ajax/checksetup', 'verb' => 'GET'],
62
-		['name' => 'CheckSetup#getFailedIntegrityCheckFiles', 'url' => '/settings/integrity/failed', 'verb' => 'GET'],
63
-		['name' => 'CheckSetup#rescanFailedIntegrityCheck', 'url' => '/settings/integrity/rescan', 'verb' => 'GET'],
64
-		['name' => 'Certificate#addPersonalRootCertificate', 'url' => '/settings/personal/certificate', 'verb' => 'POST'],
65
-		['name' => 'Certificate#removePersonalRootCertificate', 'url' => '/settings/personal/certificate/{certificateIdentifier}', 'verb' => 'DELETE'],
66
-		['name' => 'Certificate#addSystemRootCertificate', 'url' => '/settings/admin/certificate', 'verb' => 'POST'],
67
-		['name' => 'Certificate#removeSystemRootCertificate', 'url' => '/settings/admin/certificate/{certificateIdentifier}', 'verb' => 'DELETE'],
68
-		['name' => 'AdminSettings#index', 'url' => '/settings/admin/{section}', 'verb' => 'GET', 'defaults' => ['section' => 'server']],
69
-		['name' => 'AdminSettings#form', 'url' => '/settings/admin/{section}', 'verb' => 'GET'],
70
-		['name' => 'ChangePassword#changePersonalPassword', 'url' => '/settings/personal/changepassword', 'verb' => 'POST'],
71
-		['name' => 'ChangePassword#changeUserPassword', 'url' => '/settings/users/changepassword', 'verb' => 'POST'],
72
-		['name' => 'Personal#setLanguage', 'url' => '/settings/ajax/setlanguage.php', 'verb' => 'POST'],
73
-	]
39
+    'resources' => [
40
+        'groups' => ['url' => '/settings/users/groups'],
41
+        'users' => ['url' => '/settings/users/users'],
42
+        'AuthSettings' => ['url' => '/settings/personal/authtokens'],
43
+    ],
44
+    'routes' => [
45
+        ['name' => 'MailSettings#setMailSettings', 'url' => '/settings/admin/mailsettings', 'verb' => 'POST'],
46
+        ['name' => 'MailSettings#storeCredentials', 'url' => '/settings/admin/mailsettings/credentials', 'verb' => 'POST'],
47
+        ['name' => 'MailSettings#sendTestMail', 'url' => '/settings/admin/mailtest', 'verb' => 'POST'],
48
+        ['name' => 'Encryption#startMigration', 'url' => '/settings/admin/startmigration', 'verb' => 'POST'],
49
+        ['name' => 'AppSettings#listCategories', 'url' => '/settings/apps/categories', 'verb' => 'GET'],
50
+        ['name' => 'AppSettings#viewApps', 'url' => '/settings/apps', 'verb' => 'GET'],
51
+        ['name' => 'AppSettings#listApps', 'url' => '/settings/apps/list', 'verb' => 'GET'],
52
+        ['name' => 'SecuritySettings#trustedDomains', 'url' => '/settings/admin/security/trustedDomains', 'verb' => 'POST'],
53
+        ['name' => 'Users#setDisplayName', 'url' => '/settings/users/{username}/displayName', 'verb' => 'POST'],
54
+        ['name' => 'Users#setEMailAddress', 'url' => '/settings/users/{id}/mailAddress', 'verb' => 'PUT'],
55
+        ['name' => 'Users#setUserSettings', 'url' => '/settings/users/{username}/settings', 'verb' => 'PUT'],
56
+        ['name' => 'Users#setEnabled', 'url' => '/settings/users/{id}/setEnabled', 'verb' => 'POST'],
57
+        ['name' => 'Users#stats', 'url' => '/settings/users/stats', 'verb' => 'GET'],
58
+        ['name' => 'LogSettings#setLogLevel', 'url' => '/settings/admin/log/level', 'verb' => 'POST'],
59
+        ['name' => 'LogSettings#getEntries', 'url' => '/settings/admin/log/entries', 'verb' => 'GET'],
60
+        ['name' => 'LogSettings#download', 'url' => '/settings/admin/log/download', 'verb' => 'GET'],
61
+        ['name' => 'CheckSetup#check', 'url' => '/settings/ajax/checksetup', 'verb' => 'GET'],
62
+        ['name' => 'CheckSetup#getFailedIntegrityCheckFiles', 'url' => '/settings/integrity/failed', 'verb' => 'GET'],
63
+        ['name' => 'CheckSetup#rescanFailedIntegrityCheck', 'url' => '/settings/integrity/rescan', 'verb' => 'GET'],
64
+        ['name' => 'Certificate#addPersonalRootCertificate', 'url' => '/settings/personal/certificate', 'verb' => 'POST'],
65
+        ['name' => 'Certificate#removePersonalRootCertificate', 'url' => '/settings/personal/certificate/{certificateIdentifier}', 'verb' => 'DELETE'],
66
+        ['name' => 'Certificate#addSystemRootCertificate', 'url' => '/settings/admin/certificate', 'verb' => 'POST'],
67
+        ['name' => 'Certificate#removeSystemRootCertificate', 'url' => '/settings/admin/certificate/{certificateIdentifier}', 'verb' => 'DELETE'],
68
+        ['name' => 'AdminSettings#index', 'url' => '/settings/admin/{section}', 'verb' => 'GET', 'defaults' => ['section' => 'server']],
69
+        ['name' => 'AdminSettings#form', 'url' => '/settings/admin/{section}', 'verb' => 'GET'],
70
+        ['name' => 'ChangePassword#changePersonalPassword', 'url' => '/settings/personal/changepassword', 'verb' => 'POST'],
71
+        ['name' => 'ChangePassword#changeUserPassword', 'url' => '/settings/users/changepassword', 'verb' => 'POST'],
72
+        ['name' => 'Personal#setLanguage', 'url' => '/settings/ajax/setlanguage.php', 'verb' => 'POST'],
73
+    ]
74 74
 ]);
75 75
 
76 76
 /** @var $this \OCP\Route\IRouter */
77 77
 
78 78
 // Settings pages
79 79
 $this->create('settings_help', '/settings/help')
80
-	->actionInclude('settings/help.php');
80
+    ->actionInclude('settings/help.php');
81 81
 $this->create('settings_personal', '/settings/personal')
82
-	->actionInclude('settings/personal.php');
82
+    ->actionInclude('settings/personal.php');
83 83
 $this->create('settings_users', '/settings/users')
84
-	->actionInclude('settings/users.php');
84
+    ->actionInclude('settings/users.php');
85 85
 // Settings ajax actions
86 86
 // users
87 87
 $this->create('settings_ajax_setquota', '/settings/ajax/setquota.php')
88
-	->actionInclude('settings/ajax/setquota.php');
88
+    ->actionInclude('settings/ajax/setquota.php');
89 89
 $this->create('settings_ajax_togglegroups', '/settings/ajax/togglegroups.php')
90
-	->actionInclude('settings/ajax/togglegroups.php');
90
+    ->actionInclude('settings/ajax/togglegroups.php');
91 91
 $this->create('settings_ajax_togglesubadmins', '/settings/ajax/togglesubadmins.php')
92
-	->actionInclude('settings/ajax/togglesubadmins.php');
92
+    ->actionInclude('settings/ajax/togglesubadmins.php');
93 93
 $this->create('settings_ajax_changegorupname', '/settings/ajax/changegroupname.php')
94
-	->actionInclude('settings/ajax/changegroupname.php');
94
+    ->actionInclude('settings/ajax/changegroupname.php');
95 95
 // apps
96 96
 $this->create('settings_ajax_enableapp', '/settings/ajax/enableapp.php')
97
-	->actionInclude('settings/ajax/enableapp.php');
97
+    ->actionInclude('settings/ajax/enableapp.php');
98 98
 $this->create('settings_ajax_disableapp', '/settings/ajax/disableapp.php')
99
-	->actionInclude('settings/ajax/disableapp.php');
99
+    ->actionInclude('settings/ajax/disableapp.php');
100 100
 $this->create('settings_ajax_updateapp', '/settings/ajax/updateapp.php')
101
-	->actionInclude('settings/ajax/updateapp.php');
101
+    ->actionInclude('settings/ajax/updateapp.php');
102 102
 $this->create('settings_ajax_uninstallapp', '/settings/ajax/uninstallapp.php')
103
-	->actionInclude('settings/ajax/uninstallapp.php');
103
+    ->actionInclude('settings/ajax/uninstallapp.php');
104 104
 $this->create('settings_ajax_navigationdetect', '/settings/ajax/navigationdetect.php')
105
-	->actionInclude('settings/ajax/navigationdetect.php');
105
+    ->actionInclude('settings/ajax/navigationdetect.php');
106 106
 // admin
107 107
 $this->create('settings_ajax_excludegroups', '/settings/ajax/excludegroups.php')
108
-	->actionInclude('settings/ajax/excludegroups.php');
108
+    ->actionInclude('settings/ajax/excludegroups.php');
Please login to merge, or discard this patch.