aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/composer/composer/autoload_classmap.php9
-rw-r--r--lib/composer/composer/autoload_static.php9
-rw-r--r--lib/composer/composer/platform_check.php5
-rw-r--r--lib/l10n/be.js1
-rw-r--r--lib/l10n/be.json1
-rw-r--r--lib/l10n/es.js8
-rw-r--r--lib/l10n/es.json8
-rw-r--r--lib/l10n/uz.js4
-rw-r--r--lib/l10n/uz.json4
-rw-r--r--lib/private/AllConfig.php6
-rw-r--r--lib/private/AppConfig.php30
-rw-r--r--lib/private/AppFramework/Bootstrap/RegistrationContext.php8
-rw-r--r--lib/private/Config/ConfigManager.php23
-rw-r--r--lib/private/Config/Lexicon/CoreConfigLexicon.php22
-rw-r--r--lib/private/Config/UserConfig.php46
-rw-r--r--lib/private/Server.php3
-rw-r--r--lib/public/AppFramework/Bootstrap/IRegistrationContext.php2
-rw-r--r--lib/public/Config/BeforePreferenceDeletedEvent.php5
-rw-r--r--lib/public/Config/BeforePreferenceSetEvent.php5
-rw-r--r--lib/public/Config/Exceptions/IncorrectTypeException.php16
-rw-r--r--lib/public/Config/Exceptions/TypeConflictException.php16
-rw-r--r--lib/public/Config/Exceptions/UnknownKeyException.php16
-rw-r--r--lib/public/Config/IUserConfig.php742
-rw-r--r--lib/public/Config/Lexicon/Entry.php250
-rw-r--r--lib/public/Config/Lexicon/ILexicon.php45
-rw-r--r--lib/public/Config/Lexicon/Preset.php50
-rw-r--r--lib/public/Config/Lexicon/Strictness.php31
-rw-r--r--lib/public/Config/ValueType.php117
-rw-r--r--lib/unstable/Config/Exceptions/IncorrectTypeException.php2
-rw-r--r--lib/unstable/Config/Exceptions/TypeConflictException.php2
-rw-r--r--lib/unstable/Config/Exceptions/UnknownKeyException.php2
-rw-r--r--lib/unstable/Config/IUserConfig.php89
-rw-r--r--lib/unstable/Config/Lexicon/ConfigLexiconEntry.php50
-rw-r--r--lib/unstable/Config/Lexicon/ConfigLexiconStrictness.php26
-rw-r--r--lib/unstable/Config/Lexicon/IConfigLexicon.php13
-rw-r--r--lib/unstable/Config/Lexicon/Preset.php47
-rw-r--r--lib/unstable/Config/ValueType.php26
37 files changed, 1642 insertions, 97 deletions
diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php
index 16926e77775..65c1a299dec 100644
--- a/lib/composer/composer/autoload_classmap.php
+++ b/lib/composer/composer/autoload_classmap.php
@@ -275,6 +275,15 @@ return array(
'OCP\\Common\\Exception\\NotFoundException' => $baseDir . '/lib/public/Common/Exception/NotFoundException.php',
'OCP\\Config\\BeforePreferenceDeletedEvent' => $baseDir . '/lib/public/Config/BeforePreferenceDeletedEvent.php',
'OCP\\Config\\BeforePreferenceSetEvent' => $baseDir . '/lib/public/Config/BeforePreferenceSetEvent.php',
+ 'OCP\\Config\\Exceptions\\IncorrectTypeException' => $baseDir . '/lib/public/Config/Exceptions/IncorrectTypeException.php',
+ 'OCP\\Config\\Exceptions\\TypeConflictException' => $baseDir . '/lib/public/Config/Exceptions/TypeConflictException.php',
+ 'OCP\\Config\\Exceptions\\UnknownKeyException' => $baseDir . '/lib/public/Config/Exceptions/UnknownKeyException.php',
+ 'OCP\\Config\\IUserConfig' => $baseDir . '/lib/public/Config/IUserConfig.php',
+ 'OCP\\Config\\Lexicon\\Entry' => $baseDir . '/lib/public/Config/Lexicon/Entry.php',
+ 'OCP\\Config\\Lexicon\\ILexicon' => $baseDir . '/lib/public/Config/Lexicon/ILexicon.php',
+ 'OCP\\Config\\Lexicon\\Preset' => $baseDir . '/lib/public/Config/Lexicon/Preset.php',
+ 'OCP\\Config\\Lexicon\\Strictness' => $baseDir . '/lib/public/Config/Lexicon/Strictness.php',
+ 'OCP\\Config\\ValueType' => $baseDir . '/lib/public/Config/ValueType.php',
'OCP\\Console\\ConsoleEvent' => $baseDir . '/lib/public/Console/ConsoleEvent.php',
'OCP\\Console\\ReservedOptions' => $baseDir . '/lib/public/Console/ReservedOptions.php',
'OCP\\Constants' => $baseDir . '/lib/public/Constants.php',
diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php
index daa1a1940dd..909ac3599f5 100644
--- a/lib/composer/composer/autoload_static.php
+++ b/lib/composer/composer/autoload_static.php
@@ -316,6 +316,15 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2
'OCP\\Common\\Exception\\NotFoundException' => __DIR__ . '/../../..' . '/lib/public/Common/Exception/NotFoundException.php',
'OCP\\Config\\BeforePreferenceDeletedEvent' => __DIR__ . '/../../..' . '/lib/public/Config/BeforePreferenceDeletedEvent.php',
'OCP\\Config\\BeforePreferenceSetEvent' => __DIR__ . '/../../..' . '/lib/public/Config/BeforePreferenceSetEvent.php',
+ 'OCP\\Config\\Exceptions\\IncorrectTypeException' => __DIR__ . '/../../..' . '/lib/public/Config/Exceptions/IncorrectTypeException.php',
+ 'OCP\\Config\\Exceptions\\TypeConflictException' => __DIR__ . '/../../..' . '/lib/public/Config/Exceptions/TypeConflictException.php',
+ 'OCP\\Config\\Exceptions\\UnknownKeyException' => __DIR__ . '/../../..' . '/lib/public/Config/Exceptions/UnknownKeyException.php',
+ 'OCP\\Config\\IUserConfig' => __DIR__ . '/../../..' . '/lib/public/Config/IUserConfig.php',
+ 'OCP\\Config\\Lexicon\\Entry' => __DIR__ . '/../../..' . '/lib/public/Config/Lexicon/Entry.php',
+ 'OCP\\Config\\Lexicon\\ILexicon' => __DIR__ . '/../../..' . '/lib/public/Config/Lexicon/ILexicon.php',
+ 'OCP\\Config\\Lexicon\\Preset' => __DIR__ . '/../../..' . '/lib/public/Config/Lexicon/Preset.php',
+ 'OCP\\Config\\Lexicon\\Strictness' => __DIR__ . '/../../..' . '/lib/public/Config/Lexicon/Strictness.php',
+ 'OCP\\Config\\ValueType' => __DIR__ . '/../../..' . '/lib/public/Config/ValueType.php',
'OCP\\Console\\ConsoleEvent' => __DIR__ . '/../../..' . '/lib/public/Console/ConsoleEvent.php',
'OCP\\Console\\ReservedOptions' => __DIR__ . '/../../..' . '/lib/public/Console/ReservedOptions.php',
'OCP\\Constants' => __DIR__ . '/../../..' . '/lib/public/Constants.php',
diff --git a/lib/composer/composer/platform_check.php b/lib/composer/composer/platform_check.php
index 4c3a5d68f14..2beb1491838 100644
--- a/lib/composer/composer/platform_check.php
+++ b/lib/composer/composer/platform_check.php
@@ -19,8 +19,7 @@ if ($issues) {
echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
}
}
- trigger_error(
- 'Composer detected issues in your platform: ' . implode(' ', $issues),
- E_USER_ERROR
+ throw new \RuntimeException(
+ 'Composer detected issues in your platform: ' . implode(' ', $issues)
);
}
diff --git a/lib/l10n/be.js b/lib/l10n/be.js
index 3206f0b006f..eb38c0ed05e 100644
--- a/lib/l10n/be.js
+++ b/lib/l10n/be.js
@@ -2,6 +2,7 @@ OC.L10N.register(
"lib",
{
"Authentication" : "Аўтэнтыфікацыя",
+ "Unknown filetype" : "Невядомы тып файла",
"Files" : "Файлы",
"_%n year ago_::_%n years ago_" : ["%n год таму","%n гады таму","%n гадоў таму","%n гадоў таму"],
"seconds ago" : "с таму",
diff --git a/lib/l10n/be.json b/lib/l10n/be.json
index a0fc0fa10bd..d944caed749 100644
--- a/lib/l10n/be.json
+++ b/lib/l10n/be.json
@@ -1,5 +1,6 @@
{ "translations": {
"Authentication" : "Аўтэнтыфікацыя",
+ "Unknown filetype" : "Невядомы тып файла",
"Files" : "Файлы",
"_%n year ago_::_%n years ago_" : ["%n год таму","%n гады таму","%n гадоў таму","%n гадоў таму"],
"seconds ago" : "с таму",
diff --git a/lib/l10n/es.js b/lib/l10n/es.js
index 6b8663e2ce5..17540701703 100644
--- a/lib/l10n/es.js
+++ b/lib/l10n/es.js
@@ -326,9 +326,17 @@ OC.L10N.register(
"Images" : "Imágenes",
"Question" : "Pregunta",
"Generated response" : "Respuesta generada",
+ "Voice chat with the assistant" : "Chat de voz con el asistente",
"System prompt" : "Prompt del sistema",
"Define rules and assumptions that the assistant should follow during the conversation." : "Definir las reglas y supuestos que el asistente debe seguir durante la conversación.",
+ "Chat voice message" : "Mensaje de voz del chat",
"Chat history" : "Historial de la conversación",
+ "Input transcript" : "Transcripción de entrada",
+ "Transcription of the audio input" : "Transcripción de la entrada de audio",
+ "Response voice message" : "Mensaje de voz de respuesta",
+ "The generated voice response as part of the conversation" : "La respuesta de voz generada como parte de la conversación",
+ "Output transcript" : "Transcripción de salida",
+ "Transcription of the audio output" : "Transcripción de la salida de audio",
"Transcribe audio" : "Transcribir audio",
"Transcribe the things said in an audio" : "Transcribir las cosas que se dicen en un audio",
"Audio input" : "Entrada de audio",
diff --git a/lib/l10n/es.json b/lib/l10n/es.json
index 997885dd7e1..ac0dac19026 100644
--- a/lib/l10n/es.json
+++ b/lib/l10n/es.json
@@ -324,9 +324,17 @@
"Images" : "Imágenes",
"Question" : "Pregunta",
"Generated response" : "Respuesta generada",
+ "Voice chat with the assistant" : "Chat de voz con el asistente",
"System prompt" : "Prompt del sistema",
"Define rules and assumptions that the assistant should follow during the conversation." : "Definir las reglas y supuestos que el asistente debe seguir durante la conversación.",
+ "Chat voice message" : "Mensaje de voz del chat",
"Chat history" : "Historial de la conversación",
+ "Input transcript" : "Transcripción de entrada",
+ "Transcription of the audio input" : "Transcripción de la entrada de audio",
+ "Response voice message" : "Mensaje de voz de respuesta",
+ "The generated voice response as part of the conversation" : "La respuesta de voz generada como parte de la conversación",
+ "Output transcript" : "Transcripción de salida",
+ "Transcription of the audio output" : "Transcripción de la salida de audio",
"Transcribe audio" : "Transcribir audio",
"Transcribe the things said in an audio" : "Transcribir las cosas que se dicen en un audio",
"Audio input" : "Entrada de audio",
diff --git a/lib/l10n/uz.js b/lib/l10n/uz.js
index 231325a7a79..5f51ccfbaef 100644
--- a/lib/l10n/uz.js
+++ b/lib/l10n/uz.js
@@ -5,12 +5,12 @@ OC.L10N.register(
"Authentication" : "Autentifikatsiya",
"Unknown filetype" : "Unknown filetype",
"Invalid image" : "Invalid image",
- "Files" : "Files",
+ "Files" : "Fayllar",
"View profile" : "View profile",
"last month" : "last month",
"seconds ago" : "seconds ago",
"Apps" : "Apps",
- "Settings" : "Settings",
+ "Settings" : "Sozlamalar",
"Accounts" : "Akkaunt",
"Email" : "Email",
"Website" : "Veb-sayt",
diff --git a/lib/l10n/uz.json b/lib/l10n/uz.json
index fb089ce814e..48de5beb2ab 100644
--- a/lib/l10n/uz.json
+++ b/lib/l10n/uz.json
@@ -3,12 +3,12 @@
"Authentication" : "Autentifikatsiya",
"Unknown filetype" : "Unknown filetype",
"Invalid image" : "Invalid image",
- "Files" : "Files",
+ "Files" : "Fayllar",
"View profile" : "View profile",
"last month" : "last month",
"seconds ago" : "seconds ago",
"Apps" : "Apps",
- "Settings" : "Settings",
+ "Settings" : "Sozlamalar",
"Accounts" : "Akkaunt",
"Email" : "Email",
"Website" : "Veb-sayt",
diff --git a/lib/private/AllConfig.php b/lib/private/AllConfig.php
index 8a6bb5a4723..c80ee52eb0d 100644
--- a/lib/private/AllConfig.php
+++ b/lib/private/AllConfig.php
@@ -7,11 +7,11 @@
*/
namespace OC;
-use NCU\Config\Exceptions\TypeConflictException;
-use NCU\Config\IUserConfig;
-use NCU\Config\ValueType;
use OC\Config\UserConfig;
use OCP\Cache\CappedMemoryCache;
+use OCP\Config\Exceptions\TypeConflictException;
+use OCP\Config\IUserConfig;
+use OCP\Config\ValueType;
use OCP\IConfig;
use OCP\IDBConnection;
use OCP\PreConditionNotMetException;
diff --git a/lib/private/AppConfig.php b/lib/private/AppConfig.php
index f050deba1ca..0a46109c9f9 100644
--- a/lib/private/AppConfig.php
+++ b/lib/private/AppConfig.php
@@ -11,12 +11,12 @@ namespace OC;
use InvalidArgumentException;
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\Config\Lexicon\Entry;
+use OCP\Config\Lexicon\ILexicon;
+use OCP\Config\Lexicon\Preset;
+use OCP\Config\Lexicon\Strictness;
use OCP\DB\Exception as DBException;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\Exceptions\AppConfigIncorrectTypeException;
@@ -62,7 +62,7 @@ class AppConfig implements IAppConfig {
private array $valueTypes = []; // type for all config values
private bool $fastLoaded = false;
private bool $lazyLoaded = false;
- /** @var array<string, array{entries: array<string, ConfigLexiconEntry>, aliases: array<string, string>, strictness: ConfigLexiconStrictness}> ['app_id' => ['strictness' => ConfigLexiconStrictness, 'entries' => ['config_key' => ConfigLexiconEntry[]]] */
+ /** @var array<string, array{entries: array<string, Entry>, aliases: array<string, string>, strictness: Strictness}> ['app_id' => ['strictness' => ConfigLexiconStrictness, 'entries' => ['config_key' => ConfigLexiconEntry[]]] */
private array $configLexiconDetails = [];
private bool $ignoreLexiconAliases = false;
private ?Preset $configLexiconPreset = null;
@@ -1655,7 +1655,7 @@ class AppConfig implements IAppConfig {
return true;
}
- /** @var ConfigLexiconEntry $configValue */
+ /** @var Entry $configValue */
$configValue = $configDetails['entries'][$key];
$type &= ~self::VALUE_SENSITIVE;
@@ -1685,15 +1685,15 @@ class AppConfig implements IAppConfig {
/**
* manage ConfigLexicon behavior based on strictness set in IConfigLexicon
*
- * @param ConfigLexiconStrictness|null $strictness
+ * @param Strictness|null $strictness
* @param string $line
*
* @return bool TRUE if conflict can be fully ignored, FALSE if action should be not performed
* @throws AppConfigUnknownKeyException if strictness implies exception
- * @see IConfigLexicon::getStrictness()
+ * @see ILexicon::getStrictness()
*/
private function applyLexiconStrictness(
- ?ConfigLexiconStrictness $strictness,
+ ?Strictness $strictness,
string $line = '',
): bool {
if ($strictness === null) {
@@ -1701,12 +1701,12 @@ class AppConfig implements IAppConfig {
}
switch ($strictness) {
- case ConfigLexiconStrictness::IGNORE:
+ case Strictness::IGNORE:
return true;
- case ConfigLexiconStrictness::NOTICE:
+ case Strictness::NOTICE:
$this->logger->notice($line);
return true;
- case ConfigLexiconStrictness::WARNING:
+ case Strictness::WARNING:
$this->logger->warning($line);
return false;
}
@@ -1720,7 +1720,7 @@ class AppConfig implements IAppConfig {
* @param string $appId
* @internal
*
- * @return array{entries: array<string, ConfigLexiconEntry>, aliases: array<string, string>, strictness: ConfigLexiconStrictness}
+ * @return array{entries: array<string, Entry>, aliases: array<string, string>, strictness: Strictness}
*/
public function getConfigDetailsFromLexicon(string $appId): array {
if (!array_key_exists($appId, $this->configLexiconDetails)) {
@@ -1737,14 +1737,14 @@ class AppConfig implements IAppConfig {
$this->configLexiconDetails[$appId] = [
'entries' => $entries,
'aliases' => $aliases,
- 'strictness' => $configLexicon?->getStrictness() ?? ConfigLexiconStrictness::IGNORE
+ 'strictness' => $configLexicon?->getStrictness() ?? Strictness::IGNORE
];
}
return $this->configLexiconDetails[$appId];
}
- private function getLexiconEntry(string $appId, string $key): ?ConfigLexiconEntry {
+ private function getLexiconEntry(string $appId, string $key): ?Entry {
return $this->getConfigDetailsFromLexicon($appId)['entries'][$key] ?? null;
}
diff --git a/lib/private/AppFramework/Bootstrap/RegistrationContext.php b/lib/private/AppFramework/Bootstrap/RegistrationContext.php
index 95ad129c466..94250aad37b 100644
--- a/lib/private/AppFramework/Bootstrap/RegistrationContext.php
+++ b/lib/private/AppFramework/Bootstrap/RegistrationContext.php
@@ -10,7 +10,6 @@ declare(strict_types=1);
namespace OC\AppFramework\Bootstrap;
use Closure;
-use NCU\Config\Lexicon\IConfigLexicon;
use OC\Config\Lexicon\CoreConfigLexicon;
use OC\Support\CrashReport\Registry;
use OCP\AppFramework\App;
@@ -23,6 +22,7 @@ use OCP\Calendar\Resource\IBackend as IResourceBackend;
use OCP\Calendar\Room\IBackend as IRoomBackend;
use OCP\Capabilities\ICapability;
use OCP\Collaboration\Reference\IReferenceProvider;
+use OCP\Config\Lexicon\ILexicon;
use OCP\Dashboard\IManager;
use OCP\Dashboard\IWidget;
use OCP\EventDispatcher\IEventDispatcher;
@@ -652,7 +652,7 @@ class RegistrationContext {
}
/**
- * @psalm-param class-string<IConfigLexicon> $configLexiconClass
+ * @psalm-param class-string<ILexicon> $configLexiconClass
*/
public function registerConfigLexicon(string $appId, string $configLexiconClass): void {
$this->configLexiconClasses[$appId] = $configLexiconClass;
@@ -1023,9 +1023,9 @@ class RegistrationContext {
*
* @param string $appId
*
- * @return IConfigLexicon|null
+ * @return ILexicon|null
*/
- public function getConfigLexicon(string $appId): ?IConfigLexicon {
+ public function getConfigLexicon(string $appId): ?ILexicon {
if (!array_key_exists($appId, $this->configLexiconClasses)) {
return null;
}
diff --git a/lib/private/Config/ConfigManager.php b/lib/private/Config/ConfigManager.php
index 67466617941..ed516abdcbf 100644
--- a/lib/private/Config/ConfigManager.php
+++ b/lib/private/Config/ConfigManager.php
@@ -9,13 +9,13 @@ declare(strict_types=1);
namespace OC\Config;
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\Config\Exceptions\TypeConflictException;
+use OCP\Config\IUserConfig;
+use OCP\Config\Lexicon\Entry;
+use OCP\Config\Lexicon\Preset;
+use OCP\Config\ValueType;
use OCP\IAppConfig;
use OCP\IConfig;
use OCP\Server;
@@ -50,10 +50,11 @@ class ConfigManager {
*
* This method should be mainly called during a new upgrade or when a new app is enabled.
*
- * @see ConfigLexiconEntry
+ * @param string|null $appId when set to NULL the method will be executed for all enabled apps of the instance
+ *
* @internal
* @since 32.0.0
- * @param string|null $appId when set to NULL the method will be executed for all enabled apps of the instance
+ * @see Entry
*/
public function migrateConfigLexiconKeys(?string $appId = null): void {
if ($appId === null) {
@@ -166,7 +167,7 @@ class ConfigManager {
*
* @throws TypeConflictException if previous value does not fit the expected type
*/
- private function migrateAppConfigValue(string $appId, ConfigLexiconEntry $entry): void {
+ private function migrateAppConfigValue(string $appId, Entry $entry): void {
$value = $this->appConfig->getValueMixed($appId, $entry->getRename(), lazy: null);
switch ($entry->getValueType()) {
case ValueType::STRING:
@@ -196,7 +197,7 @@ class ConfigManager {
*
* @throws TypeConflictException if previous value does not fit the expected type
*/
- private function migrateUserConfigValue(string $userId, string $appId, ConfigLexiconEntry $entry): void {
+ private function migrateUserConfigValue(string $userId, string $appId, Entry $entry): void {
$value = $this->userConfig->getValueMixed($userId, $appId, $entry->getRename(), lazy: null);
switch ($entry->getValueType()) {
case ValueType::STRING:
@@ -237,7 +238,7 @@ class ConfigManager {
return (float)$value;
}
- public function convertToBool(string $value, ?ConfigLexiconEntry $entry = null): bool {
+ public function convertToBool(string $value, ?Entry $entry = null): bool {
if (in_array(strtolower($value), ['true', '1', 'on', 'yes'])) {
$valueBool = true;
} elseif (in_array(strtolower($value), ['false', '0', 'off', 'no'])) {
@@ -245,7 +246,7 @@ class ConfigManager {
} else {
throw new TypeConflictException('Value cannot be converted to boolean');
}
- if ($entry?->hasOption(ConfigLexiconEntry::RENAME_INVERT_BOOLEAN) === true) {
+ if ($entry?->hasOption(Entry::RENAME_INVERT_BOOLEAN) === true) {
$valueBool = !$valueBool;
}
diff --git a/lib/private/Config/Lexicon/CoreConfigLexicon.php b/lib/private/Config/Lexicon/CoreConfigLexicon.php
index 34a0b883c54..de84a58131c 100644
--- a/lib/private/Config/Lexicon/CoreConfigLexicon.php
+++ b/lib/private/Config/Lexicon/CoreConfigLexicon.php
@@ -8,36 +8,36 @@ declare(strict_types=1);
namespace OC\Config\Lexicon;
-use NCU\Config\Lexicon\ConfigLexiconEntry;
-use NCU\Config\Lexicon\ConfigLexiconStrictness;
-use NCU\Config\Lexicon\IConfigLexicon;
-use NCU\Config\ValueType;
+use OCP\Config\Lexicon\Entry;
+use OCP\Config\Lexicon\ILexicon;
+use OCP\Config\Lexicon\Strictness;
+use OCP\Config\ValueType;
/**
* ConfigLexicon for 'core' app/user configs
*/
-class CoreConfigLexicon implements IConfigLexicon {
- public function getStrictness(): ConfigLexiconStrictness {
- return ConfigLexiconStrictness::IGNORE;
+class CoreConfigLexicon implements ILexicon {
+ public function getStrictness(): Strictness {
+ return Strictness::IGNORE;
}
/**
* @inheritDoc
- * @return ConfigLexiconEntry[]
+ * @return Entry[]
*/
public function getAppConfigs(): array {
return [
- new ConfigLexiconEntry('lastcron', ValueType::INT, 0, 'timestamp of last cron execution'),
+ new Entry('lastcron', ValueType::INT, 0, 'timestamp of last cron execution'),
];
}
/**
* @inheritDoc
- * @return ConfigLexiconEntry[]
+ * @return Entry[]
*/
public function getUserConfigs(): array {
return [
- new ConfigLexiconEntry('lang', ValueType::STRING, null, 'language'),
+ new Entry('lang', ValueType::STRING, null, 'language'),
];
}
}
diff --git a/lib/private/Config/UserConfig.php b/lib/private/Config/UserConfig.php
index fb0bf954f57..04ba0e29db0 100644
--- a/lib/private/Config/UserConfig.php
+++ b/lib/private/Config/UserConfig.php
@@ -11,15 +11,16 @@ namespace OC\Config;
use Generator;
use InvalidArgumentException;
use JsonException;
-use NCU\Config\Exceptions\IncorrectTypeException;
-use NCU\Config\Exceptions\TypeConflictException;
-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\Config\Exceptions\IncorrectTypeException;
+use OCP\Config\Exceptions\TypeConflictException;
+use OCP\Config\Exceptions\UnknownKeyException;
+use OCP\Config\IUserConfig;
+use OCP\Config\Lexicon\Entry;
+use OCP\Config\Lexicon\ILexicon;
+use OCP\Config\Lexicon\Preset;
+use OCP\Config\Lexicon\Strictness;
+use OCP\Config\ValueType;
use OCP\DB\Exception as DBException;
use OCP\DB\IResult;
use OCP\DB\QueryBuilder\IQueryBuilder;
@@ -64,7 +65,7 @@ class UserConfig implements IUserConfig {
private array $fastLoaded = [];
/** @var array<string, boolean> ['user_id' => bool] */
private array $lazyLoaded = [];
- /** @var array<string, array{entries: array<string, ConfigLexiconEntry>, aliases: array<string, string>, strictness: ConfigLexiconStrictness}> ['app_id' => ['strictness' => ConfigLexiconStrictness, 'entries' => ['config_key' => ConfigLexiconEntry[]]] */
+ /** @var array<string, array{entries: array<string, Entry>, aliases: array<string, string>, strictness: Strictness}> ['app_id' => ['strictness' => ConfigLexiconStrictness, 'entries' => ['config_key' => ConfigLexiconEntry[]]] */
private array $configLexiconDetails = [];
private bool $ignoreLexiconAliases = false;
private ?Preset $configLexiconPreset = null;
@@ -1913,7 +1914,7 @@ class UserConfig implements IUserConfig {
return true;
}
- /** @var ConfigLexiconEntry $configValue */
+ /** @var Entry $configValue */
$configValue = $configDetails['entries'][$key];
if ($type === ValueType::MIXED) {
// we overwrite if value was requested as mixed
@@ -1954,7 +1955,7 @@ class UserConfig implements IUserConfig {
*
* The entry is converted to string to fit the expected type when managing default value
*/
- private function getSystemDefault(string $appId, ConfigLexiconEntry $configValue): ?string {
+ private function getSystemDefault(string $appId, Entry $configValue): ?string {
$default = $this->config->getSystemValue('lexicon.default.userconfig', [])[$appId][$configValue->getKey()] ?? null;
if ($default === null) {
// no system default, using default default.
@@ -1967,28 +1968,28 @@ class UserConfig implements IUserConfig {
/**
* manage ConfigLexicon behavior based on strictness set in IConfigLexicon
*
- * @see IConfigLexicon::getStrictness()
- * @param ConfigLexiconStrictness|null $strictness
+ * @param Strictness|null $strictness
* @param string $line
*
* @return bool TRUE if conflict can be fully ignored
* @throws UnknownKeyException
+ *@see ILexicon::getStrictness()
*/
- private function applyLexiconStrictness(?ConfigLexiconStrictness $strictness, string $line = ''): bool {
+ private function applyLexiconStrictness(?Strictness $strictness, string $line = ''): bool {
if ($strictness === null) {
return true;
}
switch ($strictness) {
- case ConfigLexiconStrictness::IGNORE:
+ case Strictness::IGNORE:
return true;
- case ConfigLexiconStrictness::NOTICE:
+ case Strictness::NOTICE:
$this->logger->notice($line);
return true;
- case ConfigLexiconStrictness::WARNING:
+ case Strictness::WARNING:
$this->logger->warning($line);
return false;
- case ConfigLexiconStrictness::EXCEPTION:
+ case Strictness::EXCEPTION:
throw new UnknownKeyException($line);
}
@@ -1999,9 +2000,10 @@ class UserConfig implements IUserConfig {
* extract details from registered $appId's config lexicon
*
* @param string $appId
- * @internal
*
- * @return array{entries: array<string, ConfigLexiconEntry>, aliases: array<string, string>, strictness: ConfigLexiconStrictness}
+ * @return array{entries: array<string, Entry>, aliases: array<string, string>, strictness: Strictness}
+ *@internal
+ *
*/
public function getConfigDetailsFromLexicon(string $appId): array {
if (!array_key_exists($appId, $this->configLexiconDetails)) {
@@ -2018,14 +2020,14 @@ class UserConfig implements IUserConfig {
$this->configLexiconDetails[$appId] = [
'entries' => $entries,
'aliases' => $aliases,
- 'strictness' => $configLexicon?->getStrictness() ?? ConfigLexiconStrictness::IGNORE
+ 'strictness' => $configLexicon?->getStrictness() ?? Strictness::IGNORE
];
}
return $this->configLexiconDetails[$appId];
}
- private function getLexiconEntry(string $appId, string $key): ?ConfigLexiconEntry {
+ private function getLexiconEntry(string $appId, string $key): ?Entry {
return $this->getConfigDetailsFromLexicon($appId)['entries'][$key] ?? null;
}
diff --git a/lib/private/Server.php b/lib/private/Server.php
index 1e1ba2a1ad3..d339a97baab 100644
--- a/lib/private/Server.php
+++ b/lib/private/Server.php
@@ -8,7 +8,6 @@
namespace OC;
use bantu\IniGetWrapper\IniGetWrapper;
-use NCU\Config\IUserConfig;
use NCU\Security\Signature\ISignatureManager;
use OC\Accounts\AccountManager;
use OC\App\AppManager;
@@ -139,6 +138,7 @@ use OCP\BackgroundJob\IJobList;
use OCP\Collaboration\Reference\IReferenceManager;
use OCP\Command\IBus;
use OCP\Comments\ICommentsManager;
+use OCP\Config\IUserConfig;
use OCP\Contacts\ContactsMenu\IActionFactory;
use OCP\Contacts\ContactsMenu\IContactsStore;
use OCP\Defaults;
@@ -163,7 +163,6 @@ use OCP\Files\Storage\IStorageFactory;
use OCP\Files\Template\ITemplateManager;
use OCP\FilesMetadata\IFilesMetadataManager;
use OCP\FullTextSearch\IFullTextSearchManager;
-use OCP\GlobalScale\IConfig;
use OCP\Group\ISubAdmin;
use OCP\Http\Client\IClientService;
use OCP\IAppConfig;
diff --git a/lib/public/AppFramework/Bootstrap/IRegistrationContext.php b/lib/public/AppFramework/Bootstrap/IRegistrationContext.php
index 011d1520414..70b35228c87 100644
--- a/lib/public/AppFramework/Bootstrap/IRegistrationContext.php
+++ b/lib/public/AppFramework/Bootstrap/IRegistrationContext.php
@@ -443,7 +443,7 @@ interface IRegistrationContext {
*
* @param string $configLexiconClass
*
- * @psalm-param class-string<\NCU\Config\Lexicon\IConfigLexicon> $configLexiconClass
+ * @psalm-param class-string<\OCP\Config\Lexicon\ILexicon> $configLexiconClass
* @since 31.0.0
*/
public function registerConfigLexicon(string $configLexiconClass): void;
diff --git a/lib/public/Config/BeforePreferenceDeletedEvent.php b/lib/public/Config/BeforePreferenceDeletedEvent.php
index c7026b0f6fc..df89a2900bd 100644
--- a/lib/public/Config/BeforePreferenceDeletedEvent.php
+++ b/lib/public/Config/BeforePreferenceDeletedEvent.php
@@ -8,11 +8,10 @@ declare(strict_types=1);
namespace OCP\Config;
+use OCP\AppFramework\Attribute\Listenable;
use OCP\EventDispatcher\Event;
-/**
- * @since 25.0.0
- */
+#[Listenable(since: '25.0.0')]
class BeforePreferenceDeletedEvent extends Event {
protected string $userId;
protected string $appId;
diff --git a/lib/public/Config/BeforePreferenceSetEvent.php b/lib/public/Config/BeforePreferenceSetEvent.php
index c5abb8429a8..6534e4ae371 100644
--- a/lib/public/Config/BeforePreferenceSetEvent.php
+++ b/lib/public/Config/BeforePreferenceSetEvent.php
@@ -8,11 +8,10 @@ declare(strict_types=1);
namespace OCP\Config;
+use OCP\AppFramework\Attribute\Listenable;
use OCP\EventDispatcher\Event;
-/**
- * @since 25.0.0
- */
+#[Listenable(since: '25.0.0')]
class BeforePreferenceSetEvent extends Event {
protected string $userId;
protected string $appId;
diff --git a/lib/public/Config/Exceptions/IncorrectTypeException.php b/lib/public/Config/Exceptions/IncorrectTypeException.php
new file mode 100644
index 00000000000..dea33233bfe
--- /dev/null
+++ b/lib/public/Config/Exceptions/IncorrectTypeException.php
@@ -0,0 +1,16 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+namespace OCP\Config\Exceptions;
+
+use Exception;
+use OCP\AppFramework\Attribute\Throwable;
+
+#[Throwable(since: '32.0.0')]
+class IncorrectTypeException extends Exception {
+}
diff --git a/lib/public/Config/Exceptions/TypeConflictException.php b/lib/public/Config/Exceptions/TypeConflictException.php
new file mode 100644
index 00000000000..c78602180e0
--- /dev/null
+++ b/lib/public/Config/Exceptions/TypeConflictException.php
@@ -0,0 +1,16 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+namespace OCP\Config\Exceptions;
+
+use Exception;
+use OCP\AppFramework\Attribute\Throwable;
+
+#[Throwable(since: '32.0.0')]
+class TypeConflictException extends Exception {
+}
diff --git a/lib/public/Config/Exceptions/UnknownKeyException.php b/lib/public/Config/Exceptions/UnknownKeyException.php
new file mode 100644
index 00000000000..beca4c496a2
--- /dev/null
+++ b/lib/public/Config/Exceptions/UnknownKeyException.php
@@ -0,0 +1,16 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+namespace OCP\Config\Exceptions;
+
+use Exception;
+use OCP\AppFramework\Attribute\Throwable;
+
+#[Throwable(since: '32.0.0')]
+class UnknownKeyException extends Exception {
+}
diff --git a/lib/public/Config/IUserConfig.php b/lib/public/Config/IUserConfig.php
new file mode 100644
index 00000000000..cb42608ea75
--- /dev/null
+++ b/lib/public/Config/IUserConfig.php
@@ -0,0 +1,742 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+namespace OCP\Config;
+
+use Generator;
+use OCP\AppFramework\Attribute\Consumable;
+use OCP\Config\Exceptions\IncorrectTypeException;
+use OCP\Config\Exceptions\UnknownKeyException;
+
+/**
+ * This class provides an easy way for apps to store user config in the
+ * database.
+ * Supports **lazy loading**
+ *
+ * ### What is lazy loading ?
+ * In order to avoid loading useless user config into memory for each request,
+ * only non-lazy values are now loaded.
+ *
+ * Once a value that is lazy is requested, all lazy values will be loaded.
+ *
+ * Similarly, some methods from this class are marked with a warning about ignoring
+ * lazy loading. Use them wisely and only on parts of the code that are called
+ * during specific requests or actions to avoid loading the lazy values all the time.
+ */
+#[Consumable(since: '32.0.0')]
+interface IUserConfig {
+ /**
+ * @since 32.0.0
+ */
+ public const FLAG_SENSITIVE = 1; // value is sensitive
+ /**
+ * @since 32.0.0
+ */
+ public const FLAG_INDEXED = 2; // value should be indexed
+
+ /**
+ * Get list of all userIds with config stored in database.
+ * If $appId is specified, will only limit the search to this value
+ *
+ * **WARNING:** ignore any cache and get data directly from database.
+ *
+ * @param string $appId optional id of app
+ *
+ * @return list<string> list of userIds
+ *
+ * @since 32.0.0
+ */
+ public function getUserIds(string $appId = ''): array;
+
+ /**
+ * Get list of all apps that have at least one config
+ * value related to $userId stored in database
+ *
+ * **WARNING:** ignore lazy filtering, all user config are loaded from database
+ *
+ * @param string $userId id of the user
+ *
+ * @return list<string> list of app ids
+ *
+ * @since 32.0.0
+ */
+ public function getApps(string $userId): array;
+
+ /**
+ * Returns all keys stored in database, related to user+app.
+ * Please note that the values are not returned.
+ *
+ * **WARNING:** ignore lazy filtering, all user config are loaded from database
+ *
+ * @param string $userId id of the user
+ * @param string $app id of the app
+ *
+ * @return list<string> list of stored config keys
+ *
+ * @since 32.0.0
+ */
+ public function getKeys(string $userId, string $app): array;
+
+ /**
+ * Check if a key exists in the list of stored config values.
+ *
+ * @param string $userId id of the user
+ * @param string $app id of the app
+ * @param string $key config key
+ * @param bool $lazy search within lazy loaded config
+ *
+ * @return bool TRUE if key exists
+ *
+ * @since 32.0.0
+ */
+ public function hasKey(string $userId, string $app, string $key, ?bool $lazy = false): bool;
+
+ /**
+ * best way to see if a value is set as sensitive (not displayed in report)
+ *
+ * @param string $userId id of the user
+ * @param string $app id of the app
+ * @param string $key config key
+ * @param bool|null $lazy search within lazy loaded config
+ *
+ * @return bool TRUE if value is sensitive
+ * @throws UnknownKeyException if config key is not known
+ *
+ * @since 32.0.0
+ */
+ public function isSensitive(string $userId, string $app, string $key, ?bool $lazy = false): bool;
+
+ /**
+ * best way to see if a value is set as indexed (so it can be search)
+ *
+ * @see self::searchUsersByValueString()
+ * @see self::searchUsersByValueInt()
+ * @see self::searchUsersByValueBool()
+ * @see self::searchUsersByValues()
+ *
+ * @param string $userId id of the user
+ * @param string $app id of the app
+ * @param string $key config key
+ * @param bool|null $lazy search within lazy loaded config
+ *
+ * @return bool TRUE if value is sensitive
+ * @throws UnknownKeyException if config key is not known
+ *
+ * @since 32.0.0
+ */
+ public function isIndexed(string $userId, string $app, string $key, ?bool $lazy = false): bool;
+
+ /**
+ * Returns if the config key stored in database is lazy loaded
+ *
+ * **WARNING:** ignore lazy filtering, all config values are loaded from database
+ *
+ * @param string $userId id of the user
+ * @param string $app id of the app
+ * @param string $key config key
+ *
+ * @return bool TRUE if config is lazy loaded
+ * @throws UnknownKeyException if config key is not known
+ * @see IUserConfig for details about lazy loading
+ *
+ * @since 32.0.0
+ */
+ public function isLazy(string $userId, string $app, string $key): bool;
+
+ /**
+ * List all config values from an app with config key starting with $key.
+ * Returns an array with config key as key, stored value as value.
+ *
+ * **WARNING:** ignore lazy filtering, all config values are loaded from database
+ *
+ * @param string $userId id of the user
+ * @param string $app id of the app
+ * @param string $prefix config keys prefix to search, can be empty.
+ * @param bool $filtered filter sensitive config values
+ *
+ * @return array<string, string|int|float|bool|array> [key => value]
+ *
+ * @since 32.0.0
+ */
+ public function getValues(string $userId, string $app, string $prefix = '', bool $filtered = false): array;
+
+ /**
+ * List all config values of a user.
+ * Returns an array with config key as key, stored value as value.
+ *
+ * **WARNING:** ignore lazy filtering, all config values are loaded from database
+ *
+ * @param string $userId id of the user
+ * @param bool $filtered filter sensitive config values
+ *
+ * @return array<string, string|int|float|bool|array> [key => value]
+ *
+ * @since 32.0.0
+ */
+ public function getAllValues(string $userId, bool $filtered = false): array;
+
+ /**
+ * List all apps storing a specific config key and its stored value.
+ * Returns an array with appId as key, stored value as value.
+ *
+ * @param string $userId id of the user
+ * @param string $key config key
+ * @param bool $lazy search within lazy loaded config
+ * @param ValueType|null $typedAs enforce type for the returned values
+ *
+ * @return array<string, string|int|float|bool|array> [appId => value]
+ *
+ * @since 32.0.0
+ */
+ public function getValuesByApps(string $userId, string $key, bool $lazy = false, ?ValueType $typedAs = null): array;
+
+ /**
+ * List all users storing a specific config key and its stored value.
+ * Returns an array with userId as key, stored value as value.
+ *
+ * **WARNING:** no caching, generate a fresh request
+ *
+ * @param string $app id of the app
+ * @param string $key config key
+ * @param ValueType|null $typedAs enforce type for the returned values
+ * @param array|null $userIds limit the search to a list of user ids
+ *
+ * @return array<string, string|int|float|bool|array> [userId => value]
+ *
+ * @since 32.0.0
+ */
+ public function getValuesByUsers(string $app, string $key, ?ValueType $typedAs = null, ?array $userIds = null): array;
+
+ /**
+ * List all users storing a specific config key/value pair.
+ * Returns a list of user ids.
+ *
+ * **WARNING:** no caching, generate a fresh request
+ *
+ * @param string $app id of the app
+ * @param string $key config key
+ * @param string $value config value
+ * @param bool $caseInsensitive non-case-sensitive search, only works if $value is a string
+ *
+ * @return Generator<string>
+ *
+ * @since 32.0.0
+ */
+ public function searchUsersByValueString(string $app, string $key, string $value, bool $caseInsensitive = false): Generator;
+
+ /**
+ * List all users storing a specific config key/value pair.
+ * Returns a list of user ids.
+ *
+ * **WARNING:** no caching, generate a fresh request
+ *
+ * @param string $app id of the app
+ * @param string $key config key
+ * @param int $value config value
+ *
+ * @return Generator<string>
+ *
+ * @since 32.0.0
+ */
+ public function searchUsersByValueInt(string $app, string $key, int $value): Generator;
+
+ /**
+ * List all users storing a specific config key/value pair.
+ * Returns a list of user ids.
+ *
+ * **WARNING:** no caching, generate a fresh request
+ *
+ * @param string $app id of the app
+ * @param string $key config key
+ * @param array $values list of possible config values
+ *
+ * @return Generator<string>
+ *
+ * @since 32.0.0
+ */
+ public function searchUsersByValues(string $app, string $key, array $values): Generator;
+
+ /**
+ * List all users storing a specific config key/value pair.
+ * Returns a list of user ids.
+ *
+ * **WARNING:** no caching, generate a fresh request
+ *
+ * @param string $app id of the app
+ * @param string $key config key
+ * @param bool $value config value
+ *
+ * @return Generator<string>
+ *
+ * @since 32.0.0
+ */
+ public function searchUsersByValueBool(string $app, string $key, bool $value): Generator;
+
+ /**
+ * Get user config assigned to a config key.
+ * If config key is not found in database, default value is returned.
+ * If config key is set as lazy loaded, the $lazy argument needs to be set to TRUE.
+ *
+ * @param string $userId id of the user
+ * @param string $app id of the app
+ * @param string $key config key
+ * @param string $default default value
+ * @param bool $lazy search within lazy loaded config
+ *
+ * @return string stored config value or $default if not set in database
+ *
+ * @since 32.0.0
+ *
+ * @see IUserConfig for explanation about lazy loading
+ * @see getValueInt()
+ * @see getValueFloat()
+ * @see getValueBool()
+ * @see getValueArray()
+ */
+ public function getValueString(string $userId, string $app, string $key, string $default = '', bool $lazy = false): string;
+
+ /**
+ * Get config value assigned to a config key.
+ * If config key is not found in database, default value is returned.
+ * If config key is set as lazy loaded, the $lazy argument needs to be set to TRUE.
+ *
+ * @param string $userId id of the user
+ * @param string $app id of the app
+ * @param string $key config key
+ * @param int $default default value
+ * @param bool $lazy search within lazy loaded config
+ *
+ * @return int stored config value or $default if not set in database
+ *
+ * @since 32.0.0
+ *
+ * @see IUserConfig for explanation about lazy loading
+ * @see getValueString()
+ * @see getValueFloat()
+ * @see getValueBool()
+ * @see getValueArray()
+ */
+ public function getValueInt(string $userId, string $app, string $key, int $default = 0, bool $lazy = false): int;
+
+ /**
+ * Get config value assigned to a config key.
+ * If config key is not found in database, default value is returned.
+ * If config key is set as lazy loaded, the $lazy argument needs to be set to TRUE.
+ *
+ * @param string $userId id of the user
+ * @param string $app id of the app
+ * @param string $key config key
+ * @param float $default default value
+ * @param bool $lazy search within lazy loaded config
+ *
+ * @return float stored config value or $default if not set in database
+ *
+ * @since 32.0.0
+ *
+ * @see IUserConfig for explanation about lazy loading
+ * @see getValueString()
+ * @see getValueInt()
+ * @see getValueBool()
+ * @see getValueArray()
+ */
+ public function getValueFloat(string $userId, string $app, string $key, float $default = 0, bool $lazy = false): float;
+
+ /**
+ * Get config value assigned to a config key.
+ * If config key is not found in database, default value is returned.
+ * If config key is set as lazy loaded, the $lazy argument needs to be set to TRUE.
+ *
+ * @param string $userId id of the user
+ * @param string $app id of the app
+ * @param string $key config key
+ * @param bool $default default value
+ * @param bool $lazy search within lazy loaded config
+ *
+ * @return bool stored config value or $default if not set in database
+ *
+ * @since 32.0.0
+ *
+ * @see IUserPrefences for explanation about lazy loading
+ * @see getValueString()
+ * @see getValueInt()
+ * @see getValueFloat()
+ * @see getValueArray()
+ */
+ public function getValueBool(string $userId, string $app, string $key, bool $default = false, bool $lazy = false): bool;
+
+ /**
+ * Get config value assigned to a config key.
+ * If config key is not found in database, default value is returned.
+ * If config key is set as lazy loaded, the $lazy argument needs to be set to TRUE.
+ *
+ * @param string $userId id of the user
+ * @param string $app id of the app
+ * @param string $key config key
+ * @param array $default default value`
+ * @param bool $lazy search within lazy loaded config
+ *
+ * @return array stored config value or $default if not set in database
+ *
+ * @since 32.0.0
+ *
+ * @see IUserConfig for explanation about lazy loading
+ * @see getValueString()
+ * @see getValueInt()
+ * @see getValueFloat()
+ * @see getValueBool()
+ */
+ public function getValueArray(string $userId, string $app, string $key, array $default = [], bool $lazy = false): array;
+
+ /**
+ * returns the type of config value
+ *
+ * **WARNING:** ignore lazy filtering, all config values are loaded from database
+ * unless lazy is set to false
+ *
+ * @param string $userId id of the user
+ * @param string $app id of the app
+ * @param string $key config key
+ * @param bool|null $lazy
+ *
+ * @return ValueType type of the value
+ * @throws UnknownKeyException if config key is not known
+ * @throws IncorrectTypeException if config value type is not known
+ *
+ * @since 32.0.0
+ */
+ public function getValueType(string $userId, string $app, string $key, ?bool $lazy = null): ValueType;
+
+ /**
+ * returns a bitflag related to config value
+ *
+ * **WARNING:** ignore lazy filtering, all config values are loaded from database
+ * unless lazy is set to false
+ *
+ * @param string $userId id of the user
+ * @param string $app id of the app
+ * @param string $key config key
+ * @param bool $lazy lazy loading
+ *
+ * @return int a bitflag in relation to the config value
+ * @throws UnknownKeyException if config key is not known
+ * @throws IncorrectTypeException if config value type is not known
+ *
+ * @since 32.0.0
+ */
+ public function getValueFlags(string $userId, string $app, string $key, bool $lazy = false): int;
+
+ /**
+ * Store a config key and its value in database
+ *
+ * If config key is already known with the exact same config value, the database is not updated.
+ * If config key is not supposed to be read during the boot of the cloud, it is advised to set it as lazy loaded.
+ *
+ * If config value was previously stored as sensitive or lazy loaded, status cannot be altered without using {@see deleteKey()} first
+ *
+ * @param string $userId id of the user
+ * @param string $app id of the app
+ * @param string $key config key
+ * @param string $value config value
+ * @param bool $sensitive if TRUE value will be hidden when listing config values.
+ * @param bool $lazy set config as lazy loaded
+ *
+ * @return bool TRUE if value was different, therefor updated in database
+ *
+ * @since 32.0.0
+ *
+ * @see IUserConfig for explanation about lazy loading
+ * @see setValueInt()
+ * @see setValueFloat()
+ * @see setValueBool()
+ * @see setValueArray()
+ */
+ public function setValueString(string $userId, string $app, string $key, string $value, bool $lazy = false, int $flags = 0): bool;
+
+ /**
+ * Store a config key and its value in database
+ *
+ * When handling huge value around and/or above 2,147,483,647, a debug log will be generated
+ * on 64bits system, as php int type reach its limit (and throw an exception) on 32bits when using huge numbers.
+ *
+ * When using huge numbers, it is advised to use {@see \OCP\Util::numericToNumber()} and {@see setValueString()}
+ *
+ * If config key is already known with the exact same config value, the database is not updated.
+ * If config key is not supposed to be read during the boot of the cloud, it is advised to set it as lazy loaded.
+ *
+ * If config value was previously stored as sensitive or lazy loaded, status cannot be altered without using {@see deleteKey()} first
+ *
+ * @param string $userId id of the user
+ * @param string $app id of the app
+ * @param string $key config key
+ * @param int $value config value
+ * @param bool $sensitive if TRUE value will be hidden when listing config values.
+ * @param bool $lazy set config as lazy loaded
+ *
+ * @return bool TRUE if value was different, therefor updated in database
+ *
+ * @since 32.0.0
+ *
+ * @see IUserConfig for explanation about lazy loading
+ * @see setValueString()
+ * @see setValueFloat()
+ * @see setValueBool()
+ * @see setValueArray()
+ */
+ public function setValueInt(string $userId, string $app, string $key, int $value, bool $lazy = false, int $flags = 0): bool;
+
+ /**
+ * Store a config key and its value in database.
+ *
+ * If config key is already known with the exact same config value, the database is not updated.
+ * If config key is not supposed to be read during the boot of the cloud, it is advised to set it as lazy loaded.
+ *
+ * If config value was previously stored as sensitive or lazy loaded, status cannot be altered without using {@see deleteKey()} first
+ *
+ * @param string $userId id of the user
+ * @param string $app id of the app
+ * @param string $key config key
+ * @param float $value config value
+ * @param bool $sensitive if TRUE value will be hidden when listing config values.
+ * @param bool $lazy set config as lazy loaded
+ *
+ * @return bool TRUE if value was different, therefor updated in database
+ *
+ * @since 32.0.0
+ *
+ * @see IUserConfig for explanation about lazy loading
+ * @see setValueString()
+ * @see setValueInt()
+ * @see setValueBool()
+ * @see setValueArray()
+ */
+ public function setValueFloat(string $userId, string $app, string $key, float $value, bool $lazy = false, int $flags = 0): bool;
+
+ /**
+ * Store a config key and its value in database
+ *
+ * If config key is already known with the exact same config value, the database is not updated.
+ * If config key is not supposed to be read during the boot of the cloud, it is advised to set it as lazy loaded.
+ *
+ * If config value was previously stored as lazy loaded, status cannot be altered without using {@see deleteKey()} first
+ *
+ * @param string $userId id of the user
+ * @param string $app id of the app
+ * @param string $key config key
+ * @param bool $value config value
+ * @param bool $lazy set config as lazy loaded
+ *
+ * @return bool TRUE if value was different, therefor updated in database
+ *
+ * @since 32.0.0
+ *
+ * @see IUserConfig for explanation about lazy loading
+ * @see setValueString()
+ * @see setValueInt()
+ * @see setValueFloat()
+ * @see setValueArray()
+ */
+ public function setValueBool(string $userId, string $app, string $key, bool $value, bool $lazy = false): bool;
+
+ /**
+ * Store a config key and its value in database
+ *
+ * If config key is already known with the exact same config value, the database is not updated.
+ * If config key is not supposed to be read during the boot of the cloud, it is advised to set it as lazy loaded.
+ *
+ * If config value was previously stored as sensitive or lazy loaded, status cannot be altered without using {@see deleteKey()} first
+ *
+ * @param string $userId id of the user
+ * @param string $app id of the app
+ * @param string $key config key
+ * @param array $value config value
+ * @param bool $sensitive if TRUE value will be hidden when listing config values.
+ * @param bool $lazy set config as lazy loaded
+ *
+ * @return bool TRUE if value was different, therefor updated in database
+ *
+ * @since 32.0.0
+ *
+ * @see IUserConfig for explanation about lazy loading
+ * @see setValueString()
+ * @see setValueInt()
+ * @see setValueFloat()
+ * @see setValueBool()
+ */
+ public function setValueArray(string $userId, string $app, string $key, array $value, bool $lazy = false, int $flags = 0): bool;
+
+ /**
+ * switch sensitive status of a config value
+ *
+ * **WARNING:** ignore lazy filtering, all config values are loaded from database
+ *
+ * @param string $userId id of the user
+ * @param string $app id of the app
+ * @param string $key config key
+ * @param bool $sensitive TRUE to set as sensitive, FALSE to unset
+ *
+ * @return bool TRUE if database update were necessary
+ *
+ * @since 32.0.0
+ */
+ public function updateSensitive(string $userId, string $app, string $key, bool $sensitive): bool;
+
+ /**
+ * switch sensitive loading status of a config key for all users
+ *
+ * **Warning:** heavy on resources, MUST only be used on occ command or migrations
+ *
+ * @param string $app id of the app
+ * @param string $key config key
+ * @param bool $sensitive TRUE to set as sensitive, FALSE to unset
+ *
+ * @since 32.0.0
+ */
+ public function updateGlobalSensitive(string $app, string $key, bool $sensitive): void;
+
+
+ /**
+ * switch indexed status of a config value
+ *
+ * **WARNING:** ignore lazy filtering, all config values are loaded from database
+ *
+ * @param string $userId id of the user
+ * @param string $app id of the app
+ * @param string $key config key
+ * @param bool $indexed TRUE to set as indexed, FALSE to unset
+ *
+ * @return bool TRUE if database update were necessary
+ *
+ * @since 32.0.0
+ */
+ public function updateIndexed(string $userId, string $app, string $key, bool $indexed): bool;
+
+ /**
+ * switch sensitive loading status of a config key for all users
+ *
+ * **Warning:** heavy on resources, MUST only be used on occ command or migrations
+ *
+ * @param string $app id of the app
+ * @param string $key config key
+ * @param bool $indexed TRUE to set as indexed, FALSE to unset
+ *
+ * @since 32.0.0
+ */
+ public function updateGlobalIndexed(string $app, string $key, bool $indexed): void;
+
+ /**
+ * switch lazy loading status of a config value
+ *
+ * @param string $userId id of the user
+ * @param string $app id of the app
+ * @param string $key config key
+ * @param bool $lazy TRUE to set as lazy loaded, FALSE to unset
+ *
+ * @return bool TRUE if database update was necessary
+ *
+ * @since 32.0.0
+ */
+ public function updateLazy(string $userId, string $app, string $key, bool $lazy): bool;
+
+ /**
+ * switch lazy loading status of a config key for all users
+ *
+ * **Warning:** heavy on resources, MUST only be used on occ command or migrations
+ *
+ * @param string $app id of the app
+ * @param string $key config key
+ * @param bool $lazy TRUE to set as lazy loaded, FALSE to unset
+ *
+ * @since 32.0.0
+ */
+ public function updateGlobalLazy(string $app, string $key, bool $lazy): void;
+
+ /**
+ * returns an array contains details about a config value
+ *
+ * ```
+ * [
+ * "app" => "myapp",
+ * "key" => "mykey",
+ * "value" => "its_value",
+ * "lazy" => false,
+ * "type" => 4,
+ * "typeString" => "string",
+ * 'sensitive' => true
+ * ]
+ * ```
+ *
+ * @param string $userId id of the user
+ * @param string $app id of the app
+ * @param string $key config key
+ *
+ * @return array
+ * @throws UnknownKeyException if config key is not known in database
+ *
+ * @since 32.0.0
+ */
+ public function getDetails(string $userId, string $app, string $key): array;
+
+ /**
+ * Delete single config key from database.
+ *
+ * @param string $userId id of the user
+ * @param string $app id of the app
+ * @param string $key config key
+ *
+ * @since 32.0.0
+ */
+ public function deleteUserConfig(string $userId, string $app, string $key): void;
+
+ /**
+ * Delete config values from all users linked to a specific config keys
+ *
+ * @param string $app id of the app
+ * @param string $key config key
+ *
+ * @since 32.0.0
+ */
+ public function deleteKey(string $app, string $key): void;
+
+ /**
+ * delete all config keys linked to an app
+ *
+ * @param string $app id of the app
+ *
+ * @since 32.0.0
+ */
+ public function deleteApp(string $app): void;
+
+ /**
+ * delete all config keys linked to a user
+ *
+ * @param string $userId id of the user
+ *
+ * @since 32.0.0
+ */
+ public function deleteAllUserConfig(string $userId): void;
+
+ /**
+ * Clear the cache for a single user
+ *
+ * The cache will be rebuilt only the next time a user config is requested.
+ *
+ * @param string $userId id of the user
+ * @param bool $reload set to TRUE to refill cache instantly after clearing it
+ *
+ * @since 32.0.0
+ */
+ public function clearCache(string $userId, bool $reload = false): void;
+
+ /**
+ * Clear the cache for all users.
+ * The cache will be rebuilt only the next time a user config is requested.
+ *
+ * @since 32.0.0
+ */
+ public function clearCacheAll(): void;
+}
diff --git a/lib/public/Config/Lexicon/Entry.php b/lib/public/Config/Lexicon/Entry.php
new file mode 100644
index 00000000000..0e6e664db36
--- /dev/null
+++ b/lib/public/Config/Lexicon/Entry.php
@@ -0,0 +1,250 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+namespace OCP\Config\Lexicon;
+
+use Closure;
+use OCP\AppFramework\Attribute\Consumable;
+use OCP\Config\ValueType;
+
+/**
+ * Model that represent config values within an app config lexicon.
+ *
+ * @see ILexicon
+ */
+#[Consumable(since: '32.0.0')]
+class Entry {
+ /** @since 32.0.0 */
+ public const RENAME_INVERT_BOOLEAN = 1;
+
+ private string $definition = '';
+ private ?string $default = null;
+
+ /**
+ * @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
+ * @param int $flags set flags
+ * @param string|null $rename previous config key to migrate config value from
+ * @param bool $deprecated set config key as deprecated
+ *
+ * @since 32.0.0
+ * @psalm-suppress PossiblyInvalidCast
+ * @psalm-suppress RiskyCast
+ */
+ public function __construct(
+ private readonly string $key,
+ private readonly ValueType $type,
+ private null|string|int|float|bool|array|Closure $defaultRaw = null,
+ string $definition = '',
+ private readonly bool $lazy = false,
+ private readonly int $flags = 0,
+ private readonly bool $deprecated = false,
+ 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;
+ }
+ }
+
+ /**
+ * returns the config key
+ *
+ * @return string config key
+ * @since 32.0.0
+ */
+ public function getKey(): string {
+ return $this->key;
+ }
+
+ /**
+ * get expected type for config value
+ *
+ * @return ValueType
+ * @since 32.0.0
+ */
+ public function getValueType(): ValueType {
+ return $this->type;
+ }
+
+ /**
+ * @param string $default
+ * @return string
+ * @since 32.0.0
+ */
+ private function convertFromString(string $default): string {
+ return $default;
+ }
+
+ /**
+ * @param int $default
+ * @return string
+ * @since 32.0.0
+ */
+ private function convertFromInt(int $default): string {
+ return (string)$default;
+ }
+
+ /**
+ * @param float $default
+ * @return string
+ * @since 32.0.0
+ */
+ private function convertFromFloat(float $default): string {
+ return (string)$default;
+ }
+
+ /**
+ * @param bool $default
+ * @return string
+ * @since 32.0.0
+ */
+ private function convertFromBool(bool $default): string {
+ return ($default) ? '1' : '0';
+ }
+
+ /**
+ * @param array $default
+ * @return string
+ * @since 32.0.0
+ */
+ private function convertFromArray(array $default): string {
+ return json_encode($default);
+ }
+
+ /**
+ * returns default value
+ *
+ * @return string|null NULL if no default is set
+ * @since 32.0.0
+ */
+ public function getDefault(Preset $preset): ?string {
+ if ($this->default !== null) {
+ return $this->default;
+ }
+
+ if ($this->defaultRaw === null) {
+ return null;
+ }
+
+ 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;
+ }
+
+ /**
+ * convert $entry into string, based on the expected type for config value
+ *
+ * @param string|int|float|bool|array $entry
+ *
+ * @return string
+ * @since 32.0.0
+ * @psalm-suppress PossiblyInvalidCast arrays are managed pre-cast
+ * @psalm-suppress RiskyCast
+ */
+ public function convertToString(string|int|float|bool|array $entry): string {
+ // in case $default is array but is not expected to be an array...
+ if ($this->getValueType() !== ValueType::ARRAY && is_array($entry)) {
+ $entry = json_encode($entry, JSON_THROW_ON_ERROR);
+ }
+
+ return match ($this->getValueType()) {
+ ValueType::MIXED => (string)$entry,
+ ValueType::STRING => $this->convertFromString((string)$entry),
+ ValueType::INT => $this->convertFromInt((int)$entry),
+ ValueType::FLOAT => $this->convertFromFloat((float)$entry),
+ ValueType::BOOL => $this->convertFromBool((bool)$entry),
+ ValueType::ARRAY => $this->convertFromArray((array)$entry)
+ };
+ }
+
+ /**
+ * returns definition
+ *
+ * @return string
+ * @since 32.0.0
+ */
+ public function getDefinition(): string {
+ return $this->definition;
+ }
+
+ /**
+ * returns if config key is set as lazy
+ *
+ * @see IAppConfig for details on lazy config values
+ * @return bool TRUE if config value is lazy
+ * @since 32.0.0
+ */
+ public function isLazy(): bool {
+ return $this->lazy;
+ }
+
+ /**
+ * returns flags
+ *
+ * @see IAppConfig for details on sensitive config values
+ * @return int bitflag about the config value
+ * @since 32.0.0
+ */
+ public function getFlags(): int {
+ return $this->flags;
+ }
+
+ /**
+ * @param int $flag
+ *
+ * @return bool TRUE is config value bitflag contains $flag
+ * @since 32.0.0
+ */
+ public function isFlagged(int $flag): bool {
+ return (($flag & $this->getFlags()) === $flag);
+ }
+
+ /**
+ * should be called/used only during migration/upgrade.
+ * link to an old config key.
+ *
+ * @return string|null not NULL if value can be imported from a previous key
+ * @since 32.0.0
+ */
+ public function getRename(): ?string {
+ return $this->rename;
+ }
+
+ /**
+ * @since 32.0.0
+ * @return bool TRUE if $option was set during the creation of the entry.
+ */
+ public function hasOption(int $option): bool {
+ return (($option & $this->options) !== 0);
+ }
+
+ /**
+ * returns if config key is set as deprecated
+ *
+ * @return bool TRUE if config si deprecated
+ * @since 32.0.0
+ */
+ public function isDeprecated(): bool {
+ return $this->deprecated;
+ }
+}
diff --git a/lib/public/Config/Lexicon/ILexicon.php b/lib/public/Config/Lexicon/ILexicon.php
new file mode 100644
index 00000000000..05bf5967f24
--- /dev/null
+++ b/lib/public/Config/Lexicon/ILexicon.php
@@ -0,0 +1,45 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+namespace OCP\Config\Lexicon;
+
+use OCP\AppFramework\Attribute\Implementable;
+
+/**
+ * This interface needs to be implemented if you want to define a config lexicon for your application
+ * The config lexicon is used to avoid conflicts and problems when storing/retrieving config values
+ */
+#[Implementable(since: '32.0.0')]
+interface ILexicon {
+
+ /**
+ * Define the expected behavior when using config
+ * keys not set within your application config lexicon.
+ *
+ * @return Strictness
+ * @since 32.0.0
+ *@see Strictness
+ */
+ public function getStrictness(): Strictness;
+
+ /**
+ * define the list of entries of your application config lexicon, related to AppConfig.
+ *
+ * @return Entry[]
+ * @since 32.0.0
+ */
+ public function getAppConfigs(): array;
+
+ /**
+ * define the list of entries of your application config lexicon, related to UserPreferences.
+ *
+ * @return Entry[]
+ * @since 32.0.0
+ */
+ public function getUserConfigs(): array;
+}
diff --git a/lib/public/Config/Lexicon/Preset.php b/lib/public/Config/Lexicon/Preset.php
new file mode 100644
index 00000000000..6dac8736131
--- /dev/null
+++ b/lib/public/Config/Lexicon/Preset.php
@@ -0,0 +1,50 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+namespace OCP\Config\Lexicon;
+
+use OCP\AppFramework\Attribute\Consumable;
+
+/**
+ * list of preset to handle the default behavior of the instance
+ *
+ * @see Entry::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::UNIVERSITY** - Education, large size
+ * - **Preset::SCHOOL** - Eduction, small/medium size
+ * - **Preset::CLUB** - Club/Association
+ * - **Preset::FAMILY** - Family
+ * - **Preset::PRIVATE** - Private
+ */
+#[Consumable(since: '32.0.0')]
+enum Preset: int {
+ /** @since 32.0.0 */
+ case LARGE = 9;
+ /** @since 32.0.0 */
+ case MEDIUM = 8;
+ /** @since 32.0.0 */
+ case SMALL = 7;
+ /** @since 32.0.0 */
+ case SHARED = 6;
+ /** @since 32.0.0 */
+ case UNIVERSITY = 5;
+ /** @since 32.0.0 */
+ case SCHOOL = 4;
+ /** @since 32.0.0 */
+ case CLUB = 3;
+ /** @since 32.0.0 */
+ case FAMILY = 2;
+ /** @since 32.0.0 */
+ case PRIVATE = 1;
+ /** @since 32.0.0 */
+ case NONE = 0;
+}
diff --git a/lib/public/Config/Lexicon/Strictness.php b/lib/public/Config/Lexicon/Strictness.php
new file mode 100644
index 00000000000..8136499cb3e
--- /dev/null
+++ b/lib/public/Config/Lexicon/Strictness.php
@@ -0,0 +1,31 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+namespace OCP\Config\Lexicon;
+
+use OCP\AppFramework\Attribute\Consumable;
+
+/**
+ * Strictness regarding using not-listed config keys
+ *
+ * - **Strictness::IGNORE** - fully ignore
+ * - **Strictness::NOTICE** - ignore and report
+ * - **Strictness::WARNING** - silently block (returns $default) and report
+ * - **Strictness::EXCEPTION** - block (throws exception) and report
+ */
+#[Consumable(since: '32.0.0')]
+enum Strictness {
+ /** @since 32.0.0 */
+ case IGNORE; // fully ignore
+ /** @since 32.0.0 */
+ case NOTICE; // ignore and report
+ /** @since 32.0.0 */
+ case WARNING; // silently block (returns $default) and report
+ /** @since 32.0.0 */
+ case EXCEPTION; // block (throws exception) and report
+}
diff --git a/lib/public/Config/ValueType.php b/lib/public/Config/ValueType.php
new file mode 100644
index 00000000000..32c734af32b
--- /dev/null
+++ b/lib/public/Config/ValueType.php
@@ -0,0 +1,117 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+namespace OCP\Config;
+
+use OCP\AppFramework\Attribute\Consumable;
+use OCP\Config\Exceptions\IncorrectTypeException;
+use OCP\IAppConfig;
+use UnhandledMatchError;
+
+/**
+ * Listing of available value type for typed config value
+ */
+#[Consumable(since: '32.0.0')]
+enum ValueType: int {
+ /**
+ * @since 32.0.0
+ */
+ case MIXED = 0;
+ /**
+ * @since 32.0.0
+ */
+ case STRING = 1;
+ /**
+ * @since 32.0.0
+ */
+ case INT = 2;
+ /**
+ * @since 32.0.0
+ */
+ case FLOAT = 3;
+ /**
+ * @since 32.0.0
+ */
+ case BOOL = 4;
+ /**
+ * @since 32.0.0
+ */
+ case ARRAY = 5;
+
+ /**
+ * get ValueType from string
+ *
+ * @param string $definition
+ *
+ * @return self
+ * @throws IncorrectTypeException
+ *
+ * @since 32.0.0
+ */
+ public static function fromStringDefinition(string $definition): self {
+ try {
+ return match ($definition) {
+ 'mixed' => self::MIXED,
+ 'string' => self::STRING,
+ 'int' => self::INT,
+ 'float' => self::FLOAT,
+ 'bool' => self::BOOL,
+ 'array' => self::ARRAY
+ };
+ } catch (\UnhandledMatchError) {
+ throw new IncorrectTypeException('unknown string definition');
+ }
+ }
+
+ /**
+ * get string definition for current enum value
+ *
+ * @return string
+ * @throws IncorrectTypeException
+ *
+ * @since 32.0.0
+ */
+ public function getDefinition(): string {
+ try {
+ return match ($this) {
+ self::MIXED => 'mixed',
+ self::STRING => 'string',
+ self::INT => 'int',
+ self::FLOAT => 'float',
+ self::BOOL => 'bool',
+ self::ARRAY => 'array',
+ };
+ } catch (UnhandledMatchError) {
+ throw new IncorrectTypeException('unknown type definition ' . $this->value);
+ }
+ }
+
+ /**
+ * get corresponding AppConfig flag value
+ *
+ * @return int
+ * @throws IncorrectTypeException
+ *
+ * @since 32.0.0
+ */
+ public function toAppConfigFlag(): int {
+ try {
+ return match ($this) {
+ self::MIXED => IAppConfig::VALUE_MIXED,
+ self::STRING => IAppConfig::VALUE_STRING,
+ self::INT => IAppConfig::VALUE_INT,
+ self::FLOAT => IAppConfig::VALUE_FLOAT,
+ self::BOOL => IAppConfig::VALUE_BOOL,
+ self::ARRAY => IAppConfig::VALUE_ARRAY,
+ };
+ } catch (UnhandledMatchError) {
+ throw new IncorrectTypeException('unknown type definition ' . $this->value);
+ }
+ }
+
+}
diff --git a/lib/unstable/Config/Exceptions/IncorrectTypeException.php b/lib/unstable/Config/Exceptions/IncorrectTypeException.php
index 274c95d732a..6b91959071a 100644
--- a/lib/unstable/Config/Exceptions/IncorrectTypeException.php
+++ b/lib/unstable/Config/Exceptions/IncorrectTypeException.php
@@ -12,6 +12,8 @@ use Exception;
/**
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\Exceptions\IncorrectTypeException
+ * @see \OCP\Config\Exceptions\IncorrectTypeException
*/
class IncorrectTypeException extends Exception {
}
diff --git a/lib/unstable/Config/Exceptions/TypeConflictException.php b/lib/unstable/Config/Exceptions/TypeConflictException.php
index c6825b7efcf..808679ed873 100644
--- a/lib/unstable/Config/Exceptions/TypeConflictException.php
+++ b/lib/unstable/Config/Exceptions/TypeConflictException.php
@@ -12,6 +12,8 @@ use Exception;
/**
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\Exceptions\TypeConflictException
+ * @see \OCP\Config\Exceptions\TypeConflictException
*/
class TypeConflictException extends Exception {
}
diff --git a/lib/unstable/Config/Exceptions/UnknownKeyException.php b/lib/unstable/Config/Exceptions/UnknownKeyException.php
index a3ca88a7b72..744ce25e48d 100644
--- a/lib/unstable/Config/Exceptions/UnknownKeyException.php
+++ b/lib/unstable/Config/Exceptions/UnknownKeyException.php
@@ -12,6 +12,8 @@ use Exception;
/**
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\Exceptions\UnknownKeyException
+ * @see \OCP\Config\Exceptions\UnknownKeyException
*/
class UnknownKeyException extends Exception {
}
diff --git a/lib/unstable/Config/IUserConfig.php b/lib/unstable/Config/IUserConfig.php
index b9cbb65ad03..bffd6a96ebd 100644
--- a/lib/unstable/Config/IUserConfig.php
+++ b/lib/unstable/Config/IUserConfig.php
@@ -28,14 +28,20 @@ use NCU\Config\Exceptions\UnknownKeyException;
* during specific requests or actions to avoid loading the lazy values all the time.
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*/
interface IUserConfig {
/**
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*/
public const FLAG_SENSITIVE = 1; // value is sensitive
/**
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*/
public const FLAG_INDEXED = 2; // value should be indexed
@@ -50,6 +56,8 @@ interface IUserConfig {
* @return list<string> list of userIds
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*/
public function getUserIds(string $appId = ''): array;
@@ -64,6 +72,8 @@ interface IUserConfig {
* @return list<string> list of app ids
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*/
public function getApps(string $userId): array;
@@ -79,6 +89,8 @@ interface IUserConfig {
* @return list<string> list of stored config keys
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*/
public function getKeys(string $userId, string $app): array;
@@ -93,6 +105,8 @@ interface IUserConfig {
* @return bool TRUE if key exists
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*/
public function hasKey(string $userId, string $app, string $key, ?bool $lazy = false): bool;
@@ -108,6 +122,8 @@ interface IUserConfig {
* @throws UnknownKeyException if config key is not known
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*/
public function isSensitive(string $userId, string $app, string $key, ?bool $lazy = false): bool;
@@ -128,6 +144,8 @@ interface IUserConfig {
* @throws UnknownKeyException if config key is not known
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*/
public function isIndexed(string $userId, string $app, string $key, ?bool $lazy = false): bool;
@@ -145,6 +163,8 @@ interface IUserConfig {
* @see IUserConfig for details about lazy loading
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*/
public function isLazy(string $userId, string $app, string $key): bool;
@@ -162,6 +182,8 @@ interface IUserConfig {
* @return array<string, string|int|float|bool|array> [key => value]
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*/
public function getValues(string $userId, string $app, string $prefix = '', bool $filtered = false): array;
@@ -177,6 +199,8 @@ interface IUserConfig {
* @return array<string, string|int|float|bool|array> [key => value]
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*/
public function getAllValues(string $userId, bool $filtered = false): array;
@@ -192,6 +216,9 @@ interface IUserConfig {
* @return array<string, string|int|float|bool|array> [appId => value]
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
+ * @psalm-suppress DeprecatedClass
*/
public function getValuesByApps(string $userId, string $key, bool $lazy = false, ?ValueType $typedAs = null): array;
@@ -209,6 +236,9 @@ interface IUserConfig {
* @return array<string, string|int|float|bool|array> [userId => value]
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
+ * @psalm-suppress DeprecatedClass
*/
public function getValuesByUsers(string $app, string $key, ?ValueType $typedAs = null, ?array $userIds = null): array;
@@ -226,6 +256,8 @@ interface IUserConfig {
* @return Generator<string>
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*/
public function searchUsersByValueString(string $app, string $key, string $value, bool $caseInsensitive = false): Generator;
@@ -242,6 +274,8 @@ interface IUserConfig {
* @return Generator<string>
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*/
public function searchUsersByValueInt(string $app, string $key, int $value): Generator;
@@ -258,6 +292,8 @@ interface IUserConfig {
* @return Generator<string>
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*/
public function searchUsersByValues(string $app, string $key, array $values): Generator;
@@ -274,6 +310,8 @@ interface IUserConfig {
* @return Generator<string>
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*/
public function searchUsersByValueBool(string $app, string $key, bool $value): Generator;
@@ -291,6 +329,8 @@ interface IUserConfig {
* @return string stored config value or $default if not set in database
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*
* @see IUserConfig for explanation about lazy loading
* @see getValueInt()
@@ -314,6 +354,8 @@ interface IUserConfig {
* @return int stored config value or $default if not set in database
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*
* @see IUserConfig for explanation about lazy loading
* @see getValueString()
@@ -337,6 +379,8 @@ interface IUserConfig {
* @return float stored config value or $default if not set in database
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*
* @see IUserConfig for explanation about lazy loading
* @see getValueString()
@@ -360,6 +404,8 @@ interface IUserConfig {
* @return bool stored config value or $default if not set in database
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*
* @see IUserPrefences for explanation about lazy loading
* @see getValueString()
@@ -383,6 +429,8 @@ interface IUserConfig {
* @return array stored config value or $default if not set in database
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*
* @see IUserConfig for explanation about lazy loading
* @see getValueString()
@@ -408,6 +456,9 @@ interface IUserConfig {
* @throws IncorrectTypeException if config value type is not known
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
+ * @psalm-suppress DeprecatedClass
*/
public function getValueType(string $userId, string $app, string $key, ?bool $lazy = null): ValueType;
@@ -427,6 +478,8 @@ interface IUserConfig {
* @throws IncorrectTypeException if config value type is not known
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*/
public function getValueFlags(string $userId, string $app, string $key, bool $lazy = false): int;
@@ -448,6 +501,8 @@ interface IUserConfig {
* @return bool TRUE if value was different, therefor updated in database
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*
* @see IUserConfig for explanation about lazy loading
* @see setValueInt()
@@ -480,6 +535,8 @@ interface IUserConfig {
* @return bool TRUE if value was different, therefor updated in database
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*
* @see IUserConfig for explanation about lazy loading
* @see setValueString()
@@ -507,6 +564,8 @@ interface IUserConfig {
* @return bool TRUE if value was different, therefor updated in database
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*
* @see IUserConfig for explanation about lazy loading
* @see setValueString()
@@ -533,6 +592,8 @@ interface IUserConfig {
* @return bool TRUE if value was different, therefor updated in database
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*
* @see IUserConfig for explanation about lazy loading
* @see setValueString()
@@ -560,6 +621,8 @@ interface IUserConfig {
* @return bool TRUE if value was different, therefor updated in database
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*
* @see IUserConfig for explanation about lazy loading
* @see setValueString()
@@ -582,6 +645,8 @@ interface IUserConfig {
* @return bool TRUE if database update were necessary
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*/
public function updateSensitive(string $userId, string $app, string $key, bool $sensitive): bool;
@@ -595,6 +660,8 @@ interface IUserConfig {
* @param bool $sensitive TRUE to set as sensitive, FALSE to unset
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*/
public function updateGlobalSensitive(string $app, string $key, bool $sensitive): void;
@@ -612,6 +679,8 @@ interface IUserConfig {
* @return bool TRUE if database update were necessary
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*/
public function updateIndexed(string $userId, string $app, string $key, bool $indexed): bool;
@@ -625,6 +694,8 @@ interface IUserConfig {
* @param bool $indexed TRUE to set as indexed, FALSE to unset
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*/
public function updateGlobalIndexed(string $app, string $key, bool $indexed): void;
@@ -639,6 +710,8 @@ interface IUserConfig {
* @return bool TRUE if database update was necessary
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*/
public function updateLazy(string $userId, string $app, string $key, bool $lazy): bool;
@@ -652,6 +725,8 @@ interface IUserConfig {
* @param bool $lazy TRUE to set as lazy loaded, FALSE to unset
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*/
public function updateGlobalLazy(string $app, string $key, bool $lazy): void;
@@ -678,6 +753,8 @@ interface IUserConfig {
* @throws UnknownKeyException if config key is not known in database
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*/
public function getDetails(string $userId, string $app, string $key): array;
@@ -689,6 +766,8 @@ interface IUserConfig {
* @param string $key config key
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*/
public function deleteUserConfig(string $userId, string $app, string $key): void;
@@ -699,6 +778,8 @@ interface IUserConfig {
* @param string $key config key
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*/
public function deleteKey(string $app, string $key): void;
@@ -708,6 +789,8 @@ interface IUserConfig {
* @param string $app id of the app
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*/
public function deleteApp(string $app): void;
@@ -717,6 +800,8 @@ interface IUserConfig {
* @param string $userId id of the user
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*/
public function deleteAllUserConfig(string $userId): void;
@@ -729,6 +814,8 @@ interface IUserConfig {
* @param bool $reload set to TRUE to refill cache instantly after clearing it
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*/
public function clearCache(string $userId, bool $reload = false): void;
@@ -737,6 +824,8 @@ interface IUserConfig {
* The cache will be rebuilt only the next time a user config is requested.
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\IUserConfig
+ * @see \OCP\Config\IUserConfig
*/
public function clearCacheAll(): void;
}
diff --git a/lib/unstable/Config/Lexicon/ConfigLexiconEntry.php b/lib/unstable/Config/Lexicon/ConfigLexiconEntry.php
index 068d89ce764..2587cd52c01 100644
--- a/lib/unstable/Config/Lexicon/ConfigLexiconEntry.php
+++ b/lib/unstable/Config/Lexicon/ConfigLexiconEntry.php
@@ -16,9 +16,16 @@ use NCU\Config\ValueType;
*
* @see IConfigLexicon
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\Lexicon\Entry
+ * @see \OCP\Config\Lexicon\Entry
+ * @psalm-suppress DeprecatedClass
*/
class ConfigLexiconEntry {
- /** @experimental 32.0.0 */
+ /**
+ * @experimental 32.0.0
+ * @deprecated 32.0.0 use \OCP\Config\Lexicon\Entry
+ * @see \OCP\Config\Lexicon\Entry
+ */
public const RENAME_INVERT_BOOLEAN = 1;
private string $definition = '';
@@ -34,6 +41,8 @@ class ConfigLexiconEntry {
* @param bool $deprecated set config key as deprecated
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\Lexicon\Entry
+ * @see \OCP\Config\Lexicon\Entry
* @psalm-suppress PossiblyInvalidCast
* @psalm-suppress RiskyCast
*/
@@ -64,6 +73,8 @@ class ConfigLexiconEntry {
*
* @return string config key
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\Lexicon\Entry
+ * @see \OCP\Config\Lexicon\Entry
*/
public function getKey(): string {
return $this->key;
@@ -74,6 +85,9 @@ class ConfigLexiconEntry {
*
* @return ValueType
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\Lexicon\Entry
+ * @see \OCP\Config\Lexicon\Entry
+ * @psalm-suppress DeprecatedClass
*/
public function getValueType(): ValueType {
return $this->type;
@@ -83,6 +97,8 @@ class ConfigLexiconEntry {
* @param string $default
* @return string
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\Lexicon\Entry
+ * @see \OCP\Config\Lexicon\Entry
*/
private function convertFromString(string $default): string {
return $default;
@@ -92,6 +108,8 @@ class ConfigLexiconEntry {
* @param int $default
* @return string
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\Lexicon\Entry
+ * @see \OCP\Config\Lexicon\Entry
*/
private function convertFromInt(int $default): string {
return (string)$default;
@@ -101,6 +119,8 @@ class ConfigLexiconEntry {
* @param float $default
* @return string
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\Lexicon\Entry
+ * @see \OCP\Config\Lexicon\Entry
*/
private function convertFromFloat(float $default): string {
return (string)$default;
@@ -110,6 +130,8 @@ class ConfigLexiconEntry {
* @param bool $default
* @return string
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\Lexicon\Entry
+ * @see \OCP\Config\Lexicon\Entry
*/
private function convertFromBool(bool $default): string {
return ($default) ? '1' : '0';
@@ -119,6 +141,8 @@ class ConfigLexiconEntry {
* @param array $default
* @return string
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\Lexicon\Entry
+ * @see \OCP\Config\Lexicon\Entry
*/
private function convertFromArray(array $default): string {
return json_encode($default);
@@ -129,6 +153,10 @@ class ConfigLexiconEntry {
*
* @return string|null NULL if no default is set
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\Lexicon\Entry
+ * @see \OCP\Config\Lexicon\Entry
+ * @psalm-suppress DeprecatedClass
+ * @psalm-suppress DeprecatedMethod
*/
public function getDefault(Preset $preset): ?string {
if ($this->default !== null) {
@@ -157,8 +185,13 @@ class ConfigLexiconEntry {
*
* @return string
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\Lexicon\Entry
+ * @see \OCP\Config\Lexicon\Entry
* @psalm-suppress PossiblyInvalidCast arrays are managed pre-cast
* @psalm-suppress RiskyCast
+ * @psalm-suppress DeprecatedClass
+ * @psalm-suppress DeprecatedMethod
+ * @psalm-suppress DeprecatedConstant
*/
public function convertToString(string|int|float|bool|array $entry): string {
// in case $default is array but is not expected to be an array...
@@ -181,6 +214,8 @@ class ConfigLexiconEntry {
*
* @return string
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\Lexicon\Entry
+ * @see \OCP\Config\Lexicon\Entry
*/
public function getDefinition(): string {
return $this->definition;
@@ -192,6 +227,8 @@ class ConfigLexiconEntry {
* @see IAppConfig for details on lazy config values
* @return bool TRUE if config value is lazy
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\Lexicon\Entry
+ * @see \OCP\Config\Lexicon\Entry
*/
public function isLazy(): bool {
return $this->lazy;
@@ -203,6 +240,8 @@ class ConfigLexiconEntry {
* @see IAppConfig for details on sensitive config values
* @return int bitflag about the config value
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\Lexicon\Entry
+ * @see \OCP\Config\Lexicon\Entry
*/
public function getFlags(): int {
return $this->flags;
@@ -213,6 +252,9 @@ class ConfigLexiconEntry {
*
* @return bool TRUE is config value bitflag contains $flag
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\Lexicon\Entry
+ * @see \OCP\Config\Lexicon\Entry
+ * @psalm-suppress DeprecatedMethod
*/
public function isFlagged(int $flag): bool {
return (($flag & $this->getFlags()) === $flag);
@@ -224,6 +266,8 @@ class ConfigLexiconEntry {
*
* @return string|null not NULL if value can be imported from a previous key
* @experimental 32.0.0
+ * @deprecated 32.0.0 use \OCP\Config\Lexicon\Entry
+ * @see \OCP\Config\Lexicon\Entry
*/
public function getRename(): ?string {
return $this->rename;
@@ -231,6 +275,8 @@ class ConfigLexiconEntry {
/**
* @experimental 32.0.0
+ * @deprecated 32.0.0 use \OCP\Config\Lexicon\Entry
+ * @see \OCP\Config\Lexicon\Entry
* @return bool TRUE if $option was set during the creation of the entry.
*/
public function hasOption(int $option): bool {
@@ -242,6 +288,8 @@ class ConfigLexiconEntry {
*
* @return bool TRUE if config si deprecated
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\Lexicon\Entry
+ * @see \OCP\Config\Lexicon\Entry
*/
public function isDeprecated(): bool {
return $this->deprecated;
diff --git a/lib/unstable/Config/Lexicon/ConfigLexiconStrictness.php b/lib/unstable/Config/Lexicon/ConfigLexiconStrictness.php
index a6490675c8a..2ccd7bd265c 100644
--- a/lib/unstable/Config/Lexicon/ConfigLexiconStrictness.php
+++ b/lib/unstable/Config/Lexicon/ConfigLexiconStrictness.php
@@ -17,14 +17,32 @@ namespace NCU\Config\Lexicon;
* - **ConfigLexiconStrictness::EXCEPTION** - block (throws exception) and report
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\Lexicon\Strictness
+ * @see \OCP\Config\Lexicon\Strictness
*/
enum ConfigLexiconStrictness {
- /** @experimental 31.0.0 */
+ /**
+ * @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\Lexicon\Strictness
+ * @see \OCP\Config\Lexicon\Strictness
+ */
case IGNORE; // fully ignore
- /** @experimental 31.0.0 */
+ /**
+ * @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\Lexicon\Strictness
+ * @see \OCP\Config\Lexicon\Strictness
+ */
case NOTICE; // ignore and report
- /** @experimental 31.0.0 */
+ /**
+ * @deprecated 32.0.0 use \OCP\Config\Lexicon\Strictness
+ * @see \OCP\Config\Lexicon\Strictness
+ * @experimental 31.0.0
+ */
case WARNING; // silently block (returns $default) and report
- /** @experimental 31.0.0 */
+ /**
+ * @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\Lexicon\Strictness
+ * @see \OCP\Config\Lexicon\Strictness
+ */
case EXCEPTION; // block (throws exception) and report
}
diff --git a/lib/unstable/Config/Lexicon/IConfigLexicon.php b/lib/unstable/Config/Lexicon/IConfigLexicon.php
index 3fedb5f1f08..74dc19e7728 100644
--- a/lib/unstable/Config/Lexicon/IConfigLexicon.php
+++ b/lib/unstable/Config/Lexicon/IConfigLexicon.php
@@ -13,6 +13,8 @@ namespace NCU\Config\Lexicon;
* The config lexicon is used to avoid conflicts and problems when storing/retrieving config values
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\Lexicon\ILexicon
+ * @see \OCP\Config\Lexicon\ILexicon
*/
interface IConfigLexicon {
@@ -20,9 +22,12 @@ interface IConfigLexicon {
* Define the expected behavior when using config
* keys not set within your application config lexicon.
*
- * @see ConfigLexiconStrictness
* @return ConfigLexiconStrictness
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\Lexicon\ILexicon
+ * @see \OCP\Config\Lexicon\ILexicon
+ * @psalm-suppress DeprecatedClass
+ *
*/
public function getStrictness(): ConfigLexiconStrictness;
@@ -31,6 +36,9 @@ interface IConfigLexicon {
*
* @return ConfigLexiconEntry[]
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\Lexicon\ILexicon
+ * @see \OCP\Config\Lexicon\ILexicon
+ * @psalm-suppress DeprecatedClass
*/
public function getAppConfigs(): array;
@@ -39,6 +47,9 @@ interface IConfigLexicon {
*
* @return ConfigLexiconEntry[]
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\Lexicon\ILexicon
+ * @see \OCP\Config\Lexicon\ILexicon
+ * @psalm-suppress DeprecatedClass
*/
public function getUserConfigs(): array;
}
diff --git a/lib/unstable/Config/Lexicon/Preset.php b/lib/unstable/Config/Lexicon/Preset.php
index 92a6fd8cbfa..b2a98ed5647 100644
--- a/lib/unstable/Config/Lexicon/Preset.php
+++ b/lib/unstable/Config/Lexicon/Preset.php
@@ -23,24 +23,53 @@ namespace NCU\Config\Lexicon;
* - **Preset::PRIVATE** - Private
*
* @experimental 32.0.0
+ * @deprecated 32.0.0 use \OCP\Config\Lexicon\Preset
+ * @see \OCP\Config\Lexicon\Preset
*/
enum Preset: int {
- /** @experimental 32.0.0 */
+ /**
+ * @experimental 32.0.0
+ * @deprecated 32.0.0
+ */
case LARGE = 8;
- /** @experimental 32.0.0 */
+ /**
+ * @experimental 32.0.0
+ * @deprecated 32.0.0
+ */
case MEDIUM = 7;
- /** @experimental 32.0.0 */
+ /**
+ * @experimental 32.0.0
+ * @deprecated 32.0.0
+ */
case SMALL = 6;
- /** @experimental 32.0.0 */
+ /**
+ * @experimental 32.0.0
+ * @deprecated 32.0.0
+ */
case SHARED = 5;
- /** @experimental 32.0.0 */
+ /**
+ * @experimental 32.0.0
+ * @deprecated 32.0.0
+ */
case EDUCATION = 4;
- /** @experimental 32.0.0 */
+ /**
+ * @experimental 32.0.0
+ * @deprecated 32.0.0
+ */
case CLUB = 3;
- /** @experimental 32.0.0 */
+ /**
+ * @experimental 32.0.0
+ * @deprecated 32.0.0
+ */
case FAMILY = 2;
- /** @experimental 32.0.0 */
+ /**
+ * @experimental 32.0.0
+ * @deprecated 32.0.0
+ */
case PRIVATE = 1;
- /** @experimental 32.0.0 */
+ /**
+ * @experimental 32.0.0
+ * @deprecated 32.0.0
+ */
case NONE = 0;
}
diff --git a/lib/unstable/Config/ValueType.php b/lib/unstable/Config/ValueType.php
index b1181674953..73714640445 100644
--- a/lib/unstable/Config/ValueType.php
+++ b/lib/unstable/Config/ValueType.php
@@ -16,30 +16,44 @@ use UnhandledMatchError;
* Listing of available value type for typed config value
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\ValueType
+ * @see \OCP\Config\ValueType
*/
enum ValueType: int {
/**
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\ValueType
+ * @see \OCP\Config\ValueType
*/
case MIXED = 0;
/**
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\ValueType
+ * @see \OCP\Config\ValueType
*/
case STRING = 1;
/**
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\ValueType
+ * @see \OCP\Config\ValueType
*/
case INT = 2;
/**
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\ValueType
+ * @see \OCP\Config\ValueType
*/
case FLOAT = 3;
/**
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\ValueType
+ * @see \OCP\Config\ValueType
*/
case BOOL = 4;
/**
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\ValueType
+ * @see \OCP\Config\ValueType
*/
case ARRAY = 5;
@@ -52,6 +66,10 @@ enum ValueType: int {
* @throws IncorrectTypeException
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\ValueType
+ * @see \OCP\Config\ValueType
+ * @psalm-suppress DeprecatedConstant
+ * @psalm-suppress DeprecatedClass
*/
public static function fromStringDefinition(string $definition): self {
try {
@@ -75,6 +93,10 @@ enum ValueType: int {
* @throws IncorrectTypeException
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\ValueType
+ * @see \OCP\Config\ValueType
+ * @psalm-suppress DeprecatedConstant
+ * @psalm-suppress DeprecatedClass
*/
public function getDefinition(): string {
try {
@@ -98,6 +120,10 @@ enum ValueType: int {
* @throws IncorrectTypeException
*
* @experimental 31.0.0
+ * @deprecated 32.0.0 use \OCP\Config\ValueType
+ * @see \OCP\Config\ValueType
+ * @psalm-suppress DeprecatedConstant
+ * @psalm-suppress DeprecatedClass
*/
public function toAppConfigFlag(): int {
try {