From: Jo-Philipp Wich Date: Fri, 5 Sep 2008 23:21:37 +0000 (+0000) Subject: * luci/libs/cbi: improved error integration with uvl X-Git-Tag: 0.8.0~124 X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=898c45743aeda97da9e129d4d317d542eca3b4a4;p=project%2Fluci.git * luci/libs/cbi: improved error integration with uvl --- diff --git a/libs/cbi/luasrc/cbi.lua b/libs/cbi/luasrc/cbi.lua index ac8d8b5b3a..7cde3c9576 100644 --- a/libs/cbi/luasrc/cbi.lua +++ b/libs/cbi/luasrc/cbi.lua @@ -56,13 +56,14 @@ function load(cbimap, ...) assert(func, err) luci.i18n.loadc("cbi") + luci.i18n.loadc("uvl") local env = { translate=i18n.translate, translatef=i18n.translatef, arg={...} } - + setfenv(func, setmetatable(env, {__index = function(tbl, key) return rawget(tbl, key) or _M[key] or _G[key] @@ -86,26 +87,51 @@ local function _uvl_validate_section(node, name) luci.uvl.STRICT_UNKNOWN_OPTIONS = false luci.uvl.STRICT_UNKNOWN_SECTIONS = false + local function tag_fields(e) + if e.option and node.fields[e.option] then + node.fields[e.option].error = e + elseif e.childs then + for _, c in ipairs(e.childs) do tag_fields(c) end + end + end + + local function tag_section(e) + local s = { } + for _, c in ipairs(e.childs) do + if c.childs and not c:is(luci.uvl.errors.ERR_DEPENDENCY) then + table.insert( s, c.childs[1]:string() ) + else + table.insert( s, c:string() ) + end + end + if #s > 0 then node.error = s end + end + local stat, err = node.map.validator:validate_section(node.config, name, co) if err then node.map.save = false + + tag_fields(err) + tag_section(err) +--[[ if err:is(luci.uvl.errors.ERR_DEPENDENCY) then - node.tag_deperror[name] = true + node.tag_deperror[name] = err:string() else - node.tag_invalid[name] = true + node.tag_invalid[name] = err:string() end for i, v in ipairs(err.childs) do if v.option and node.fields[v.option] then if v:is(luci.uvl.errors.ERR_DEPENDENCY) then - node.fields[v.option].tag_reqerror[name] = true + node.fields[v.option].tag_deperror[name] = v:string() elseif v:is(luci.uvl.errors.ERR_OPT_REQUIRED) then - node.fields[v.option].tag_missing[name] = true - node.tag_deperror[name] = true + node.fields[v.option].tag_missing[name] = v:string() + node.tag_reqerror[name] = v:string() elseif v:is(luci.uvl.errors.ERR_OPTION) then - node.fields[v.option].tag_invalid[name] = true + node.fields[v.option].tag_invalid[name] = v:string() end end end +]] end end @@ -213,7 +239,7 @@ function Map.__init__(self, config, ...) self.validator = luci.uvl.UVL() self.scheme = self.validator:get_scheme(self.config) - + end function Map.get_scheme(self, sectiontype, option) @@ -243,14 +269,14 @@ function Map.parse(self, ...) for i, config in ipairs(self.parsechain) do self.uci:commit(config) self.uci:apply(config) - + -- Refresh data because commit changes section names self.uci:load(config) end - + -- Reparse sections Node.parse(self, ...) - + end for i, config in ipairs(self.parsechain) do self.uci:unload(config) @@ -616,7 +642,7 @@ NamedSection = class(AbstractSection) function NamedSection.__init__(self, map, section, stype, ...) AbstractSection.__init__(self, map, stype, ...) Node._i18n(self, map.config, section, nil, ...) - + -- Defaults self.addremove = false @@ -655,7 +681,7 @@ function NamedSection.parse(self) AbstractSection.parse_dynamic(self, s) if luci.http.formvalue("cbi.submit") then Node.parse(self, s) - + if not self.override_scheme and self.map.scheme then _uvl_validate_section(self, s) end @@ -730,7 +756,7 @@ function TypedSection.parse(self) AbstractSection.parse_dynamic(self, k) if luci.http.formvalue("cbi.submit") then Node.parse(self, k) - + if not self.override_scheme and self.map.scheme then _uvl_validate_section(self, k) end diff --git a/libs/cbi/luasrc/view/cbi/cell_valuefooter.htm b/libs/cbi/luasrc/view/cbi/cell_valuefooter.htm index 6ca530657d..6dd5667146 100644 --- a/libs/cbi/luasrc/view/cbi/cell_valuefooter.htm +++ b/libs/cbi/luasrc/view/cbi/cell_valuefooter.htm @@ -12,16 +12,6 @@ You may obtain a copy of the License at $Id$ -%> - - <% if self.tag_error[section] then -%> -
<%=self.tag_error[section]%>
- <%- elseif self.tag_reqerror[section] then -%> -
<%:cbi_reqerror%>
- <%- elseif self.tag_invalid[section] then -%> -
<%:cbi_invalid%>
- <%- elseif self.tag_missing[section] then -%> -
<%:cbi_missing%>
- <%- end %> <% if #self.deps > 0 then -%> diff --git a/libs/cbi/luasrc/view/cbi/cell_valueheader.htm b/libs/cbi/luasrc/view/cbi/cell_valueheader.htm index ecfeee6d95..9a065a3da5 100644 --- a/libs/cbi/luasrc/view/cbi/cell_valueheader.htm +++ b/libs/cbi/luasrc/view/cbi/cell_valueheader.htm @@ -13,4 +13,4 @@ $Id$ -%> -"> +"> diff --git a/libs/cbi/luasrc/view/cbi/full_valuefooter.htm b/libs/cbi/luasrc/view/cbi/full_valuefooter.htm index 8003f53fe5..e42043e78a 100644 --- a/libs/cbi/luasrc/view/cbi/full_valuefooter.htm +++ b/libs/cbi/luasrc/view/cbi/full_valuefooter.htm @@ -25,17 +25,6 @@ $Id$ <%- if self.title and #self.title > 0 then -%> <%- end -%> - - <% if self.tag_error[section] then -%> -
<%=self.tag_error[section]%>
- <%- elseif self.tag_reqerror[section] then -%> -
<%:cbi_reqerror%>
- <%- elseif self.tag_invalid[section] then -%> -
<%:cbi_invalid%>
- <%- elseif self.tag_missing[section] then -%> -
<%:cbi_missing%>
- <%- end %> - <% if #self.deps > 0 then -%> diff --git a/libs/cbi/luasrc/view/cbi/full_valueheader.htm b/libs/cbi/luasrc/view/cbi/full_valueheader.htm index ddc256dc72..fed2412f07 100644 --- a/libs/cbi/luasrc/view/cbi/full_valueheader.htm +++ b/libs/cbi/luasrc/view/cbi/full_valueheader.htm @@ -13,7 +13,7 @@ $Id$ -%> -
"> + diff --git a/libs/cbi/luasrc/view/cbi/tsection.htm b/libs/cbi/luasrc/view/cbi/tsection.htm index a81715b0ab..33d5c8e499 100644 --- a/libs/cbi/luasrc/view/cbi/tsection.htm +++ b/libs/cbi/luasrc/view/cbi/tsection.htm @@ -48,10 +48,6 @@ $Id$ <%- end %> - - <% if self.err_invalid then -%> -
<%:cbi_invalid%>
- <%- end %>
<%- end %> diff --git a/libs/cbi/luasrc/view/cbi/ucisection.htm b/libs/cbi/luasrc/view/cbi/ucisection.htm index e571cb212e..feab18e627 100644 --- a/libs/cbi/luasrc/view/cbi/ucisection.htm +++ b/libs/cbi/luasrc/view/cbi/ucisection.htm @@ -15,12 +15,10 @@ $Id$ <% self:render_children(section, scope or {}) %> -<% if self.tag_deperror[section] then -%> -
<%:cbi_deperror%>
-<% elseif self.tag_invalid[section] then -%> -
<%:cbi_invalid_section%>
-<%- elseif self.tag_error[section] then -%> -
<%=self.tag_error[section]%>
+<% if self.error then -%> +
+
    <% for _, e in ipairs(self.error) do %>
  • <%=luci.util.pcdata(e):gsub("\n","
    ")%>
  • <% end %>
+
<%- end %> <% if self.optionals[section] and #self.optionals[section] > 0 or self.dynamic then %>