require("luci.fs")
require("luci.config")
-m = Map("system", translate("System"), translate("Here you can configure the basic aspects of your device like its hostname or the timezone."))
-m:chain("luci")
+local m, s, o
+local has_ntpd = luci.fs.access("/usr/sbin/ntpd")
-local has_rdate = false
-m.uci:foreach("system", "rdate",
- function()
- has_rdate = true
- return false
- end)
+m = Map("system", translate("System"), translate("Here you can configure the basic aspects of your device like its hostname or the timezone."))
+m:chain("luci")
s = m:section(TypedSection, "system", translate("System Properties"))
-- System Properties
--
-clock = s:taboption("general", DummyValue, "_systime", translate("Local Time"))
-clock.template = "admin_system/clock_status"
+o = s:taboption("general", DummyValue, "_systime", translate("Local Time"))
+o.template = "admin_system/clock_status"
-hn = s:taboption("general", Value, "hostname", translate("Hostname"))
-hn.datatype = "hostname"
+o = s:taboption("general", Value, "hostname", translate("Hostname"))
+o.datatype = "hostname"
-function hn.write(self, section, value)
+function o.write(self, section, value)
Value.write(self, section, value)
luci.sys.hostname(value)
end
-tz = s:taboption("general", ListValue, "zonename", translate("Timezone"))
-tz:value("UTC")
+o = s:taboption("general", ListValue, "zonename", translate("Timezone"))
+o:value("UTC")
for i, zone in ipairs(luci.sys.zoneinfo.TZ) do
- tz:value(zone[1])
+ o:value(zone[1])
end
-function tz.write(self, section, value)
+function o.write(self, section, value)
local function lookup_zone(title)
for _, zone in ipairs(luci.sys.zoneinfo.TZ) do
if zone[1] == title then return zone[2] end
--
--- Rdate
+-- NTP
--
-if has_rdate then
- m2 = Map("timeserver", translate("Time Server (rdate)"))
- s = m2:section(TypedSection, "timeserver")
+if has_ntpd then
+ s = m:section(TypedSection, "timeserver", translate("Time Synchronization"))
s.anonymous = true
- s.addremove = true
- s.template = "cbi/tblsection"
-
- h = s:option(Value, "hostname", translate("Name"))
- h.rmempty = true
- h.datatype = host
- i = s:option(ListValue, "interface", translate("Interface"))
- i.rmempty = true
- i:value("", translate("Default"))
- m2.uci:foreach("network", "interface",
- function (section)
- local ifc = section[".name"]
- if ifc ~= "loopback" then
- i:value(ifc)
- end
+ s.addremove = false
+
+ o = s:option(Flag, "enable", translate("Enable builtin NTP server"))
+ o.rmempty = false
+
+ function o.cfgvalue(self)
+ return luci.sys.init.enabled("sysntpd")
+ and self.enabled or self.disabled
+ end
+
+ function o.write(self, section, value)
+ if value == self.enabled then
+ luci.sys.init.enable("sysntpd")
+ luci.sys.call("env -i /etc/init.d/sysntpd start >/dev/null")
+ else
+ luci.sys.call("env -i /etc/init.d/sysntpd stop >/dev/null")
+ luci.sys.init.disable("sysntpd")
end
- )
+ end
+
+
+ o = s:option(DynamicList, "server", translate("NTP server candidates"))
+ o.datatype = "host"
+ o:depends("enable", "1")
+
+ -- retain server list even if disabled
+ function o.remove() end
end
-return m, m2
+return m
+++ /dev/null
-<%#
-LuCI - Lua Configuration Interface
-Copyright 2008 Steven Barth <steven@midlink.org>
-Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-$Id$
-
--%>
-<%+header%>
-<h2><a id="content" name="content"><%:System%></a></h2>
-<h3><%:Backup / Restore%></h3>
-<p><%:Here you can backup and restore your router configuration and - if possible - reset the router to the default settings.%></p>
-<br />
-<div>
- <ul>
- <li><a href="<%=REQUEST_URI%>?backup=kthxbye"><%:Create backup%></a></li>
- <% if reset_avail then -%>
- <li><a href="<%=REQUEST_URI%>?reset=yarly" onclick="return confirm('<%:Proceed reverting all settings and resetting to firmware defaults?%>')"><%:Reset router to defaults%></a></li>
- <% end -%>
- </ul>
-</div>
-
-<br />
-
-<form method="post" action="<%=REQUEST_URI%>" enctype="multipart/form-data">
- <div class="left"><%:Backup Archive%>:</div>
- <div>
- <input type="file" size="30" name="archive" />
- </div>
- <div>
- <input type="submit" class="cbi-button cbi-input-apply" value="<%:Restore backup%>" />
- </div>
-</form>
-<%+footer%>
<%+header%>
-<h2><a id="content" name="content"><%:System%> - <%:Flash Firmware%> - <%:Verify%></a></h2>
+<h2><a id="content" name="content"><%:Flash Firmware%> - <%:Verify%></a></h2>
<p>
<%_ The flash image was uploaded.
Below is the checksum and file size listed,
</fieldset>
<div class="cbi-page-actions right">
+ <form style="display:inline" action="<%=REQUEST_URI%>" method="post">
+ <input class="cbi-button cbi-button-reset" type="submit" value="<%:Cancel%>" />
+ </form>
<form style="display:inline" action="<%=REQUEST_URI%>" method="post">
<input type="hidden" name="step" value="2" />
<input type="hidden" name="keep" value="<%=keep and "1" or ""%>" />
<input class="cbi-button cbi-button-apply" type="submit" value="<%:Proceed%>" />
</form>
- <form style="display:inline" action="<%=REQUEST_URI%>" method="post">
- <input class="cbi-button cbi-button-reset" type="submit" value="<%:Cancel%>" />
- </form>
</div>
<%+footer%>