if option:scheme('type') == "reference" or
option:scheme('type') == "enum"
then
- if not option:scheme('values') or
- not option:scheme('values')[val]
- then
- return false, option:error( ERR.OPT_BADVALUE(
- option, luci.util.serialize_data(
- luci.util.keys(option:scheme('values') or {})
- )
- ) )
+ local scheme_values = option:scheme('values') or { }
+ local config_values = ( type(val) == "table" and val or { val } )
+ for _, v in ipairs(config_values) do
+ if not scheme_values[v] then
+ return false, option:error( ERR.OPT_BADVALUE(
+ option, { v, luci.util.serialize_data(
+ luci.util.keys(scheme_values)
+ ) }
+ ) )
+ end
end
elseif option:scheme('type') == "list" then
if type(val) ~= "table" and STRICT_LIST_TYPE then
--- Get the value of this option.
-- @return The associated configuration value
function option.value(self)
- return self:config()
+ local v = self:config()
+ if v and self:scheme('multival') then
+ v = luci.util.split( v, "%s+", nil, true )
+ end
+ return v
end
--- Get the associated section information in scheme.
{ 'OPT_UNKNOWN', 'Option "%i" (%I) not found in scheme' },
{ 'OPT_REQUIRED', 'Required option "%i" has no value' },
- { 'OPT_BADVALUE', 'Value "%v" of option "%i" is not defined in enum %1' },
+ { 'OPT_BADVALUE', 'Value "%1" of option "%i" is not defined in enum %2' },
{ 'OPT_INVVALUE', 'Value "%v" of given option "%i" does not validate as datatype "%1"' },
{ 'OPT_NOTLIST', 'Option "%i" is defined as list but stored as plain value' },
{ 'OPT_DATATYPE', 'Option "%i" has unknown datatype "%1"' },
option datatype 'boolean'
option required false
+# Variable multiple values flag (schema.@variable.multival)
+config variable
+ option name 'multival'
+ option title 'Specify whether this variable may contain multiple values separated by space'
+ option section 'schema.variable'
+ option type 'variable'
+ option datatype 'boolean'
+ option required false
+
# Variable type (schema.@variable.type)
config variable
option name 'type'