1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
|
<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-only
*/
namespace NCU\Config\Lexicon;
use NCU\Config\ValueType;
/**
* Model that represent config values within an app config lexicon.
*
* @see IConfigLexicon
* @experimental 31.0.0
*/
class ConfigLexiconEntry {
private string $definition = '';
private ?string $default = null;
/**
* @param string $key config key
* @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 bool $deprecated set config key as deprecated
*
* @experimental 31.0.0
* @psalm-suppress PossiblyInvalidCast
* @psalm-suppress RiskyCast
*/
public function __construct(
private readonly string $key,
private readonly ValueType $type,
null|string|int|float|bool|array $default = null,
string $definition = '',
private readonly bool $lazy = false,
private readonly int $flags = 0,
private readonly bool $deprecated = false,
) {
if ($default !== null) {
// in case $default is array but is not expected to be an array...
$default = ($type !== ValueType::ARRAY && is_array($default)) ? json_encode($default) : $default;
$this->default = match ($type) {
ValueType::MIXED => (string)$default,
ValueType::STRING => $this->convertFromString((string)$default),
ValueType::INT => $this->convertFromInt((int)$default),
ValueType::FLOAT => $this->convertFromFloat((float)$default),
ValueType::BOOL => $this->convertFromBool((bool)$default),
ValueType::ARRAY => $this->convertFromArray((array)$default)
};
}
/** @psalm-suppress UndefinedClass */
if (\OC::$CLI) { // only store definition if ran from CLI
$this->definition = $definition;
}
}
/**
* @inheritDoc
*
* @return string config key
* @experimental 31.0.0
*/
public function getKey(): string {
return $this->key;
}
/**
* @inheritDoc
*
* @return ValueType
* @experimental 31.0.0
*/
public function getValueType(): ValueType {
return $this->type;
}
/**
* @param string $default
* @return string
* @experimental 31.0.0
*/
private function convertFromString(string $default): string {
return $default;
}
/**
* @param int $default
* @return string
* @experimental 31.0.0
*/
private function convertFromInt(int $default): string {
return (string)$default;
}
/**
* @param float $default
* @return string
* @experimental 31.0.0
*/
private function convertFromFloat(float $default): string {
return (string)$default;
}
/**
* @param bool $default
* @return string
* @experimental 31.0.0
*/
private function convertFromBool(bool $default): string {
return ($default) ? '1' : '0';
}
/**
* @param array $default
* @return string
* @experimental 31.0.0
*/
private function convertFromArray(array $default): string {
return json_encode($default);
}
/**
* @inheritDoc
*
* @return string|null NULL if no default is set
* @experimental 31.0.0
*/
public function getDefault(): ?string {
return $this->default;
}
/**
* @inheritDoc
*
* @return string
* @experimental 31.0.0
*/
public function getDefinition(): string {
return $this->definition;
}
/**
* @inheritDoc
*
* @see IAppConfig for details on lazy config values
* @return bool TRUE if config value is lazy
* @experimental 31.0.0
*/
public function isLazy(): bool {
return $this->lazy;
}
/**
* @inheritDoc
*
* @see IAppConfig for details on sensitive config values
* @return int bitflag about the config value
* @experimental 31.0.0
*/
public function getFlags(): int {
return $this->flags;
}
/**
* @param int $flag
*
* @return bool TRUE is config value bitflag contains $flag
* @experimental 31.0.0
*/
public function isFlagged(int $flag): bool {
return (($flag & $this->getFlags()) === $flag);
}
/**
* @inheritDoc
*
* @return bool TRUE if config si deprecated
* @experimental 31.0.0
*/
public function isDeprecated(): bool {
return $this->deprecated;
}
}
|