From c5278e17dc329be547c33a46e56fd655c77476c2 Mon Sep 17 00:00:00 2001
From: Jo-Philipp Wich <jow@openwrt.org>
Date: Sat, 6 Sep 2008 22:37:56 +0000
Subject: [PATCH] * luci/libs/cbi: fix error assignment in cbi sections

---
 libs/cbi/luasrc/cbi.lua                       | 14 ++++++++++++--
 libs/cbi/luasrc/view/cbi/cell_valueheader.htm |  2 +-
 libs/cbi/luasrc/view/cbi/full_valueheader.htm |  2 +-
 libs/cbi/luasrc/view/cbi/tblsection.htm       |  4 +++-
 libs/cbi/luasrc/view/cbi/ucisection.htm       |  4 ++--
 5 files changed, 19 insertions(+), 7 deletions(-)

diff --git a/libs/cbi/luasrc/cbi.lua b/libs/cbi/luasrc/cbi.lua
index 09ba553ec..c1eefca5d 100644
--- a/libs/cbi/luasrc/cbi.lua
+++ b/libs/cbi/luasrc/cbi.lua
@@ -89,7 +89,11 @@ local function _uvl_validate_section(node, name)
 
 	local function tag_fields(e)
 		if e.option and node.fields[e.option] then
-			node.fields[e.option].error = e
+			if node.fields[e.option].error then
+				node.fields[e.option].error[name] = e
+			else
+				node.fields[e.option].error = { [name] = e }
+			end
 		elseif e.childs then
 			for _, c in ipairs(e.childs) do tag_fields(c) end
 		end
@@ -104,7 +108,13 @@ local function _uvl_validate_section(node, name)
 				table.insert( s, c:string() )
 			end
 		end
-		if #s > 0 then node.error = s end
+		if #s > 0 then
+			if node.error then
+				node.error[name] = s
+			else
+				node.error = { [name] = s }
+			end
+		end
 	end
 
 	local stat, err = node.map.validator:validate_section(node.config, name, co)
diff --git a/libs/cbi/luasrc/view/cbi/cell_valueheader.htm b/libs/cbi/luasrc/view/cbi/cell_valueheader.htm
index 9a065a3da..dda17463c 100644
--- a/libs/cbi/luasrc/view/cbi/cell_valueheader.htm
+++ b/libs/cbi/luasrc/view/cbi/cell_valueheader.htm
@@ -13,4 +13,4 @@ $Id$
 
 -%>
 
-<td class="cbi-value-field<% if self.error then %> cbi-value-error<% end %>" id="cbi-<%=self.config.."-"..section.."-"..self.option%>">
+<td class="cbi-value-field<% if self.error and self.error[section] then %> cbi-value-error<% end %>" id="cbi-<%=self.config.."-"..section.."-"..self.option%>">
diff --git a/libs/cbi/luasrc/view/cbi/full_valueheader.htm b/libs/cbi/luasrc/view/cbi/full_valueheader.htm
index fed2412f0..cbeda755b 100644
--- a/libs/cbi/luasrc/view/cbi/full_valueheader.htm
+++ b/libs/cbi/luasrc/view/cbi/full_valueheader.htm
@@ -13,7 +13,7 @@ $Id$
 
 -%>
 
-<div class="cbi-value<% if self.error then %> cbi-value-error<% end %>" id="cbi-<%=self.config.."-"..section.."-"..self.option%>">
+<div class="cbi-value<% if self.error and self.error[section] then %> cbi-value-error<% end %>" id="cbi-<%=self.config.."-"..section.."-"..self.option%>">
 	<%- if self.title and #self.title > 0 then -%>
 	<label class="cbi-value-title"<%= attr("for", cbid) %>>
 	<%- if self.titleref then -%><a title="<%=self.titledesc or translate('cbi_gorel')%>" class="cbi-title-ref" href="<%=self.titleref%>"><%- end -%>
diff --git a/libs/cbi/luasrc/view/cbi/tblsection.htm b/libs/cbi/luasrc/view/cbi/tblsection.htm
index 5a2b24734..49930f848 100644
--- a/libs/cbi/luasrc/view/cbi/tblsection.htm
+++ b/libs/cbi/luasrc/view/cbi/tblsection.htm
@@ -100,7 +100,9 @@ end
 
 		<% if self.error then %>
 			<div class="cbi-section-error">
-				<ul><% for _, e in ipairs(self.error) do %><li><%=luci.util.pcdata(e):gsub("\n","<br />")%></li><% end %></ul>
+				<ul><% for _, c in pairs(self.error) do for _, e in ipairs(c) do -%>
+					<li><%=luci.util.pcdata(e):gsub("\n","<br />")%></li>
+				<%- end end %></ul>
 			</div>
 		<% end %>
 
diff --git a/libs/cbi/luasrc/view/cbi/ucisection.htm b/libs/cbi/luasrc/view/cbi/ucisection.htm
index feab18e62..92343bba2 100644
--- a/libs/cbi/luasrc/view/cbi/ucisection.htm
+++ b/libs/cbi/luasrc/view/cbi/ucisection.htm
@@ -15,9 +15,9 @@ $Id$
 
 <% self:render_children(section, scope or {}) %>
 
-<% if self.error then -%>
+<% if self.error and self.error[section] then -%>
 	<div class="cbi-section-error">
-		<ul><% for _, e in ipairs(self.error) do %><li><%=luci.util.pcdata(e):gsub("\n","<br />")%></li><% end %></ul>
+		<ul><% for _, e in ipairs(self.error[section]) do %><li><%=luci.util.pcdata(e):gsub("\n","<br />")%></li><% end %></ul>
 	</div>
 <%- end %>
 
-- 
2.25.1