luci-base: break circular luci.config <> luci.model.uci dependency
[project/luci.git] / modules / luci-base / luasrc / cbi.lua
index 4dc1f2a..4728642 100644 (file)
@@ -388,21 +388,21 @@ function Map.parse(self, readinput, ...)
 
        if self.save then
                self:_run_hooks("on_save", "on_before_save")
+               local i, config
                for i, config in ipairs(self.parsechain) do
                        self.uci:save(config)
                end
                self:_run_hooks("on_after_save")
                if (not self.proceed and self.flow.autoapply) or luci.http.formvalue("cbi.apply") then
                        self:_run_hooks("on_before_commit")
-                       for i, config in ipairs(self.parsechain) do
-                               self.uci:commit(config)
-
-                               -- Refresh data because commit changes section names
-                               self.uci:load(config)
+                       if self.apply_on_parse == false then
+                               for i, config in ipairs(self.parsechain) do
+                                       self.uci:commit(config)
+                               end
                        end
                        self:_run_hooks("on_commit", "on_after_commit", "on_before_apply")
-                       if self.apply_on_parse then
-                               self.uci:apply(self.parsechain)
+                       if self.apply_on_parse == true or self.apply_on_parse == false then
+                               self.uci:apply(self.apply_on_parse)
                                self:_run_hooks("on_apply", "on_after_apply")
                        else
                                -- This is evaluated by the dispatcher and delegated to the
@@ -1623,16 +1623,16 @@ function ListValue.__init__(self, ...)
        AbstractValue.__init__(self, ...)
        self.template  = "cbi/lvalue"
 
-       self.keylist = {}
-       self.vallist = {}
-       self.deplist = {}
        self.size   = 1
        self.widget = "select"
+
+       self:reset_values()
 end
 
 function ListValue.reset_values(self)
        self.keylist = {}
        self.vallist = {}
+       self.deplist = {}
 end
 
 function ListValue.value(self, key, val, ...)
@@ -1667,11 +1667,10 @@ function MultiValue.__init__(self, ...)
        AbstractValue.__init__(self, ...)
        self.template = "cbi/mvalue"
 
-       self.keylist = {}
-       self.vallist = {}
-
        self.widget = "checkbox"
        self.delimiter = " "
+
+       self:reset_values()
 end
 
 function MultiValue.render(self, ...)
@@ -1685,6 +1684,7 @@ end
 function MultiValue.reset_values(self)
        self.keylist = {}
        self.vallist = {}
+       self.deplist = {}
 end
 
 function MultiValue.value(self, key, val)
@@ -1759,8 +1759,7 @@ function DynamicList.__init__(self, ...)
        AbstractValue.__init__(self, ...)
        self.template  = "cbi/dynlist"
        self.cast = "table"
-       self.keylist = {}
-       self.vallist = {}
+       self:reset_values()
 end
 
 function DynamicList.reset_values(self)