]> source.dussan.org Git - nextcloud-server.git/commitdiff
more admin page splitup improvements
authorArthur Schiwon <blizzz@arthur-schiwon.de>
Wed, 10 Aug 2016 13:21:25 +0000 (15:21 +0200)
committerLukas Reschke <lukas@statuscode.ch>
Tue, 16 Aug 2016 19:05:11 +0000 (21:05 +0200)
* bump version to ensure tables are created
* make updatenotification app use settings api
* change IAdmin::render() to getForm() and change return type from Template to TemplateResponse
* adjust User_LDAP accordingly, as well as built-in forms
* add IDateTimeFormatter to AppFramework/DependencyInjection/DIContainer.php. This is important so that \OC::$server->query() is able to resolve the
constructor parameters. We should ensure that all OCP/* stuff that is available from \OC::$server is available here. Kudos to @LukasReschke
* make sure apps that have settings info in their info.xml are loaded before triggering adding the settings setup method

16 files changed:
apps/updatenotification/admin.php [deleted file]
apps/updatenotification/appinfo/info.xml
apps/updatenotification/lib/Controller/AdminController.php
apps/user_ldap/appinfo/info.xml
apps/user_ldap/lib/Settings/Admin.php
apps/user_ldap/templates/settings.php
lib/private/AppFramework/DependencyInjection/DIContainer.php
lib/private/Settings/Admin/Encryption.php
lib/private/Settings/Admin/Logging.php
lib/private/Settings/Admin/Server.php
lib/private/Settings/Admin/Sharing.php
lib/private/Settings/Admin/TipsTricks.php
lib/private/legacy/app.php
lib/public/Settings/IAdmin.php
settings/Controller/AdminSettingsController.php
version.php

diff --git a/apps/updatenotification/admin.php b/apps/updatenotification/admin.php
deleted file mode 100644 (file)
index 81c7a8f..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Lukas Reschke <lukas@statuscode.ch>
- *
- * @license AGPL-3.0
- *
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
- *
- * 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, version 3,
- * along with this program.  If not, see <http://www.gnu.org/licenses/>
- *
- */
-
-$app = new \OCA\UpdateNotification\AppInfo\Application();
-/** @var OCA\UpdateNotification\Controller\AdminController $controller */
-$controller = $app->getContainer()->query('AdminController');
-return $controller->displayPanel()->render();
index 55c6fba068367567b3bf508a8e93ad90db08c8e9..00e667c880ffe45b7c2dafe75c5e54152f61bace 100644 (file)
@@ -5,7 +5,7 @@
        <description>Displays update notifications for ownCloud and provides the SSO for the updater.</description>
        <licence>AGPL</licence>
        <author>Lukas Reschke</author>
-       <version>1.0.0</version>
+       <version>1.0.1</version>
        <namespace>UpdateNotification</namespace>
        <default_enable/>
        <dependencies>
@@ -15,4 +15,8 @@
        <background-jobs>
                <job>OCA\UpdateNotification\Notification\BackgroundJob</job>
        </background-jobs>
+
+       <settings>
+               <admin>OCA\UpdateNotification\Controller\AdminController</admin>
+       </settings>
 </info>
index ada04bdd68cc6037c274bf1bf5172cc15375e4ad..5f137120435e12c2d04e01e3cf57de0cf14affca 100644 (file)
@@ -34,8 +34,9 @@ use OCP\IDateTimeFormatter;
 use OCP\IL10N;
 use OCP\IRequest;
 use OCP\Security\ISecureRandom;
+use OCP\Settings\IAdmin;
 
-class AdminController extends Controller {
+class AdminController extends Controller implements IAdmin {
        /** @var IJobList */
        private $jobList;
        /** @var ISecureRandom */
@@ -144,4 +145,29 @@ class AdminController extends Controller {
 
                return new DataResponse($newToken);
        }
+
+       /**
+        * @return TemplateResponse returns the instance with all parameters set, ready to be rendered
+        */
+       public function getForm() {
+               return $this->displayPanel();
+       }
+
+       /**
+        * @return string the section ID, e.g. 'sharing'
+        */
+       public function getSection() {
+               return 'server';
+       }
+
+       /**
+        * @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
+        */
+       public function getPriority() {
+               return 5;
+       }
 }
index a84b6c22a6b568ab511311d6c019b583cb3fd42e..63e76901406cf456733383971d417d245fb8f5c5 100644 (file)
@@ -29,7 +29,7 @@ A user logs into ownCloud with their LDAP or AD credentials, and is granted acce
        </background-jobs>
 
        <settings>
-               <admin>\OCA\User_LDAP\Settings\Admin</admin>
-               <admin-section>\OCA\User_LDAP\Settings\Section</admin-section>
+               <admin>OCA\User_LDAP\Settings\Admin</admin>
+               <admin-section>OCA\User_LDAP\Settings\Section</admin-section>
        </settings>
 </info>
index 11e2627dedd2632cc47fba0a967d42fb16513354..f155f1cec8de43136b53c0d0e1bac546d7c81a6d 100644 (file)
@@ -23,9 +23,9 @@
 
 namespace OCA\User_LDAP\Settings;
 
-
 use OCA\User_LDAP\Configuration;
 use OCA\User_LDAP\Helper;
+use OCP\AppFramework\Http\TemplateResponse;
 use OCP\IL10N;
 use OCP\Settings\IAdmin;
 use OCP\Template;
@@ -40,53 +40,31 @@ class Admin implements IAdmin {
        }
 
        /**
-        * @return Template all parameters are supposed to be assigned
+        * @return TemplateResponse
         */
-       public function render() {
-               $settings = new Template('user_ldap', 'settings');
-
+       public function getForm() {
                $helper = new Helper();
                $prefixes = $helper->getServerConfigurationPrefixes();
                $hosts = $helper->getServerConfigurationHosts();
 
-               $wizardHtml = '';
-               $toc = [];
-
                $wControls = new Template('user_ldap', 'part.wizardcontrols');
                $wControls = $wControls->fetchPage();
                $sControls = new Template('user_ldap', 'part.settingcontrols');
                $sControls = $sControls->fetchPage();
 
-               $wizTabs = [
-                       ['tpl' => 'part.wizard-server',      'cap' => $this->l->t('Server')],
-                       ['tpl' => 'part.wizard-userfilter',  'cap' => $this->l->t('Users')],
-                       ['tpl' => 'part.wizard-loginfilter', 'cap' => $this->l->t('Login Attributes')],
-                       ['tpl' => 'part.wizard-groupfilter', 'cap' => $this->l->t('Groups')],
-               ];
-               $wizTabsCount = count($wizTabs);
-               for($i = 0; $i < $wizTabsCount; $i++) {
-                       $tab = new Template('user_ldap', $wizTabs[$i]['tpl']);
-                       if($i === 0) {
-                               $tab->assign('serverConfigurationPrefixes', $prefixes);
-                               $tab->assign('serverConfigurationHosts', $hosts);
-                       }
-                       $tab->assign('wizardControls', $wControls);
-                       $wizardHtml .= $tab->fetchPage();
-                       $toc['#ldapWizard'.($i+1)] = $wizTabs[$i]['cap'];
-               }
-
-               $settings->assign('tabs', $wizardHtml);
-               $settings->assign('toc', $toc);
-               $settings->assign('settingControls', $sControls);
+               $parameters['serverConfigurationPrefixes'] = $prefixes;
+               $parameters['serverConfigurationHosts'] = $hosts;
+               $parameters['settingControls'] = $sControls;
+               $parameters['wizardControls'] = $wControls;
 
                // assign default values
                $config = new Configuration('', false);
                $defaults = $config->getDefaults();
                foreach($defaults as $key => $default) {
-                       $settings->assign($key.'_default', $default);
+                       $parameters[$key.'_default'] = $default;
                }
 
-               return $settings;
+               return new TemplateResponse('user_ldap', 'settings', $parameters);
        }
 
        /**
index a1511071af484bc04b70f52c4cdd385ae7328ad3..eb4c7b99127597dff2854634dfaa6d601579d24a 100644 (file)
@@ -49,6 +49,9 @@ script('user_ldap', [
 
 style('user_ldap', 'settings');
 
+/** @var \OCP\IL10N $l */
+/** @var array $_ */
+
 ?>
 
 <form id="ldap" class="section" action="#" method="post">
@@ -56,20 +59,24 @@ style('user_ldap', 'settings');
 
        <div id="ldapSettings">
        <ul>
-               <?php foreach($_['toc'] as $id => $title) { ?>
-                       <li id="<?php p($id); ?>"><a href="<?php p($id); ?>"><?php p($title); ?></a></li>
-               <?php } ?>
+               <li id="#ldapWizard1"><a href="#ldapWizard1"><?php p($l->t('Server'));?></a></li>
+               <li id="#ldapWizard2"><a href="#ldapWizard2"><?php p($l->t('Users'));?></a></li>
+               <li id="#ldapWizard3"><a href="#ldapWizard3"><?php p($l->t('Login Attributes'));?></a></li>
+               <li id="#ldapWizard4"><a href="#ldapWizard4"><?php p($l->t('Groups'));?></a></li>
                <li class="ldapSettingsTabs"><a href="#ldapSettings-2"><?php p($l->t('Expert'));?></a></li>
                <li class="ldapSettingsTabs"><a href="#ldapSettings-1"><?php p($l->t('Advanced'));?></a></li>
        </ul>
-               <?php if(OCP\App::isEnabled('user_webdavauth')) {
-                       print_unescaped('<p class="ldapwarning">'.$l->t('<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them.').'</p>');
-               }
-               if(!function_exists('ldap_connect')) {
-                       print_unescaped('<p class="ldapwarning">'.$l->t('<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it.').'</p>');
-               }
-               ?>
-       <?php print_unescaped($_['tabs']); ?>
+       <?php if(OCP\App::isEnabled('user_webdavauth')) {
+               print_unescaped('<p class="ldapwarning">'.$l->t('<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them.').'</p>');
+       }
+       if(!function_exists('ldap_connect')) {
+               print_unescaped('<p class="ldapwarning">'.$l->t('<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it.').'</p>');
+       }
+       ?>
+       <?php require_once(__DIR__ . '/part.wizard-server.php'); ?>
+       <?php require_once(__DIR__ . '/part.wizard-userfilter.php'); ?>
+       <?php require_once(__DIR__ . '/part.wizard-loginfilter.php'); ?>
+       <?php require_once(__DIR__ . '/part.wizard-groupfilter.php'); ?>
        <fieldset id="ldapSettings-1">
                <div id="ldapAdvancedAccordion">
                        <h3><?php p($l->t('Connection Settings'));?></h3>
index 27f99118bd0b5ef6494fa304d35a6a1dc6830edf..d0f0c608b8908a73f5d3c0ec68905b715ef50472 100644 (file)
@@ -124,6 +124,10 @@ class DIContainer extends SimpleContainer implements IAppContainer {
                        return $this->getServer()->getDateTimeZone();
                });
 
+               $this->registerService('OCP\\IDateTimeFormatter', function($c) {
+                       return $this->getServer()->getDateTimeFormatter();
+               });
+
                $this->registerService('OCP\\IDb', function($c) {
                        return $this->getServer()->getDb();
                });
index 38197f71143a34a7a6842a75e8cd2511e8774b0f..331ddf5452053cb3a77df676bca6b41dc1279be5 100644 (file)
@@ -24,9 +24,9 @@
 namespace OC\Settings\Admin;
 
 use OC\Encryption\Manager;
+use OCP\AppFramework\Http\TemplateResponse;
 use OCP\IUserManager;
 use OCP\Settings\IAdmin;
-use OCP\Template;
 
 class Encryption implements IAdmin {
        /** @var Manager */
@@ -41,9 +41,9 @@ class Encryption implements IAdmin {
        }
 
        /**
-        * @return Template all parameters are supposed to be assigned
+        * @return TemplateResponse
         */
-       public function render() {
+       public function getForm() {
                $parameters = [
                        // Encryption API
                        'encryptionEnabled'       => $this->manager->isEnabled(),
@@ -51,11 +51,7 @@ class Encryption implements IAdmin {
                        'externalBackendsEnabled' => count($this->userManager->getBackends()) > 1,
                ];
 
-               $form = new Template('settings', 'admin/encryption');
-               foreach ($parameters as $key => $value) {
-                       $form->assign($key, $value);
-               }
-               return $form;
+               return new TemplateResponse('settings', 'admin/encryption', $parameters, '');
        }
 
        /**
index ead55810ec1500aca2f8c24da2c5be7096d99fe7..b05ea93388df565fde9b47e8b1e3fd70815dff9e 100644 (file)
@@ -24,9 +24,9 @@
 namespace OC\Settings\Admin;
 
 use OC\Log\File as LogFile;
+use OCP\AppFramework\Http\TemplateResponse;
 use OCP\IConfig;
 use OCP\Settings\IAdmin;
-use OCP\Template;
 
 class Logging implements IAdmin {
        /** @var IConfig */
@@ -37,9 +37,9 @@ class Logging implements IAdmin {
        }
 
        /**
-        * @return Template all parameters are supposed to be assigned
+        * @return TemplateResponse
         */
-       public function render() {
+       public function getForm() {
                $logType = $this->config->getSystemValue('log_type', 'file');
                $showLog = ($logType === 'file' || $logType === 'owncloud');
 
@@ -60,11 +60,7 @@ class Logging implements IAdmin {
                        'showLog'          => $showLog,
                ];
 
-               $form = new Template('settings', 'admin/logging');
-               foreach ($parameters as $key => $value) {
-                       $form->assign($key, $value);
-               }
-               return $form;
+               return new TemplateResponse('settings', 'admin/logging', $parameters, '');
        }
 
        /**
index c0f3584c0afa34e31c159d53c17373c02d4a8c68..ee2da154da2c23a8a2871640bd18577647896a36 100644 (file)
@@ -26,10 +26,10 @@ namespace OC\Settings\Admin;
 use Doctrine\DBAL\Connection;
 use Doctrine\DBAL\DBALException;
 use Doctrine\DBAL\Platforms\SqlitePlatform;
+use OCP\AppFramework\Http\TemplateResponse;
 use OCP\IConfig;
 use OCP\IDBConnection;
 use OCP\Settings\IAdmin;
-use OCP\Template;
 
 class Server implements IAdmin {
 
@@ -45,9 +45,9 @@ class Server implements IAdmin {
        }
 
        /**
-        * @return Template all parameters are supposed to be assigned
+        * @return TemplateResponse
         */
-       public function render() {
+       public function getForm() {
                try {
                        if ($this->db->getDatabasePlatform() instanceof SqlitePlatform) {
                                $invalidTransactionIsolationLevel = false;
@@ -87,11 +87,7 @@ class Server implements IAdmin {
                        'mail_smtppassword'     => $this->config->getSystemValue('mail_smtppassword', ''),
                ];
 
-               $form = new Template('settings', 'admin/server');
-               foreach ($parameters as $key => $value) {
-                       $form->assign($key, $value);
-               }
-               return $form;
+               return new TemplateResponse('settings', 'admin/server', $parameters, '');
        }
 
        /**
index 7fefa4008a0d0f927b709bfa56aed8da3e5de46d..088021f9057c09304aa9670ae6d1d186e2683c46 100644 (file)
@@ -23,9 +23,9 @@
 
 namespace OC\Settings\Admin;
 
+use OCP\AppFramework\Http\TemplateResponse;
 use OCP\IConfig;
 use OCP\Settings\IAdmin;
-use OCP\Template;
 
 class Sharing implements IAdmin {
        /** @var IConfig */
@@ -36,9 +36,9 @@ class Sharing implements IAdmin {
        }
 
        /**
-        * @return Template all parameters are supposed to be assigned
+        * @return TemplateResponse
         */
-       public function render() {
+       public function getForm() {
                $excludeGroupsList = !is_null(json_decode($this->config->getAppValue('core', 'shareapi_exclude_groups_list', '')))
                        ? implode('|', $this->config->getAppValue('core', 'shareapi_exclude_groups_list', '')) : '';
 
@@ -52,11 +52,7 @@ class Sharing implements IAdmin {
                        'shareExcludedGroupsList'   => $excludeGroupsList,
                ];
 
-               $form = new Template('settings', 'admin/sharing');
-               foreach ($parameters as $key => $value) {
-                       $form->assign($key, $value);
-               }
-               return $form;
+               return new TemplateResponse('settings', 'admin/sharing', $parameters, '');
        }
 
        /**
index a0465f5e3caddc8247aa820ae44f8ba66f9c77c4..331c33db1c17602818121cf13d6dd8c6dbe98c67 100644 (file)
@@ -23,9 +23,9 @@
 
 namespace OC\Settings\Admin;
 
+use OCP\AppFramework\Http\TemplateResponse;
 use OCP\IConfig;
 use OCP\Settings\IAdmin;
-use OCP\Template;
 
 class TipsTricks implements IAdmin {
        /** @var IConfig */
@@ -36,20 +36,16 @@ class TipsTricks implements IAdmin {
        }
 
        /**
-        * @return Template all parameters are supposed to be assigned
+        * @return TemplateResponse
         */
-       public function render() {
+       public function getForm() {
                $databaseOverload = (strpos($this->config->getSystemValue('dbtype'), 'sqlite') !== false);
 
                $parameters = [
                        'databaseOverload' => $databaseOverload,
                ];
 
-               $form = new Template('settings', 'admin/tipstricks');
-               foreach ($parameters as $key => $value) {
-                       $form->assign($key, $value);
-               }
-               return $form;
+               return new TemplateResponse('settings', 'admin/tipstricks', $parameters, '');
        }
 
        /**
index 39f2f1a0efe07909df62613bf2f3082f976ca26e..bba4f59555eb4e5f3ff356b02b2b163da0d0f390 100644 (file)
@@ -1200,6 +1200,7 @@ class OC_App {
                }
                self::setupBackgroundJobs($appData['background-jobs']);
                if(isset($appData['settings']) && is_array($appData['settings'])) {
+                       self::loadApp($appId, false);
                        \OC::$server->getSettingsManager()->setupSettings($appData['settings']);
                }
 
index ce52e3da7254654274730bbe9b1fdcc46504d75d..74977256a1861fa9e7a821273b44c5fe743e5d78 100644 (file)
 
 namespace OCP\Settings;
 
-use OCP\Template;
+use OCP\AppFramework\Http\TemplateResponse;
 
 interface IAdmin {
 
        /**
-        * @return Template all parameters are supposed to be assigned
+        * @return TemplateResponse returns the instance with all parameters set, ready to be rendered
         */
-       public function render();
+       public function getForm();
 
        /**
         * @return string the section ID, e.g. 'sharing'
index b6a6e74705fcf9955572a55494b37718361056d3..f27bdd3ec3304700d6c7f164574e124f1716f17a 100644 (file)
@@ -92,8 +92,8 @@ class AdminSettingsController extends Controller {
                foreach ($settings as $prioritizedSettings) {
                        foreach ($prioritizedSettings as $setting) {
                                /** @var \OCP\Settings\IAdmin $setting */
-                               $form = $setting->render();
-                               $html .= $form->fetchPage();
+                               $form = $setting->getForm();
+                               $html .= $form->renderAs('')->render();
                        }
                }
                return ['content' => $html];
index 59bac04a9d69f66cdbad7617a74fdf2d2826c621..d03fbdaae88324fd0604000477e6731edd8490af 100644 (file)
@@ -25,7 +25,7 @@
 // We only can count up. The 4. digit is only for the internal patchlevel to trigger DB upgrades
 // between betas, final and RCs. This is _not_ the public version number. Reset minor/patchlevel
 // when updating major/minor version number.
-$OC_Version = array(9, 1, 0, 14);
+$OC_Version = array(9, 1, 0, 15);
 
 // The human readable string
 $OC_VersionString = '10.0 beta';