luci-base: prevent CBI map save on invalid values (#618)

Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
This commit is contained in:
Jo-Philipp Wich 2016-01-15 17:04:28 +01:00
parent eaf961fa70
commit 27281dca56

View file

@ -385,41 +385,45 @@ function Map.parse(self, readinput, ...)
Node.parse(self, ...) Node.parse(self, ...)
self:_run_hooks("on_save", "on_before_save") if self.save then
for i, config in ipairs(self.parsechain) do self:_run_hooks("on_save", "on_before_save")
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 for i, config in ipairs(self.parsechain) do
self.uci:commit(config) self.uci:save(config)
-- Refresh data because commit changes section names
self.uci:load(config)
end end
self:_run_hooks("on_commit", "on_after_commit", "on_before_apply") self:_run_hooks("on_after_save")
if self.apply_on_parse then if (not self.proceed and self.flow.autoapply) or luci.http.formvalue("cbi.apply") then
self.uci:apply(self.parsechain) self:_run_hooks("on_before_commit")
self:_run_hooks("on_apply", "on_after_apply") for i, config in ipairs(self.parsechain) do
else self.uci:commit(config)
-- This is evaluated by the dispatcher and delegated to the
-- template which in turn fires XHR to perform the actual -- Refresh data because commit changes section names
-- apply actions. self.uci:load(config)
self.apply_needed = true end
self:_run_hooks("on_commit", "on_after_commit", "on_before_apply")
if self.apply_on_parse then
self.uci:apply(self.parsechain)
self:_run_hooks("on_apply", "on_after_apply")
else
-- This is evaluated by the dispatcher and delegated to the
-- template which in turn fires XHR to perform the actual
-- apply actions.
self.apply_needed = true
end
-- Reparse sections
Node.parse(self, true)
end
for i, config in ipairs(self.parsechain) do
self.uci:unload(config)
end
if type(self.commit_handler) == "function" then
self:commit_handler(self:submitstate())
end end
-- Reparse sections
Node.parse(self, true)
end
for i, config in ipairs(self.parsechain) do
self.uci:unload(config)
end
if type(self.commit_handler) == "function" then
self:commit_handler(self:submitstate())
end end
if self.proceed then if not self.save then
self.state = FORM_INVALID
elseif self.proceed then
self.state = FORM_PROCEED self.state = FORM_PROCEED
elseif self.changed then elseif self.changed then
self.state = FORM_CHANGED self.state = FORM_CHANGED