Merge pull request #9029 from nextcloud/settings-restructure
Restructure server settings
This commit is contained in:
commit
d161d4473e
|
@ -57,7 +57,7 @@ class CalDAVSettings implements ISettings {
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getSection() {
|
public function getSection() {
|
||||||
return 'additional';
|
return 'server';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -49,7 +49,7 @@ class CalDAVSettingsTest extends TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetSection() {
|
public function testGetSection() {
|
||||||
$this->assertEquals('additional', $this->settings->getSection());
|
$this->assertEquals('server', $this->settings->getSection());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetPriority() {
|
public function testGetPriority() {
|
||||||
|
|
|
@ -6,11 +6,14 @@ script('federatedfilesharing', 'settings-admin');
|
||||||
|
|
||||||
<?php if($_['internalOnly'] === false): ?>
|
<?php if($_['internalOnly'] === false): ?>
|
||||||
|
|
||||||
<div id="fileSharingSettings" class="followupsection">
|
<div id="fileSharingSettings" class="section">
|
||||||
<h3><?php p($l->t('Federated Cloud Sharing'));?></h3>
|
<h2>
|
||||||
<a target="_blank" rel="noreferrer noopener" class="icon-info svg"
|
<?php p($l->t('Federated Cloud Sharing'));?>
|
||||||
title="<?php p($l->t('Open documentation'));?>"
|
<a target="_blank" rel="noreferrer noopener" class="icon-info svg"
|
||||||
href="<?php p(link_to_docs('admin-sharing-federated')); ?>"></a>
|
title="<?php p($l->t('Open documentation'));?>"
|
||||||
|
href="<?php p(link_to_docs('admin-sharing-federated')); ?>"></a>
|
||||||
|
</h2>
|
||||||
|
|
||||||
<p class="settings-hint"><?php p($l->t('Adjust how people can share between servers.')); ?></p>
|
<p class="settings-hint"><?php p($l->t('Adjust how people can share between servers.')); ?></p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
|
|
|
@ -26,3 +26,7 @@
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ocFederationAddServer #serverUrl {
|
||||||
|
width: 300px;
|
||||||
|
}
|
||||||
|
|
|
@ -70,7 +70,7 @@ class Admin implements ISettings {
|
||||||
* @return string the section ID, e.g. 'sharing'
|
* @return string the section ID, e.g. 'sharing'
|
||||||
*/
|
*/
|
||||||
public function getSection() {
|
public function getSection() {
|
||||||
return 'additional';
|
return 'server';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -75,7 +75,7 @@ class AdminTest extends TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetSection() {
|
public function testGetSection() {
|
||||||
$this->assertSame('additional', $this->admin->getSection());
|
$this->assertSame('server', $this->admin->getSection());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetPriority() {
|
public function testGetPriority() {
|
||||||
|
|
|
@ -130,7 +130,7 @@ class Admin implements ISettings {
|
||||||
* @return string the section ID, e.g. 'sharing'
|
* @return string the section ID, e.g. 'sharing'
|
||||||
*/
|
*/
|
||||||
public function getSection(): string {
|
public function getSection(): string {
|
||||||
return 'server';
|
return 'overview';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -141,6 +141,6 @@ class Admin implements ISettings {
|
||||||
* E.g.: 70
|
* E.g.: 70
|
||||||
*/
|
*/
|
||||||
public function getPriority(): int {
|
public function getPriority(): int {
|
||||||
return 1;
|
return 11;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -140,10 +140,10 @@ class AdminTest extends TestCase {
|
||||||
|
|
||||||
|
|
||||||
public function testGetSection() {
|
public function testGetSection() {
|
||||||
$this->assertSame('server', $this->admin->getSection());
|
$this->assertSame('overview', $this->admin->getSection());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetPriority() {
|
public function testGetPriority() {
|
||||||
$this->assertSame(1, $this->admin->getPriority());
|
$this->assertSame(11, $this->admin->getPriority());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@ $color-main-background: #ffffff;
|
||||||
$color-primary: #0082c9;
|
$color-primary: #0082c9;
|
||||||
$color-primary-text: #ffffff;
|
$color-primary-text: #ffffff;
|
||||||
$color-error: #e9322d;
|
$color-error: #e9322d;
|
||||||
$color-warning: #ffcc44;
|
$color-warning: #eca700;
|
||||||
$color-success: #46ba61;
|
$color-success: #46ba61;
|
||||||
$color-primary-element: $color-primary;
|
$color-primary-element: $color-primary;
|
||||||
|
|
||||||
|
|
|
@ -892,8 +892,9 @@ return array(
|
||||||
'OC\\Settings\\Activity\\SecurityProvider' => $baseDir . '/settings/Activity/SecurityProvider.php',
|
'OC\\Settings\\Activity\\SecurityProvider' => $baseDir . '/settings/Activity/SecurityProvider.php',
|
||||||
'OC\\Settings\\Activity\\SecuritySetting' => $baseDir . '/settings/Activity/SecuritySetting.php',
|
'OC\\Settings\\Activity\\SecuritySetting' => $baseDir . '/settings/Activity/SecuritySetting.php',
|
||||||
'OC\\Settings\\Activity\\Setting' => $baseDir . '/settings/Activity/Setting.php',
|
'OC\\Settings\\Activity\\Setting' => $baseDir . '/settings/Activity/Setting.php',
|
||||||
'OC\\Settings\\Admin\\Additional' => $baseDir . '/lib/private/Settings/Admin/Additional.php',
|
|
||||||
'OC\\Settings\\Admin\\Encryption' => $baseDir . '/lib/private/Settings/Admin/Encryption.php',
|
'OC\\Settings\\Admin\\Encryption' => $baseDir . '/lib/private/Settings/Admin/Encryption.php',
|
||||||
|
'OC\\Settings\\Admin\\Mail' => $baseDir . '/lib/private/Settings/Admin/Mail.php',
|
||||||
|
'OC\\Settings\\Admin\\Overview' => $baseDir . '/lib/private/Settings/Admin/Overview.php',
|
||||||
'OC\\Settings\\Admin\\Server' => $baseDir . '/lib/private/Settings/Admin/Server.php',
|
'OC\\Settings\\Admin\\Server' => $baseDir . '/lib/private/Settings/Admin/Server.php',
|
||||||
'OC\\Settings\\Admin\\ServerDevNotice' => $baseDir . '/lib/private/Settings/Admin/ServerDevNotice.php',
|
'OC\\Settings\\Admin\\ServerDevNotice' => $baseDir . '/lib/private/Settings/Admin/ServerDevNotice.php',
|
||||||
'OC\\Settings\\Admin\\Sharing' => $baseDir . '/lib/private/Settings/Admin/Sharing.php',
|
'OC\\Settings\\Admin\\Sharing' => $baseDir . '/lib/private/Settings/Admin/Sharing.php',
|
||||||
|
|
|
@ -922,8 +922,9 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
|
||||||
'OC\\Settings\\Activity\\SecurityProvider' => __DIR__ . '/../../..' . '/settings/Activity/SecurityProvider.php',
|
'OC\\Settings\\Activity\\SecurityProvider' => __DIR__ . '/../../..' . '/settings/Activity/SecurityProvider.php',
|
||||||
'OC\\Settings\\Activity\\SecuritySetting' => __DIR__ . '/../../..' . '/settings/Activity/SecuritySetting.php',
|
'OC\\Settings\\Activity\\SecuritySetting' => __DIR__ . '/../../..' . '/settings/Activity/SecuritySetting.php',
|
||||||
'OC\\Settings\\Activity\\Setting' => __DIR__ . '/../../..' . '/settings/Activity/Setting.php',
|
'OC\\Settings\\Activity\\Setting' => __DIR__ . '/../../..' . '/settings/Activity/Setting.php',
|
||||||
'OC\\Settings\\Admin\\Additional' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/Additional.php',
|
|
||||||
'OC\\Settings\\Admin\\Encryption' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/Encryption.php',
|
'OC\\Settings\\Admin\\Encryption' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/Encryption.php',
|
||||||
|
'OC\\Settings\\Admin\\Mail' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/Mail.php',
|
||||||
|
'OC\\Settings\\Admin\\Overview' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/Overview.php',
|
||||||
'OC\\Settings\\Admin\\Server' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/Server.php',
|
'OC\\Settings\\Admin\\Server' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/Server.php',
|
||||||
'OC\\Settings\\Admin\\ServerDevNotice' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/ServerDevNotice.php',
|
'OC\\Settings\\Admin\\ServerDevNotice' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/ServerDevNotice.php',
|
||||||
'OC\\Settings\\Admin\\Sharing' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/Sharing.php',
|
'OC\\Settings\\Admin\\Sharing' => __DIR__ . '/../../..' . '/lib/private/Settings/Admin/Sharing.php',
|
||||||
|
|
|
@ -29,7 +29,7 @@ use OCP\AppFramework\Http\TemplateResponse;
|
||||||
use OCP\IConfig;
|
use OCP\IConfig;
|
||||||
use OCP\Settings\ISettings;
|
use OCP\Settings\ISettings;
|
||||||
|
|
||||||
class Additional implements ISettings {
|
class Mail implements ISettings {
|
||||||
/** @var IConfig */
|
/** @var IConfig */
|
||||||
private $config;
|
private $config;
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ class Additional implements ISettings {
|
||||||
* @return string the section ID, e.g. 'sharing'
|
* @return string the section ID, e.g. 'sharing'
|
||||||
*/
|
*/
|
||||||
public function getSection() {
|
public function getSection() {
|
||||||
return 'additional';
|
return 'server';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -81,6 +81,6 @@ class Additional implements ISettings {
|
||||||
* E.g.: 70
|
* E.g.: 70
|
||||||
*/
|
*/
|
||||||
public function getPriority() {
|
public function getPriority() {
|
||||||
return 0;
|
return 10;
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,154 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>
|
||||||
|
*
|
||||||
|
* @author Julius Härtl <jus@bitgrid.net>
|
||||||
|
*
|
||||||
|
* @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\Admin;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Connection;
|
||||||
|
use Doctrine\DBAL\DBALException;
|
||||||
|
use Doctrine\DBAL\Platforms\SqlitePlatform;
|
||||||
|
use OC\Lock\DBLockingProvider;
|
||||||
|
use OC\Lock\NoopLockingProvider;
|
||||||
|
use OCP\AppFramework\Http\TemplateResponse;
|
||||||
|
use OCP\IConfig;
|
||||||
|
use OCP\IDBConnection;
|
||||||
|
use OCP\IL10N;
|
||||||
|
use OCP\IRequest;
|
||||||
|
use OCP\Lock\ILockingProvider;
|
||||||
|
use OCP\Settings\ISettings;
|
||||||
|
|
||||||
|
class Overview implements ISettings {
|
||||||
|
/** @var IDBConnection|Connection */
|
||||||
|
private $db;
|
||||||
|
/** @var IRequest */
|
||||||
|
private $request;
|
||||||
|
/** @var IConfig */
|
||||||
|
private $config;
|
||||||
|
/** @var ILockingProvider */
|
||||||
|
private $lockingProvider;
|
||||||
|
/** @var IL10N */
|
||||||
|
private $l;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param IDBConnection $db
|
||||||
|
* @param IRequest $request
|
||||||
|
* @param IConfig $config
|
||||||
|
* @param ILockingProvider $lockingProvider
|
||||||
|
* @param IL10N $l
|
||||||
|
*/
|
||||||
|
public function __construct(IDBConnection $db,
|
||||||
|
IRequest $request,
|
||||||
|
IConfig $config,
|
||||||
|
ILockingProvider $lockingProvider,
|
||||||
|
IL10N $l) {
|
||||||
|
$this->db = $db;
|
||||||
|
$this->request = $request;
|
||||||
|
$this->config = $config;
|
||||||
|
$this->lockingProvider = $lockingProvider;
|
||||||
|
$this->l = $l;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return TemplateResponse
|
||||||
|
*/
|
||||||
|
public function getForm() {
|
||||||
|
try {
|
||||||
|
if ($this->db->getDatabasePlatform() instanceof SqlitePlatform) {
|
||||||
|
$invalidTransactionIsolationLevel = false;
|
||||||
|
} else {
|
||||||
|
$invalidTransactionIsolationLevel = $this->db->getTransactionIsolation() !== Connection::TRANSACTION_READ_COMMITTED;
|
||||||
|
}
|
||||||
|
} catch (DBALException $e) {
|
||||||
|
// ignore
|
||||||
|
$invalidTransactionIsolationLevel = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$envPath = getenv('PATH');
|
||||||
|
|
||||||
|
// warn if outdated version of a memcache module is used
|
||||||
|
$caches = [
|
||||||
|
'apcu' => ['name' => $this->l->t('APCu'), 'version' => '4.0.6'],
|
||||||
|
'redis' => ['name' => $this->l->t('Redis'), 'version' => '2.2.5'],
|
||||||
|
];
|
||||||
|
$outdatedCaches = [];
|
||||||
|
foreach ($caches as $php_module => $data) {
|
||||||
|
$isOutdated = extension_loaded($php_module) && version_compare(phpversion($php_module), $data['version'], '<');
|
||||||
|
if ($isOutdated) {
|
||||||
|
$outdatedCaches[$php_module] = $data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->lockingProvider instanceof NoopLockingProvider) {
|
||||||
|
$fileLockingType = 'none';
|
||||||
|
} else if ($this->lockingProvider instanceof DBLockingProvider) {
|
||||||
|
$fileLockingType = 'db';
|
||||||
|
} else {
|
||||||
|
$fileLockingType = 'cache';
|
||||||
|
}
|
||||||
|
|
||||||
|
$suggestedOverwriteCliUrl = '';
|
||||||
|
if ($this->config->getSystemValue('overwrite.cli.url', '') === '') {
|
||||||
|
$suggestedOverwriteCliUrl = $this->request->getServerProtocol() . '://' . $this->request->getInsecureServerHost() . \OC::$WEBROOT;
|
||||||
|
if (!$this->config->getSystemValue('config_is_read_only', false)) {
|
||||||
|
// Set the overwrite URL when it was not set yet.
|
||||||
|
$this->config->setSystemValue('overwrite.cli.url', $suggestedOverwriteCliUrl);
|
||||||
|
$suggestedOverwriteCliUrl = '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$parameters = [
|
||||||
|
// Diagnosis
|
||||||
|
'readOnlyConfigEnabled' => \OC_Helper::isReadOnlyConfigEnabled(),
|
||||||
|
'isLocaleWorking' => \OC_Util::isSetLocaleWorking(),
|
||||||
|
'isAnnotationsWorking' => \OC_Util::isAnnotationsWorking(),
|
||||||
|
'checkForWorkingWellKnownSetup' => $this->config->getSystemValue('check_for_working_wellknown_setup', true),
|
||||||
|
'has_fileinfo' => \OC_Util::fileInfoLoaded(),
|
||||||
|
'invalidTransactionIsolationLevel' => $invalidTransactionIsolationLevel,
|
||||||
|
'getenvServerNotWorking' => empty($envPath),
|
||||||
|
'OutdatedCacheWarning' => $outdatedCaches,
|
||||||
|
'fileLockingType' => $fileLockingType,
|
||||||
|
'suggestedOverwriteCliUrl' => $suggestedOverwriteCliUrl,
|
||||||
|
'lastcron' => $this->config->getAppValue('core', 'lastcron', false),
|
||||||
|
'cronErrors' => $this->config->getAppValue('core', 'cronErrors'),
|
||||||
|
];
|
||||||
|
|
||||||
|
return new TemplateResponse('settings', 'settings/admin/overview', $parameters, '');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string the section ID, e.g. 'sharing'
|
||||||
|
*/
|
||||||
|
public function getSection() {
|
||||||
|
return 'overview';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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 10;
|
||||||
|
}
|
||||||
|
}
|
|
@ -74,63 +74,7 @@ class Server implements ISettings {
|
||||||
* @return TemplateResponse
|
* @return TemplateResponse
|
||||||
*/
|
*/
|
||||||
public function getForm() {
|
public function getForm() {
|
||||||
try {
|
|
||||||
if ($this->db->getDatabasePlatform() instanceof SqlitePlatform) {
|
|
||||||
$invalidTransactionIsolationLevel = false;
|
|
||||||
} else {
|
|
||||||
$invalidTransactionIsolationLevel = $this->db->getTransactionIsolation() !== Connection::TRANSACTION_READ_COMMITTED;
|
|
||||||
}
|
|
||||||
} catch (DBALException $e) {
|
|
||||||
// ignore
|
|
||||||
$invalidTransactionIsolationLevel = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$envPath = getenv('PATH');
|
|
||||||
|
|
||||||
// warn if outdated version of a memcache module is used
|
|
||||||
$caches = [
|
|
||||||
'apcu' => ['name' => $this->l->t('APCu'), 'version' => '4.0.6'],
|
|
||||||
'redis' => ['name' => $this->l->t('Redis'), 'version' => '2.2.5'],
|
|
||||||
];
|
|
||||||
$outdatedCaches = [];
|
|
||||||
foreach ($caches as $php_module => $data) {
|
|
||||||
$isOutdated = extension_loaded($php_module) && version_compare(phpversion($php_module), $data['version'], '<');
|
|
||||||
if ($isOutdated) {
|
|
||||||
$outdatedCaches[$php_module] = $data;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($this->lockingProvider instanceof NoopLockingProvider) {
|
|
||||||
$fileLockingType = 'none';
|
|
||||||
} else if ($this->lockingProvider instanceof DBLockingProvider) {
|
|
||||||
$fileLockingType = 'db';
|
|
||||||
} else {
|
|
||||||
$fileLockingType = 'cache';
|
|
||||||
}
|
|
||||||
|
|
||||||
$suggestedOverwriteCliUrl = '';
|
|
||||||
if ($this->config->getSystemValue('overwrite.cli.url', '') === '') {
|
|
||||||
$suggestedOverwriteCliUrl = $this->request->getServerProtocol() . '://' . $this->request->getInsecureServerHost() . \OC::$WEBROOT;
|
|
||||||
if (!$this->config->getSystemValue('config_is_read_only', false)) {
|
|
||||||
// Set the overwrite URL when it was not set yet.
|
|
||||||
$this->config->setSystemValue('overwrite.cli.url', $suggestedOverwriteCliUrl);
|
|
||||||
$suggestedOverwriteCliUrl = '';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$parameters = [
|
$parameters = [
|
||||||
// Diagnosis
|
|
||||||
'readOnlyConfigEnabled' => \OC_Helper::isReadOnlyConfigEnabled(),
|
|
||||||
'isLocaleWorking' => \OC_Util::isSetLocaleWorking(),
|
|
||||||
'isAnnotationsWorking' => \OC_Util::isAnnotationsWorking(),
|
|
||||||
'checkForWorkingWellKnownSetup' => $this->config->getSystemValue('check_for_working_wellknown_setup', true),
|
|
||||||
'has_fileinfo' => \OC_Util::fileInfoLoaded(),
|
|
||||||
'invalidTransactionIsolationLevel' => $invalidTransactionIsolationLevel,
|
|
||||||
'getenvServerNotWorking' => empty($envPath),
|
|
||||||
'OutdatedCacheWarning' => $outdatedCaches,
|
|
||||||
'fileLockingType' => $fileLockingType,
|
|
||||||
'suggestedOverwriteCliUrl' => $suggestedOverwriteCliUrl,
|
|
||||||
|
|
||||||
// Background jobs
|
// Background jobs
|
||||||
'backgroundjobs_mode' => $this->config->getAppValue('core', 'backgroundjobs_mode', 'ajax'),
|
'backgroundjobs_mode' => $this->config->getAppValue('core', 'backgroundjobs_mode', 'ajax'),
|
||||||
'lastcron' => $this->config->getAppValue('core', 'lastcron', false),
|
'lastcron' => $this->config->getAppValue('core', 'lastcron', false),
|
||||||
|
|
|
@ -226,7 +226,8 @@ class Manager implements IManager {
|
||||||
public function getAdminSections(): array {
|
public function getAdminSections(): array {
|
||||||
// built-in sections
|
// built-in sections
|
||||||
$sections = [
|
$sections = [
|
||||||
0 => [new Section('server', $this->l->t('Basic settings'), 0, $this->url->imagePath('settings', 'admin.svg'))],
|
0 => [new Section('overview', $this->l->t('Overview'), 0, $this->url->imagePath('settings', 'admin.svg'))],
|
||||||
|
1 => [new Section('server', $this->l->t('Basic settings'), 0, $this->url->imagePath('core', 'actions/settings-dark.svg'))],
|
||||||
5 => [new Section('sharing', $this->l->t('Sharing'), 0, $this->url->imagePath('core', 'actions/share.svg'))],
|
5 => [new Section('sharing', $this->l->t('Sharing'), 0, $this->url->imagePath('core', 'actions/share.svg'))],
|
||||||
10 => [new Section('security', $this->l->t('Security'), 0, $this->url->imagePath('core', 'actions/password.svg'))],
|
10 => [new Section('security', $this->l->t('Security'), 0, $this->url->imagePath('core', 'actions/password.svg'))],
|
||||||
45 => [new Section('encryption', $this->l->t('Encryption'), 0, $this->url->imagePath('core', 'actions/password.svg'))],
|
45 => [new Section('encryption', $this->l->t('Encryption'), 0, $this->url->imagePath('core', 'actions/password.svg'))],
|
||||||
|
@ -257,11 +258,18 @@ class Manager implements IManager {
|
||||||
private function getBuiltInAdminSettings($section): array {
|
private function getBuiltInAdminSettings($section): array {
|
||||||
$forms = [];
|
$forms = [];
|
||||||
|
|
||||||
|
if ($section === 'overview') {
|
||||||
|
/** @var ISettings $form */
|
||||||
|
$form = new Admin\Overview($this->dbc, $this->request, $this->config, $this->lockingProvider, $this->l);
|
||||||
|
$forms[$form->getPriority()] = [$form];
|
||||||
|
$form = new Admin\ServerDevNotice();
|
||||||
|
$forms[$form->getPriority()] = [$form];
|
||||||
|
}
|
||||||
if ($section === 'server') {
|
if ($section === 'server') {
|
||||||
/** @var ISettings $form */
|
/** @var ISettings $form */
|
||||||
$form = new Admin\Server($this->dbc, $this->request, $this->config, $this->lockingProvider, $this->l);
|
$form = new Admin\Server($this->dbc, $this->request, $this->config, $this->lockingProvider, $this->l);
|
||||||
$forms[$form->getPriority()] = [$form];
|
$forms[$form->getPriority()] = [$form];
|
||||||
$form = new Admin\ServerDevNotice();
|
$form = new Admin\Mail($this->config);
|
||||||
$forms[$form->getPriority()] = [$form];
|
$forms[$form->getPriority()] = [$form];
|
||||||
}
|
}
|
||||||
if ($section === 'encryption') {
|
if ($section === 'encryption') {
|
||||||
|
@ -274,11 +282,6 @@ class Manager implements IManager {
|
||||||
$form = new Admin\Sharing($this->config, $this->l);
|
$form = new Admin\Sharing($this->config, $this->l);
|
||||||
$forms[$form->getPriority()] = [$form];
|
$forms[$form->getPriority()] = [$form];
|
||||||
}
|
}
|
||||||
if ($section === 'additional') {
|
|
||||||
/** @var ISettings $form */
|
|
||||||
$form = new Admin\Additional($this->config);
|
|
||||||
$forms[$form->getPriority()] = [$form];
|
|
||||||
}
|
|
||||||
if ($section === 'tips-tricks') {
|
if ($section === 'tips-tricks') {
|
||||||
/** @var ISettings $form */
|
/** @var ISettings $form */
|
||||||
$form = new Admin\TipsTricks($this->config);
|
$form = new Admin\TipsTricks($this->config);
|
||||||
|
|
|
@ -66,7 +66,7 @@ trait CommonSettingsTrait {
|
||||||
} else if($type === 'personal') {
|
} else if($type === 'personal') {
|
||||||
$settings = $this->settingsManager->getPersonalSettings($section->getID());
|
$settings = $this->settingsManager->getPersonalSettings($section->getID());
|
||||||
}
|
}
|
||||||
if (empty($settings)) {
|
if (empty($settings) && !($section->getID() === 'additional' && count(\OC_App::getForms('admin')) > 0)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -151,6 +151,11 @@ input {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#personal-settings {
|
||||||
|
.section {
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#personal-settings {
|
#personal-settings {
|
||||||
display: grid;
|
display: grid;
|
||||||
|
@ -905,11 +910,21 @@ span.version {
|
||||||
}
|
}
|
||||||
|
|
||||||
.section {
|
.section {
|
||||||
h2.app-name {
|
|
||||||
display: block;
|
|
||||||
margin: 8px 0;
|
|
||||||
}
|
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
|
/* use 2nd child since app-navigation-toggle is the first */
|
||||||
|
&:not(:nth-child(2)) {
|
||||||
|
border-top: 1px solid $color-border;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* correctly display help icons next to headings */
|
||||||
|
h2 {
|
||||||
|
margin-bottom: 22px;
|
||||||
|
.icon-info {
|
||||||
|
padding: 6px 20px;
|
||||||
|
vertical-align: text-bottom;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.personal-settings-setting-box .section {
|
.personal-settings-setting-box .section {
|
||||||
|
@ -1054,6 +1069,10 @@ span.version {
|
||||||
&.apps-experimental {
|
&.apps-experimental {
|
||||||
flex-basis: 90%;
|
flex-basis: 90%;
|
||||||
}
|
}
|
||||||
|
h2.app-name {
|
||||||
|
display: block;
|
||||||
|
margin: 8px 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.app-description {
|
.app-description {
|
||||||
p {
|
p {
|
||||||
|
@ -1092,6 +1111,7 @@ span.version {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
padding-left: 6px;
|
padding-left: 6px;
|
||||||
padding-top: 15px;
|
padding-top: 15px;
|
||||||
|
|
||||||
.enable {
|
.enable {
|
||||||
position: relative;
|
position: relative;
|
||||||
top: -1px;
|
top: -1px;
|
||||||
|
@ -1129,6 +1149,7 @@ table.grid td.date {
|
||||||
#security-warning li {
|
#security-warning li {
|
||||||
list-style: initial;
|
list-style: initial;
|
||||||
margin: 10px 0;
|
margin: 10px 0;
|
||||||
|
list-style-position: inside;
|
||||||
}
|
}
|
||||||
|
|
||||||
#security-warning-state span {
|
#security-warning-state span {
|
||||||
|
@ -1195,7 +1216,8 @@ table.grid td.date {
|
||||||
width: 300px;
|
width: 300px;
|
||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
select:nth-child(2) {
|
select:nth-child(2),
|
||||||
|
input {
|
||||||
width: 143px;
|
width: 143px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1288,13 +1310,16 @@ doesnotexist:-o-prefocus, .strengthify-wrapper {
|
||||||
height: 50px;
|
height: 50px;
|
||||||
background-position: left center;
|
background-position: left center;
|
||||||
}
|
}
|
||||||
.errors, .warnings {
|
.errors, .errors a {
|
||||||
color: #ce3702;
|
color: $color-error;
|
||||||
|
}
|
||||||
|
.warnings, .warnings a {
|
||||||
|
color: $color-warning;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#security-warning > ul {
|
#security-warning > ul {
|
||||||
color: #ce3702;
|
color: $color-error;
|
||||||
}
|
}
|
||||||
|
|
||||||
#admin-tips li {
|
#admin-tips li {
|
||||||
|
|
|
@ -0,0 +1,172 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @copyright Copyright (c) 2016 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/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @var \OCP\IL10N $l */
|
||||||
|
/** @var array $_ */
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
<div id="security-warning" class="section">
|
||||||
|
<h2><?php p($l->t('Security & setup warnings'));?></h2>
|
||||||
|
<p class="settings-hint"><?php p($l->t('It\'s important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the Tips & Tricks section and the documentation for more information.'));?></p>
|
||||||
|
<ul>
|
||||||
|
<?php
|
||||||
|
// is php setup properly to query system environment variables like getenv('PATH')
|
||||||
|
if ($_['getenvServerNotWorking']) {
|
||||||
|
?>
|
||||||
|
<li>
|
||||||
|
<?php p($l->t('PHP does not seem to be setup properly to query system environment variables. The test with getenv("PATH") only returns an empty response.')); ?><br>
|
||||||
|
<?php print_unescaped($l->t('Please check the <a target="_blank" rel="noreferrer noopener" href="%s">installation documentation ↗</a> for PHP configuration notes and the PHP configuration of your server, especially when using php-fpm.', link_to_docs('admin-php-fpm'))); ?>
|
||||||
|
</li>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
|
||||||
|
// is read only config enabled
|
||||||
|
if ($_['readOnlyConfigEnabled']) {
|
||||||
|
?>
|
||||||
|
<li>
|
||||||
|
<?php p($l->t('The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update.')); ?>
|
||||||
|
</li>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
|
||||||
|
// Are doc blocks accessible?
|
||||||
|
if (!$_['isAnnotationsWorking']) {
|
||||||
|
?>
|
||||||
|
<li>
|
||||||
|
<?php p($l->t('PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible.')); ?><br>
|
||||||
|
<?php p($l->t('This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator.')); ?>
|
||||||
|
</li>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
|
||||||
|
// Is the Transaction isolation level READ_COMMITTED?
|
||||||
|
if ($_['invalidTransactionIsolationLevel']) {
|
||||||
|
?>
|
||||||
|
<li>
|
||||||
|
<?php p($l->t('Your database does not run with "READ COMMITTED" transaction isolation level. This can cause problems when multiple actions are executed in parallel.')); ?>
|
||||||
|
</li>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
|
||||||
|
// Warning if memcache is outdated
|
||||||
|
foreach ($_['OutdatedCacheWarning'] as $php_module => $data) {
|
||||||
|
?>
|
||||||
|
<li>
|
||||||
|
<?php p($l->t('%1$s below version %2$s is installed, for stability and performance reasons it is recommended to update to a newer %1$s version.', $data)); ?>
|
||||||
|
</li>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
|
||||||
|
// if module fileinfo available?
|
||||||
|
if (!$_['has_fileinfo']) {
|
||||||
|
?>
|
||||||
|
<li>
|
||||||
|
<?php p($l->t('The PHP module \'fileinfo\' is missing. It is strongly recommended to enable this module to get the best results with MIME type detection.')); ?>
|
||||||
|
</li>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
|
||||||
|
// locking configured optimally?
|
||||||
|
if ($_['fileLockingType'] === 'none') {
|
||||||
|
?>
|
||||||
|
<li>
|
||||||
|
<?php print_unescaped($l->t('Transactional file locking is disabled, this might lead to issues with race conditions. Enable \'filelocking.enabled\' in config.php to avoid these problems. See the <a target="_blank" rel="noreferrer noopener" href="%s">documentation ↗</a> for more information.', link_to_docs('admin-transactional-locking'))); ?>
|
||||||
|
</li>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
|
||||||
|
// is locale working ?
|
||||||
|
if (!$_['isLocaleWorking']) {
|
||||||
|
?>
|
||||||
|
<li>
|
||||||
|
<?php
|
||||||
|
$locales = 'en_US.UTF-8/fr_FR.UTF-8/es_ES.UTF-8/de_DE.UTF-8/ru_RU.UTF-8/pt_BR.UTF-8/it_IT.UTF-8/ja_JP.UTF-8/zh_CN.UTF-8';
|
||||||
|
p($l->t('System locale can not be set to a one which supports UTF-8.'));
|
||||||
|
?>
|
||||||
|
<br>
|
||||||
|
<?php
|
||||||
|
p($l->t('This means that there might be problems with certain characters in filenames.'));
|
||||||
|
?>
|
||||||
|
<br>
|
||||||
|
<?php
|
||||||
|
p($l->t('It is strongly proposed to install the required packages on your system to support one of the following locales: %s.', [$locales]));
|
||||||
|
?>
|
||||||
|
</li>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($_['suggestedOverwriteCliUrl']) {
|
||||||
|
?>
|
||||||
|
<li>
|
||||||
|
<?php p($l->t('If your installation is not installed at the root of the domain and uses system Cron, there can be issues with the URL generation. To avoid these problems, please set the "overwrite.cli.url" option in your config.php file to the webroot path of your installation (Suggested: "%s")', $_['suggestedOverwriteCliUrl'])); ?>
|
||||||
|
</li>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($_['cronErrors']) {
|
||||||
|
?>
|
||||||
|
<li>
|
||||||
|
<?php p($l->t('It was not possible to execute the cron job via CLI. The following technical errors have appeared:')); ?>
|
||||||
|
<br>
|
||||||
|
<ol>
|
||||||
|
<?php foreach(json_decode($_['cronErrors']) as $error) { if(isset($error->error)) {?>
|
||||||
|
<li><?php p($error->error) ?> <?php p($error->hint) ?></li>
|
||||||
|
<?php }} ?>
|
||||||
|
</ol>
|
||||||
|
</li>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<?php if ($_['lastcron'] !== false):
|
||||||
|
$relative_time = relative_modified_date($_['lastcron']);
|
||||||
|
$formatter = \OC::$server->getDateTimeFormatter();
|
||||||
|
$absolute_time = $formatter->formatDateTime($_['lastcron'], 'long', 'long');
|
||||||
|
if (time() - $_['lastcron'] > 3600): ?>
|
||||||
|
<li class="crondate" title="<?php p($absolute_time);?>">
|
||||||
|
<?php p($l->t("Last background job execution ran %s. Something seems wrong.", [$relative_time]));?>
|
||||||
|
<a href="<?php p(\OC::$server->getURLGenerator()->linkToRoute('settings.AdminSettings.index', ['section' => 'server'])); ?>#backgroundjobs"><?php p($l->t('Check the background job settings')); ?></a>
|
||||||
|
</li>
|
||||||
|
<?php endif; ?>
|
||||||
|
<?php endif; ?>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div id="postsetupchecks" data-check-wellknown="<?php if($_['checkForWorkingWellKnownSetup']) { p('true'); } else { p('false'); } ?>">
|
||||||
|
<div class="loading"></div>
|
||||||
|
<ul class="errors hidden"></ul>
|
||||||
|
<ul class="warnings hidden"></ul>
|
||||||
|
<ul class="info hidden"></ul>
|
||||||
|
<p class="hint hidden">
|
||||||
|
<?php print_unescaped($l->t('Please double check the <a target="_blank" rel="noreferrer noopener" href="%s">installation guides ↗</a>, and check for any errors or warnings in the <a href="%s">log</a>.', [link_to_docs('admin-install'), \OC::$server->getURLGenerator()->linkToRoute('settings.AdminSettings.index', ['section' => 'logging'])] )); ?>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div id="security-warning-state">
|
||||||
|
<span class="hidden icon-checkmark"><?php p($l->t('All checks passed.'));?></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="section">
|
||||||
|
<!-- should be the last part, so Updater can follow if enabled (it has no heading therefore). -->
|
||||||
|
<h2><?php p($l->t('Version'));?></h2>
|
||||||
|
<p><strong><a href="<?php print_unescaped($theme->getBaseUrl()); ?>" rel="noreferrer noopener" target="_blank"><?php p($theme->getTitle()); ?></a> <?php p(OC_Util::getHumanVersion()) ?></strong></p>
|
||||||
|
</div>
|
|
@ -26,134 +26,6 @@
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<div id="security-warning" class="section">
|
|
||||||
<h2><?php p($l->t('Security & setup warnings'));?></h2>
|
|
||||||
<p class="settings-hint"><?php p($l->t('It\'s important for the security and performance of your instance that everything is configured correctly. To help you with that we are doing some automatic checks. Please see the Tips & Tricks section and the documentation for more information.'));?></p>
|
|
||||||
<ul>
|
|
||||||
<?php
|
|
||||||
// is php setup properly to query system environment variables like getenv('PATH')
|
|
||||||
if ($_['getenvServerNotWorking']) {
|
|
||||||
?>
|
|
||||||
<li>
|
|
||||||
<?php p($l->t('PHP does not seem to be setup properly to query system environment variables. The test with getenv("PATH") only returns an empty response.')); ?><br>
|
|
||||||
<?php print_unescaped($l->t('Please check the <a target="_blank" rel="noreferrer noopener" href="%s">installation documentation ↗</a> for PHP configuration notes and the PHP configuration of your server, especially when using php-fpm.', link_to_docs('admin-php-fpm'))); ?>
|
|
||||||
</li>
|
|
||||||
<?php
|
|
||||||
}
|
|
||||||
|
|
||||||
// is read only config enabled
|
|
||||||
if ($_['readOnlyConfigEnabled']) {
|
|
||||||
?>
|
|
||||||
<li>
|
|
||||||
<?php p($l->t('The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update.')); ?>
|
|
||||||
</li>
|
|
||||||
<?php
|
|
||||||
}
|
|
||||||
|
|
||||||
// Are doc blocks accessible?
|
|
||||||
if (!$_['isAnnotationsWorking']) {
|
|
||||||
?>
|
|
||||||
<li>
|
|
||||||
<?php p($l->t('PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible.')); ?><br>
|
|
||||||
<?php p($l->t('This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator.')); ?>
|
|
||||||
</li>
|
|
||||||
<?php
|
|
||||||
}
|
|
||||||
|
|
||||||
// Is the Transaction isolation level READ_COMMITTED?
|
|
||||||
if ($_['invalidTransactionIsolationLevel']) {
|
|
||||||
?>
|
|
||||||
<li>
|
|
||||||
<?php p($l->t('Your database does not run with "READ COMMITTED" transaction isolation level. This can cause problems when multiple actions are executed in parallel.')); ?>
|
|
||||||
</li>
|
|
||||||
<?php
|
|
||||||
}
|
|
||||||
|
|
||||||
// Warning if memcache is outdated
|
|
||||||
foreach ($_['OutdatedCacheWarning'] as $php_module => $data) {
|
|
||||||
?>
|
|
||||||
<li>
|
|
||||||
<?php p($l->t('%1$s below version %2$s is installed, for stability and performance reasons it is recommended to update to a newer %1$s version.', $data)); ?>
|
|
||||||
</li>
|
|
||||||
<?php
|
|
||||||
}
|
|
||||||
|
|
||||||
// if module fileinfo available?
|
|
||||||
if (!$_['has_fileinfo']) {
|
|
||||||
?>
|
|
||||||
<li>
|
|
||||||
<?php p($l->t('The PHP module \'fileinfo\' is missing. It is strongly recommended to enable this module to get the best results with MIME type detection.')); ?>
|
|
||||||
</li>
|
|
||||||
<?php
|
|
||||||
}
|
|
||||||
|
|
||||||
// locking configured optimally?
|
|
||||||
if ($_['fileLockingType'] === 'none') {
|
|
||||||
?>
|
|
||||||
<li>
|
|
||||||
<?php print_unescaped($l->t('Transactional file locking is disabled, this might lead to issues with race conditions. Enable \'filelocking.enabled\' in config.php to avoid these problems. See the <a target="_blank" rel="noreferrer noopener" href="%s">documentation ↗</a> for more information.', link_to_docs('admin-transactional-locking'))); ?>
|
|
||||||
</li>
|
|
||||||
<?php
|
|
||||||
}
|
|
||||||
|
|
||||||
// is locale working ?
|
|
||||||
if (!$_['isLocaleWorking']) {
|
|
||||||
?>
|
|
||||||
<li>
|
|
||||||
<?php
|
|
||||||
$locales = 'en_US.UTF-8/fr_FR.UTF-8/es_ES.UTF-8/de_DE.UTF-8/ru_RU.UTF-8/pt_BR.UTF-8/it_IT.UTF-8/ja_JP.UTF-8/zh_CN.UTF-8';
|
|
||||||
p($l->t('System locale can not be set to a one which supports UTF-8.'));
|
|
||||||
?>
|
|
||||||
<br>
|
|
||||||
<?php
|
|
||||||
p($l->t('This means that there might be problems with certain characters in filenames.'));
|
|
||||||
?>
|
|
||||||
<br>
|
|
||||||
<?php
|
|
||||||
p($l->t('It is strongly proposed to install the required packages on your system to support one of the following locales: %s.', [$locales]));
|
|
||||||
?>
|
|
||||||
</li>
|
|
||||||
<?php
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($_['suggestedOverwriteCliUrl']) {
|
|
||||||
?>
|
|
||||||
<li>
|
|
||||||
<?php p($l->t('If your installation is not installed at the root of the domain and uses system Cron, there can be issues with the URL generation. To avoid these problems, please set the "overwrite.cli.url" option in your config.php file to the webroot path of your installation (Suggested: "%s")', $_['suggestedOverwriteCliUrl'])); ?>
|
|
||||||
</li>
|
|
||||||
<?php
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($_['cronErrors']) {
|
|
||||||
?>
|
|
||||||
<li>
|
|
||||||
<?php p($l->t('It was not possible to execute the cron job via CLI. The following technical errors have appeared:')); ?>
|
|
||||||
<br>
|
|
||||||
<ol>
|
|
||||||
<?php foreach(json_decode($_['cronErrors']) as $error) { if(isset($error->error)) {?>
|
|
||||||
<li><?php p($error->error) ?> <?php p($error->hint) ?></li>
|
|
||||||
<?php }} ?>
|
|
||||||
</ol>
|
|
||||||
</li>
|
|
||||||
<?php
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<div id="postsetupchecks" data-check-wellknown="<?php if($_['checkForWorkingWellKnownSetup']) { p('true'); } else { p('false'); } ?>">
|
|
||||||
<div class="loading"></div>
|
|
||||||
<ul class="errors hidden"></ul>
|
|
||||||
<ul class="warnings hidden"></ul>
|
|
||||||
<ul class="info hidden"></ul>
|
|
||||||
<p class="hint hidden">
|
|
||||||
<?php print_unescaped($l->t('Please double check the <a target="_blank" rel="noreferrer noopener" href="%s">installation guides ↗</a>, and check for any errors or warnings in the <a href="%s">log</a>.', [link_to_docs('admin-install'), \OC::$server->getURLGenerator()->linkToRoute('settings.AdminSettings.index', ['section' => 'logging'])] )); ?>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div id="security-warning-state">
|
|
||||||
<span class="hidden icon-checkmark"><?php p($l->t('All checks passed.'));?></span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="section" id="backgroundjobs">
|
<div class="section" id="backgroundjobs">
|
||||||
<h2 class="inlineblock"><?php p($l->t('Background jobs'));?></h2>
|
<h2 class="inlineblock"><?php p($l->t('Background jobs'));?></h2>
|
||||||
<p class="cronlog inlineblock">
|
<p class="cronlog inlineblock">
|
||||||
|
@ -221,9 +93,3 @@
|
||||||
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="section">
|
|
||||||
<!-- should be the last part, so Updater can follow if enabled (it has no heading therefore). -->
|
|
||||||
<h2><?php p($l->t('Version'));?></h2>
|
|
||||||
<p><strong><a href="<?php print_unescaped($theme->getBaseUrl()); ?>" rel="noreferrer noopener" target="_blank"><?php p($theme->getTitle()); ?></a> <?php p(OC_Util::getHumanVersion()) ?></strong></p>
|
|
||||||
</div>
|
|
||||||
|
|
|
@ -24,11 +24,12 @@
|
||||||
namespace Test\Settings\Admin;
|
namespace Test\Settings\Admin;
|
||||||
|
|
||||||
use OC\Settings\Admin\Additional;
|
use OC\Settings\Admin\Additional;
|
||||||
|
use OC\Settings\Admin\Mail;
|
||||||
use OCP\AppFramework\Http\TemplateResponse;
|
use OCP\AppFramework\Http\TemplateResponse;
|
||||||
use OCP\IConfig;
|
use OCP\IConfig;
|
||||||
use Test\TestCase;
|
use Test\TestCase;
|
||||||
|
|
||||||
class AdditionalTest extends TestCase {
|
class MailTest extends TestCase {
|
||||||
/** @var Additional */
|
/** @var Additional */
|
||||||
private $admin;
|
private $admin;
|
||||||
/** @var IConfig */
|
/** @var IConfig */
|
||||||
|
@ -38,7 +39,7 @@ class AdditionalTest extends TestCase {
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
$this->config = $this->getMockBuilder(IConfig::class)->getMock();
|
$this->config = $this->getMockBuilder(IConfig::class)->getMock();
|
||||||
|
|
||||||
$this->admin = new Additional(
|
$this->admin = new Mail(
|
||||||
$this->config
|
$this->config
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -118,10 +119,10 @@ class AdditionalTest extends TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetSection() {
|
public function testGetSection() {
|
||||||
$this->assertSame('additional', $this->admin->getSection());
|
$this->assertSame('server', $this->admin->getSection());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetPriority() {
|
public function testGetPriority() {
|
||||||
$this->assertSame(0, $this->admin->getPriority());
|
$this->assertSame(10, $this->admin->getPriority());
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -65,74 +65,25 @@ class ServerTest extends TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetForm() {
|
public function testGetForm() {
|
||||||
$this->dbConnection
|
|
||||||
->expects($this->once())
|
|
||||||
->method('getDatabasePlatform')
|
|
||||||
->willReturn(new SqlitePlatform());
|
|
||||||
$this->config
|
$this->config
|
||||||
->expects($this->at(0))
|
->expects($this->at(0))
|
||||||
->method('getSystemValue')
|
|
||||||
->with('overwrite.cli.url', '')
|
|
||||||
->willReturn(true);
|
|
||||||
$this->config
|
|
||||||
->expects($this->at(2))
|
|
||||||
->method('getAppValue')
|
->method('getAppValue')
|
||||||
->with('core', 'backgroundjobs_mode', 'ajax')
|
->with('core', 'backgroundjobs_mode', 'ajax')
|
||||||
->willReturn('ajax');
|
->willReturn('ajax');
|
||||||
$this->config
|
$this->config
|
||||||
->expects($this->at(3))
|
->expects($this->at(1))
|
||||||
->method('getAppValue')
|
->method('getAppValue')
|
||||||
->with('core', 'lastcron', false)
|
->with('core', 'lastcron', false)
|
||||||
->willReturn(false);
|
->willReturn(false);
|
||||||
$this->config
|
$this->config
|
||||||
->expects($this->at(4))
|
->expects($this->at(2))
|
||||||
->method('getAppValue')
|
->method('getAppValue')
|
||||||
->with('core', 'cronErrors')
|
->with('core', 'cronErrors')
|
||||||
->willReturn('');
|
->willReturn('');
|
||||||
$this->config
|
|
||||||
->expects($this->at(1))
|
|
||||||
->method('getSystemValue')
|
|
||||||
->with('check_for_working_wellknown_setup', true)
|
|
||||||
->willReturn(true);
|
|
||||||
$this->l10n
|
|
||||||
->expects($this->at(0))
|
|
||||||
->method('t')
|
|
||||||
->with('APCu')
|
|
||||||
->willReturn('APCu');
|
|
||||||
$this->l10n
|
|
||||||
->expects($this->at(1))
|
|
||||||
->method('t')
|
|
||||||
->with('Redis')
|
|
||||||
->willReturn('Redis');
|
|
||||||
$outdatedCaches = [];
|
|
||||||
$caches = [
|
|
||||||
'apcu' => ['name' => 'APCu', 'version' => '4.0.6'],
|
|
||||||
'redis' => ['name' => 'Redis', 'version' => '2.2.5'],
|
|
||||||
];
|
|
||||||
foreach ($caches as $php_module => $data) {
|
|
||||||
$isOutdated = extension_loaded($php_module) && version_compare(phpversion($php_module), $data['version'], '<');
|
|
||||||
if ($isOutdated) {
|
|
||||||
$outdatedCaches[$php_module] = $data;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$envPath = getenv('PATH');
|
|
||||||
$expected = new TemplateResponse(
|
$expected = new TemplateResponse(
|
||||||
'settings',
|
'settings',
|
||||||
'settings/admin/server',
|
'settings/admin/server',
|
||||||
[
|
[
|
||||||
// Diagnosis
|
|
||||||
'readOnlyConfigEnabled' => \OC_Helper::isReadOnlyConfigEnabled(),
|
|
||||||
'isLocaleWorking' => \OC_Util::isSetLocaleWorking(),
|
|
||||||
'isAnnotationsWorking' => \OC_Util::isAnnotationsWorking(),
|
|
||||||
'checkForWorkingWellKnownSetup' => true,
|
|
||||||
'has_fileinfo' => \OC_Util::fileInfoLoaded(),
|
|
||||||
'invalidTransactionIsolationLevel' => false,
|
|
||||||
'getenvServerNotWorking' => empty($envPath),
|
|
||||||
'OutdatedCacheWarning' => $outdatedCaches,
|
|
||||||
'fileLockingType' => 'cache',
|
|
||||||
'suggestedOverwriteCliUrl' => '',
|
|
||||||
|
|
||||||
// Background jobs
|
|
||||||
'backgroundjobs_mode' => 'ajax',
|
'backgroundjobs_mode' => 'ajax',
|
||||||
'lastcron' => false,
|
'lastcron' => false,
|
||||||
'cronErrors' => '',
|
'cronErrors' => '',
|
||||||
|
|
|
@ -115,24 +115,25 @@ class ManagerTest extends TestCase {
|
||||||
|
|
||||||
$this->manager->registerSection('admin', \OCA\WorkflowEngine\Settings\Section::class);
|
$this->manager->registerSection('admin', \OCA\WorkflowEngine\Settings\Section::class);
|
||||||
|
|
||||||
$this->url->expects($this->exactly(6))
|
$this->url->expects($this->exactly(7))
|
||||||
->method('imagePath')
|
->method('imagePath')
|
||||||
->willReturnMap([
|
->willReturnMap([
|
||||||
['settings', 'admin.svg', '1'],
|
['settings', 'admin.svg', '0'],
|
||||||
|
['core', 'actions/settings-dark.svg', '1'],
|
||||||
['core', 'actions/share.svg', '2'],
|
['core', 'actions/share.svg', '2'],
|
||||||
['core', 'actions/password.svg', '3'],
|
['core', 'actions/password.svg', '3'],
|
||||||
['core', 'actions/settings-dark.svg', '4'],
|
['settings', 'help.svg', '4'],
|
||||||
['settings', 'help.svg', '5'],
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$this->assertEquals([
|
$this->assertEquals([
|
||||||
0 => [new Section('server', 'Basic settings', 0, '1')],
|
0 => [new Section('overview', 'Overview', 0, '0')],
|
||||||
|
1 => [new Section('server', 'Basic settings', 0, '1')],
|
||||||
5 => [new Section('sharing', 'Sharing', 0, '2')],
|
5 => [new Section('sharing', 'Sharing', 0, '2')],
|
||||||
10 => [new Section('security', 'Security', 0, '3')],
|
10 => [new Section('security', 'Security', 0, '3')],
|
||||||
45 => [new Section('encryption', 'Encryption', 0, '3')],
|
45 => [new Section('encryption', 'Encryption', 0, '3')],
|
||||||
55 => [\OC::$server->query(\OCA\WorkflowEngine\Settings\Section::class)],
|
55 => [\OC::$server->query(\OCA\WorkflowEngine\Settings\Section::class)],
|
||||||
98 => [new Section('additional', 'Additional settings', 0, '4')],
|
98 => [new Section('additional', 'Additional settings', 0, '1')],
|
||||||
99 => [new Section('tips-tricks', 'Tips & tricks', 0, '5')],
|
99 => [new Section('tips-tricks', 'Tips & tricks', 0, '4')],
|
||||||
], $this->manager->getAdminSections());
|
], $this->manager->getAdminSections());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -166,23 +167,24 @@ class ManagerTest extends TestCase {
|
||||||
->method('t')
|
->method('t')
|
||||||
->will($this->returnArgument(0));
|
->will($this->returnArgument(0));
|
||||||
|
|
||||||
$this->url->expects($this->exactly(6))
|
$this->url->expects($this->exactly(7))
|
||||||
->method('imagePath')
|
->method('imagePath')
|
||||||
->willReturnMap([
|
->willReturnMap([
|
||||||
['settings', 'admin.svg', '1'],
|
['settings', 'admin.svg', '0'],
|
||||||
|
['core', 'actions/settings-dark.svg', '1'],
|
||||||
['core', 'actions/share.svg', '2'],
|
['core', 'actions/share.svg', '2'],
|
||||||
['core', 'actions/password.svg', '3'],
|
['core', 'actions/password.svg', '3'],
|
||||||
['core', 'actions/settings-dark.svg', '4'],
|
['settings', 'help.svg', '4'],
|
||||||
['settings', 'help.svg', '5'],
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$this->assertEquals([
|
$this->assertEquals([
|
||||||
0 => [new Section('server', 'Basic settings', 0, '1')],
|
0 => [new Section('overview', 'Overview', 0, '0')],
|
||||||
|
1 => [new Section('server', 'Basic settings', 0, '1')],
|
||||||
5 => [new Section('sharing', 'Sharing', 0, '2')],
|
5 => [new Section('sharing', 'Sharing', 0, '2')],
|
||||||
10 => [new Section('security', 'Security', 0, '3')],
|
10 => [new Section('security', 'Security', 0, '3')],
|
||||||
45 => [new Section('encryption', 'Encryption', 0, '3')],
|
45 => [new Section('encryption', 'Encryption', 0, '3')],
|
||||||
98 => [new Section('additional', 'Additional settings', 0, '4')],
|
98 => [new Section('additional', 'Additional settings', 0, '1')],
|
||||||
99 => [new Section('tips-tricks', 'Tips & tricks', 0, '5')],
|
99 => [new Section('tips-tricks', 'Tips & tricks', 0, '4')],
|
||||||
], $this->manager->getAdminSections());
|
], $this->manager->getAdminSections());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue