From 3dca4de8b385b34eb2c2a910b61e44b00f094334 Mon Sep 17 00:00:00 2001 From: Arthur Schiwon Date: Fri, 19 May 2017 12:57:45 +0200 Subject: [PATCH] add Additional (+ Fallback) section for Personal settings Signed-off-by: Arthur Schiwon --- lib/private/Settings/Manager.php | 5 ++ lib/private/Settings/Personal/Additional.php | 59 +++++++++++++++++++ .../Controller/AdminSettingsController.php | 2 +- .../Controller/PersonalSettingsController.php | 37 +++++++++++- .../{admin => settings}/additional.php | 0 settings/templates/settings/empty.php | 26 ++++++++ 6 files changed, 127 insertions(+), 2 deletions(-) create mode 100644 lib/private/Settings/Personal/Additional.php rename settings/templates/{admin => settings}/additional.php (100%) create mode 100644 settings/templates/settings/empty.php diff --git a/lib/private/Settings/Manager.php b/lib/private/Settings/Manager.php index 707550c0bb..62a74b706f 100644 --- a/lib/private/Settings/Manager.php +++ b/lib/private/Settings/Manager.php @@ -420,6 +420,11 @@ class Manager implements IManager { $form = new Personal\SyncClients($this->config, $this->defaults); $forms[$form->getPriority()] = [$form]; } + if ($section === 'additional') { + /** @var ISettings $form */ + $form = new Personal\Additional($this->config); + $forms[$form->getPriority()] = [$form]; + } } catch (QueryException $e) { // skip } diff --git a/lib/private/Settings/Personal/Additional.php b/lib/private/Settings/Personal/Additional.php new file mode 100644 index 0000000000..b2bb26dc6b --- /dev/null +++ b/lib/private/Settings/Personal/Additional.php @@ -0,0 +1,59 @@ + + * + * @author Arthur Schiwon + * + * @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 . + * + */ + +namespace OC\Settings\Personal; + + +use OCP\AppFramework\Http\TemplateResponse; +use OCP\Settings\ISettings; + +class Additional implements ISettings { + + /** + * @return TemplateResponse returns the instance with all parameters set, ready to be rendered + * @since 9.1 + */ + public function getForm() { + return new TemplateResponse('settings', 'settings/empty'); + } + + /** + * @return string the section ID, e.g. 'sharing' + * @since 9.1 + */ + public function getSection() { + return 'additional'; + } + + /** + * @return int whether the form should be rather on the top or bottom of + * the admin section. The forms are arranged in ascending order of the + * priority values. It is required to return a value between 0 and 100. + * + * E.g.: 70 + * @since 9.1 + */ + public function getPriority() { + return '5'; + } +} diff --git a/settings/Controller/AdminSettingsController.php b/settings/Controller/AdminSettingsController.php index fb8b65d93a..087700ee55 100644 --- a/settings/Controller/AdminSettingsController.php +++ b/settings/Controller/AdminSettingsController.php @@ -108,7 +108,7 @@ class AdminSettingsController extends Controller { ); }, $forms); - $out = new Template('settings', 'admin/additional'); + $out = new Template('settings', 'settings/additional'); $out->assign('forms', $forms); return $out->fetchPage(); diff --git a/settings/Controller/PersonalSettingsController.php b/settings/Controller/PersonalSettingsController.php index 546af54a7f..11bd9a9d94 100644 --- a/settings/Controller/PersonalSettingsController.php +++ b/settings/Controller/PersonalSettingsController.php @@ -28,6 +28,7 @@ use OCP\AppFramework\Http\TemplateResponse; use OCP\INavigationManager; use OCP\IRequest; use OCP\Settings\IManager as ISettingsManager; +use OCP\Template; class PersonalSettingsController extends Controller { use CommonSettingsTrait { @@ -68,6 +69,40 @@ class PersonalSettingsController extends Controller { private function getSettings($section) { // PhpStorm shows this as unused, but is required by CommonSettingsTrait $settings = $this->settingsManager->getPersonalSettings($section); - return $this->formatSettings($settings); + $formatted = $this->formatSettings($settings); + if($section === 'additional') { + $formatted['content'] .= $this->getLegacyForms(); + } + return $formatted; + } + + /** + * @return bool|string + */ + private function getLegacyForms() { + $forms = \OC_App::getForms('personal'); + + $forms = array_map(function ($form) { + if (preg_match('%([^>]*)>.*?)%i', $form, $regs)) { + $sectionName = str_replace('', '', $regs[0]); + $sectionName = str_replace('', '', $sectionName); + $anchor = strtolower($sectionName); + $anchor = str_replace(' ', '-', $anchor); + + return array( + 'anchor' => $anchor, + 'section-name' => $sectionName, + 'form' => $form + ); + } + return array( + 'form' => $form + ); + }, $forms); + + $out = new Template('settings', 'settings/additional'); + $out->assign('forms', $forms); + + return $out->fetchPage(); } } diff --git a/settings/templates/admin/additional.php b/settings/templates/settings/additional.php similarity index 100% rename from settings/templates/admin/additional.php rename to settings/templates/settings/additional.php diff --git a/settings/templates/settings/empty.php b/settings/templates/settings/empty.php new file mode 100644 index 0000000000..e7e728f87b --- /dev/null +++ b/settings/templates/settings/empty.php @@ -0,0 +1,26 @@ + + * + * @author Arthur Schiwon + * + * @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 . + * + */ + +?> + +