freifunk fix profile expert fs write function.
[project/luci.git] / modules / freifunk / luasrc / model / cbi / freifunk / basics.lua
index 1cd5c6d..8987b1c 100644 (file)
@@ -2,27 +2,24 @@
 LuCI - Lua Configuration Interface
 
 Copyright 2008 Steven Barth <steven@midlink.org>
+Copyright 2011 Manuel Munz <freifunk at somakoma 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
 
        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.]])
+m = Map("freifunk", translate ("Community"))
+c = m:section(NamedSection, "community", "public", nil, translate("These are the basic settings for your local wireless community. These settings define the default values for the wizard and DO NOT affect the actual configuration of the router."))
 
-community = c:option(ListValue, "name", "Gemeinschaft")
+community = c:option(ListValue, "name", translate ("Community"))
 community.rmempty = false
 
 local list = { }
@@ -34,44 +31,49 @@ for k,v in ipairs(list) do
        community:value(n, name)
 end
 
+
 n = Map("system", translate("Basic system settings"))
-b = n:section(TypedSection, "system", "Basic system settings")
+function n.on_after_commit(self)
+       luci.http.redirect(luci.dispatcher.build_url("admin", "freifunk", "basics"))
+end
+
+b = n:section(TypedSection, "system")
 b.anonymous = true
 
-hn = b:option(Value, "hostname", "hostname")
+hn = b:option(Value, "hostname", translate("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
+hn.datatype = "hostname"
 
-loc = b:option(Value, "location", "Location")
+loc = b:option(Value, "location", translate("Location"))
 loc.rmempty = false
+loc.datatype = "minlength(1)"
 
-lat = b:option(Value, "latitude", "latitude")
+lat = b:option(Value, "latitude", translate("Latitude"), translate("e.g.") .. " 48.12345")
+lat.datatype = "float"
 lat.rmempty = false
 
-lon = b:option(Value, "longitude", "longitude")
+lon = b:option(Value, "longitude", translate("Longitude"), translate("e.g.") .. " 10.12345")
+lon.datatype = "float"
 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)
+local ff = uci:get("freifunk", "community", "name") or ""
+local co = "profile_" .. ff
+
+local deflat = uci:get_first("system", "system", "latitude") or uci:get_first(co, "community", "latitude") or 52
+local deflon = uci:get_first("system", "system", "longitude") or uci:get_first(co, "community", "longitude") or 10
+local zoom = 12
+if ( deflat == 52 and deflon == 10 ) then
+       zoom = 4
+end
 
+OpenStreetMapLonLat = luci.util.class(AbstractValue)
+    
 function OpenStreetMapLonLat.__init__(self, ...)
        AbstractValue.__init__(self, ...)
        self.template = "cbi/osmll_value"
@@ -87,29 +89,16 @@ function OpenStreetMapLonLat.__init__(self, ...)
        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"
-
+       osm = b:option(OpenStreetMapLonLat, "latlon", translate("Find your coordinates with OpenStreetMap"), translate("Select your location with a mouse click on the map. The map will only show up if you are connected to the Internet."))
+       osm.latfield = "latitude"
+       osm.lonfield = "longitude"
+       osm.centerlat = uci:get_first("system", "system", "latitude") or deflat
+       osm.centerlon = uci:get_first("system", "system", "longitude") or deflon
+       osm.zoom = zoom
+       osm.width = "100%"
+       osm.height = "600"
+       osm.popup = false
+       osm.displaytext=translate("Show OpenStreetMap")
+       osm.hidetext=translate("Hide OpenStreetMap")
 
 return m, n