aboutsummaryrefslogtreecommitdiffstats
path: root/lib/unstable/Config/Lexicon/ConfigLexiconEntry.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/unstable/Config/Lexicon/ConfigLexiconEntry.php')
-rw-r--r--lib/unstable/Config/Lexicon/ConfigLexiconEntry.php49
1 files changed, 44 insertions, 5 deletions
diff --git a/lib/unstable/Config/Lexicon/ConfigLexiconEntry.php b/lib/unstable/Config/Lexicon/ConfigLexiconEntry.php
index d7d781d8e26..068d89ce764 100644
--- a/lib/unstable/Config/Lexicon/ConfigLexiconEntry.php
+++ b/lib/unstable/Config/Lexicon/ConfigLexiconEntry.php
@@ -8,6 +8,7 @@ declare(strict_types=1);
namespace NCU\Config\Lexicon;
+use Closure;
use NCU\Config\ValueType;
/**
@@ -17,15 +18,19 @@ use NCU\Config\ValueType;
* @experimental 31.0.0
*/
class ConfigLexiconEntry {
+ /** @experimental 32.0.0 */
+ public const RENAME_INVERT_BOOLEAN = 1;
+
private string $definition = '';
private ?string $default = null;
/**
- * @param string $key config key
+ * @param string $key config key, can only contain alphanumerical chars and -._
* @param ValueType $type type of config value
* @param string $definition optional description of config key available when using occ command
* @param bool $lazy set config value as lazy
* @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
*
* @experimental 31.0.0
@@ -35,12 +40,19 @@ class ConfigLexiconEntry {
public function __construct(
private readonly string $key,
private readonly ValueType $type,
- private null|string|int|float|bool|array $defaultRaw = null,
+ private null|string|int|float|bool|array|Closure $defaultRaw = null,
string $definition = '',
private readonly bool $lazy = false,
private readonly int $flags = 0,
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;
@@ -118,15 +130,23 @@ class ConfigLexiconEntry {
* @return string|null NULL if no default is set
* @experimental 31.0.0
*/
- public function getDefault(): ?string {
+ public function getDefault(Preset $preset): ?string {
+ if ($this->default !== null) {
+ return $this->default;
+ }
+
if ($this->defaultRaw === null) {
return null;
}
- if ($this->default === null) {
- $this->default = $this->convertToString($this->defaultRaw);
+ if ($this->defaultRaw instanceof Closure) {
+ /** @psalm-suppress MixedAssignment we expect closure to returns string|int|float|bool|array */
+ $this->defaultRaw = ($this->defaultRaw)($preset);
}
+ /** @psalm-suppress MixedArgument closure should be managed previously */
+ $this->default = $this->convertToString($this->defaultRaw);
+
return $this->default;
}
@@ -199,6 +219,25 @@ class ConfigLexiconEntry {
}
/**
+ * 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
+ * @experimental 32.0.0
+ */
+ public function getRename(): ?string {
+ return $this->rename;
+ }
+
+ /**
+ * @experimental 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