summaryrefslogtreecommitdiffhomepage
path: root/modules/freifunk/luasrc/model/cbi
diff options
context:
space:
mode:
authorManuel Munz <freifunk@somakoma.de>2011-01-25 21:04:57 +0000
committerManuel Munz <freifunk@somakoma.de>2011-01-25 21:04:57 +0000
commitc36fd44de2db30c08848bf326365a1e372b7879c (patch)
treeaa34a63d3270b4d9ba953c5bed9000aa961de745 /modules/freifunk/luasrc/model/cbi
parent9c03a76fc28dac4efe4714f0e61bb41bf2784ef7 (diff)
applications/ffwizard: Massive changes to the ffwizard to make it more generic. Also introduces changes to the community profiles. ffwizard replaces ffwizard-leipzig now. It is not completely finished yet, but should work in most cases.
Diffstat (limited to 'modules/freifunk/luasrc/model/cbi')
-rw-r--r--modules/freifunk/luasrc/model/cbi/freifunk/basics.lua115
-rw-r--r--modules/freifunk/luasrc/model/cbi/freifunk/contact.lua22
-rw-r--r--modules/freifunk/luasrc/model/cbi/freifunk/freifunk.lua24
-rw-r--r--modules/freifunk/luasrc/model/cbi/freifunk/profile.lua55
-rw-r--r--modules/freifunk/luasrc/model/cbi/freifunk/profile_expert.lua36
5 files changed, 217 insertions, 35 deletions
diff --git a/modules/freifunk/luasrc/model/cbi/freifunk/basics.lua b/modules/freifunk/luasrc/model/cbi/freifunk/basics.lua
new file mode 100644
index 0000000000..1cd5c6d9c4
--- /dev/null
+++ b/modules/freifunk/luasrc/model/cbi/freifunk/basics.lua
@@ -0,0 +1,115 @@
+--[[
+LuCI - Lua Configuration Interface
+
+Copyright 2008 Steven Barth <steven@midlink.org>
+
+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: freifunk.lua 3291 2008-09-14 21:59:14Z Cyrus $
+]]--
+
+local fs = require "luci.fs"
+local util = require "luci.util"
+local uci = require "luci.model.uci".cursor()
+local profiles = "/etc/config/profile_"
+
+m = Map("freifunk", "Freifunk")
+c = m:section(NamedSection, "community", "public", "Gemeinschaft", [[Dies sind die Grundeinstellungen
+für die lokale Freifunkgemeinschaft. Diese Werte wirken sich NICHT auf die Konfiguration
+des Routers aus, sondern definieren nur die Vorgaben für den Freifunkassistenten.]])
+
+community = c:option(ListValue, "name", "Gemeinschaft")
+community.rmempty = false
+
+local list = { }
+local list = fs.glob(profiles .. "*")
+
+for k,v in ipairs(list) do
+ local name = uci:get_first(v, "community", "name") or "?"
+ local n = string.gsub(v, profiles, "")
+ community:value(n, name)
+end
+
+n = Map("system", translate("Basic system settings"))
+b = n:section(TypedSection, "system", "Basic system settings")
+b.anonymous = true
+
+hn = b:option(Value, "hostname", "hostname")
+hn.rmempty = false
+function hn.validate(self, value)
+ if value == nil then
+ return
+ elseif (#value > 24) or string.match(value, "[^%w%.%-]") or string.match(value, "^[%-%.]") or string.match(value, "[%-%.]$") then
+ return nil, translate("Hostname may contain up to 24 alphanumeric characters. Minus and period are also allowed, but not in the beginning or the end of the hostname.")
+ else
+ return value
+ end
+end
+
+loc = b:option(Value, "location", "Location")
+loc.rmempty = false
+
+lat = b:option(Value, "latitude", "latitude")
+lat.rmempty = false
+
+lon = b:option(Value, "longitude", "longitude")
+lon.rmempty = false
+
+--[[
+Opens an OpenStreetMap iframe or popup
+Makes use of resources/OSMLatLon.htm and htdocs/resources/osm.js
+(is that the right place for files like these?)
+]]--
+
+local class = util.class
+local co = "profile_augsburg"
+local syslat = uci:get_first(co, "community", "latitude")
+local syslon = uci:get_first(co, "community", "longitude")
+
+OpenStreetMapLonLat = class(AbstractValue)
+
+function OpenStreetMapLonLat.__init__(self, ...)
+ AbstractValue.__init__(self, ...)
+ self.template = "cbi/osmll_value"
+ self.latfield = nil
+ self.lonfield = nil
+ self.centerlat = ""
+ self.centerlon = ""
+ self.zoom = "0"
+ self.width = "100%" --popups will ignore the %-symbol, "100%" is interpreted as "100"
+ self.height = "600"
+ self.popup = false
+ self.displaytext="OpenStreetMap" --text on button, that loads and displays the OSMap
+ self.hidetext="X" -- text on button, that hides OSMap
+end
+
+
+f = SimpleForm("ffwizward", "OpenStreetMap", "Hier kann man die Geokoordinaten des Knotens herausfinden.")
+
+osm = f:field(OpenStreetMapLonLat, "latlon", "Geokoordinaten mit OpenStreetMap ermitteln:", "Klicken Sie auf Ihren Standort in der Karte. Diese Karte funktioniert nur, wenn das Gerät bereits eine Verbindung zum Internet hat.")
+osm.latfield = "lat"
+osm.lonfield = "lon"
+osm.centerlat = syslat
+osm.centerlon = syslon
+osm.width = "100%"
+osm.height = "600"
+osm.popup = false
+
+syslatlengh = string.len(syslat)
+if syslatlengh > 7 then
+ osm.zoom = "15"
+elseif syslatlengh > 5 then
+ osm.zoom = "12"
+else
+ osm.zoom = "6"
+end
+
+osm.displaytext="OpenStreetMap anzeigen"
+osm.hidetext="OpenStreetMap verbergen"
+
+
+return m, n
diff --git a/modules/freifunk/luasrc/model/cbi/freifunk/contact.lua b/modules/freifunk/luasrc/model/cbi/freifunk/contact.lua
index c976409c65..178df28b85 100644
--- a/modules/freifunk/luasrc/model/cbi/freifunk/contact.lua
+++ b/modules/freifunk/luasrc/model/cbi/freifunk/contact.lua
@@ -18,17 +18,17 @@ m = Map("freifunk", translate("Contact"), translate("Please fill in your contact
c = m:section(NamedSection, "contact", "public", "")
-c:option(Value, "nickname", translate("Nickname"))
-c:option(Value, "name", translate("Realname"))
-c:option(Value, "mail", translate("E-Mail"), translate("You really should provide your address here!"))
-c:option(Value, "phone", translate("Phone"))
-c:option(Value, "location", translate("Location"))
-c:option(Value, "note", translate("Notice"))
+local nick = c:option(Value, "nickname", translate("Nickname"))
+nick.rmempty = false
+
+name = c:option(Value, "name", translate("Realname"))
+name.rmempty = false
-m2 = Map("system", translate("Coordinates"))
+mail = c:option(Value, "mail", translate("E-Mail"))
+mail.rmempty = false
-s = m2:section(TypedSection, "system", "")
-s:option(Value, "latitude", translate("Latitude")).rmempty = true
-s:option(Value, "longitude", translate("Longitude")).rmempty = true
+c:option(Value, "phone", translate("Phone"))
+
+c:option(Value, "note", translate("Notice"))
-return m, m2
+return m
diff --git a/modules/freifunk/luasrc/model/cbi/freifunk/freifunk.lua b/modules/freifunk/luasrc/model/cbi/freifunk/freifunk.lua
deleted file mode 100644
index 1a147460b7..0000000000
--- a/modules/freifunk/luasrc/model/cbi/freifunk/freifunk.lua
+++ /dev/null
@@ -1,24 +0,0 @@
---[[
-LuCI - Lua Configuration Interface
-
-Copyright 2008 Steven Barth <steven@midlink.org>
-
-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$
-]]--
-m = Map("freifunk", "Freifunk")
-
-c = m:section(NamedSection, "community", "public", "Gemeinschaft", [[Dies sind die Grundeinstellungen
-für die lokale Freifunkgemeinschaft. Diese Werte wirken sich NICHT auf die Konfiguration
-des Routers aus, sondern definieren nur die Vorgaben für den Freifunkassistenten.]])
-c:option(Value, "name", "Gemeinschaft")
-c:option(Value, "homepage", "Webseite")
-c:option(Value, "ssid", "ESSID")
-c:option(Value, "prefix", "Netzprefix")
-
-return m \ No newline at end of file
diff --git a/modules/freifunk/luasrc/model/cbi/freifunk/profile.lua b/modules/freifunk/luasrc/model/cbi/freifunk/profile.lua
new file mode 100644
index 0000000000..87ec03c7e7
--- /dev/null
+++ b/modules/freifunk/luasrc/model/cbi/freifunk/profile.lua
@@ -0,0 +1,55 @@
+--[[
+LuCI - Lua Configuration Interface
+
+Copyright 2011 Manuel Munz <freifunk at somakoma dot de>
+
+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
+
+ httc://www.apache.org/licenses/LICENSE-2.0
+]]--
+
+local uci = require "luci.model.uci".cursor()
+local community = "profile_" .. uci:get("freifunk", "community", "name")
+--local community = "profile_augsburg"
+
+
+m = Map(community, translate("Community settings"), translate("These are the settings of your local community"))
+
+c = m:section(NamedSection, "profile", "community", "foobar")
+
+name = c:option(Value, "name", "Name")
+name.rmempty = false
+
+homepage = c:option(Value, "homepage", "Webseite")
+
+cc = c:option(Value, "country", "Countrycode")
+function cc.cfgvalue(self, section)
+ return uci:get(community, "wifi_device", "country")
+end
+function cc.write(self, sec, value)
+ if value then
+ uci:set(community, "wifi_device", "country", value)
+ uci:save(community)
+ end
+end
+
+ssid = c:option(Value, "ssid", "ESSID")
+ssid.rmempty = false
+
+prefix = c:option(Value, "mesh_network", "Netzprefix")
+prefix.rmempty = false
+
+splash_net = c:option(Value, "splash_network", "Netzwerk für Client-DHCP-Adressen")
+splash_net.rmempty = false
+
+splash_prefix = c:option(Value, "splash_prefix", "Netzgröße für Clientnetze")
+splash_prefix.rmempty = false
+
+lat = c:option(Value, "latitude", "Latitude")
+lat.rmempty = false
+
+lon = c:option(Value, "longitude", "longitude")
+lon.rmempty = false
+return m
diff --git a/modules/freifunk/luasrc/model/cbi/freifunk/profile_expert.lua b/modules/freifunk/luasrc/model/cbi/freifunk/profile_expert.lua
new file mode 100644
index 0000000000..5da7e7b121
--- /dev/null
+++ b/modules/freifunk/luasrc/model/cbi/freifunk/profile_expert.lua
@@ -0,0 +1,36 @@
+--[[
+LuCI - Lua Configuration Interface
+
+Copyright 2011 Manuel Munz <freifunk at somakoma dot de>
+
+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
+
+ httc://www.apache.org/licenses/LICENSE-2.0
+]]--
+
+local fs = require "nixio.fs"
+local uci = require "luci.model.uci".cursor()
+local community = "/etc/config/profile_" .. uci:get("freifunk", "community", "name")
+
+f = SimpleForm("community", translate("Community profile"), translate("This is the complete content of the selected community profile."))
+
+t = f:field(TextValue, "cop")
+t.rmempty = true
+t.rows = 30
+function t.cfgvalue()
+ return fs.readfile(community) or ""
+end
+
+function f.handle(self, state, data)
+ if state == FORM_VALID then
+ if data.cop then
+ fs.writefile(cop, data.rcs:gsub("\r\n", "\n"))
+ end
+ end
+ return true
+end
+
+return f
+