Completed
Pull Request — master (#4890)
by Blizzz
14:46
created
settings/Controller/CommonSettingsTrait.php 2 patches
Doc Comments   +12 added lines patch added patch discarded remove patch
@@ -51,6 +51,9 @@  discard block
 block discarded – undo
51 51
 		];
52 52
 	}
53 53
 
54
+	/**
55
+	 * @param string $type
56
+	 */
54 57
 	protected function formatSections($sections, $currentSection, $type) {
55 58
 		$templateParameters = [];
56 59
 		/** @var \OCP\Settings\ISection[] $prioritizedSections */
@@ -81,6 +84,9 @@  discard block
 block discarded – undo
81 84
 		return $templateParameters;
82 85
 	}
83 86
 
87
+	/**
88
+	 * @param string $currentSections
89
+	 */
84 90
 	protected function formatPersonalSections($currentSections) {
85 91
 		$sections = $this->settingsManager->getPersonalSections();
86 92
 		$templateParameters = $this->formatSections($sections, $currentSections, 'personal');
@@ -88,6 +94,9 @@  discard block
 block discarded – undo
88 94
 		return $templateParameters;
89 95
 	}
90 96
 
97
+	/**
98
+	 * @param string $currentSections
99
+	 */
91 100
 	protected function formatAdminSections($currentSections) {
92 101
 		$sections = $this->settingsManager->getAdminSections();
93 102
 		$templateParameters = $this->formatSections($sections, $currentSections, 'admin');
@@ -111,6 +120,9 @@  discard block
 block discarded – undo
111 120
 		return ['content' => $html];
112 121
 	}
113 122
 
123
+	/**
124
+	 * @param string $section
125
+	 */
114 126
 	private function getIndexResponse($section) {
115 127
 		$templateParams = [];
116 128
 		$templateParams = array_merge($templateParams, $this->getNavigationParameters($section));
Please login to merge, or discard this patch.
Indentation   +91 added lines, -91 removed lines patch added patch discarded remove patch
@@ -29,95 +29,95 @@
 block discarded – undo
29 29
 use OCP\Settings\ISettings;
30 30
 
31 31
 trait CommonSettingsTrait  {
32
-	/** @var ISettingsManager */
33
-	private $settingsManager;
34
-
35
-	/**
36
-	 * @param string $currentSection
37
-	 * @return array
38
-	 */
39
-	private function getNavigationParameters($currentSection) {
40
-		$templateParameters = [
41
-			'personal' => $this->formatPersonalSections($currentSection),
42
-			'admin' => []
43
-		];
44
-
45
-		if(\OC_User::isAdminUser(\OC_User::getUser())) {
46
-			$templateParameters['admin'] = $this->formatAdminSections($currentSection);
47
-		}
48
-
49
-		return [
50
-			'forms' => $templateParameters
51
-		];
52
-	}
53
-
54
-	protected function formatSections($sections, $currentSection, $type) {
55
-		$templateParameters = [];
56
-		/** @var \OCP\Settings\ISection[] $prioritizedSections */
57
-		foreach($sections as $prioritizedSections) {
58
-			foreach ($prioritizedSections as $section) {
59
-				if($type === 'admin') {
60
-					$settings = $this->settingsManager->getAdminSettings($section->getID());
61
-				} else if($type === 'personal') {
62
-					$settings = $this->settingsManager->getPersonalSettings($section->getID());
63
-				}
64
-				if (empty($settings)) {
65
-					continue;
66
-				}
67
-
68
-				$icon = '';
69
-				if ($section instanceof IIconSection) {
70
-					$icon = $section->getIcon();
71
-				}
72
-
73
-				$templateParameters[] = [
74
-					'anchor'       => $section->getID(),
75
-					'section-name' => $section->getName(),
76
-					'active'       => $section->getID() === $currentSection,
77
-					'icon'         => $icon,
78
-				];
79
-			}
80
-		}
81
-		return $templateParameters;
82
-	}
83
-
84
-	protected function formatPersonalSections($currentSections) {
85
-		$sections = $this->settingsManager->getPersonalSections();
86
-		$templateParameters = $this->formatSections($sections, $currentSections, 'personal');
87
-
88
-		return $templateParameters;
89
-	}
90
-
91
-	protected function formatAdminSections($currentSections) {
92
-		$sections = $this->settingsManager->getAdminSections();
93
-		$templateParameters = $this->formatSections($sections, $currentSections, 'admin');
94
-
95
-		return $templateParameters;
96
-	}
97
-
98
-	/**
99
-	 * @param ISettings[] $settings
100
-	 * @return array
101
-	 */
102
-	private function formatSettings($settings) {
103
-		$html = '';
104
-		foreach ($settings as $prioritizedSettings) {
105
-			foreach ($prioritizedSettings as $setting) {
106
-				/** @var \OCP\Settings\ISettings $setting */
107
-				$form = $setting->getForm();
108
-				$html .= $form->renderAs('')->render();
109
-			}
110
-		}
111
-		return ['content' => $html];
112
-	}
113
-
114
-	private function getIndexResponse($section) {
115
-		$templateParams = [];
116
-		$templateParams = array_merge($templateParams, $this->getNavigationParameters($section));
117
-		$templateParams = array_merge($templateParams, $this->getSettings($section));
118
-
119
-		return new TemplateResponse('settings', 'settings/frame', $templateParams);
120
-	}
121
-
122
-	abstract protected function getSettings($section);
32
+    /** @var ISettingsManager */
33
+    private $settingsManager;
34
+
35
+    /**
36
+     * @param string $currentSection
37
+     * @return array
38
+     */
39
+    private function getNavigationParameters($currentSection) {
40
+        $templateParameters = [
41
+            'personal' => $this->formatPersonalSections($currentSection),
42
+            'admin' => []
43
+        ];
44
+
45
+        if(\OC_User::isAdminUser(\OC_User::getUser())) {
46
+            $templateParameters['admin'] = $this->formatAdminSections($currentSection);
47
+        }
48
+
49
+        return [
50
+            'forms' => $templateParameters
51
+        ];
52
+    }
53
+
54
+    protected function formatSections($sections, $currentSection, $type) {
55
+        $templateParameters = [];
56
+        /** @var \OCP\Settings\ISection[] $prioritizedSections */
57
+        foreach($sections as $prioritizedSections) {
58
+            foreach ($prioritizedSections as $section) {
59
+                if($type === 'admin') {
60
+                    $settings = $this->settingsManager->getAdminSettings($section->getID());
61
+                } else if($type === 'personal') {
62
+                    $settings = $this->settingsManager->getPersonalSettings($section->getID());
63
+                }
64
+                if (empty($settings)) {
65
+                    continue;
66
+                }
67
+
68
+                $icon = '';
69
+                if ($section instanceof IIconSection) {
70
+                    $icon = $section->getIcon();
71
+                }
72
+
73
+                $templateParameters[] = [
74
+                    'anchor'       => $section->getID(),
75
+                    'section-name' => $section->getName(),
76
+                    'active'       => $section->getID() === $currentSection,
77
+                    'icon'         => $icon,
78
+                ];
79
+            }
80
+        }
81
+        return $templateParameters;
82
+    }
83
+
84
+    protected function formatPersonalSections($currentSections) {
85
+        $sections = $this->settingsManager->getPersonalSections();
86
+        $templateParameters = $this->formatSections($sections, $currentSections, 'personal');
87
+
88
+        return $templateParameters;
89
+    }
90
+
91
+    protected function formatAdminSections($currentSections) {
92
+        $sections = $this->settingsManager->getAdminSections();
93
+        $templateParameters = $this->formatSections($sections, $currentSections, 'admin');
94
+
95
+        return $templateParameters;
96
+    }
97
+
98
+    /**
99
+     * @param ISettings[] $settings
100
+     * @return array
101
+     */
102
+    private function formatSettings($settings) {
103
+        $html = '';
104
+        foreach ($settings as $prioritizedSettings) {
105
+            foreach ($prioritizedSettings as $setting) {
106
+                /** @var \OCP\Settings\ISettings $setting */
107
+                $form = $setting->getForm();
108
+                $html .= $form->renderAs('')->render();
109
+            }
110
+        }
111
+        return ['content' => $html];
112
+    }
113
+
114
+    private function getIndexResponse($section) {
115
+        $templateParams = [];
116
+        $templateParams = array_merge($templateParams, $this->getNavigationParameters($section));
117
+        $templateParams = array_merge($templateParams, $this->getSettings($section));
118
+
119
+        return new TemplateResponse('settings', 'settings/frame', $templateParams);
120
+    }
121
+
122
+    abstract protected function getSettings($section);
123 123
 }
Please login to merge, or discard this patch.
settings/templates/settings/frame.php 1 patch
Indentation   +23 added lines, -23 removed lines patch added patch discarded remove patch
@@ -32,13 +32,13 @@  discard block
 block discarded – undo
32 32
 	<ul>
33 33
 		<li class="settings-caption">Personal</li>
34 34
 		<?php
35
-		foreach($_['forms']['personal'] as $form) {
36
-			if (isset($form['anchor'])) {
37
-				$anchor = \OC::$server->getURLGenerator()->linkToRoute('settings.PersonalSettings.index', ['section' => $form['anchor']]);
38
-				$class = 'nav-icon-' . $form['anchor'];
39
-				$sectionName = $form['section-name'];
40
-				$active = $form['active'] ? ' class="active"' : '';
41
-				?>
35
+        foreach($_['forms']['personal'] as $form) {
36
+            if (isset($form['anchor'])) {
37
+                $anchor = \OC::$server->getURLGenerator()->linkToRoute('settings.PersonalSettings.index', ['section' => $form['anchor']]);
38
+                $class = 'nav-icon-' . $form['anchor'];
39
+                $sectionName = $form['section-name'];
40
+                $active = $form['active'] ? ' class="active"' : '';
41
+                ?>
42 42
 				<li <?php print_unescaped($form['active'] ? ' class="active"' : ''); ?>>
43 43
 					<a href="<?php p($anchor); ?>">
44 44
 						<?php if (!empty($form['icon'])) { ?>
@@ -50,24 +50,24 @@  discard block
 block discarded – undo
50 50
 					</a>
51 51
 				</li>
52 52
 				<?php
53
-			}
54
-		}
55
-		?>
53
+            }
54
+        }
55
+        ?>
56 56
 
57 57
 		<?php
58
-		if(!empty($_['forms']['admin'])) {
59
-			?>
58
+        if(!empty($_['forms']['admin'])) {
59
+            ?>
60 60
 			<li class="settings-caption">Administration</li>
61 61
 			<?php
62
-		}
63
-		foreach($_['forms']['admin'] as $form) {
64
-			if (isset($form['anchor'])) {
62
+        }
63
+        foreach($_['forms']['admin'] as $form) {
64
+            if (isset($form['anchor'])) {
65 65
 
66
-				$anchor = \OC::$server->getURLGenerator()->linkToRoute('settings.AdminSettings.index', ['section' => $form['anchor']]);
67
-				$class = 'nav-icon-' . $form['anchor'];
68
-				$sectionName = $form['section-name'];
69
-				$active = $form['active'] ? ' class="active"' : '';
70
-		?>
66
+                $anchor = \OC::$server->getURLGenerator()->linkToRoute('settings.AdminSettings.index', ['section' => $form['anchor']]);
67
+                $class = 'nav-icon-' . $form['anchor'];
68
+                $sectionName = $form['section-name'];
69
+                $active = $form['active'] ? ' class="active"' : '';
70
+        ?>
71 71
 				<li <?php print_unescaped($form['active'] ? ' class="active"' : ''); ?>>
72 72
 					<a href="<?php p($anchor); ?>">
73 73
 						<?php if (!empty($form['icon'])) { ?>
@@ -79,9 +79,9 @@  discard block
 block discarded – undo
79 79
 					</a>
80 80
 				</li>
81 81
 		<?php
82
-			}
83
-		}
84
-		?>
82
+            }
83
+        }
84
+        ?>
85 85
 	</ul>
86 86
 </div>
87 87
 
Please login to merge, or discard this patch.
settings/routes.php 1 patch
Indentation   +53 added lines, -53 removed lines patch added patch discarded remove patch
@@ -36,77 +36,77 @@
 block discarded – undo
36 36
 
37 37
 $application = new Application();
38 38
 $application->registerRoutes($this, [
39
-	'resources' => [
40
-		'users' => ['url' => '/settings/users/users'],
41
-		'AuthSettings' => ['url' => '/settings/personal/authtokens'],
42
-	],
43
-	'routes' => [
44
-		['name' => 'MailSettings#setMailSettings', 'url' => '/settings/admin/mailsettings', 'verb' => 'POST'],
45
-		['name' => 'MailSettings#storeCredentials', 'url' => '/settings/admin/mailsettings/credentials', 'verb' => 'POST'],
46
-		['name' => 'MailSettings#sendTestMail', 'url' => '/settings/admin/mailtest', 'verb' => 'POST'],
47
-		['name' => 'Encryption#startMigration', 'url' => '/settings/admin/startmigration', 'verb' => 'POST'],
48
-		['name' => 'AppSettings#listCategories', 'url' => '/settings/apps/categories', 'verb' => 'GET'],
49
-		['name' => 'AppSettings#viewApps', 'url' => '/settings/apps', 'verb' => 'GET'],
50
-		['name' => 'AppSettings#listApps', 'url' => '/settings/apps/list', 'verb' => 'GET'],
51
-		['name' => 'SecuritySettings#trustedDomains', 'url' => '/settings/admin/security/trustedDomains', 'verb' => 'POST'],
52
-		['name' => 'Users#setDisplayName', 'url' => '/settings/users/{username}/displayName', 'verb' => 'POST'],
53
-		['name' => 'Users#setEMailAddress', 'url' => '/settings/users/{id}/mailAddress', 'verb' => 'PUT'],
54
-		['name' => 'Users#setUserSettings', 'url' => '/settings/users/{username}/settings', 'verb' => 'PUT'],
55
-		['name' => 'Users#getVerificationCode', 'url' => '/settings/users/{account}/verify', 'verb' => 'GET'],
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' => 'PersonalSettings#index', 'url' => '/settings/user/{section}', 'verb' => 'GET', 'defaults' => ['section' => 'personal-info']],
69
-		['name' => 'AdminSettings#index', 'url' => '/settings/admin/{section}', 'verb' => 'GET', 'defaults' => ['section' => 'server']],
70
-		['name' => 'AdminSettings#form', 'url' => '/settings/admin/{section}', 'verb' => 'GET'],
71
-		['name' => 'ChangePassword#changePersonalPassword', 'url' => '/settings/personal/changepassword', 'verb' => 'POST'],
72
-		['name' => 'ChangePassword#changeUserPassword', 'url' => '/settings/users/changepassword', 'verb' => 'POST'],
73
-		['name' => 'Personal#setLanguage', 'url' => '/settings/ajax/setlanguage.php', 'verb' => 'POST'],
74
-		['name' => 'Groups#index', 'url' => '/settings/users/groups', 'verb' => 'GET'],
75
-		['name' => 'Groups#show', 'url' => '/settings/users/groups/{id}', 'requirements' => ['id' => '[^?]*'], 'verb' => 'GET'],
76
-		['name' => 'Groups#create', 'url' => '/settings/users/groups', 'verb' => 'POST'],
77
-		['name' => 'Groups#update', 'url' => '/settings/users/groups/{id}', 'requirements' => ['id' => '[^?]*'], 'verb' => 'PUT'],
78
-		['name' => 'Groups#destroy', 'url' => '/settings/users/groups/{id}', 'requirements' => ['id' => '[^?]*'], 'verb' => 'DELETE'],
79
-	]
39
+    'resources' => [
40
+        'users' => ['url' => '/settings/users/users'],
41
+        'AuthSettings' => ['url' => '/settings/personal/authtokens'],
42
+    ],
43
+    'routes' => [
44
+        ['name' => 'MailSettings#setMailSettings', 'url' => '/settings/admin/mailsettings', 'verb' => 'POST'],
45
+        ['name' => 'MailSettings#storeCredentials', 'url' => '/settings/admin/mailsettings/credentials', 'verb' => 'POST'],
46
+        ['name' => 'MailSettings#sendTestMail', 'url' => '/settings/admin/mailtest', 'verb' => 'POST'],
47
+        ['name' => 'Encryption#startMigration', 'url' => '/settings/admin/startmigration', 'verb' => 'POST'],
48
+        ['name' => 'AppSettings#listCategories', 'url' => '/settings/apps/categories', 'verb' => 'GET'],
49
+        ['name' => 'AppSettings#viewApps', 'url' => '/settings/apps', 'verb' => 'GET'],
50
+        ['name' => 'AppSettings#listApps', 'url' => '/settings/apps/list', 'verb' => 'GET'],
51
+        ['name' => 'SecuritySettings#trustedDomains', 'url' => '/settings/admin/security/trustedDomains', 'verb' => 'POST'],
52
+        ['name' => 'Users#setDisplayName', 'url' => '/settings/users/{username}/displayName', 'verb' => 'POST'],
53
+        ['name' => 'Users#setEMailAddress', 'url' => '/settings/users/{id}/mailAddress', 'verb' => 'PUT'],
54
+        ['name' => 'Users#setUserSettings', 'url' => '/settings/users/{username}/settings', 'verb' => 'PUT'],
55
+        ['name' => 'Users#getVerificationCode', 'url' => '/settings/users/{account}/verify', 'verb' => 'GET'],
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' => 'PersonalSettings#index', 'url' => '/settings/user/{section}', 'verb' => 'GET', 'defaults' => ['section' => 'personal-info']],
69
+        ['name' => 'AdminSettings#index', 'url' => '/settings/admin/{section}', 'verb' => 'GET', 'defaults' => ['section' => 'server']],
70
+        ['name' => 'AdminSettings#form', 'url' => '/settings/admin/{section}', 'verb' => 'GET'],
71
+        ['name' => 'ChangePassword#changePersonalPassword', 'url' => '/settings/personal/changepassword', 'verb' => 'POST'],
72
+        ['name' => 'ChangePassword#changeUserPassword', 'url' => '/settings/users/changepassword', 'verb' => 'POST'],
73
+        ['name' => 'Personal#setLanguage', 'url' => '/settings/ajax/setlanguage.php', 'verb' => 'POST'],
74
+        ['name' => 'Groups#index', 'url' => '/settings/users/groups', 'verb' => 'GET'],
75
+        ['name' => 'Groups#show', 'url' => '/settings/users/groups/{id}', 'requirements' => ['id' => '[^?]*'], 'verb' => 'GET'],
76
+        ['name' => 'Groups#create', 'url' => '/settings/users/groups', 'verb' => 'POST'],
77
+        ['name' => 'Groups#update', 'url' => '/settings/users/groups/{id}', 'requirements' => ['id' => '[^?]*'], 'verb' => 'PUT'],
78
+        ['name' => 'Groups#destroy', 'url' => '/settings/users/groups/{id}', 'requirements' => ['id' => '[^?]*'], 'verb' => 'DELETE'],
79
+    ]
80 80
 ]);
81 81
 
82 82
 /** @var $this \OCP\Route\IRouter */
83 83
 
84 84
 // Settings pages
85 85
 $this->create('settings_help', '/settings/help')
86
-	->actionInclude('settings/help.php');
86
+    ->actionInclude('settings/help.php');
87 87
 $this->create('settings_users', '/settings/users')
88
-	->actionInclude('settings/users.php');
88
+    ->actionInclude('settings/users.php');
89 89
 // Settings ajax actions
90 90
 // users
91 91
 $this->create('settings_ajax_setquota', '/settings/ajax/setquota.php')
92
-	->actionInclude('settings/ajax/setquota.php');
92
+    ->actionInclude('settings/ajax/setquota.php');
93 93
 $this->create('settings_ajax_togglegroups', '/settings/ajax/togglegroups.php')
94
-	->actionInclude('settings/ajax/togglegroups.php');
94
+    ->actionInclude('settings/ajax/togglegroups.php');
95 95
 $this->create('settings_ajax_togglesubadmins', '/settings/ajax/togglesubadmins.php')
96
-	->actionInclude('settings/ajax/togglesubadmins.php');
96
+    ->actionInclude('settings/ajax/togglesubadmins.php');
97 97
 $this->create('settings_ajax_changegorupname', '/settings/ajax/changegroupname.php')
98
-	->actionInclude('settings/ajax/changegroupname.php');
98
+    ->actionInclude('settings/ajax/changegroupname.php');
99 99
 // apps
100 100
 $this->create('settings_ajax_enableapp', '/settings/ajax/enableapp.php')
101
-	->actionInclude('settings/ajax/enableapp.php');
101
+    ->actionInclude('settings/ajax/enableapp.php');
102 102
 $this->create('settings_ajax_disableapp', '/settings/ajax/disableapp.php')
103
-	->actionInclude('settings/ajax/disableapp.php');
103
+    ->actionInclude('settings/ajax/disableapp.php');
104 104
 $this->create('settings_ajax_updateapp', '/settings/ajax/updateapp.php')
105
-	->actionInclude('settings/ajax/updateapp.php');
105
+    ->actionInclude('settings/ajax/updateapp.php');
106 106
 $this->create('settings_ajax_uninstallapp', '/settings/ajax/uninstallapp.php')
107
-	->actionInclude('settings/ajax/uninstallapp.php');
107
+    ->actionInclude('settings/ajax/uninstallapp.php');
108 108
 $this->create('settings_ajax_navigationdetect', '/settings/ajax/navigationdetect.php')
109
-	->actionInclude('settings/ajax/navigationdetect.php');
109
+    ->actionInclude('settings/ajax/navigationdetect.php');
110 110
 // admin
111 111
 $this->create('settings_ajax_excludegroups', '/settings/ajax/excludegroups.php')
112
-	->actionInclude('settings/ajax/excludegroups.php');
112
+    ->actionInclude('settings/ajax/excludegroups.php');
Please login to merge, or discard this patch.
lib/private/Settings/Personal/SyncClients.php 1 patch
Indentation   +47 added lines, -47 removed lines patch added patch discarded remove patch
@@ -30,56 +30,56 @@
 block discarded – undo
30 30
 
31 31
 class SyncClients implements ISettings {
32 32
 
33
-	/** @var IConfig */
34
-	private $config;
35
-	/** @var \OC_Defaults */
36
-	private $defaults;
33
+    /** @var IConfig */
34
+    private $config;
35
+    /** @var \OC_Defaults */
36
+    private $defaults;
37 37
 
38
-	public function __construct(IConfig $config, \OC_Defaults $defaults) {
39
-		$this->config = $config;
40
-		$this->defaults = $defaults;
41
-	}
38
+    public function __construct(IConfig $config, \OC_Defaults $defaults) {
39
+        $this->config = $config;
40
+        $this->defaults = $defaults;
41
+    }
42 42
 
43
-	/**
44
-	 * @return TemplateResponse returns the instance with all parameters set, ready to be rendered
45
-	 * @since 9.1
46
-	 */
47
-	public function getForm() {
48
-		$parameters = [ 'clients' => $this->getClientLinks() ];
49
-		return new TemplateResponse('settings', 'settings/personal/sync-clients', $parameters);
50
-	}
43
+    /**
44
+     * @return TemplateResponse returns the instance with all parameters set, ready to be rendered
45
+     * @since 9.1
46
+     */
47
+    public function getForm() {
48
+        $parameters = [ 'clients' => $this->getClientLinks() ];
49
+        return new TemplateResponse('settings', 'settings/personal/sync-clients', $parameters);
50
+    }
51 51
 
52
-	/**
53
-	 * @return string the section ID, e.g. 'sharing'
54
-	 * @since 9.1
55
-	 */
56
-	public function getSection() {
57
-		return 'sync-clients';
58
-	}
52
+    /**
53
+     * @return string the section ID, e.g. 'sharing'
54
+     * @since 9.1
55
+     */
56
+    public function getSection() {
57
+        return 'sync-clients';
58
+    }
59 59
 
60
-	/**
61
-	 * @return int whether the form should be rather on the top or bottom of
62
-	 * the admin section. The forms are arranged in ascending order of the
63
-	 * priority values. It is required to return a value between 0 and 100.
64
-	 *
65
-	 * E.g.: 70
66
-	 * @since 9.1
67
-	 */
68
-	public function getPriority() {
69
-		return 20;
70
-	}
60
+    /**
61
+     * @return int whether the form should be rather on the top or bottom of
62
+     * the admin section. The forms are arranged in ascending order of the
63
+     * priority values. It is required to return a value between 0 and 100.
64
+     *
65
+     * E.g.: 70
66
+     * @since 9.1
67
+     */
68
+    public function getPriority() {
69
+        return 20;
70
+    }
71 71
 
72
-	/**
73
-	 * returns an array containing links to the various clients
74
-	 *
75
-	 * @return array
76
-	 */
77
-	private function getClientLinks() {
78
-		$clients = [
79
-			'desktop' => $this->config->getSystemValue('customclient_desktop', $this->defaults->getSyncClientUrl()),
80
-			'android' => $this->config->getSystemValue('customclient_android', $this->defaults->getAndroidClientUrl()),
81
-			'ios' => $this->config->getSystemValue('customclient_ios', $this->defaults->getiOSClientUrl())
82
-		];
83
-		return $clients;
84
-	}
72
+    /**
73
+     * returns an array containing links to the various clients
74
+     *
75
+     * @return array
76
+     */
77
+    private function getClientLinks() {
78
+        $clients = [
79
+            'desktop' => $this->config->getSystemValue('customclient_desktop', $this->defaults->getSyncClientUrl()),
80
+            'android' => $this->config->getSystemValue('customclient_android', $this->defaults->getAndroidClientUrl()),
81
+            'ios' => $this->config->getSystemValue('customclient_ios', $this->defaults->getiOSClientUrl())
82
+        ];
83
+        return $clients;
84
+    }
85 85
 }
Please login to merge, or discard this patch.
lib/private/NavigationManager.php 1 patch
Indentation   +218 added lines, -218 removed lines patch added patch discarded remove patch
@@ -41,241 +41,241 @@
 block discarded – undo
41 41
  */
42 42
 
43 43
 class NavigationManager implements INavigationManager {
44
-	protected $entries = [];
45
-	protected $closureEntries = [];
46
-	protected $activeEntry;
47
-	/** @var bool */
48
-	protected $init = false;
49
-	/** @var IAppManager|AppManager */
50
-	protected $appManager;
51
-	/** @var IURLGenerator */
52
-	private $urlGenerator;
53
-	/** @var IFactory */
54
-	private $l10nFac;
55
-	/** @var IUserSession */
56
-	private $userSession;
57
-	/** @var IGroupManager|Manager */
58
-	private $groupManager;
59
-	/** @var IConfig */
60
-	private $config;
44
+    protected $entries = [];
45
+    protected $closureEntries = [];
46
+    protected $activeEntry;
47
+    /** @var bool */
48
+    protected $init = false;
49
+    /** @var IAppManager|AppManager */
50
+    protected $appManager;
51
+    /** @var IURLGenerator */
52
+    private $urlGenerator;
53
+    /** @var IFactory */
54
+    private $l10nFac;
55
+    /** @var IUserSession */
56
+    private $userSession;
57
+    /** @var IGroupManager|Manager */
58
+    private $groupManager;
59
+    /** @var IConfig */
60
+    private $config;
61 61
 
62
-	public function __construct(IAppManager $appManager,
63
-						 IURLGenerator $urlGenerator,
64
-						 IFactory $l10nFac,
65
-						 IUserSession $userSession,
66
-						 IGroupManager $groupManager,
67
-						 IConfig $config) {
68
-		$this->appManager = $appManager;
69
-		$this->urlGenerator = $urlGenerator;
70
-		$this->l10nFac = $l10nFac;
71
-		$this->userSession = $userSession;
72
-		$this->groupManager = $groupManager;
73
-		$this->config = $config;
74
-	}
62
+    public function __construct(IAppManager $appManager,
63
+                            IURLGenerator $urlGenerator,
64
+                            IFactory $l10nFac,
65
+                            IUserSession $userSession,
66
+                            IGroupManager $groupManager,
67
+                            IConfig $config) {
68
+        $this->appManager = $appManager;
69
+        $this->urlGenerator = $urlGenerator;
70
+        $this->l10nFac = $l10nFac;
71
+        $this->userSession = $userSession;
72
+        $this->groupManager = $groupManager;
73
+        $this->config = $config;
74
+    }
75 75
 
76
-	/**
77
-	 * Creates a new navigation entry
78
-	 *
79
-	 * @param array|\Closure $entry Array containing: id, name, order, icon and href key
80
-	 *					The use of a closure is preferred, because it will avoid
81
-	 * 					loading the routing of your app, unless required.
82
-	 * @return void
83
-	 */
84
-	public function add($entry) {
85
-		if ($entry instanceof \Closure) {
86
-			$this->closureEntries[] = $entry;
87
-			return;
88
-		}
76
+    /**
77
+     * Creates a new navigation entry
78
+     *
79
+     * @param array|\Closure $entry Array containing: id, name, order, icon and href key
80
+     *					The use of a closure is preferred, because it will avoid
81
+     * 					loading the routing of your app, unless required.
82
+     * @return void
83
+     */
84
+    public function add($entry) {
85
+        if ($entry instanceof \Closure) {
86
+            $this->closureEntries[] = $entry;
87
+            return;
88
+        }
89 89
 
90
-		$entry['active'] = false;
91
-		if(!isset($entry['icon'])) {
92
-			$entry['icon'] = '';
93
-		}
94
-		if(!isset($entry['type'])) {
95
-			$entry['type'] = 'link';
96
-		}
97
-		$this->entries[] = $entry;
98
-	}
90
+        $entry['active'] = false;
91
+        if(!isset($entry['icon'])) {
92
+            $entry['icon'] = '';
93
+        }
94
+        if(!isset($entry['type'])) {
95
+            $entry['type'] = 'link';
96
+        }
97
+        $this->entries[] = $entry;
98
+    }
99 99
 
100
-	/**
101
-	 * returns all the added Menu entries
102
-	 * @param string $type
103
-	 * @return array an array of the added entries
104
-	 */
105
-	public function getAll($type = 'link') {
106
-		$this->init();
107
-		foreach ($this->closureEntries as $c) {
108
-			$this->add($c());
109
-		}
110
-		$this->closureEntries = array();
100
+    /**
101
+     * returns all the added Menu entries
102
+     * @param string $type
103
+     * @return array an array of the added entries
104
+     */
105
+    public function getAll($type = 'link') {
106
+        $this->init();
107
+        foreach ($this->closureEntries as $c) {
108
+            $this->add($c());
109
+        }
110
+        $this->closureEntries = array();
111 111
 
112
-		if ($type === 'all') {
113
-			return $this->entries;
114
-		}
112
+        if ($type === 'all') {
113
+            return $this->entries;
114
+        }
115 115
 
116
-		return array_filter($this->entries, function($entry) use ($type) {
117
-			return $entry['type'] === $type;
118
-		});
119
-	}
116
+        return array_filter($this->entries, function($entry) use ($type) {
117
+            return $entry['type'] === $type;
118
+        });
119
+    }
120 120
 
121
-	/**
122
-	 * removes all the entries
123
-	 */
124
-	public function clear($loadDefaultLinks = true) {
125
-		$this->entries = [];
126
-		$this->closureEntries = [];
127
-		$this->init = !$loadDefaultLinks;
128
-	}
121
+    /**
122
+     * removes all the entries
123
+     */
124
+    public function clear($loadDefaultLinks = true) {
125
+        $this->entries = [];
126
+        $this->closureEntries = [];
127
+        $this->init = !$loadDefaultLinks;
128
+    }
129 129
 
130
-	/**
131
-	 * Sets the current navigation entry of the currently running app
132
-	 * @param string $id of the app entry to activate (from added $entry)
133
-	 */
134
-	public function setActiveEntry($id) {
135
-		$this->activeEntry = $id;
136
-	}
130
+    /**
131
+     * Sets the current navigation entry of the currently running app
132
+     * @param string $id of the app entry to activate (from added $entry)
133
+     */
134
+    public function setActiveEntry($id) {
135
+        $this->activeEntry = $id;
136
+    }
137 137
 
138
-	/**
139
-	 * gets the active Menu entry
140
-	 * @return string id or empty string
141
-	 *
142
-	 * This function returns the id of the active navigation entry (set by
143
-	 * setActiveEntry
144
-	 */
145
-	public function getActiveEntry() {
146
-		return $this->activeEntry;
147
-	}
138
+    /**
139
+     * gets the active Menu entry
140
+     * @return string id or empty string
141
+     *
142
+     * This function returns the id of the active navigation entry (set by
143
+     * setActiveEntry
144
+     */
145
+    public function getActiveEntry() {
146
+        return $this->activeEntry;
147
+    }
148 148
 
149
-	private function init() {
150
-		if ($this->init) {
151
-			return;
152
-		}
153
-		$this->init = true;
149
+    private function init() {
150
+        if ($this->init) {
151
+            return;
152
+        }
153
+        $this->init = true;
154 154
 
155
-		$l = $this->l10nFac->get('lib');
156
-		if ($this->config->getSystemValue('knowledgebaseenabled', true)) {
157
-			$this->add([
158
-				'type' => 'settings',
159
-				'id' => 'help',
160
-				'order' => 5,
161
-				'href' => $this->urlGenerator->linkToRoute('settings_help'),
162
-				'name' => $l->t('Help'),
163
-				'icon' => $this->urlGenerator->imagePath('settings', 'help.svg'),
164
-			]);
165
-		}
155
+        $l = $this->l10nFac->get('lib');
156
+        if ($this->config->getSystemValue('knowledgebaseenabled', true)) {
157
+            $this->add([
158
+                'type' => 'settings',
159
+                'id' => 'help',
160
+                'order' => 5,
161
+                'href' => $this->urlGenerator->linkToRoute('settings_help'),
162
+                'name' => $l->t('Help'),
163
+                'icon' => $this->urlGenerator->imagePath('settings', 'help.svg'),
164
+            ]);
165
+        }
166 166
 
167
-		if ($this->userSession->isLoggedIn()) {
168
-			if ($this->isAdmin()) {
169
-				// App management
170
-				$this->add([
171
-					'type' => 'settings',
172
-					'id' => 'core_apps',
173
-					'order' => 3,
174
-					'href' => $this->urlGenerator->linkToRoute('settings.AppSettings.viewApps'),
175
-					'icon' => $this->urlGenerator->imagePath('settings', 'apps.svg'),
176
-					'name' => $l->t('Apps'),
177
-				]);
178
-			}
167
+        if ($this->userSession->isLoggedIn()) {
168
+            if ($this->isAdmin()) {
169
+                // App management
170
+                $this->add([
171
+                    'type' => 'settings',
172
+                    'id' => 'core_apps',
173
+                    'order' => 3,
174
+                    'href' => $this->urlGenerator->linkToRoute('settings.AppSettings.viewApps'),
175
+                    'icon' => $this->urlGenerator->imagePath('settings', 'apps.svg'),
176
+                    'name' => $l->t('Apps'),
177
+                ]);
178
+            }
179 179
 
180
-			// Personal and (if applicable) admin settings
181
-			$this->add([
182
-				'type' => 'settings',
183
-				'id' => 'settings',
184
-				'order' => 1,
185
-				'href' => $this->urlGenerator->linkToRoute('settings.PersonalSettings.index'),
186
-				'name' => $l->t('Settings'),
187
-				'icon' => $this->urlGenerator->imagePath('settings', 'admin.svg'),
188
-			]);
180
+            // Personal and (if applicable) admin settings
181
+            $this->add([
182
+                'type' => 'settings',
183
+                'id' => 'settings',
184
+                'order' => 1,
185
+                'href' => $this->urlGenerator->linkToRoute('settings.PersonalSettings.index'),
186
+                'name' => $l->t('Settings'),
187
+                'icon' => $this->urlGenerator->imagePath('settings', 'admin.svg'),
188
+            ]);
189 189
 
190
-			// Logout
191
-			$this->add([
192
-				'type' => 'settings',
193
-				'id' => 'logout',
194
-				'order' => 99999,
195
-				'href' => $this->urlGenerator->linkToRouteAbsolute(
196
-					'core.login.logout',
197
-					['requesttoken' => \OCP\Util::callRegister()]
198
-				),
199
-				'name' => $l->t('Log out'),
200
-				'icon' => $this->urlGenerator->imagePath('core', 'actions/logout.svg'),
201
-			]);
190
+            // Logout
191
+            $this->add([
192
+                'type' => 'settings',
193
+                'id' => 'logout',
194
+                'order' => 99999,
195
+                'href' => $this->urlGenerator->linkToRouteAbsolute(
196
+                    'core.login.logout',
197
+                    ['requesttoken' => \OCP\Util::callRegister()]
198
+                ),
199
+                'name' => $l->t('Log out'),
200
+                'icon' => $this->urlGenerator->imagePath('core', 'actions/logout.svg'),
201
+            ]);
202 202
 
203
-			if ($this->isSubadmin()) {
204
-				// User management
205
-				$this->add([
206
-					'type' => 'settings',
207
-					'id' => 'core_users',
208
-					'order' => 4,
209
-					'href' => $this->urlGenerator->linkToRoute('settings_users'),
210
-					'name' => $l->t('Users'),
211
-					'icon' => $this->urlGenerator->imagePath('settings', 'users.svg'),
212
-				]);
213
-			}
214
-		}
203
+            if ($this->isSubadmin()) {
204
+                // User management
205
+                $this->add([
206
+                    'type' => 'settings',
207
+                    'id' => 'core_users',
208
+                    'order' => 4,
209
+                    'href' => $this->urlGenerator->linkToRoute('settings_users'),
210
+                    'name' => $l->t('Users'),
211
+                    'icon' => $this->urlGenerator->imagePath('settings', 'users.svg'),
212
+                ]);
213
+            }
214
+        }
215 215
 
216
-		if ($this->appManager === 'null') {
217
-			return;
218
-		}
219
-		foreach ($this->appManager->getInstalledApps() as $app) {
220
-			// load plugins and collections from info.xml
221
-			$info = $this->appManager->getAppInfo($app);
222
-			if (empty($info['navigations'])) {
223
-				continue;
224
-			}
225
-			foreach ($info['navigations'] as $nav) {
226
-				if (!isset($nav['name'])) {
227
-					continue;
228
-				}
229
-				if (!isset($nav['route'])) {
230
-					continue;
231
-				}
232
-				$role = isset($nav['@attributes']['role']) ? $nav['@attributes']['role'] : 'all';
233
-				if ($role === 'admin' && !$this->isAdmin()) {
234
-					continue;
235
-				}
236
-				$l = $this->l10nFac->get($app);
237
-				$id = isset($nav['id']) ? $nav['id'] : $app;
238
-				$order = isset($nav['order']) ? $nav['order'] : 100;
239
-				$type = isset($nav['type']) ? $nav['type'] : 'link';
240
-				$route = $this->urlGenerator->linkToRoute($nav['route']);
241
-				$icon = isset($nav['icon']) ? $nav['icon'] : 'app.svg';
242
-				foreach ([$icon, "$app.svg"] as $i) {
243
-					try {
244
-						$icon = $this->urlGenerator->imagePath($app, $i);
245
-						break;
246
-					} catch (\RuntimeException $ex) {
247
-						// no icon? - ignore it then
248
-					}
249
-				}
250
-				if ($icon === null) {
251
-					$icon = $this->urlGenerator->imagePath('core', 'default-app-icon');
252
-				}
216
+        if ($this->appManager === 'null') {
217
+            return;
218
+        }
219
+        foreach ($this->appManager->getInstalledApps() as $app) {
220
+            // load plugins and collections from info.xml
221
+            $info = $this->appManager->getAppInfo($app);
222
+            if (empty($info['navigations'])) {
223
+                continue;
224
+            }
225
+            foreach ($info['navigations'] as $nav) {
226
+                if (!isset($nav['name'])) {
227
+                    continue;
228
+                }
229
+                if (!isset($nav['route'])) {
230
+                    continue;
231
+                }
232
+                $role = isset($nav['@attributes']['role']) ? $nav['@attributes']['role'] : 'all';
233
+                if ($role === 'admin' && !$this->isAdmin()) {
234
+                    continue;
235
+                }
236
+                $l = $this->l10nFac->get($app);
237
+                $id = isset($nav['id']) ? $nav['id'] : $app;
238
+                $order = isset($nav['order']) ? $nav['order'] : 100;
239
+                $type = isset($nav['type']) ? $nav['type'] : 'link';
240
+                $route = $this->urlGenerator->linkToRoute($nav['route']);
241
+                $icon = isset($nav['icon']) ? $nav['icon'] : 'app.svg';
242
+                foreach ([$icon, "$app.svg"] as $i) {
243
+                    try {
244
+                        $icon = $this->urlGenerator->imagePath($app, $i);
245
+                        break;
246
+                    } catch (\RuntimeException $ex) {
247
+                        // no icon? - ignore it then
248
+                    }
249
+                }
250
+                if ($icon === null) {
251
+                    $icon = $this->urlGenerator->imagePath('core', 'default-app-icon');
252
+                }
253 253
 
254
-				$this->add([
255
-					'id' => $id,
256
-					'order' => $order,
257
-					'href' => $route,
258
-					'icon' => $icon,
259
-					'type' => $type,
260
-					'name' => $l->t($nav['name']),
261
-				]);
262
-			}
263
-		}
264
-	}
254
+                $this->add([
255
+                    'id' => $id,
256
+                    'order' => $order,
257
+                    'href' => $route,
258
+                    'icon' => $icon,
259
+                    'type' => $type,
260
+                    'name' => $l->t($nav['name']),
261
+                ]);
262
+            }
263
+        }
264
+    }
265 265
 
266
-	private function isAdmin() {
267
-		$user = $this->userSession->getUser();
268
-		if ($user !== null) {
269
-			return $this->groupManager->isAdmin($user->getUID());
270
-		}
271
-		return false;
272
-	}
266
+    private function isAdmin() {
267
+        $user = $this->userSession->getUser();
268
+        if ($user !== null) {
269
+            return $this->groupManager->isAdmin($user->getUID());
270
+        }
271
+        return false;
272
+    }
273 273
 
274
-	private function isSubadmin() {
275
-		$user = $this->userSession->getUser();
276
-		if ($user !== null) {
277
-			return $this->groupManager->getSubAdmin()->isSubAdmin($user);
278
-		}
279
-		return false;
280
-	}
274
+    private function isSubadmin() {
275
+        $user = $this->userSession->getUser();
276
+        if ($user !== null) {
277
+            return $this->groupManager->getSubAdmin()->isSubAdmin($user);
278
+        }
279
+        return false;
280
+    }
281 281
 }
Please login to merge, or discard this patch.
lib/public/Settings/IManager.php 1 patch
Indentation   +85 added lines, -85 removed lines patch added patch discarded remove patch
@@ -27,99 +27,99 @@
 block discarded – undo
27 27
  * @since 9.1
28 28
  */
29 29
 interface IManager {
30
-	/**
31
-	 * @since 9.1.0
32
-	 */
33
-	const KEY_ADMIN_SETTINGS = 'admin';
30
+    /**
31
+     * @since 9.1.0
32
+     */
33
+    const KEY_ADMIN_SETTINGS = 'admin';
34 34
 
35
-	/**
36
-	 * @since 9.1.0
37
-	 */
38
-	const KEY_ADMIN_SECTION  = 'admin-section';
35
+    /**
36
+     * @since 9.1.0
37
+     */
38
+    const KEY_ADMIN_SECTION  = 'admin-section';
39 39
 
40
-	/**
41
-	 * @since 12.0.0
42
-	 */
43
-	const KEY_PERSONAL_SETTINGS = 'personal';
40
+    /**
41
+     * @since 12.0.0
42
+     */
43
+    const KEY_PERSONAL_SETTINGS = 'personal';
44 44
 
45
-	/**
46
-	 * @since 12.0.0
47
-	 */
48
-	const KEY_PERSONAL_SECTION  = 'personal-section';
45
+    /**
46
+     * @since 12.0.0
47
+     */
48
+    const KEY_PERSONAL_SECTION  = 'personal-section';
49 49
 
50
-	/**
51
-	 * sets up settings according to data specified by an apps info.xml, within
52
-	 * the <settings> element.
53
-	 *
54
-	 * @param array $settings an associative array, allowed keys are as specified
55
-	 *                        by the KEY_ constant of  this interface. The value
56
-	 *                        must always be a class name, implement either
57
-	 *                        IAdmin or ISection. I.e. only one section and admin
58
-	 *                        setting can be configured per app.
59
-	 * @since 9.1.0
60
-	 */
61
-	public function setupSettings(array $settings);
50
+    /**
51
+     * sets up settings according to data specified by an apps info.xml, within
52
+     * the <settings> element.
53
+     *
54
+     * @param array $settings an associative array, allowed keys are as specified
55
+     *                        by the KEY_ constant of  this interface. The value
56
+     *                        must always be a class name, implement either
57
+     *                        IAdmin or ISection. I.e. only one section and admin
58
+     *                        setting can be configured per app.
59
+     * @since 9.1.0
60
+     */
61
+    public function setupSettings(array $settings);
62 62
 
63
-	/**
64
-	 * attempts to remove an apps section and/or settings entry. A listener is
65
-	 * added centrally making sure that this method is called ones an app was
66
-	 * disabled.
67
-	 *
68
-	 * What this does not help with is when applications change their settings
69
-	 * or section classes during their life time. New entries will be added,
70
-	 * but inactive ones will still reside in the database.
71
-	 *
72
-	 * @param string $appId
73
-	 * @since 9.1.0
74
-	 */
75
-	public function onAppDisabled($appId);
63
+    /**
64
+     * attempts to remove an apps section and/or settings entry. A listener is
65
+     * added centrally making sure that this method is called ones an app was
66
+     * disabled.
67
+     *
68
+     * What this does not help with is when applications change their settings
69
+     * or section classes during their life time. New entries will be added,
70
+     * but inactive ones will still reside in the database.
71
+     *
72
+     * @param string $appId
73
+     * @since 9.1.0
74
+     */
75
+    public function onAppDisabled($appId);
76 76
 
77
-	/**
78
-	 * The method should check all registered classes whether they are still
79
-	 * instantiable and remove them, if not. This method is called by a
80
-	 * background job once, after one or more apps were updated.
81
-	 *
82
-	 * An app`s info.xml can change during an update and make it unknown whether
83
-	 * a registered class name was changed or not. An old one would just stay
84
-	 * registered. Another case is if an admin takes a radical approach and
85
-	 * simply removes an app from the app folder. These unregular checks will
86
-	 * take care of such situations.
87
-	 *
88
-	 * @since 9.1.0
89
-	 */
90
-	public function checkForOrphanedClassNames();
77
+    /**
78
+     * The method should check all registered classes whether they are still
79
+     * instantiable and remove them, if not. This method is called by a
80
+     * background job once, after one or more apps were updated.
81
+     *
82
+     * An app`s info.xml can change during an update and make it unknown whether
83
+     * a registered class name was changed or not. An old one would just stay
84
+     * registered. Another case is if an admin takes a radical approach and
85
+     * simply removes an app from the app folder. These unregular checks will
86
+     * take care of such situations.
87
+     *
88
+     * @since 9.1.0
89
+     */
90
+    public function checkForOrphanedClassNames();
91 91
 
92
-	/**
93
-	 * returns a list of the admin sections
94
-	 *
95
-	 * @return array array of ISection[] where key is the priority
96
-	 * @since 9.1.0
97
-	 */
98
-	public function getAdminSections();
92
+    /**
93
+     * returns a list of the admin sections
94
+     *
95
+     * @return array array of ISection[] where key is the priority
96
+     * @since 9.1.0
97
+     */
98
+    public function getAdminSections();
99 99
 
100
-	/**
101
-	 * returns a list of the personal sections
102
-	 *
103
-	 * @return array array of ISection[] where key is the priority
104
-	 * @since 12.0.0
105
-	 */
106
-	public function getPersonalSections();
100
+    /**
101
+     * returns a list of the personal sections
102
+     *
103
+     * @return array array of ISection[] where key is the priority
104
+     * @since 12.0.0
105
+     */
106
+    public function getPersonalSections();
107 107
 
108
-	/**
109
-	 * returns a list of the admin settings
110
-	 *
111
-	 * @param string $section the section id for which to load the settings
112
-	 * @return array array of IAdmin[] where key is the priority
113
-	 * @since 9.1.0
114
-	 */
115
-	public function getAdminSettings($section);
108
+    /**
109
+     * returns a list of the admin settings
110
+     *
111
+     * @param string $section the section id for which to load the settings
112
+     * @return array array of IAdmin[] where key is the priority
113
+     * @since 9.1.0
114
+     */
115
+    public function getAdminSettings($section);
116 116
 
117
-	/**
118
-	 * returns a list of the personal  settings
119
-	 *
120
-	 * @param string $section the section id for which to load the settings
121
-	 * @return array array of IPersonal[] where key is the priority
122
-	 * @since 12.0.0
123
-	 */
124
-	public function getPersonalSettings($section);
117
+    /**
118
+     * returns a list of the personal  settings
119
+     *
120
+     * @param string $section the section id for which to load the settings
121
+     * @return array array of IPersonal[] where key is the priority
122
+     * @since 12.0.0
123
+     */
124
+    public function getPersonalSettings($section);
125 125
 }
Please login to merge, or discard this patch.
settings/templates/settings/personal/personal.info.php 1 patch
Indentation   +41 added lines, -41 removed lines patch added patch discarded remove patch
@@ -25,10 +25,10 @@  discard block
 block discarded – undo
25 25
 /** @var array $_ */
26 26
 
27 27
 script('settings', [
28
-	'usersettings',
29
-	'federationsettingsview',
30
-	'federationscopemenu',
31
-	'settings/personalInfo',
28
+    'usersettings',
29
+    'federationsettingsview',
30
+    'federationscopemenu',
31
+    'settings/personalInfo',
32 32
 ]);
33 33
 vendor_script('strengthify/jquery.strengthify');
34 34
 vendor_style('strengthify/strengthify');
@@ -46,10 +46,10 @@  discard block
 block discarded – undo
46 46
 		<p id="quotatext">
47 47
 			<?php if ($_['quota'] === \OCP\Files\FileInfo::SPACE_UNLIMITED): ?>
48 48
 				<?php print_unescaped($l->t('You are using <strong>%s</strong> of <strong>%s</strong>',
49
-					[$_['usage'], $_['total_space']]));?>
49
+                    [$_['usage'], $_['total_space']]));?>
50 50
 			<?php else: ?>
51 51
 				<?php print_unescaped($l->t('You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)',
52
-					[$_['usage'], $_['total_space'],  $_['usage_relative']]));?>
52
+                    [$_['usage'], $_['total_space'],  $_['usage_relative']]));?>
53 53
 			<?php endif ?>
54 54
 		</p>
55 55
 	</div>
@@ -118,17 +118,17 @@  discard block
 block discarded – undo
118 118
 				<div class="verify <?php if ($_['email'] === ''  || $_['emailScope'] !== 'public') p('hidden'); ?>">
119 119
 					<img id="verify-email" title="<?php p($_['emailMessage']); ?>" data-status="<?php p($_['emailVerification']) ?>" src="
120 120
 				<?php
121
-					switch($_['emailVerification']) {
122
-						case \OC\Accounts\AccountManager::VERIFICATION_IN_PROGRESS:
123
-							p(image_path('core', 'actions/verifying.svg'));
124
-							break;
125
-						case \OC\Accounts\AccountManager::VERIFIED:
126
-							p(image_path('core', 'actions/verified.svg'));
127
-							break;
128
-						default:
129
-							p(image_path('core', 'actions/verify.svg'));
130
-					}
131
-					?>">
121
+                    switch($_['emailVerification']) {
122
+                        case \OC\Accounts\AccountManager::VERIFICATION_IN_PROGRESS:
123
+                            p(image_path('core', 'actions/verifying.svg'));
124
+                            break;
125
+                        case \OC\Accounts\AccountManager::VERIFIED:
126
+                            p(image_path('core', 'actions/verified.svg'));
127
+                            break;
128
+                        default:
129
+                            p(image_path('core', 'actions/verify.svg'));
130
+                    }
131
+                    ?>">
132 132
 				</div>
133 133
 				<input type="email" name="email" id="email" value="<?php p($_['email']); ?>"
134 134
 					<?php if(!$_['displayNameChangeSupported']) { print_unescaped('class="hidden"'); } ?>
@@ -185,17 +185,17 @@  discard block
 block discarded – undo
185 185
 					<div class="verify <?php if ($_['website'] === ''  || $_['websiteScope'] !== 'public') p('hidden'); ?>">
186 186
 						<img id="verify-website" title="<?php p($_['websiteMessage']); ?>" data-status="<?php p($_['websiteVerification']) ?>" src="
187 187
 				<?php
188
-						switch($_['websiteVerification']) {
189
-							case \OC\Accounts\AccountManager::VERIFICATION_IN_PROGRESS:
190
-								p(image_path('core', 'actions/verifying.svg'));
191
-								break;
192
-							case \OC\Accounts\AccountManager::VERIFIED:
193
-								p(image_path('core', 'actions/verified.svg'));
194
-								break;
195
-							default:
196
-								p(image_path('core', 'actions/verify.svg'));
197
-						}
198
-						?>"
188
+                        switch($_['websiteVerification']) {
189
+                            case \OC\Accounts\AccountManager::VERIFICATION_IN_PROGRESS:
190
+                                p(image_path('core', 'actions/verifying.svg'));
191
+                                break;
192
+                            case \OC\Accounts\AccountManager::VERIFIED:
193
+                                p(image_path('core', 'actions/verified.svg'));
194
+                                break;
195
+                            default:
196
+                                p(image_path('core', 'actions/verify.svg'));
197
+                        }
198
+                        ?>"
199 199
 							<?php if($_['websiteVerification'] === \OC\Accounts\AccountManager::VERIFICATION_IN_PROGRESS || $_['websiteVerification'] === \OC\Accounts\AccountManager::NOT_VERIFIED) print_unescaped(' class="verify-action"') ?>
200 200
 						>
201 201
 						<div class="verification-dialog popovermenu bubble menu">
@@ -222,17 +222,17 @@  discard block
 block discarded – undo
222 222
 					<div class="verify <?php if ($_['twitter'] === ''  || $_['twitterScope'] !== 'public') p('hidden'); ?>">
223 223
 						<img id="verify-twitter" title="<?php p($_['twitterMessage']); ?>" data-status="<?php p($_['twitterVerification']) ?>" src="
224 224
 				<?php
225
-						switch($_['twitterVerification']) {
226
-							case \OC\Accounts\AccountManager::VERIFICATION_IN_PROGRESS:
227
-								p(image_path('core', 'actions/verifying.svg'));
228
-								break;
229
-							case \OC\Accounts\AccountManager::VERIFIED:
230
-								p(image_path('core', 'actions/verified.svg'));
231
-								break;
232
-							default:
233
-								p(image_path('core', 'actions/verify.svg'));
234
-						}
235
-						?>"
225
+                        switch($_['twitterVerification']) {
226
+                            case \OC\Accounts\AccountManager::VERIFICATION_IN_PROGRESS:
227
+                                p(image_path('core', 'actions/verifying.svg'));
228
+                                break;
229
+                            case \OC\Accounts\AccountManager::VERIFIED:
230
+                                p(image_path('core', 'actions/verified.svg'));
231
+                                break;
232
+                            default:
233
+                                p(image_path('core', 'actions/verify.svg'));
234
+                        }
235
+                        ?>"
236 236
 							<?php if($_['twitterVerification'] === \OC\Accounts\AccountManager::VERIFICATION_IN_PROGRESS || $_['twitterVerification'] === \OC\Accounts\AccountManager::NOT_VERIFIED) print_unescaped(' class="verify-action"') ?>
237 237
 						>
238 238
 						<div class="verification-dialog popovermenu bubble menu">
@@ -265,8 +265,8 @@  discard block
 block discarded – undo
265 265
 
266 266
 <?php
267 267
 if($_['passwordChangeSupported']) {
268
-	script('jquery-showpassword');
269
-	?>
268
+    script('jquery-showpassword');
269
+    ?>
270 270
 	<form id="passwordform" class="section">
271 271
 		<h2 class="inlineblock"><?php p($l->t('Password'));?></h2>
272 272
 		<div id="password-error-msg" class="msg success inlineblock" style="display: none;">Saved</div>
Please login to merge, or discard this patch.
settings/templates/settings/personal/sync-clients.php 1 patch
Indentation   +9 added lines, -9 removed lines patch added patch discarded remove patch
@@ -42,15 +42,15 @@
 block discarded – undo
42 42
 
43 43
 	<p>
44 44
 		<?php print_unescaped(str_replace(
45
-			[
46
-				'{contributeopen}',
47
-				'{linkclose}',
48
-			],
49
-			[
50
-				'<a href="https://nextcloud.com/contribute" target="_blank" rel="noreferrer">',
51
-				'</a>',
52
-			],
53
-			$l->t('If you want to support the project {contributeopen}join development{linkclose} or {contributeopen}spread the word{linkclose}!'))); ?>
45
+            [
46
+                '{contributeopen}',
47
+                '{linkclose}',
48
+            ],
49
+            [
50
+                '<a href="https://nextcloud.com/contribute" target="_blank" rel="noreferrer">',
51
+                '</a>',
52
+            ],
53
+            $l->t('If you want to support the project {contributeopen}join development{linkclose} or {contributeopen}spread the word{linkclose}!'))); ?>
54 54
 	</p>
55 55
 
56 56
 	<?php if(OC_APP::isEnabled('firstrunwizard')) {?>
Please login to merge, or discard this patch.
lib/private/Settings/Manager.php 2 patches
Doc Comments   +6 added lines patch added patch discarded remove patch
@@ -265,6 +265,9 @@  discard block
 block discarded – undo
265 265
 		return $this->mapper->has($table, $className);
266 266
 	}
267 267
 
268
+	/**
269
+	 * @param string $type
270
+	 */
268 271
 	private function setupSettingsEntry($settingsClassName, $type) {
269 272
 		if (!class_exists($settingsClassName)) {
270 273
 			$this->log->debug('Could not find ' . $type . ' section class ' . $settingsClassName);
@@ -294,6 +297,9 @@  discard block
 block discarded – undo
294 297
 		}
295 298
 	}
296 299
 
300
+	/**
301
+	 * @param string $type
302
+	 */
297 303
 	private function getSectionTableForType($type) {
298 304
 		if($type === 'admin') {
299 305
 			return Mapper::TABLE_ADMIN_SECTIONS;
Please login to merge, or discard this patch.
Indentation   +469 added lines, -469 removed lines patch added patch discarded remove patch
@@ -42,473 +42,473 @@
 block discarded – undo
42 42
 use OCP\Settings\ISection;
43 43
 
44 44
 class Manager implements IManager {
45
-	/** @var ILogger */
46
-	private $log;
47
-	/** @var IDBConnection */
48
-	private $dbc;
49
-	/** @var Mapper */
50
-	private $mapper;
51
-	/** @var IL10N */
52
-	private $l;
53
-	/** @var IConfig */
54
-	private $config;
55
-	/** @var EncryptionManager */
56
-	private $encryptionManager;
57
-	/** @var IUserManager */
58
-	private $userManager;
59
-	/** @var ILockingProvider */
60
-	private $lockingProvider;
61
-	/** @var IRequest */
62
-	private $request;
63
-	/** @var IURLGenerator */
64
-	private $url;
65
-	/** @var AccountManager */
66
-	private $accountManager;
67
-	/** @var IGroupManager */
68
-	private $groupManager;
69
-	/** @var IFactory */
70
-	private $l10nFactory;
71
-	/** @var \OC_Defaults */
72
-	private $defaults;
73
-	/** @var IAppManager */
74
-	private $appManager;
75
-
76
-	/**
77
-	 * @param ILogger $log
78
-	 * @param IDBConnection $dbc
79
-	 * @param IL10N $l
80
-	 * @param IConfig $config
81
-	 * @param EncryptionManager $encryptionManager
82
-	 * @param IUserManager $userManager
83
-	 * @param ILockingProvider $lockingProvider
84
-	 * @param IRequest $request
85
-	 * @param Mapper $mapper
86
-	 * @param IURLGenerator $url
87
-	 * @param AccountManager $accountManager
88
-	 * @param IGroupManager $groupManager
89
-	 * @param IFactory $l10nFactory
90
-	 * @param \OC_Defaults $defaults
91
-	 */
92
-	public function __construct(
93
-		ILogger $log,
94
-		IDBConnection $dbc,
95
-		IL10N $l,
96
-		IConfig $config,
97
-		EncryptionManager $encryptionManager,
98
-		IUserManager $userManager,
99
-		ILockingProvider $lockingProvider,
100
-		IRequest $request,
101
-		Mapper $mapper,
102
-		IURLGenerator $url,
103
-		AccountManager $accountManager,
104
-		IGroupManager $groupManager,
105
-		IFactory $l10nFactory,
106
-		\OC_Defaults $defaults,
107
-		IAppManager $appManager
108
-	) {
109
-		$this->log = $log;
110
-		$this->dbc = $dbc;
111
-		$this->mapper = $mapper;
112
-		$this->l = $l;
113
-		$this->config = $config;
114
-		$this->encryptionManager = $encryptionManager;
115
-		$this->userManager = $userManager;
116
-		$this->lockingProvider = $lockingProvider;
117
-		$this->request = $request;
118
-		$this->url = $url;
119
-		$this->accountManager = $accountManager;
120
-		$this->groupManager = $groupManager;
121
-		$this->l10nFactory = $l10nFactory;
122
-		$this->defaults = $defaults;
123
-		$this->appManager = $appManager;
124
-	}
125
-
126
-	/**
127
-	 * @inheritdoc
128
-	 */
129
-	public function setupSettings(array $settings) {
130
-		if (isset($settings[IManager::KEY_ADMIN_SECTION])) {
131
-			$this->setupSectionEntry($settings[IManager::KEY_ADMIN_SECTION], 'admin');
132
-		}
133
-		if (isset($settings[IManager::KEY_ADMIN_SETTINGS])) {
134
-			$this->setupSettingsEntry($settings[IManager::KEY_ADMIN_SETTINGS], 'admin');
135
-		}
136
-
137
-		if (isset($settings[IManager::KEY_PERSONAL_SECTION])) {
138
-			$this->setupSectionEntry($settings[IManager::KEY_PERSONAL_SECTION], 'personal');
139
-		}
140
-		if (isset($settings[IManager::KEY_PERSONAL_SETTINGS])) {
141
-			$this->setupSettingsEntry($settings[IManager::KEY_PERSONAL_SETTINGS], 'personal');
142
-		}
143
-	}
144
-
145
-	/**
146
-	 * attempts to remove an apps section and/or settings entry. A listener is
147
-	 * added centrally making sure that this method is called ones an app was
148
-	 * disabled.
149
-	 *
150
-	 * @param string $appId
151
-	 * @since 9.1.0
152
-	 */
153
-	public function onAppDisabled($appId) {
154
-		$appInfo = \OC_App::getAppInfo($appId); // hello static legacy
155
-
156
-		if (isset($appInfo['settings'][IManager::KEY_ADMIN_SECTION])) {
157
-			$this->mapper->remove(Mapper::TABLE_ADMIN_SECTIONS, trim($appInfo['settings'][IManager::KEY_ADMIN_SECTION], '\\'));
158
-		}
159
-		if (isset($appInfo['settings'][IManager::KEY_ADMIN_SETTINGS])) {
160
-			$this->mapper->remove(Mapper::TABLE_ADMIN_SETTINGS, trim($appInfo['settings'][IManager::KEY_ADMIN_SETTINGS], '\\'));
161
-		}
162
-
163
-		if (isset($appInfo['settings'][IManager::KEY_PERSONAL_SECTION])) {
164
-			$this->mapper->remove(Mapper::TABLE_PERSONAL_SECTIONS, trim($appInfo['settings'][IManager::KEY_PERSONAL_SECTION], '\\'));
165
-		}
166
-		if (isset($appInfo['settings'][IManager::KEY_PERSONAL_SETTINGS])) {
167
-			$this->mapper->remove(Mapper::TABLE_PERSONAL_SETTINGS, trim($appInfo['settings'][IManager::KEY_PERSONAL_SETTINGS], '\\'));
168
-		}
169
-	}
170
-
171
-	public function checkForOrphanedClassNames() {
172
-		$tables = [Mapper::TABLE_ADMIN_SECTIONS, Mapper::TABLE_ADMIN_SETTINGS, Mapper::TABLE_PERSONAL_SECTIONS, Mapper::TABLE_PERSONAL_SETTINGS];
173
-		foreach ($tables as $table) {
174
-			$classes = $this->mapper->getClasses($table);
175
-			foreach ($classes as $className) {
176
-				try {
177
-					\OC::$server->query($className);
178
-				} catch (QueryException $e) {
179
-					$this->mapper->remove($table, $className);
180
-				}
181
-			}
182
-		}
183
-	}
184
-
185
-	/**
186
-	 * @param string $sectionClassName
187
-	 * @param string $type either 'admin' or 'personal'
188
-	 */
189
-	private function setupSectionEntry($sectionClassName, $type) {
190
-		if (!class_exists($sectionClassName)) {
191
-			$this->log->debug('Could not find ' . ucfirst($type) . ' section class ' . $sectionClassName);
192
-			return;
193
-		}
194
-		try {
195
-			$section = $this->query($sectionClassName);
196
-		} catch (QueryException $e) {
197
-			// cancel
198
-			return;
199
-		}
200
-
201
-		if (!$section instanceof ISection) {
202
-			$this->log->error(
203
-				ucfirst($type) .' section instance must implement \OCP\ISection. Invalid class: {class}',
204
-				['class' => $sectionClassName]
205
-			);
206
-			return;
207
-		}
208
-		$table = $this->getSectionTableForType($type);
209
-		if(!$this->hasSection(get_class($section), $table)) {
210
-			$this->addSection($section, $table);
211
-		} else {
212
-			$this->updateSection($section, $table);
213
-		}
214
-	}
215
-
216
-	private function addSection(ISection $section, $table) {
217
-		$this->mapper->add($table, [
218
-			'id' => $section->getID(),
219
-			'class' => get_class($section),
220
-			'priority' => $section->getPriority(),
221
-		]);
222
-	}
223
-
224
-	private function addSettings(ISettings $settings, $table) {
225
-		$this->mapper->add($table, [
226
-			'class' => get_class($settings),
227
-			'section' => $settings->getSection(),
228
-			'priority' => $settings->getPriority(),
229
-		]);
230
-	}
231
-
232
-	private function updateSettings(ISettings $settings, $table) {
233
-		$this->mapper->update(
234
-			$table,
235
-			'class',
236
-			get_class($settings),
237
-			[
238
-				'section' => $settings->getSection(),
239
-				'priority' => $settings->getPriority(),
240
-			]
241
-		);
242
-	}
243
-
244
-	private function updateSection(ISection $section, $table) {
245
-		$this->mapper->update(
246
-			$table,
247
-			'class',
248
-			get_class($section),
249
-			[
250
-				'id' => $section->getID(),
251
-				'priority' => $section->getPriority(),
252
-			]
253
-		);
254
-	}
255
-
256
-	/**
257
-	 * @param string $className
258
-	 * @param string $table
259
-	 * @return bool
260
-	 */
261
-	private function hasSection($className, $table) {
262
-		return $this->mapper->has($table, $className);
263
-	}
264
-
265
-	/**
266
-	 * @param string $className
267
-	 * @return bool
268
-	 */
269
-	private function hasSettings($className, $table) {
270
-		return $this->mapper->has($table, $className);
271
-	}
272
-
273
-	private function setupSettingsEntry($settingsClassName, $type) {
274
-		if (!class_exists($settingsClassName)) {
275
-			$this->log->debug('Could not find ' . $type . ' section class ' . $settingsClassName);
276
-			return;
277
-		}
278
-
279
-		try {
280
-			/** @var ISettings $settings */
281
-			$settings = $this->query($settingsClassName);
282
-		} catch (QueryException $e) {
283
-			// cancel
284
-			return;
285
-		}
286
-
287
-		if (!$settings instanceof ISettings) {
288
-			$this->log->error(
289
-				ucfirst($type) . ' section instance must implement \OCP\Settings\ISettings. Invalid class: {class}',
290
-				['class' => $settingsClassName]
291
-			);
292
-			return;
293
-		}
294
-		$table = $this->getSettingsTableForType($type);
295
-		if (!$this->hasSettings(get_class($settings), $table)) {
296
-			$this->addSettings($settings, $table);
297
-		} else {
298
-			$this->updateSettings($settings, $table);
299
-		}
300
-	}
301
-
302
-	private function getSectionTableForType($type) {
303
-		if($type === 'admin') {
304
-			return Mapper::TABLE_ADMIN_SECTIONS;
305
-		} else if($type === 'personal') {
306
-			return Mapper::TABLE_PERSONAL_SECTIONS;
307
-		}
308
-		throw new \InvalidArgumentException('"admin" or "personal" expected');
309
-	}
310
-
311
-	private function getSettingsTableForType($type) {
312
-		if($type === 'admin') {
313
-			return Mapper::TABLE_ADMIN_SETTINGS;
314
-		} else if($type === 'personal') {
315
-			return Mapper::TABLE_PERSONAL_SETTINGS;
316
-		}
317
-		throw new \InvalidArgumentException('"admin" or "personal" expected');
318
-	}
319
-
320
-	private function query($className) {
321
-		try {
322
-			return \OC::$server->query($className);
323
-		} catch (QueryException $e) {
324
-			$this->log->logException($e);
325
-			throw $e;
326
-		}
327
-	}
328
-
329
-	/**
330
-	 * @inheritdoc
331
-	 */
332
-	public function getAdminSections() {
333
-		// built-in sections
334
-		$sections = [
335
-			0 => [new Section('server', $this->l->t('Basic settings'), 0, $this->url->imagePath('settings', 'admin.svg'))],
336
-			5 => [new Section('sharing', $this->l->t('Sharing'), 0, $this->url->imagePath('core', 'actions/share.svg'))],
337
-			10 => [new Section('security', $this->l->t('Security'), 0, $this->url->imagePath('core', 'actions/password.svg'))],
338
-			45 => [new Section('encryption', $this->l->t('Encryption'), 0, $this->url->imagePath('core', 'actions/password.svg'))],
339
-			98 => [new Section('additional', $this->l->t('Additional settings'), 0, $this->url->imagePath('core', 'actions/settings-dark.svg'))],
340
-			99 => [new Section('tips-tricks', $this->l->t('Tips & tricks'), 0, $this->url->imagePath('settings', 'help.svg'))],
341
-		];
342
-
343
-		$rows = $this->mapper->getAdminSectionsFromDB();
344
-
345
-		foreach ($rows as $row) {
346
-			if (!isset($sections[$row['priority']])) {
347
-				$sections[$row['priority']] = [];
348
-			}
349
-			try {
350
-				$sections[$row['priority']][] = $this->query($row['class']);
351
-			} catch (QueryException $e) {
352
-				// skip
353
-			}
354
-		}
355
-
356
-		ksort($sections);
357
-
358
-		return $sections;
359
-	}
360
-
361
-	/**
362
-	 * @param string $section
363
-	 * @return ISection[]
364
-	 */
365
-	private function getBuiltInAdminSettings($section) {
366
-		$forms = [];
367
-		try {
368
-			if ($section === 'server') {
369
-				/** @var ISettings $form */
370
-				$form = new Admin\Server($this->dbc, $this->request, $this->config, $this->lockingProvider, $this->l);
371
-				$forms[$form->getPriority()] = [$form];
372
-				$form = new Admin\ServerDevNotice();
373
-				$forms[$form->getPriority()] = [$form];
374
-			}
375
-			if ($section === 'encryption') {
376
-				/** @var ISettings $form */
377
-				$form = new Admin\Encryption($this->encryptionManager, $this->userManager);
378
-				$forms[$form->getPriority()] = [$form];
379
-			}
380
-			if ($section === 'sharing') {
381
-				/** @var ISettings $form */
382
-				$form = new Admin\Sharing($this->config);
383
-				$forms[$form->getPriority()] = [$form];
384
-			}
385
-			if ($section === 'additional') {
386
-				/** @var ISettings $form */
387
-				$form = new Admin\Additional($this->config);
388
-				$forms[$form->getPriority()] = [$form];
389
-			}
390
-			if ($section === 'tips-tricks') {
391
-				/** @var ISettings $form */
392
-				$form = new Admin\TipsTricks($this->config);
393
-				$forms[$form->getPriority()] = [$form];
394
-			}
395
-		} catch (QueryException $e) {
396
-			// skip
397
-		}
398
-		return $forms;
399
-	}
400
-
401
-	/**
402
-	 * @param string $section
403
-	 * @return ISection[]
404
-	 */
405
-	private function getBuiltInPersonalSettings($section) {
406
-		$forms = [];
407
-		try {
408
-			if ($section === 'personal-info') {
409
-				/** @var ISettings $form */
410
-				$form = new Personal\PersonalInfo(
411
-					$this->config,
412
-					$this->userManager,
413
-					$this->groupManager,
414
-					$this->accountManager,
415
-					$this->appManager,
416
-					$this->l10nFactory,
417
-					$this->l
418
-				);
419
-				$forms[$form->getPriority()] = [$form];
420
-			}
421
-			if($section === 'security') {
422
-				/** @var ISettings $form */
423
-				$form = new Personal\Security();
424
-				$forms[$form->getPriority()] = [$form];
425
-			}
426
-			if($section === 'sync-clients') {
427
-				/** @var ISettings $form */
428
-				$form = new Personal\SyncClients($this->config, $this->defaults);
429
-				$forms[$form->getPriority()] = [$form];
430
-			}
431
-			if ($section === 'additional') {
432
-				/** @var ISettings $form */
433
-				$form = new Personal\Additional($this->config);
434
-				$forms[$form->getPriority()] = [$form];
435
-			}
436
-		} catch (QueryException $e) {
437
-			// skip
438
-		}
439
-		return $forms;
440
-	}
441
-
442
-	/**
443
-	 * @inheritdoc
444
-	 */
445
-	public function getAdminSettings($section) {
446
-		$settings = $this->getBuiltInAdminSettings($section);
447
-		$dbRows = $this->mapper->getAdminSettingsFromDB($section);
448
-
449
-		foreach ($dbRows as $row) {
450
-			if (!isset($settings[$row['priority']])) {
451
-				$settings[$row['priority']] = [];
452
-			}
453
-			try {
454
-				$settings[$row['priority']][] = $this->query($row['class']);
455
-			} catch (QueryException $e) {
456
-				// skip
457
-			}
458
-		}
459
-
460
-		ksort($settings);
461
-		return $settings;
462
-	}
463
-
464
-	/**
465
-	 * @inheritdoc
466
-	 */
467
-	public function getPersonalSections() {
468
-		$sections = [
469
-			0 => [new Section('personal-info', $this->l->t('Personal info'), 0, $this->url->imagePath('core', 'actions/info.svg'))],
470
-			5 => [new Section('security', $this->l->t('Security'), 0, $this->url->imagePath('settings', 'password.svg'))],
471
-			15 => [new Section('sync-clients', $this->l->t('Sync clients'), 0, $this->url->imagePath('settings', 'change.svg'))],
472
-			98 => [new Section('additional', $this->l->t('Additional settings'), 0, $this->url->imagePath('core', 'actions/settings-dark.svg'))],
473
-		];
474
-
475
-		$rows = $this->mapper->getPersonalSectionsFromDB();
476
-
477
-		foreach ($rows as $row) {
478
-			if (!isset($sections[$row['priority']])) {
479
-				$sections[$row['priority']] = [];
480
-			}
481
-			try {
482
-				$sections[$row['priority']][] = $this->query($row['class']);
483
-			} catch (QueryException $e) {
484
-				// skip
485
-			}
486
-		}
487
-
488
-		ksort($sections);
489
-
490
-		return $sections;
491
-	}
492
-
493
-	/**
494
-	 * @inheritdoc
495
-	 */
496
-	public function getPersonalSettings($section) {
497
-		$settings = $this->getBuiltInPersonalSettings($section);
498
-		$dbRows = $this->mapper->getPersonalSettingsFromDB($section);
499
-
500
-		foreach ($dbRows as $row) {
501
-			if (!isset($settings[$row['priority']])) {
502
-				$settings[$row['priority']] = [];
503
-			}
504
-			try {
505
-				$settings[$row['priority']][] = $this->query($row['class']);
506
-			} catch (QueryException $e) {
507
-				// skip
508
-			}
509
-		}
510
-
511
-		ksort($settings);
512
-		return $settings;
513
-	}
45
+    /** @var ILogger */
46
+    private $log;
47
+    /** @var IDBConnection */
48
+    private $dbc;
49
+    /** @var Mapper */
50
+    private $mapper;
51
+    /** @var IL10N */
52
+    private $l;
53
+    /** @var IConfig */
54
+    private $config;
55
+    /** @var EncryptionManager */
56
+    private $encryptionManager;
57
+    /** @var IUserManager */
58
+    private $userManager;
59
+    /** @var ILockingProvider */
60
+    private $lockingProvider;
61
+    /** @var IRequest */
62
+    private $request;
63
+    /** @var IURLGenerator */
64
+    private $url;
65
+    /** @var AccountManager */
66
+    private $accountManager;
67
+    /** @var IGroupManager */
68
+    private $groupManager;
69
+    /** @var IFactory */
70
+    private $l10nFactory;
71
+    /** @var \OC_Defaults */
72
+    private $defaults;
73
+    /** @var IAppManager */
74
+    private $appManager;
75
+
76
+    /**
77
+     * @param ILogger $log
78
+     * @param IDBConnection $dbc
79
+     * @param IL10N $l
80
+     * @param IConfig $config
81
+     * @param EncryptionManager $encryptionManager
82
+     * @param IUserManager $userManager
83
+     * @param ILockingProvider $lockingProvider
84
+     * @param IRequest $request
85
+     * @param Mapper $mapper
86
+     * @param IURLGenerator $url
87
+     * @param AccountManager $accountManager
88
+     * @param IGroupManager $groupManager
89
+     * @param IFactory $l10nFactory
90
+     * @param \OC_Defaults $defaults
91
+     */
92
+    public function __construct(
93
+        ILogger $log,
94
+        IDBConnection $dbc,
95
+        IL10N $l,
96
+        IConfig $config,
97
+        EncryptionManager $encryptionManager,
98
+        IUserManager $userManager,
99
+        ILockingProvider $lockingProvider,
100
+        IRequest $request,
101
+        Mapper $mapper,
102
+        IURLGenerator $url,
103
+        AccountManager $accountManager,
104
+        IGroupManager $groupManager,
105
+        IFactory $l10nFactory,
106
+        \OC_Defaults $defaults,
107
+        IAppManager $appManager
108
+    ) {
109
+        $this->log = $log;
110
+        $this->dbc = $dbc;
111
+        $this->mapper = $mapper;
112
+        $this->l = $l;
113
+        $this->config = $config;
114
+        $this->encryptionManager = $encryptionManager;
115
+        $this->userManager = $userManager;
116
+        $this->lockingProvider = $lockingProvider;
117
+        $this->request = $request;
118
+        $this->url = $url;
119
+        $this->accountManager = $accountManager;
120
+        $this->groupManager = $groupManager;
121
+        $this->l10nFactory = $l10nFactory;
122
+        $this->defaults = $defaults;
123
+        $this->appManager = $appManager;
124
+    }
125
+
126
+    /**
127
+     * @inheritdoc
128
+     */
129
+    public function setupSettings(array $settings) {
130
+        if (isset($settings[IManager::KEY_ADMIN_SECTION])) {
131
+            $this->setupSectionEntry($settings[IManager::KEY_ADMIN_SECTION], 'admin');
132
+        }
133
+        if (isset($settings[IManager::KEY_ADMIN_SETTINGS])) {
134
+            $this->setupSettingsEntry($settings[IManager::KEY_ADMIN_SETTINGS], 'admin');
135
+        }
136
+
137
+        if (isset($settings[IManager::KEY_PERSONAL_SECTION])) {
138
+            $this->setupSectionEntry($settings[IManager::KEY_PERSONAL_SECTION], 'personal');
139
+        }
140
+        if (isset($settings[IManager::KEY_PERSONAL_SETTINGS])) {
141
+            $this->setupSettingsEntry($settings[IManager::KEY_PERSONAL_SETTINGS], 'personal');
142
+        }
143
+    }
144
+
145
+    /**
146
+     * attempts to remove an apps section and/or settings entry. A listener is
147
+     * added centrally making sure that this method is called ones an app was
148
+     * disabled.
149
+     *
150
+     * @param string $appId
151
+     * @since 9.1.0
152
+     */
153
+    public function onAppDisabled($appId) {
154
+        $appInfo = \OC_App::getAppInfo($appId); // hello static legacy
155
+
156
+        if (isset($appInfo['settings'][IManager::KEY_ADMIN_SECTION])) {
157
+            $this->mapper->remove(Mapper::TABLE_ADMIN_SECTIONS, trim($appInfo['settings'][IManager::KEY_ADMIN_SECTION], '\\'));
158
+        }
159
+        if (isset($appInfo['settings'][IManager::KEY_ADMIN_SETTINGS])) {
160
+            $this->mapper->remove(Mapper::TABLE_ADMIN_SETTINGS, trim($appInfo['settings'][IManager::KEY_ADMIN_SETTINGS], '\\'));
161
+        }
162
+
163
+        if (isset($appInfo['settings'][IManager::KEY_PERSONAL_SECTION])) {
164
+            $this->mapper->remove(Mapper::TABLE_PERSONAL_SECTIONS, trim($appInfo['settings'][IManager::KEY_PERSONAL_SECTION], '\\'));
165
+        }
166
+        if (isset($appInfo['settings'][IManager::KEY_PERSONAL_SETTINGS])) {
167
+            $this->mapper->remove(Mapper::TABLE_PERSONAL_SETTINGS, trim($appInfo['settings'][IManager::KEY_PERSONAL_SETTINGS], '\\'));
168
+        }
169
+    }
170
+
171
+    public function checkForOrphanedClassNames() {
172
+        $tables = [Mapper::TABLE_ADMIN_SECTIONS, Mapper::TABLE_ADMIN_SETTINGS, Mapper::TABLE_PERSONAL_SECTIONS, Mapper::TABLE_PERSONAL_SETTINGS];
173
+        foreach ($tables as $table) {
174
+            $classes = $this->mapper->getClasses($table);
175
+            foreach ($classes as $className) {
176
+                try {
177
+                    \OC::$server->query($className);
178
+                } catch (QueryException $e) {
179
+                    $this->mapper->remove($table, $className);
180
+                }
181
+            }
182
+        }
183
+    }
184
+
185
+    /**
186
+     * @param string $sectionClassName
187
+     * @param string $type either 'admin' or 'personal'
188
+     */
189
+    private function setupSectionEntry($sectionClassName, $type) {
190
+        if (!class_exists($sectionClassName)) {
191
+            $this->log->debug('Could not find ' . ucfirst($type) . ' section class ' . $sectionClassName);
192
+            return;
193
+        }
194
+        try {
195
+            $section = $this->query($sectionClassName);
196
+        } catch (QueryException $e) {
197
+            // cancel
198
+            return;
199
+        }
200
+
201
+        if (!$section instanceof ISection) {
202
+            $this->log->error(
203
+                ucfirst($type) .' section instance must implement \OCP\ISection. Invalid class: {class}',
204
+                ['class' => $sectionClassName]
205
+            );
206
+            return;
207
+        }
208
+        $table = $this->getSectionTableForType($type);
209
+        if(!$this->hasSection(get_class($section), $table)) {
210
+            $this->addSection($section, $table);
211
+        } else {
212
+            $this->updateSection($section, $table);
213
+        }
214
+    }
215
+
216
+    private function addSection(ISection $section, $table) {
217
+        $this->mapper->add($table, [
218
+            'id' => $section->getID(),
219
+            'class' => get_class($section),
220
+            'priority' => $section->getPriority(),
221
+        ]);
222
+    }
223
+
224
+    private function addSettings(ISettings $settings, $table) {
225
+        $this->mapper->add($table, [
226
+            'class' => get_class($settings),
227
+            'section' => $settings->getSection(),
228
+            'priority' => $settings->getPriority(),
229
+        ]);
230
+    }
231
+
232
+    private function updateSettings(ISettings $settings, $table) {
233
+        $this->mapper->update(
234
+            $table,
235
+            'class',
236
+            get_class($settings),
237
+            [
238
+                'section' => $settings->getSection(),
239
+                'priority' => $settings->getPriority(),
240
+            ]
241
+        );
242
+    }
243
+
244
+    private function updateSection(ISection $section, $table) {
245
+        $this->mapper->update(
246
+            $table,
247
+            'class',
248
+            get_class($section),
249
+            [
250
+                'id' => $section->getID(),
251
+                'priority' => $section->getPriority(),
252
+            ]
253
+        );
254
+    }
255
+
256
+    /**
257
+     * @param string $className
258
+     * @param string $table
259
+     * @return bool
260
+     */
261
+    private function hasSection($className, $table) {
262
+        return $this->mapper->has($table, $className);
263
+    }
264
+
265
+    /**
266
+     * @param string $className
267
+     * @return bool
268
+     */
269
+    private function hasSettings($className, $table) {
270
+        return $this->mapper->has($table, $className);
271
+    }
272
+
273
+    private function setupSettingsEntry($settingsClassName, $type) {
274
+        if (!class_exists($settingsClassName)) {
275
+            $this->log->debug('Could not find ' . $type . ' section class ' . $settingsClassName);
276
+            return;
277
+        }
278
+
279
+        try {
280
+            /** @var ISettings $settings */
281
+            $settings = $this->query($settingsClassName);
282
+        } catch (QueryException $e) {
283
+            // cancel
284
+            return;
285
+        }
286
+
287
+        if (!$settings instanceof ISettings) {
288
+            $this->log->error(
289
+                ucfirst($type) . ' section instance must implement \OCP\Settings\ISettings. Invalid class: {class}',
290
+                ['class' => $settingsClassName]
291
+            );
292
+            return;
293
+        }
294
+        $table = $this->getSettingsTableForType($type);
295
+        if (!$this->hasSettings(get_class($settings), $table)) {
296
+            $this->addSettings($settings, $table);
297
+        } else {
298
+            $this->updateSettings($settings, $table);
299
+        }
300
+    }
301
+
302
+    private function getSectionTableForType($type) {
303
+        if($type === 'admin') {
304
+            return Mapper::TABLE_ADMIN_SECTIONS;
305
+        } else if($type === 'personal') {
306
+            return Mapper::TABLE_PERSONAL_SECTIONS;
307
+        }
308
+        throw new \InvalidArgumentException('"admin" or "personal" expected');
309
+    }
310
+
311
+    private function getSettingsTableForType($type) {
312
+        if($type === 'admin') {
313
+            return Mapper::TABLE_ADMIN_SETTINGS;
314
+        } else if($type === 'personal') {
315
+            return Mapper::TABLE_PERSONAL_SETTINGS;
316
+        }
317
+        throw new \InvalidArgumentException('"admin" or "personal" expected');
318
+    }
319
+
320
+    private function query($className) {
321
+        try {
322
+            return \OC::$server->query($className);
323
+        } catch (QueryException $e) {
324
+            $this->log->logException($e);
325
+            throw $e;
326
+        }
327
+    }
328
+
329
+    /**
330
+     * @inheritdoc
331
+     */
332
+    public function getAdminSections() {
333
+        // built-in sections
334
+        $sections = [
335
+            0 => [new Section('server', $this->l->t('Basic settings'), 0, $this->url->imagePath('settings', 'admin.svg'))],
336
+            5 => [new Section('sharing', $this->l->t('Sharing'), 0, $this->url->imagePath('core', 'actions/share.svg'))],
337
+            10 => [new Section('security', $this->l->t('Security'), 0, $this->url->imagePath('core', 'actions/password.svg'))],
338
+            45 => [new Section('encryption', $this->l->t('Encryption'), 0, $this->url->imagePath('core', 'actions/password.svg'))],
339
+            98 => [new Section('additional', $this->l->t('Additional settings'), 0, $this->url->imagePath('core', 'actions/settings-dark.svg'))],
340
+            99 => [new Section('tips-tricks', $this->l->t('Tips & tricks'), 0, $this->url->imagePath('settings', 'help.svg'))],
341
+        ];
342
+
343
+        $rows = $this->mapper->getAdminSectionsFromDB();
344
+
345
+        foreach ($rows as $row) {
346
+            if (!isset($sections[$row['priority']])) {
347
+                $sections[$row['priority']] = [];
348
+            }
349
+            try {
350
+                $sections[$row['priority']][] = $this->query($row['class']);
351
+            } catch (QueryException $e) {
352
+                // skip
353
+            }
354
+        }
355
+
356
+        ksort($sections);
357
+
358
+        return $sections;
359
+    }
360
+
361
+    /**
362
+     * @param string $section
363
+     * @return ISection[]
364
+     */
365
+    private function getBuiltInAdminSettings($section) {
366
+        $forms = [];
367
+        try {
368
+            if ($section === 'server') {
369
+                /** @var ISettings $form */
370
+                $form = new Admin\Server($this->dbc, $this->request, $this->config, $this->lockingProvider, $this->l);
371
+                $forms[$form->getPriority()] = [$form];
372
+                $form = new Admin\ServerDevNotice();
373
+                $forms[$form->getPriority()] = [$form];
374
+            }
375
+            if ($section === 'encryption') {
376
+                /** @var ISettings $form */
377
+                $form = new Admin\Encryption($this->encryptionManager, $this->userManager);
378
+                $forms[$form->getPriority()] = [$form];
379
+            }
380
+            if ($section === 'sharing') {
381
+                /** @var ISettings $form */
382
+                $form = new Admin\Sharing($this->config);
383
+                $forms[$form->getPriority()] = [$form];
384
+            }
385
+            if ($section === 'additional') {
386
+                /** @var ISettings $form */
387
+                $form = new Admin\Additional($this->config);
388
+                $forms[$form->getPriority()] = [$form];
389
+            }
390
+            if ($section === 'tips-tricks') {
391
+                /** @var ISettings $form */
392
+                $form = new Admin\TipsTricks($this->config);
393
+                $forms[$form->getPriority()] = [$form];
394
+            }
395
+        } catch (QueryException $e) {
396
+            // skip
397
+        }
398
+        return $forms;
399
+    }
400
+
401
+    /**
402
+     * @param string $section
403
+     * @return ISection[]
404
+     */
405
+    private function getBuiltInPersonalSettings($section) {
406
+        $forms = [];
407
+        try {
408
+            if ($section === 'personal-info') {
409
+                /** @var ISettings $form */
410
+                $form = new Personal\PersonalInfo(
411
+                    $this->config,
412
+                    $this->userManager,
413
+                    $this->groupManager,
414
+                    $this->accountManager,
415
+                    $this->appManager,
416
+                    $this->l10nFactory,
417
+                    $this->l
418
+                );
419
+                $forms[$form->getPriority()] = [$form];
420
+            }
421
+            if($section === 'security') {
422
+                /** @var ISettings $form */
423
+                $form = new Personal\Security();
424
+                $forms[$form->getPriority()] = [$form];
425
+            }
426
+            if($section === 'sync-clients') {
427
+                /** @var ISettings $form */
428
+                $form = new Personal\SyncClients($this->config, $this->defaults);
429
+                $forms[$form->getPriority()] = [$form];
430
+            }
431
+            if ($section === 'additional') {
432
+                /** @var ISettings $form */
433
+                $form = new Personal\Additional($this->config);
434
+                $forms[$form->getPriority()] = [$form];
435
+            }
436
+        } catch (QueryException $e) {
437
+            // skip
438
+        }
439
+        return $forms;
440
+    }
441
+
442
+    /**
443
+     * @inheritdoc
444
+     */
445
+    public function getAdminSettings($section) {
446
+        $settings = $this->getBuiltInAdminSettings($section);
447
+        $dbRows = $this->mapper->getAdminSettingsFromDB($section);
448
+
449
+        foreach ($dbRows as $row) {
450
+            if (!isset($settings[$row['priority']])) {
451
+                $settings[$row['priority']] = [];
452
+            }
453
+            try {
454
+                $settings[$row['priority']][] = $this->query($row['class']);
455
+            } catch (QueryException $e) {
456
+                // skip
457
+            }
458
+        }
459
+
460
+        ksort($settings);
461
+        return $settings;
462
+    }
463
+
464
+    /**
465
+     * @inheritdoc
466
+     */
467
+    public function getPersonalSections() {
468
+        $sections = [
469
+            0 => [new Section('personal-info', $this->l->t('Personal info'), 0, $this->url->imagePath('core', 'actions/info.svg'))],
470
+            5 => [new Section('security', $this->l->t('Security'), 0, $this->url->imagePath('settings', 'password.svg'))],
471
+            15 => [new Section('sync-clients', $this->l->t('Sync clients'), 0, $this->url->imagePath('settings', 'change.svg'))],
472
+            98 => [new Section('additional', $this->l->t('Additional settings'), 0, $this->url->imagePath('core', 'actions/settings-dark.svg'))],
473
+        ];
474
+
475
+        $rows = $this->mapper->getPersonalSectionsFromDB();
476
+
477
+        foreach ($rows as $row) {
478
+            if (!isset($sections[$row['priority']])) {
479
+                $sections[$row['priority']] = [];
480
+            }
481
+            try {
482
+                $sections[$row['priority']][] = $this->query($row['class']);
483
+            } catch (QueryException $e) {
484
+                // skip
485
+            }
486
+        }
487
+
488
+        ksort($sections);
489
+
490
+        return $sections;
491
+    }
492
+
493
+    /**
494
+     * @inheritdoc
495
+     */
496
+    public function getPersonalSettings($section) {
497
+        $settings = $this->getBuiltInPersonalSettings($section);
498
+        $dbRows = $this->mapper->getPersonalSettingsFromDB($section);
499
+
500
+        foreach ($dbRows as $row) {
501
+            if (!isset($settings[$row['priority']])) {
502
+                $settings[$row['priority']] = [];
503
+            }
504
+            try {
505
+                $settings[$row['priority']][] = $this->query($row['class']);
506
+            } catch (QueryException $e) {
507
+                // skip
508
+            }
509
+        }
510
+
511
+        ksort($settings);
512
+        return $settings;
513
+    }
514 514
 }
Please login to merge, or discard this patch.