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\Lock\ILockingProvider;
use OCP\Settings\ISettings;
class Server implements ISettings {
/** @var IConfig */
private $config;
- public function __construct(IDBConnection $db, IConfig $config) {
+ /** @var ILockingProvider */
+ private $lockingProvider;
+
+ /** @var IL10N */
+ private $l;
+
+ public function __construct(IDBConnection $db, IConfig $config, ILockingProvider $lockingProvider, IL10N $l) {
$this->db = $db;
$this->config = $config;
+ $this->lockingProvider = $lockingProvider;
+ $this->l = $l;
}
/**
$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';
+ }
+
+ // If the current web root is non-empty but the web root from the config is,
+ // and system cron is used, the URL generator fails to build valid URLs.
+ $shouldSuggestOverwriteCliUrl = $this->config->getAppValue('core', 'backgroundjobs_mode', 'ajax') === 'cron'
+ && \OC::$WEBROOT && \OC::$WEBROOT !== '/'
+ && !$this->config->getSystemValue('overwrite.cli.url', '');
+ $suggestedOverwriteCliUrl = ($shouldSuggestOverwriteCliUrl) ? \OC::$WEBROOT : '';
+
$parameters = [
// Diagnosis
- 'readOnlyConfigEnabled' => \OC_Helper::isReadOnlyConfigEnabled(),
- 'isLocaleWorking' => \OC_Util::isSetLocaleWorking(),
- 'isAnnotationsWorking' => \OC_Util::isAnnotationsWorking(),
- 'checkForWorkingWellKnownSetup', $this->config->getSystemValue('check_for_working_wellknown_setup'),
- 'has_fileinfo' => \OC_Util::fileInfoLoaded(),
+ '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
'backgroundjobs_mode' => $this->config->getAppValue('core', 'backgroundjobs_mode', 'ajax'),
'cron_log' => $this->config->getSystemValue('cron_log', true),
'lastcron' => $this->config->getAppValue('core', 'lastcron', false),
+ 'cronErrors' => $this->config->getAppValue('core', 'cronErrors'),
// Mail
'sendmail_is_available' => (bool) \OC_Helper::findBinaryPath('sendmail'),
use OCP\IL10N;
use OCP\ILogger;
use OCP\IUserManager;
+use OCP\Lock\ILockingProvider;
use OCP\Settings\ISettings;
use OCP\Settings\IManager;
use OCP\Settings\ISection;
const TABLE_ADMIN_SETTINGS = 'admin_settings';
const TABLE_ADMIN_SECTIONS = 'admin_sections';
- /** @var ILogger */
/** @var ILogger */
private $log;
/** @var IUserManager */
private $userManager;
+ /** @var ILockingProvider */
+ private $lockingProvider;
+
public function __construct(
ILogger $log,
IDBConnection $dbc,
IL10N $l,
IConfig $config,
EncryptionManager $encryptionManager,
- IUserManager $userManager
+ IUserManager $userManager,
+ ILockingProvider $lockingProvider
) {
$this->log = $log;
$this->dbc = $dbc;
$this->config = $config;
$this->encryptionManager = $encryptionManager;
$this->userManager = $userManager;
+ $this->lockingProvider = $lockingProvider;
}
/**
}
}
+ /**
+ * @param string $sectionClassName
+ */
private function setupAdminSection($sectionClassName) {
if(!class_exists($sectionClassName)) {
$this->log->debug('Could not find admin section class ' . $sectionClassName);
try {
if($section === 'server') {
/** @var ISettings $form */
- $form = new Admin\Server($this->dbc, $this->config);
+ $form = new Admin\Server($this->dbc, $this->config, $this->lockingProvider, $this->l);
$forms[$form->getPriority()] = [$form];
}
if($section === 'encryption') {