diff options
author | Jo-Philipp Wich <jow@openwrt.org> | 2011-06-25 21:51:12 +0000 |
---|---|---|
committer | Jo-Philipp Wich <jow@openwrt.org> | 2011-06-25 21:51:12 +0000 |
commit | d7120e7559fdfdacd8c6862704d7d1281d5d2261 (patch) | |
tree | b97988d351a4afdf5f7b83419eea7dac9d51d75b | |
parent | dc918263585e89a684a7680bb0357525ed28cd74 (diff) |
modules/admin-full: defer writing of interface related dhcp options until an actual save occurs, prevents "unsaved changes" upon opening the interface settings page
-rw-r--r-- | modules/admin-full/luasrc/model/cbi/admin_network/ifaces.lua | 41 |
1 files changed, 30 insertions, 11 deletions
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 <steven@midlink.org> -Copyright 2008 Jo-Philipp Wich <xm@subsignal.org> +Copyright 2008-2011 Jo-Philipp Wich <xm@subsignal.org> 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 \"<code>6,192.168.2.1," .. "192.168.2.2</code>\" 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 |