cbi.lua: Implement Flag.validate function 526/head
authorChristian Schoenebeck <christian.schoenebeck@gmail.com>
Fri, 30 Oct 2015 17:42:38 +0000 (18:42 +0100)
committerChristian Schoenebeck <christian.schoenebeck@gmail.com>
Fri, 30 Oct 2015 17:42:38 +0000 (18:42 +0100)
cbi.lua
- Implement Flag.validate function to be overwritable
- rewritten if clause for easier reading ;-)

Signed-off-by: Christian Schoenebeck <christian.schoenebeck@gmail.com>
modules/luci-base/luasrc/cbi.lua

index a0090958f64ce0497503c76f3257de89b76aa5e9..1aa00eed9e8aeb2e1bc588203015033f5082fb5a 100644 (file)
@@ -1528,17 +1528,25 @@ function Flag.__init__(self, ...)
 end
 
 -- A flag can only have two states: set or unset
-function Flag.parse(self, section)
+function Flag.parse(self, section, novld)
        local fexists = self.map:formvalue(
                FEXIST_PREFIX .. self.config .. "." .. section .. "." .. self.option)
 
        if fexists then
                local fvalue = self:formvalue(section) and self.enabled or self.disabled
                local cvalue = self:cfgvalue(section)
-               if fvalue ~= self.default or (not self.optional and not self.rmempty) then
-                       self:write(section, fvalue)
-               else
+               local val_err
+               fvalue, val_err = self:validate(fvalue, section)
+               if not fvalue then
+                       if not novld then
+                               self:add_error(section, "invalid", val_err)
+                       end
+                       return
+               end
+               if fvalue == self.default and (self.optional or self.rmempty) then
                        self:remove(section)
+               else
+                       self:write(section, fvalue)
                end
                if (fvalue ~= cvalue) then self.section.changed = true end
        else
@@ -1550,7 +1558,9 @@ end
 function Flag.cfgvalue(self, section)
        return AbstractValue.cfgvalue(self, section) or self.default
 end
-
+function Flag.validate(self, value)
+       return value
+end
 
 --[[
 ListValue - A one-line value predefined in a list