summaryrefslogtreecommitdiffstats
path: root/settings/Controller/CommonSettingsTrait.php
diff options
context:
space:
mode:
authorArthur Schiwon <blizzz@arthur-schiwon.de>2017-05-16 01:38:12 +0200
committerArthur Schiwon <blizzz@arthur-schiwon.de>2017-06-23 12:36:17 +0200
commit247b305b79e16ef1e26b374a4efed7e44c241e91 (patch)
tree6accae85266a7fc48b2006160d9463b5143f7bd9 /settings/Controller/CommonSettingsTrait.php
parentd9beeaec90303e909bca574e489817739b9be869 (diff)
downloadnextcloud-server-247b305b79e16ef1e26b374a4efed7e44c241e91.tar.gz
nextcloud-server-247b305b79e16ef1e26b374a4efed7e44c241e91.zip
add route and controller. consolidate common settings functions in a trait.
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
Diffstat (limited to 'settings/Controller/CommonSettingsTrait.php')
-rw-r--r--settings/Controller/CommonSettingsTrait.php123
1 files changed, 123 insertions, 0 deletions
diff --git a/settings/Controller/CommonSettingsTrait.php b/settings/Controller/CommonSettingsTrait.php
new file mode 100644
index 00000000000..66ffabd84d6
--- /dev/null
+++ b/settings/Controller/CommonSettingsTrait.php
@@ -0,0 +1,123 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Settings\Controller;
+
+use OCP\AppFramework\Http\TemplateResponse;
+use OCP\Settings\IManager as ISettingsManager;
+use OCP\Settings\IIconSection;
+use OCP\Settings\ISettings;
+
+trait CommonSettingsTrait {
+ /** @var ISettingsManager */
+ private $settingsManager;
+
+ /**
+ * @param string $currentSection
+ * @return array
+ */
+ private function getNavigationParameters($currentSection) {
+ $templateParameters = [
+ 'personal' => $this->formatPersonalSections($currentSection),
+ 'admin' => []
+ ];
+
+ if(\OC_User::isAdminUser(\OC_User::getUser())) {
+ $templateParameters['admin'] = $this->formatAdminSections($currentSection);
+ }
+
+ return [
+ 'forms' => $templateParameters
+ ];
+ }
+
+ protected function formatSections($sections, $currentSection, $type) {
+ $templateParameters = [];
+ /** @var \OCP\Settings\ISection[] $prioritizedSections */
+ foreach($sections as $prioritizedSections) {
+ foreach ($prioritizedSections as $section) {
+ if($type === 'admin') {
+ $settings = $this->settingsManager->getAdminSettings($section->getID());
+ } else if($type === 'personal') {
+ $settings = $this->settingsManager->getPersonalSettings($section->getID());
+ }
+ if (empty($settings)) {
+ continue;
+ }
+
+ $icon = '';
+ if ($section instanceof IIconSection) {
+ $icon = $section->getIcon();
+ }
+
+ $templateParameters[] = [
+ 'anchor' => $section->getID(),
+ 'section-name' => $section->getName(),
+ 'active' => $section->getID() === $currentSection,
+ 'icon' => $icon,
+ ];
+ }
+ }
+ return $templateParameters;
+ }
+
+ protected function formatPersonalSections($currentSections) {
+ $sections = $this->settingsManager->getPersonalSections();
+ $templateParameters = $this->formatSections($sections, $currentSections, 'personal');
+
+ return $templateParameters;
+ }
+
+ protected function formatAdminSections($currentSections) {
+ $sections = $this->settingsManager->getAdminSections();
+ $templateParameters = $this->formatSections($sections, $currentSections, 'admin');
+
+ return $templateParameters;
+ }
+
+ /**
+ * @param ISettings[] $settings
+ * @return array
+ */
+ private function formatSettings($settings) {
+ $html = '';
+ foreach ($settings as $prioritizedSettings) {
+ foreach ($prioritizedSettings as $setting) {
+ /** @var \OCP\Settings\ISettings $setting */
+ $form = $setting->getForm();
+ $html .= $form->renderAs('')->render();
+ }
+ }
+ return ['content' => $html];
+ }
+
+ private function getIndexResponse($section) {
+ $templateParams = [];
+ $templateParams = array_merge($templateParams, $this->getNavigationParameters($section));
+ $templateParams = array_merge($templateParams, $this->getSettings($section));
+
+ return new TemplateResponse('settings', 'settings/frame', $templateParams);
+ }
+
+ abstract public function getSettings($section);
+}