summaryrefslogtreecommitdiffstats
path: root/app/acf_cli-controller.lua
diff options
context:
space:
mode:
Diffstat (limited to 'app/acf_cli-controller.lua')
-rw-r--r--app/acf_cli-controller.lua64
1 files changed, 64 insertions, 0 deletions
diff --git a/app/acf_cli-controller.lua b/app/acf_cli-controller.lua
index e68dfe9..beb83b3 100644
--- a/app/acf_cli-controller.lua
+++ b/app/acf_cli-controller.lua
@@ -47,3 +47,67 @@ end
logevent = function ( ... )
os.execute ( "logger \"" .. ... .. "\"" )
end
+
+-- FIXME - remove the haserl specific stuff
+handle_clientdata = function(form, clientdata)
+ form.errtxt = nil
+ for n,value in pairs(form.value) do
+ value.errtxt = nil
+ local name = n
+ if name:find("%.") and not clientdata[name] then
+ -- If the name has a '.' in it, haserl will interpret it as a table
+ local actualval = clientdata
+ for entry in name:gmatch("[^%.]+") do
+ if tonumber(entry) then
+ actualval = actualval[tonumber(entry)]
+ else
+ actualval = actualval[entry]
+ end
+ if not actualval then break end
+ end
+ clientdata[name] = actualval
+ end
+ if value.type == "group" then
+ handle_clientdata(value, clientdata[name])
+ elseif value.type == "boolean" then
+ value.value = (clientdata[name] ~= nil) and (clientdata[name] ~= "false")
+ elseif value.type == "multi" then
+ if clientdata[name] == nil then
+ -- for cli we use name[num] as the name
+ clientdata[name] = {}
+ for n,val in pairs(clientdata) do
+ if string.find(n, "^"..name.."%[%d+%]$") then
+ clientdata[name][tonumber(string.match(n, "%[(%d+)%]$"))] = val
+ end
+ end
+ end
+ -- FIXME this is because multi selects don't work in haserl
+ local oldtable = clientdata[name] or {}
+ -- Assume it's a sparse array, and remove blanks
+ local newtable={}
+ for x=1,table.maxn(oldtable) do
+ if oldtable[x] then
+ newtable[#newtable + 1] = oldtable[x]
+ end
+ end
+ value.value = newtable
+ elseif value.type == "list" then
+ value.value = {}
+ if clientdata[name] and clientdata[name] ~= "" then
+ -- for www we use \r separated list
+ for ip in string.gmatch(clientdata[name].."\n", "%s*([^\n]*%S)%s*\n") do
+ table.insert(value.value, ip)
+ end
+ else
+ -- for cli we use name[num] as the name
+ for n,val in pairs(clientdata) do
+ if string.find(n, "^"..name.."%[%d+%]$") then
+ value.value[tonumber(string.match(n, "%[(%d+)%]$"))] = val
+ end
+ end
+ end
+ else
+ value.value = clientdata[name] or value.value
+ end
+ end
+end