From: Jo-Philipp Wich Date: Sat, 25 Jun 2011 21:51:12 +0000 (+0000) Subject: modules/admin-full: defer writing of interface related dhcp options until an actual... X-Git-Tag: 0.11.0~1989 X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fluci.git;a=commitdiff_plain;h=d7120e7559fdfdacd8c6862704d7d1281d5d2261 modules/admin-full: defer writing of interface related dhcp options until an actual save occurs, prevents "unsaved changes" upon opening the interface settings page --- diff --git a/modules/admin-full/luasrc/model/cbi/admin_network/ifaces.lua b/modules/admin-full/luasrc/model/cbi/admin_network/ifaces.lua index 798b388fa..3debf58ba 100644 --- a/modules/admin-full/luasrc/model/cbi/admin_network/ifaces.lua +++ b/modules/admin-full/luasrc/model/cbi/admin_network/ifaces.lua @@ -2,7 +2,7 @@ LuCI - Lua Configuration Interface Copyright 2008 Steven Barth -Copyright 2008 Jo-Philipp Wich +Copyright 2008-2011 Jo-Philipp Wich Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -659,20 +659,16 @@ end if has_dnsmasq and net:proto() == "static" then m2 = Map("dhcp", "", "") - function m2.on_parse() - local has_section = false + + local section_id = "-" + function m2.on_parse() m2.uci:foreach("dhcp", "dhcp", function(s) if s.interface == arg[1] then - has_section = true + section_id = s['.name'] return false end end) - - if not has_section then - m2.uci:section("dhcp", "dhcp", nil, { interface = arg[1], ignore = "1" }) - m2.uci:save("dhcp") - end end s = m2:section(TypedSection, "dhcp", translate("DHCP Server")) @@ -681,8 +677,8 @@ if has_dnsmasq and net:proto() == "static" then s:tab("general", translate("General Setup")) s:tab("advanced", translate("Advanced Settings")) - function s.filter(self, section) - return m2.uci:get("dhcp", section, "interface") == arg[1] + function s.cfgsections(self) + return { section_id } end local ignore = s:taboption("general", Flag, "ignore", @@ -692,6 +688,18 @@ if has_dnsmasq and net:proto() == "static" then ignore.rmempty = false + function ignore.cfgvalue(self, section) + return (section == "-") and self.enabled or Flag.cfgvalue(self, section) + end + + function ignore.write(self, section, value) + section_id = m2.uci:section("dhcp", "dhcp", nil, { + ignore = value, + interface = arg[1] + }) + end + + local start = s:taboption("general", Value, "start", translate("Start"), translate("Lowest leased address as offset from the network address.")) start.optional = true @@ -734,9 +742,20 @@ if has_dnsmasq and net:proto() == "static" then translate("Define additional DHCP options, for example \"6,192.168.2.1," .. "192.168.2.2\" which advertises different DNS servers to clients.")) + + local function write_opt(self, section, value) + return getmetatable(self).__index.write(self, section_id, value) + end + + local function remove_opt(self, section, value) + return getmetatable(self).__index.remove(self, section_id, value) + end + for i, n in ipairs(s.children) do if n ~= ignore then n:depends("ignore", "") + n.write = write_opt + n.remove = remove_opt end end end