Completed
Push — master ( 838909...74db22 )
by Phil
44s
created

Application::__construct()   B

Complexity

Conditions 4
Paths 3

Size

Total Lines 45
Code Lines 28

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 28
nc 3
nop 1
dl 0
loc 45
rs 8.5806
c 0
b 0
f 0
1
<?php
2
/**
3
 * @author Vincent Petry <[email protected]>
4
 *
5
 * @copyright Copyright (c) 2018, ownCloud GmbH
6
 * @license AGPL-3.0
7
 *
8
 * This code is free software: you can redistribute it and/or modify
9
 * it under the terms of the GNU Affero General Public License, version 3,
10
 * as published by the Free Software Foundation.
11
 *
12
 * This program is distributed in the hope that it will be useful,
13
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
 * GNU Affero General Public License for more details.
16
 *
17
 * You should have received a copy of the GNU Affero General Public License, version 3,
18
 * along with this program.  If not, see <http://www.gnu.org/licenses/>
19
 *
20
 */
21
22
namespace OCA\Testing;
23
24
use OCP\AppFramework\App;
25
use OCP\App\ManagerEvent;
26
27
class Application extends App {
28
	public function __construct (array $urlParams = array()) {
29
		$appName = 'testing';
30
		parent::__construct($appName, $urlParams);
31
32
		$c = $this->getContainer();
33
		$config = $c->getServer()->getConfig();
34
		if ($config->getAppValue($appName, 'enable_alt_user_backend', 'no') === 'yes') {
35
			$userManager = $c->getServer()->getUserManager();
36
37
			// replace all user backends with this one
38
			$userManager->clearBackends();
39
			$userManager->registerBackend($c->query(AlternativeHomeUserBackend::class));
40
41
			$userManager->listen('\OC\User', 'postCreateUser', function ($user, $password) use ($c) {
0 ignored issues
show
Unused Code introduced by
The parameter $password is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
42
				$q = $c->getServer()->getDatabaseConnection()->getQueryBuilder();
43
				$q->update('*PREFIX*accounts')
44
					->set('backend', $q->expr()->literal(AlternativeHomeUserBackend::class))
45
					->where($q->expr()->eq('user_id', $q->createNamedParameter($user->getUID())))
46
					->execute();
47
			});
48
49
			// first call must adjust all existing backends
50
			if ($config->getAppValue($appName, 'updated_all', 'no') === 'no') {
51
				$q = $c->getServer()->getDatabaseConnection()->getQueryBuilder();
52
				$q->update('*PREFIX*accounts')
53
					->set('backend', $q->expr()->literal(AlternativeHomeUserBackend::class))
54
					->where($q->expr()->eq('backend', $q->createNamedParameter(\OC\User\Database::class)))
55
					->execute();
56
57
				// set this value to only do it once, the value is cleared when disabling the app
58
				$config->setAppValue($appName, 'updated_all', 'yes');
59
			};
60
		}
61
62
		$eventDispatcher = $c->getServer()->getEventDispatcher();
63
		$eventDispatcher->addListener(
64
			ManagerEvent::EVENT_APP_DISABLE,
65
			function($event) use ($appName, $config) {
66
				// clear the "already updated" flag when disabling this app
67
				if ($event->getAppID() === $appName) {
68
					$config->deleteAppValue($appName, 'updated_all');
69
				}
70
			}
71
		);
72
	}
73
}
74