Software /
code /
prosody
File
tools/form2table.lua @ 11900:60676b607b6d
s2smanager: Fire s2s-destroyed event to mirror s2s-created
The existing events do not fire for unauthed sessions, for example (because
the type does not match). I deemed changing their behaviour too risky, and
the current behaviour may even be more desirable for some uses.
This means we now have roughly paired events:
- s2s-created -> s2s-destroyed (global only)
- s2sin-established -> s2sin-destroyed (global + host)
- s2sout-established -> s2sout-destroyed (global + host)
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Fri, 12 Nov 2021 13:30:39 +0000 |
parent | 11194:9d1ce6f28401 |
child | 13142:879a6a33c21b |
line wrap: on
line source
-- Read an XML dataform and spit out a serialized Lua table of it 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 "util.serialization".serialize(from_stanza(require "util.xml".parse(io.read("*a"))), { unquoted = true }))