mirror of
https://github.com/nextcloud/server.git
synced 2026-06-08 16:26:59 -04:00
Merge pull request #53449 from nextcloud/feat/noid/preset-config
feat(lexicon): configurable presets
This commit is contained in:
commit
e22914b5ff
12 changed files with 256 additions and 19 deletions
71
core/Command/Config/Preset.php
Normal file
71
core/Command/Config/Preset.php
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
namespace OC\Core\Command\Config;
|
||||
|
||||
use NCU\Config\Lexicon\Preset as ConfigLexiconPreset;
|
||||
use OC\Config\ConfigManager;
|
||||
use OC\Core\Command\Base;
|
||||
use OCP\IConfig;
|
||||
use Symfony\Component\Console\Input\InputArgument;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
|
||||
class Preset extends Base {
|
||||
public function __construct(
|
||||
private readonly IConfig $config,
|
||||
private readonly ConfigManager $configManager,
|
||||
) {
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
protected function configure() {
|
||||
parent::configure();
|
||||
$this->setName('config:preset')
|
||||
->setDescription('Select a config preset')
|
||||
->addArgument('preset', InputArgument::OPTIONAL, 'Preset to use for all unset config values', '')
|
||||
->addOption('list', '', InputOption::VALUE_NONE, 'display available preset');
|
||||
}
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output): int {
|
||||
if ($input->getOption('list')) {
|
||||
$this->getEnum('', $list);
|
||||
$this->writeArrayInOutputFormat($input, $output, $list);
|
||||
return self::SUCCESS;
|
||||
}
|
||||
|
||||
$presetArg = $input->getArgument('preset');
|
||||
if ($presetArg !== '') {
|
||||
$preset = $this->getEnum($presetArg, $list);
|
||||
if ($preset === null) {
|
||||
$output->writeln('<error>Invalid preset: ' . $presetArg . '</error>');
|
||||
$output->writeln('Available presets: ' . implode(', ', $list));
|
||||
return self::INVALID;
|
||||
}
|
||||
|
||||
$this->configManager->setLexiconPreset($preset);
|
||||
}
|
||||
|
||||
$current = ConfigLexiconPreset::tryFrom($this->config->getSystemValueInt(ConfigManager::PRESET_CONFIGKEY, 0)) ?? ConfigLexiconPreset::NONE;
|
||||
$this->writeArrayInOutputFormat($input, $output, [$current->name], 'current preset: ');
|
||||
return self::SUCCESS;
|
||||
}
|
||||
|
||||
private function getEnum(string $name, ?array &$list = null): ?ConfigLexiconPreset {
|
||||
$list = [];
|
||||
foreach (ConfigLexiconPreset::cases() as $case) {
|
||||
$list[] = $case->name;
|
||||
if (strtolower($case->name) === strtolower($name)) {
|
||||
return $case;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
@ -27,6 +27,7 @@ use OC\Core\Command\Config\App\GetConfig;
|
|||
use OC\Core\Command\Config\App\SetConfig;
|
||||
use OC\Core\Command\Config\Import;
|
||||
use OC\Core\Command\Config\ListConfigs;
|
||||
use OC\Core\Command\Config\Preset;
|
||||
use OC\Core\Command\Db\AddMissingColumns;
|
||||
use OC\Core\Command\Db\AddMissingIndices;
|
||||
use OC\Core\Command\Db\AddMissingPrimaryKeys;
|
||||
|
|
@ -149,6 +150,7 @@ if ($config->getSystemValueBool('installed', false)) {
|
|||
$application->add(Server::get(SetConfig::class));
|
||||
$application->add(Server::get(Import::class));
|
||||
$application->add(Server::get(ListConfigs::class));
|
||||
$application->add(Server::get(Preset::class));
|
||||
$application->add(Server::get(Command\Config\System\DeleteConfig::class));
|
||||
$application->add(Server::get(Command\Config\System\GetConfig::class));
|
||||
$application->add(Server::get(Command\Config\System\SetConfig::class));
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ return array(
|
|||
'NCU\\Config\\Lexicon\\ConfigLexiconEntry' => $baseDir . '/lib/unstable/Config/Lexicon/ConfigLexiconEntry.php',
|
||||
'NCU\\Config\\Lexicon\\ConfigLexiconStrictness' => $baseDir . '/lib/unstable/Config/Lexicon/ConfigLexiconStrictness.php',
|
||||
'NCU\\Config\\Lexicon\\IConfigLexicon' => $baseDir . '/lib/unstable/Config/Lexicon/IConfigLexicon.php',
|
||||
'NCU\\Config\\Lexicon\\Preset' => $baseDir . '/lib/unstable/Config/Lexicon/Preset.php',
|
||||
'NCU\\Config\\ValueType' => $baseDir . '/lib/unstable/Config/ValueType.php',
|
||||
'NCU\\Federation\\ISignedCloudFederationProvider' => $baseDir . '/lib/unstable/Federation/ISignedCloudFederationProvider.php',
|
||||
'NCU\\Security\\Signature\\Enum\\DigestAlgorithm' => $baseDir . '/lib/unstable/Security/Signature/Enum/DigestAlgorithm.php',
|
||||
|
|
@ -1250,6 +1251,7 @@ return array(
|
|||
'OC\\Core\\Command\\Config\\App\\SetConfig' => $baseDir . '/core/Command/Config/App/SetConfig.php',
|
||||
'OC\\Core\\Command\\Config\\Import' => $baseDir . '/core/Command/Config/Import.php',
|
||||
'OC\\Core\\Command\\Config\\ListConfigs' => $baseDir . '/core/Command/Config/ListConfigs.php',
|
||||
'OC\\Core\\Command\\Config\\Preset' => $baseDir . '/core/Command/Config/Preset.php',
|
||||
'OC\\Core\\Command\\Config\\System\\Base' => $baseDir . '/core/Command/Config/System/Base.php',
|
||||
'OC\\Core\\Command\\Config\\System\\CastHelper' => $baseDir . '/core/Command/Config/System/CastHelper.php',
|
||||
'OC\\Core\\Command\\Config\\System\\DeleteConfig' => $baseDir . '/core/Command/Config/System/DeleteConfig.php',
|
||||
|
|
|
|||
|
|
@ -55,6 +55,7 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2
|
|||
'NCU\\Config\\Lexicon\\ConfigLexiconEntry' => __DIR__ . '/../../..' . '/lib/unstable/Config/Lexicon/ConfigLexiconEntry.php',
|
||||
'NCU\\Config\\Lexicon\\ConfigLexiconStrictness' => __DIR__ . '/../../..' . '/lib/unstable/Config/Lexicon/ConfigLexiconStrictness.php',
|
||||
'NCU\\Config\\Lexicon\\IConfigLexicon' => __DIR__ . '/../../..' . '/lib/unstable/Config/Lexicon/IConfigLexicon.php',
|
||||
'NCU\\Config\\Lexicon\\Preset' => __DIR__ . '/../../..' . '/lib/unstable/Config/Lexicon/Preset.php',
|
||||
'NCU\\Config\\ValueType' => __DIR__ . '/../../..' . '/lib/unstable/Config/ValueType.php',
|
||||
'NCU\\Federation\\ISignedCloudFederationProvider' => __DIR__ . '/../../..' . '/lib/unstable/Federation/ISignedCloudFederationProvider.php',
|
||||
'NCU\\Security\\Signature\\Enum\\DigestAlgorithm' => __DIR__ . '/../../..' . '/lib/unstable/Security/Signature/Enum/DigestAlgorithm.php',
|
||||
|
|
@ -1291,6 +1292,7 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2
|
|||
'OC\\Core\\Command\\Config\\App\\SetConfig' => __DIR__ . '/../../..' . '/core/Command/Config/App/SetConfig.php',
|
||||
'OC\\Core\\Command\\Config\\Import' => __DIR__ . '/../../..' . '/core/Command/Config/Import.php',
|
||||
'OC\\Core\\Command\\Config\\ListConfigs' => __DIR__ . '/../../..' . '/core/Command/Config/ListConfigs.php',
|
||||
'OC\\Core\\Command\\Config\\Preset' => __DIR__ . '/../../..' . '/core/Command/Config/Preset.php',
|
||||
'OC\\Core\\Command\\Config\\System\\Base' => __DIR__ . '/../../..' . '/core/Command/Config/System/Base.php',
|
||||
'OC\\Core\\Command\\Config\\System\\CastHelper' => __DIR__ . '/../../..' . '/core/Command/Config/System/CastHelper.php',
|
||||
'OC\\Core\\Command\\Config\\System\\DeleteConfig' => __DIR__ . '/../../..' . '/core/Command/Config/System/DeleteConfig.php',
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ use JsonException;
|
|||
use NCU\Config\Lexicon\ConfigLexiconEntry;
|
||||
use NCU\Config\Lexicon\ConfigLexiconStrictness;
|
||||
use NCU\Config\Lexicon\IConfigLexicon;
|
||||
use NCU\Config\Lexicon\Preset;
|
||||
use OC\AppFramework\Bootstrap\Coordinator;
|
||||
use OC\Config\ConfigManager;
|
||||
use OCP\DB\Exception as DBException;
|
||||
|
|
@ -64,12 +65,13 @@ class AppConfig implements IAppConfig {
|
|||
/** @var array<string, array{entries: array<string, ConfigLexiconEntry>, aliases: array<string, string>, strictness: ConfigLexiconStrictness}> ['app_id' => ['strictness' => ConfigLexiconStrictness, 'entries' => ['config_key' => ConfigLexiconEntry[]]] */
|
||||
private array $configLexiconDetails = [];
|
||||
private bool $ignoreLexiconAliases = false;
|
||||
|
||||
private ?Preset $configLexiconPreset = null;
|
||||
/** @var ?array<string, string> */
|
||||
private ?array $appVersionsCache = null;
|
||||
|
||||
public function __construct(
|
||||
protected IDBConnection $connection,
|
||||
protected IConfig $config,
|
||||
protected LoggerInterface $logger,
|
||||
protected ICrypto $crypto,
|
||||
) {
|
||||
|
|
@ -438,9 +440,17 @@ class AppConfig implements IAppConfig {
|
|||
): string {
|
||||
$this->assertParams($app, $key, valueType: $type);
|
||||
$origKey = $key;
|
||||
if (!$this->matchAndApplyLexiconDefinition($app, $key, $lazy, $type, $default)) {
|
||||
return $default; // returns default if strictness of lexicon is set to WARNING (block and report)
|
||||
$matched = $this->matchAndApplyLexiconDefinition($app, $key, $lazy, $type, $default);
|
||||
if ($default === null) {
|
||||
// there is no logical reason for it to be null
|
||||
throw new \Exception('default cannot be null');
|
||||
}
|
||||
|
||||
// returns default if strictness of lexicon is set to WARNING (block and report)
|
||||
if (!$matched) {
|
||||
return $default;
|
||||
}
|
||||
|
||||
$this->loadConfig($app, $lazy);
|
||||
|
||||
/**
|
||||
|
|
@ -1146,7 +1156,8 @@ class AppConfig implements IAppConfig {
|
|||
*/
|
||||
public function clearCache(bool $reload = false): void {
|
||||
$this->lazyLoaded = $this->fastLoaded = false;
|
||||
$this->lazyCache = $this->fastCache = $this->valueTypes = [];
|
||||
$this->lazyCache = $this->fastCache = $this->valueTypes = $this->configLexiconDetails = [];
|
||||
$this->configLexiconPreset = null;
|
||||
|
||||
if (!$reload) {
|
||||
return;
|
||||
|
|
@ -1592,7 +1603,7 @@ class AppConfig implements IAppConfig {
|
|||
string &$key,
|
||||
?bool &$lazy = null,
|
||||
int &$type = self::VALUE_MIXED,
|
||||
string &$default = '',
|
||||
?string &$default = null,
|
||||
): bool {
|
||||
if (in_array($key,
|
||||
[
|
||||
|
|
@ -1629,7 +1640,11 @@ class AppConfig implements IAppConfig {
|
|||
}
|
||||
|
||||
$lazy = $configValue->isLazy();
|
||||
$default = $configValue->getDefault() ?? $default; // default from Lexicon got priority
|
||||
// only look for default if needed, default from Lexicon got priority
|
||||
if ($default !== null) {
|
||||
$default = $configValue->getDefault($this->getLexiconPreset()) ?? $default;
|
||||
}
|
||||
|
||||
if ($configValue->isFlagged(self::FLAG_SENSITIVE)) {
|
||||
$type |= self::VALUE_SENSITIVE;
|
||||
}
|
||||
|
|
@ -1715,6 +1730,14 @@ class AppConfig implements IAppConfig {
|
|||
$this->ignoreLexiconAliases = $ignore;
|
||||
}
|
||||
|
||||
private function getLexiconPreset(): Preset {
|
||||
if ($this->configLexiconPreset === null) {
|
||||
$this->configLexiconPreset = Preset::tryFrom($this->config->getSystemValueInt(ConfigManager::PRESET_CONFIGKEY, 0)) ?? Preset::NONE;
|
||||
}
|
||||
|
||||
return $this->configLexiconPreset;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the installed versions of all apps
|
||||
*
|
||||
|
|
|
|||
|
|
@ -12,10 +12,12 @@ use JsonException;
|
|||
use NCU\Config\Exceptions\TypeConflictException;
|
||||
use NCU\Config\IUserConfig;
|
||||
use NCU\Config\Lexicon\ConfigLexiconEntry;
|
||||
use NCU\Config\Lexicon\Preset;
|
||||
use NCU\Config\ValueType;
|
||||
use OC\AppConfig;
|
||||
use OCP\App\IAppManager;
|
||||
use OCP\IAppConfig;
|
||||
use OCP\IConfig;
|
||||
use OCP\Server;
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
||||
|
|
@ -25,12 +27,16 @@ use Psr\Log\LoggerInterface;
|
|||
* @since 32.0.0
|
||||
*/
|
||||
class ConfigManager {
|
||||
/** @since 32.0.0 */
|
||||
public const PRESET_CONFIGKEY = 'config_preset';
|
||||
|
||||
/** @var AppConfig|null $appConfig */
|
||||
private ?IAppConfig $appConfig = null;
|
||||
/** @var UserConfig|null $userConfig */
|
||||
private ?IUserConfig $userConfig = null;
|
||||
|
||||
public function __construct(
|
||||
private readonly IConfig $config,
|
||||
private readonly LoggerInterface $logger,
|
||||
) {
|
||||
}
|
||||
|
|
@ -74,6 +80,17 @@ class ConfigManager {
|
|||
$this->userConfig->ignoreLexiconAliases(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* store in config.php the new preset
|
||||
* refresh cached preset
|
||||
*/
|
||||
public function setLexiconPreset(Preset $preset): void {
|
||||
$this->config->setSystemValue(self::PRESET_CONFIGKEY, $preset->value);
|
||||
$this->loadConfigServices();
|
||||
$this->appConfig->clearCache();
|
||||
$this->userConfig->clearCacheAll();
|
||||
}
|
||||
|
||||
/**
|
||||
* config services cannot be load at __construct() or install will fail
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ use NCU\Config\Exceptions\UnknownKeyException;
|
|||
use NCU\Config\IUserConfig;
|
||||
use NCU\Config\Lexicon\ConfigLexiconEntry;
|
||||
use NCU\Config\Lexicon\ConfigLexiconStrictness;
|
||||
use NCU\Config\Lexicon\Preset;
|
||||
use NCU\Config\ValueType;
|
||||
use OC\AppFramework\Bootstrap\Coordinator;
|
||||
use OCP\DB\Exception as DBException;
|
||||
|
|
@ -66,6 +67,7 @@ class UserConfig implements IUserConfig {
|
|||
/** @var array<string, array{entries: array<string, ConfigLexiconEntry>, aliases: array<string, string>, strictness: ConfigLexiconStrictness}> ['app_id' => ['strictness' => ConfigLexiconStrictness, 'entries' => ['config_key' => ConfigLexiconEntry[]]] */
|
||||
private array $configLexiconDetails = [];
|
||||
private bool $ignoreLexiconAliases = false;
|
||||
private ?Preset $configLexiconPreset = null;
|
||||
|
||||
public function __construct(
|
||||
protected IDBConnection $connection,
|
||||
|
|
@ -721,10 +723,17 @@ class UserConfig implements IUserConfig {
|
|||
): string {
|
||||
$this->assertParams($userId, $app, $key);
|
||||
$origKey = $key;
|
||||
if (!$this->matchAndApplyLexiconDefinition($userId, $app, $key, $lazy, $type, default: $default)) {
|
||||
// returns default if strictness of lexicon is set to WARNING (block and report)
|
||||
$matched = $this->matchAndApplyLexiconDefinition($userId, $app, $key, $lazy, $type, default: $default);
|
||||
if ($default === null) {
|
||||
// there is no logical reason for it to be null
|
||||
throw new \Exception('default cannot be null');
|
||||
}
|
||||
|
||||
// returns default if strictness of lexicon is set to WARNING (block and report)
|
||||
if (!$matched) {
|
||||
return $default;
|
||||
}
|
||||
|
||||
$this->loadConfig($userId, $lazy);
|
||||
|
||||
/**
|
||||
|
|
@ -1625,7 +1634,8 @@ class UserConfig implements IUserConfig {
|
|||
*/
|
||||
public function clearCacheAll(): void {
|
||||
$this->lazyLoaded = $this->fastLoaded = [];
|
||||
$this->lazyCache = $this->fastCache = $this->valueDetails = [];
|
||||
$this->lazyCache = $this->fastCache = $this->valueDetails = $this->configLexiconDetails = [];
|
||||
$this->configLexiconPreset = null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1886,7 +1896,7 @@ class UserConfig implements IUserConfig {
|
|||
?bool &$lazy = null,
|
||||
ValueType &$type = ValueType::MIXED,
|
||||
int &$flags = 0,
|
||||
string &$default = '',
|
||||
?string &$default = null,
|
||||
): bool {
|
||||
$configDetails = $this->getConfigDetailsFromLexicon($app);
|
||||
if (array_key_exists($key, $configDetails['aliases']) && !$this->ignoreLexiconAliases) {
|
||||
|
|
@ -1924,8 +1934,10 @@ class UserConfig implements IUserConfig {
|
|||
return true;
|
||||
}
|
||||
|
||||
// default from Lexicon got priority but it can still be overwritten by admin
|
||||
$default = $this->getSystemDefault($app, $configValue) ?? $configValue->getDefault() ?? $default;
|
||||
// only look for default if needed, default from Lexicon got priority if not overwritten by admin
|
||||
if ($default !== null) {
|
||||
$default = $this->getSystemDefault($app, $configValue) ?? $configValue->getDefault($this->getLexiconPreset()) ?? $default;
|
||||
}
|
||||
|
||||
// returning false will make get() returning $default and set() not changing value in database
|
||||
return !$enforcedValue;
|
||||
|
|
@ -2025,4 +2037,12 @@ class UserConfig implements IUserConfig {
|
|||
public function ignoreLexiconAliases(bool $ignore): void {
|
||||
$this->ignoreLexiconAliases = $ignore;
|
||||
}
|
||||
|
||||
private function getLexiconPreset(): Preset {
|
||||
if ($this->configLexiconPreset === null) {
|
||||
$this->configLexiconPreset = Preset::tryFrom($this->config->getSystemValueInt(ConfigManager::PRESET_CONFIGKEY, 0)) ?? Preset::NONE;
|
||||
}
|
||||
|
||||
return $this->configLexiconPreset;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ declare(strict_types=1);
|
|||
|
||||
namespace NCU\Config\Lexicon;
|
||||
|
||||
use Closure;
|
||||
use NCU\Config\ValueType;
|
||||
|
||||
/**
|
||||
|
|
@ -24,7 +25,7 @@ class ConfigLexiconEntry {
|
|||
private ?string $default = null;
|
||||
|
||||
/**
|
||||
* @param string $key config key
|
||||
* @param string $key config key, can only contain alphanumerical chars and -._
|
||||
* @param ValueType $type type of config value
|
||||
* @param string $definition optional description of config key available when using occ command
|
||||
* @param bool $lazy set config value as lazy
|
||||
|
|
@ -39,7 +40,7 @@ class ConfigLexiconEntry {
|
|||
public function __construct(
|
||||
private readonly string $key,
|
||||
private readonly ValueType $type,
|
||||
private null|string|int|float|bool|array $defaultRaw = null,
|
||||
private null|string|int|float|bool|array|Closure $defaultRaw = null,
|
||||
string $definition = '',
|
||||
private readonly bool $lazy = false,
|
||||
private readonly int $flags = 0,
|
||||
|
|
@ -47,6 +48,11 @@ class ConfigLexiconEntry {
|
|||
private readonly ?string $rename = null,
|
||||
private readonly int $options = 0,
|
||||
) {
|
||||
// key can only contain alphanumeric chars and underscore "_"
|
||||
if (preg_match('/[^[:alnum:]_]/', $key)) {
|
||||
throw new \Exception('invalid config key');
|
||||
}
|
||||
|
||||
/** @psalm-suppress UndefinedClass */
|
||||
if (\OC::$CLI) { // only store definition if ran from CLI
|
||||
$this->definition = $definition;
|
||||
|
|
@ -124,15 +130,23 @@ class ConfigLexiconEntry {
|
|||
* @return string|null NULL if no default is set
|
||||
* @experimental 31.0.0
|
||||
*/
|
||||
public function getDefault(): ?string {
|
||||
public function getDefault(Preset $preset): ?string {
|
||||
if ($this->default !== null) {
|
||||
return $this->default;
|
||||
}
|
||||
|
||||
if ($this->defaultRaw === null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if ($this->default === null) {
|
||||
$this->default = $this->convertToString($this->defaultRaw);
|
||||
if ($this->defaultRaw instanceof Closure) {
|
||||
/** @psalm-suppress MixedAssignment we expect closure to returns string|int|float|bool|array */
|
||||
$this->defaultRaw = ($this->defaultRaw)($preset);
|
||||
}
|
||||
|
||||
/** @psalm-suppress MixedArgument closure should be managed previously */
|
||||
$this->default = $this->convertToString($this->defaultRaw);
|
||||
|
||||
return $this->default;
|
||||
}
|
||||
|
||||
|
|
|
|||
46
lib/unstable/Config/Lexicon/Preset.php
Normal file
46
lib/unstable/Config/Lexicon/Preset.php
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
|
||||
namespace NCU\Config\Lexicon;
|
||||
|
||||
/**
|
||||
* list of preset to handle the default behavior of the instance
|
||||
*
|
||||
* @see ConfigLexiconEntry::preset
|
||||
*
|
||||
* - **Preset::LARGE** - Large size organisation (> 50k accounts)
|
||||
* - **Preset::MEDIUM** - Medium size organisation (> 100 accounts)
|
||||
* - **Preset::SMALL** - Small size organisation (< 100 accounts)
|
||||
* - **Preset::SHARED** - Shared hosting
|
||||
* - **Preset::EDUCATION** - School/University
|
||||
* - **Preset::CLUB** - Club/Association
|
||||
* - **Preset::FAMILY** - Family
|
||||
* - **Preset::PRIVATE** - Private
|
||||
*
|
||||
* @experimental 32.0.0
|
||||
*/
|
||||
enum Preset: int {
|
||||
/** @experimental 32.0.0 */
|
||||
case LARGE = 8;
|
||||
/** @experimental 32.0.0 */
|
||||
case MEDIUM = 7;
|
||||
/** @experimental 32.0.0 */
|
||||
case SMALL = 6;
|
||||
/** @experimental 32.0.0 */
|
||||
case SHARED = 5;
|
||||
/** @experimental 32.0.0 */
|
||||
case EDUCATION = 4;
|
||||
/** @experimental 32.0.0 */
|
||||
case CLUB = 3;
|
||||
/** @experimental 32.0.0 */
|
||||
case FAMILY = 2;
|
||||
/** @experimental 32.0.0 */
|
||||
case PRIVATE = 1;
|
||||
/** @experimental 32.0.0 */
|
||||
case NONE = 0;
|
||||
}
|
||||
|
|
@ -12,6 +12,7 @@ use OC\AppConfig;
|
|||
use OCP\Exceptions\AppConfigTypeConflictException;
|
||||
use OCP\Exceptions\AppConfigUnknownKeyException;
|
||||
use OCP\IAppConfig;
|
||||
use OCP\IConfig;
|
||||
use OCP\IDBConnection;
|
||||
use OCP\Security\ICrypto;
|
||||
use OCP\Server;
|
||||
|
|
@ -27,6 +28,7 @@ use Psr\Log\LoggerInterface;
|
|||
class AppConfigTest extends TestCase {
|
||||
protected IAppConfig $appConfig;
|
||||
protected IDBConnection $connection;
|
||||
private IConfig $config;
|
||||
private LoggerInterface $logger;
|
||||
private ICrypto $crypto;
|
||||
|
||||
|
|
@ -89,6 +91,7 @@ class AppConfigTest extends TestCase {
|
|||
parent::setUp();
|
||||
|
||||
$this->connection = Server::get(IDBConnection::class);
|
||||
$this->config = Server::get(IConfig::class);
|
||||
$this->logger = Server::get(LoggerInterface::class);
|
||||
$this->crypto = Server::get(ICrypto::class);
|
||||
|
||||
|
|
@ -179,6 +182,7 @@ class AppConfigTest extends TestCase {
|
|||
/** @var AppConfig $config */
|
||||
$config = new AppConfig(
|
||||
$this->connection,
|
||||
$this->config,
|
||||
$this->logger,
|
||||
$this->crypto,
|
||||
);
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ namespace Tests\lib\Config;
|
|||
use NCU\Config\Exceptions\TypeConflictException;
|
||||
use NCU\Config\Exceptions\UnknownKeyException;
|
||||
use NCU\Config\IUserConfig;
|
||||
use NCU\Config\Lexicon\Preset;
|
||||
use OC\AppConfig;
|
||||
use OC\AppFramework\Bootstrap\Coordinator;
|
||||
use OC\Config\ConfigManager;
|
||||
|
|
@ -203,4 +204,28 @@ class LexiconTest extends TestCase {
|
|||
$this->configManager->migrateConfigLexiconKeys(TestConfigLexicon_I::APPID);
|
||||
$this->assertSame(false, $this->appConfig->getValueBool(TestConfigLexicon_I::APPID, 'key4'));
|
||||
}
|
||||
|
||||
public function testAppConfigLexiconPreset() {
|
||||
$this->configManager->setLexiconPreset(Preset::FAMILY);
|
||||
$this->assertSame('family', $this->appConfig->getValueString(TestConfigLexicon_E::APPID, 'key3'));
|
||||
}
|
||||
|
||||
public function testAppConfigLexiconPresets() {
|
||||
$this->configManager->setLexiconPreset(Preset::MEDIUM);
|
||||
$this->assertSame('club+medium', $this->appConfig->getValueString(TestConfigLexicon_E::APPID, 'key3'));
|
||||
$this->configManager->setLexiconPreset(Preset::FAMILY);
|
||||
$this->assertSame('family', $this->appConfig->getValueString(TestConfigLexicon_E::APPID, 'key3'));
|
||||
}
|
||||
|
||||
public function testUserConfigLexiconPreset() {
|
||||
$this->configManager->setLexiconPreset(Preset::FAMILY);
|
||||
$this->assertSame('family', $this->userConfig->getValueString('user1', TestConfigLexicon_E::APPID, 'key3'));
|
||||
}
|
||||
|
||||
public function testUserConfigLexiconPresets() {
|
||||
$this->configManager->setLexiconPreset(Preset::MEDIUM);
|
||||
$this->assertSame('club+medium', $this->userConfig->getValueString('user1', TestConfigLexicon_E::APPID, 'key3'));
|
||||
$this->configManager->setLexiconPreset(Preset::FAMILY);
|
||||
$this->assertSame('family', $this->userConfig->getValueString('user1', TestConfigLexicon_E::APPID, 'key3'));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ use NCU\Config\IUserConfig;
|
|||
use NCU\Config\Lexicon\ConfigLexiconEntry;
|
||||
use NCU\Config\Lexicon\ConfigLexiconStrictness;
|
||||
use NCU\Config\Lexicon\IConfigLexicon;
|
||||
use NCU\Config\Lexicon\Preset;
|
||||
use NCU\Config\ValueType;
|
||||
use OCP\IAppConfig;
|
||||
|
||||
|
|
@ -25,14 +26,24 @@ class TestConfigLexicon_E implements IConfigLexicon {
|
|||
public function getAppConfigs(): array {
|
||||
return [
|
||||
new ConfigLexiconEntry('key1', ValueType::STRING, 'abcde', 'test key', true, IAppConfig::FLAG_SENSITIVE),
|
||||
new ConfigLexiconEntry('key2', ValueType::INT, 12345, 'test key', false)
|
||||
new ConfigLexiconEntry('key2', ValueType::INT, 12345, 'test key', false),
|
||||
new ConfigLexiconEntry('key3', ValueType::STRING, fn (Preset $p): string => match ($p) {
|
||||
Preset::FAMILY => 'family',
|
||||
Preset::CLUB, Preset::MEDIUM => 'club+medium',
|
||||
default => 'none',
|
||||
}, 'test key'),
|
||||
];
|
||||
}
|
||||
|
||||
public function getUserConfigs(): array {
|
||||
return [
|
||||
new ConfigLexiconEntry('key1', ValueType::STRING, 'abcde', 'test key', true, IUserConfig::FLAG_SENSITIVE),
|
||||
new ConfigLexiconEntry('key2', ValueType::INT, 12345, 'test key', false)
|
||||
new ConfigLexiconEntry('key2', ValueType::INT, 12345, 'test key', false),
|
||||
new ConfigLexiconEntry('key3', ValueType::STRING, fn (Preset $p): string => match ($p) {
|
||||
Preset::FAMILY => 'family',
|
||||
Preset::CLUB, Preset::MEDIUM => 'club+medium',
|
||||
default => 'none',
|
||||
}, 'test key'),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue