prosody/tools/form2table.lua

52 lines
1.5 KiB
Lua

-- Read an XML dataform and spit out a serialized Lua table of it
if not pcall(require, "prosody.loader") then
pcall(require, "loader");
end
local function from_stanza(stanza)
local layout = {
title = stanza:get_child_text("title");
instructions = stanza:get_child_text("instructions");
};
for tag in stanza:childtags("field") do
local field = {
name = tag.attr.var;
type = tag.attr.type;
label = tag.attr.label;
desc = tag:get_child_text("desc");
required = tag:get_child("required") and true or nil;
value = tag:get_child_text("value");
options = nil;
};
if field.type == "list-single" or field.type == "list-multi" then
local options = {};
for option in tag:childtags("option") do
options[#options+1] = { label = option.attr.label, value = option:get_child_text("value") };
end
field.options = options;
end
if field.type == "jid-multi" or field.type == "list-multi" or field.type == "text-multi" then
local values = {};
for value in tag:childtags("value") do
values[#values+1] = value:get_text();
end
if field.type == "text-multi" then
values = table.concat(values, "\n");
end
field.value = values;
end
if field.type == "boolean" then
field.value = field.value == "true" or field.value == "1";
end
layout[#layout+1] = field;
end
return layout;
end
print("dataforms.new " .. require"prosody.util.serialization".serialize(from_stanza(require"prosody.util.xml".parse(io.read("*a"))),
{ unquoted = true }))