modules/admin-core: implement a more elegant solution for #46; treat empty or zero...
[project/luci.git] / modules / admin-core / luasrc / tools / webadmin.lua
index fe725d4..0e09be9 100644 (file)
@@ -14,7 +14,7 @@ $Id$
 ]]--
 
 module("luci.tools.webadmin", package.seeall)
-require("luci.model.uci")
+local uci = require("luci.model.uci")
 require("luci.sys")
 require("luci.ip")
 
@@ -34,6 +34,8 @@ function date_format(secs)
        local mins = 0
        local hour = 0
        local days = 0
+       
+       secs = math.floor(secs)
        if secs > 60 then
                mins = math.floor(secs / 60)
                secs = secs % 60
@@ -45,25 +47,28 @@ function date_format(secs)
        end
        
        if hour > 24 then
-               days = math.floor(hours / 24)
+               days = math.floor(hour / 24)
                hour = hour % 24
        end
        
        if days > 0 then
-               return string.format("%dd %02dh %02dmin %02ds", days, hour, mins, secs)
+               return string.format("%.0fd %02.0fh %02.0fmin %02.0fs", days, hour, mins, secs)
        else
-               return string.format("%02dh %02dmin %02ds", hour, mins, secs)
+               return string.format("%02.0fh %02.0fmin %02.0fs", hour, mins, secs)
        end
 end
 
 function network_get_addresses(net)
-       luci.model.uci.load_state("network")
+       local state = uci.cursor_state()
+       state:load("network")
        local addr = {}
-       local ipv4 = luci.model.uci.get("network", net, "ipaddr")
-       local mav4 = luci.model.uci.get("network", net, "netmask")
-       local ipv6 = luci.model.uci.get("network", net, "ip6addr")
+       local ipv4 = state:get("network", net, "ipaddr")
+       local mav4 = state:get("network", net, "netmask")
+       local ipv6 = state:get("network", net, "ip6addr")
        
-       if ipv4 and mav4 then
+       if ipv4 and #ipv4 > 0 then
+               if mav4 and #mav4 == 0 then mav4 = nil end
+
                ipv4 = luci.ip.IPv4(ipv4, mav4)
                
                if ipv4 then 
@@ -75,7 +80,7 @@ function network_get_addresses(net)
                table.insert(addr, ipv6)
        end
        
-       luci.model.uci.foreach("network", "alias",
+       state:foreach("network", "alias",
                function (section)
                        if section.interface == net then
                                if section.ipaddr and section.netmask then
@@ -97,7 +102,7 @@ function network_get_addresses(net)
 end
 
 function cbi_add_networks(field)
-       luci.model.uci.foreach("network", "interface",
+       uci.cursor():foreach("network", "interface",
                function (section)
                        if section[".name"] ~= "loopback" then
                                field:value(section[".name"])
@@ -114,13 +119,14 @@ function cbi_add_knownips(field)
 end
 
 function network_get_zones(net)
-       if not luci.model.uci.load_state("firewall") then
+       local state = uci.cursor_state()
+       if not state:load("firewall") then
                return nil
        end
        
        local zones = {}
        
-       luci.model.uci.foreach("firewall", "zone", 
+       state:foreach("firewall", "zone", 
                function (section)
                        local znet = section.network or section.name
                        if luci.util.contains(luci.util.split(znet, " "), net) then
@@ -135,7 +141,7 @@ end
 function firewall_find_zone(name)
        local find
        
-       luci.model.uci.foreach("firewall", "zone", 
+       luci.model.uci.cursor():foreach("firewall", "zone", 
                function (section)
                        if section.name == name then
                                find = section[".name"]
@@ -147,12 +153,13 @@ function firewall_find_zone(name)
 end
 
 function iface_get_network(iface)
-       luci.model.uci.load_state("network")
+       local state = uci.cursor_state()
+       state:load("network")
        local net
        
-       luci.model.uci.foreach("network", "interface",
+       state:foreach("network", "interface",
                function (section)
-                       local ifname = luci.model.uci.get(
+                       local ifname = state:get(
                                "network", section[".name"], "ifname"
                        )
                        
@@ -163,4 +170,4 @@ function iface_get_network(iface)
        )
        
        return net
-end
\ No newline at end of file
+end