Thu, 10 Jun 2021 11:58:23 +0200
plugins.smacks: Don't warn about zero stanzas acked
It's only if the count somehow goes backwards that something is really
wrong. An ack for zero stanzas is fine and we don't need to do anything.
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 | -- Prosody IM |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2 | -- Copyright (C) 2008-2010 Matthew Wild |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 | -- Copyright (C) 2008-2010 Waqas Hussain |
441
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
4 | -- |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5 | -- This project is MIT/X11 licensed. Please see the |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 | -- COPYING file in the source package for more information. |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 | -- |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 | |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 | local setmetatable = setmetatable; |
441
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
10 | local ipairs = ipairs; |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
11 | local type, next = type, next; |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
12 | local tonumber = tonumber; |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
13 | local tostring = tostring; |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
14 | local t_concat = table.concat; |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
15 | local st = require "util.stanza"; |
334
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
16 | local jid_prep = require "util.jid".prep; |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 | |
441
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
18 | local _ENV = nil; |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
19 | -- luacheck: std none |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 | |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 | local xmlns_forms = 'jabber:x:data'; |
441
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
22 | local xmlns_validate = 'http://jabber.org/protocol/xdata-validate'; |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 | |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 | local form_t = {}; |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 | local form_mt = { __index = form_t }; |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 | |
441
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
27 | local function new(layout) |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
28 | return setmetatable(layout, form_mt); |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
29 | end |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
30 | |
441
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
31 | local function from_stanza(stanza) |
335
9e69ee8542d4
util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents:
334
diff
changeset
|
32 | local layout = { |
9e69ee8542d4
util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents:
334
diff
changeset
|
33 | title = stanza:get_child_text("title"); |
9e69ee8542d4
util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents:
334
diff
changeset
|
34 | instructions = stanza:get_child_text("instructions"); |
9e69ee8542d4
util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents:
334
diff
changeset
|
35 | }; |
9e69ee8542d4
util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents:
334
diff
changeset
|
36 | for tag in stanza:childtags("field") do |
9e69ee8542d4
util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents:
334
diff
changeset
|
37 | local field = { |
9e69ee8542d4
util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents:
334
diff
changeset
|
38 | name = tag.attr.var; |
9e69ee8542d4
util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents:
334
diff
changeset
|
39 | label = tag.attr.label; |
9e69ee8542d4
util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents:
334
diff
changeset
|
40 | type = tag.attr.type; |
9e69ee8542d4
util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents:
334
diff
changeset
|
41 | required = tag:get_child("required") and true or nil; |
9e69ee8542d4
util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents:
334
diff
changeset
|
42 | value = tag:get_child_text("value"); |
9e69ee8542d4
util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents:
334
diff
changeset
|
43 | }; |
9e69ee8542d4
util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents:
334
diff
changeset
|
44 | layout[#layout+1] = field; |
9e69ee8542d4
util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents:
334
diff
changeset
|
45 | if field.type then |
9e69ee8542d4
util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents:
334
diff
changeset
|
46 | local value = {}; |
9e69ee8542d4
util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents:
334
diff
changeset
|
47 | if field.type:match"list%-" then |
9e69ee8542d4
util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents:
334
diff
changeset
|
48 | for tag in tag:childtags("option") do |
9e69ee8542d4
util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents:
334
diff
changeset
|
49 | value[#value+1] = { label = tag.attr.label, value = tag:get_child_text("value") }; |
9e69ee8542d4
util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents:
334
diff
changeset
|
50 | end |
9e69ee8542d4
util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents:
334
diff
changeset
|
51 | for tag in tag:childtags("value") do |
9e69ee8542d4
util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents:
334
diff
changeset
|
52 | value[#value+1] = { label = tag.attr.label, value = tag:get_text(), default = true }; |
9e69ee8542d4
util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents:
334
diff
changeset
|
53 | end |
9e69ee8542d4
util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents:
334
diff
changeset
|
54 | elseif field.type:match"%-multi" then |
9e69ee8542d4
util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents:
334
diff
changeset
|
55 | for tag in tag:childtags("value") do |
9e69ee8542d4
util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents:
334
diff
changeset
|
56 | value[#value+1] = tag.attr.label and { label = tag.attr.label, value = tag:get_text() } or tag:get_text(); |
9e69ee8542d4
util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents:
334
diff
changeset
|
57 | end |
9e69ee8542d4
util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents:
334
diff
changeset
|
58 | if field.type == "text-multi" then |
9e69ee8542d4
util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents:
334
diff
changeset
|
59 | field.value = t_concat(value, "\n"); |
9e69ee8542d4
util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents:
334
diff
changeset
|
60 | else |
9e69ee8542d4
util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents:
334
diff
changeset
|
61 | field.value = value; |
9e69ee8542d4
util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents:
334
diff
changeset
|
62 | end |
9e69ee8542d4
util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents:
334
diff
changeset
|
63 | end |
9e69ee8542d4
util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents:
334
diff
changeset
|
64 | end |
442
b2ae91f4fec9
util.dataforms: Support XEP-0122 validation
Kim Alvefur <zash@zash.se>
parents:
441
diff
changeset
|
65 | local datatype_tag = tag:get_child("validate", xmlns_validate); |
b2ae91f4fec9
util.dataforms: Support XEP-0122 validation
Kim Alvefur <zash@zash.se>
parents:
441
diff
changeset
|
66 | if datatype_tag then |
b2ae91f4fec9
util.dataforms: Support XEP-0122 validation
Kim Alvefur <zash@zash.se>
parents:
441
diff
changeset
|
67 | field.datatype = datatype.attr.datatype; |
b2ae91f4fec9
util.dataforms: Support XEP-0122 validation
Kim Alvefur <zash@zash.se>
parents:
441
diff
changeset
|
68 | local range_tag = datatype_tag:get_child("range"); |
b2ae91f4fec9
util.dataforms: Support XEP-0122 validation
Kim Alvefur <zash@zash.se>
parents:
441
diff
changeset
|
69 | if range_tag then |
b2ae91f4fec9
util.dataforms: Support XEP-0122 validation
Kim Alvefur <zash@zash.se>
parents:
441
diff
changeset
|
70 | field.range_min = tonumber(range_tag.attr.min); |
b2ae91f4fec9
util.dataforms: Support XEP-0122 validation
Kim Alvefur <zash@zash.se>
parents:
441
diff
changeset
|
71 | field.range_max = tonumber(range_tag.attr.max); |
b2ae91f4fec9
util.dataforms: Support XEP-0122 validation
Kim Alvefur <zash@zash.se>
parents:
441
diff
changeset
|
72 | end |
b2ae91f4fec9
util.dataforms: Support XEP-0122 validation
Kim Alvefur <zash@zash.se>
parents:
441
diff
changeset
|
73 | end |
b2ae91f4fec9
util.dataforms: Support XEP-0122 validation
Kim Alvefur <zash@zash.se>
parents:
441
diff
changeset
|
74 | |
335
9e69ee8542d4
util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents:
334
diff
changeset
|
75 | end |
9e69ee8542d4
util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents:
334
diff
changeset
|
76 | return new(layout); |
9e69ee8542d4
util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents:
334
diff
changeset
|
77 | end |
9e69ee8542d4
util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents:
334
diff
changeset
|
78 | |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
79 | function form_t.form(layout, data, formtype) |
441
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
80 | if not formtype then formtype = "form" end |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
81 | local form = st.stanza("x", { xmlns = xmlns_forms, type = formtype }); |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
82 | if formtype == "cancel" then |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
83 | return form; |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
84 | end |
441
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
85 | if formtype ~= "submit" then |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
86 | if layout.title then |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
87 | form:tag("title"):text(layout.title):up(); |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
88 | end |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
89 | if layout.instructions then |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
90 | form:tag("instructions"):text(layout.instructions):up(); |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
91 | end |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
92 | end |
441
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
93 | for _, field in ipairs(layout) do |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
94 | local field_type = field.type or "text-single"; |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
95 | -- Add field tag |
441
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
96 | form:tag("field", { type = field_type, var = field.var or field.name, label = formtype ~= "submit" and field.label or nil }); |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
97 | |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
98 | if formtype ~= "submit" then |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
99 | if field.desc then |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
100 | form:text_tag("desc", field.desc); |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
101 | end |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
102 | end |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
103 | |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
104 | if formtype == "form" and field.datatype then |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
105 | form:tag("validate", { xmlns = xmlns_validate, datatype = field.datatype }); |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
106 | if field.range_min or field.range_max then |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
107 | form:tag("range", { |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
108 | min = field.range_min and tostring(field.range_min), |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
109 | max = field.range_max and tostring(field.range_max), |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
110 | }):up(); |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
111 | end |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
112 | -- <basic/> assumed |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
113 | form:up(); |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
114 | end |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
115 | |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
116 | |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
117 | local value = field.value; |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
118 | local options = field.options; |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
119 | |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
120 | if data and data[field.name] ~= nil then |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
121 | value = data[field.name]; |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
122 | |
441
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
123 | if formtype == "form" and type(value) == "table" |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
124 | and (field_type == "list-single" or field_type == "list-multi") then |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
125 | -- Allow passing dynamically generated options as values |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
126 | options, value = value, nil; |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
127 | end |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
128 | end |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
129 | |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
130 | if formtype == "form" and options then |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
131 | local defaults = {}; |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
132 | for _, val in ipairs(options) do |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
133 | if type(val) == "table" then |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
134 | form:tag("option", { label = val.label }):tag("value"):text(val.value):up():up(); |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
135 | if val.default then |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
136 | defaults[#defaults+1] = val.value; |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
137 | end |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
138 | else |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
139 | form:tag("option", { label= val }):tag("value"):text(val):up():up(); |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
140 | end |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
141 | end |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
142 | if not value then |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
143 | if field_type == "list-single" then |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
144 | value = defaults[1]; |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
145 | elseif field_type == "list-multi" then |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
146 | value = defaults; |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
147 | end |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
148 | end |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
149 | end |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
150 | |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
151 | if value ~= nil then |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
152 | if type(value) == "number" then |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
153 | -- TODO validate that this is ok somehow, eg check field.datatype |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
154 | value = ("%g"):format(value); |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
155 | end |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
156 | -- Add value, depending on type |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
157 | if field_type == "hidden" then |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
158 | if type(value) == "table" then |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
159 | -- Assume an XML snippet |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
160 | form:tag("value") |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
161 | :add_child(value) |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
162 | :up(); |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
163 | else |
441
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
164 | form:tag("value"):text(value):up(); |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
165 | end |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
166 | elseif field_type == "boolean" then |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
167 | form:tag("value"):text((value and "1") or "0"):up(); |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
168 | elseif field_type == "fixed" then |
441
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
169 | form:tag("value"):text(value):up(); |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
170 | elseif field_type == "jid-multi" then |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
171 | for _, jid in ipairs(value) do |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
172 | form:tag("value"):text(jid):up(); |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
173 | end |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
174 | elseif field_type == "jid-single" then |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
175 | form:tag("value"):text(value):up(); |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
176 | elseif field_type == "text-single" or field_type == "text-private" then |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
177 | form:tag("value"):text(value):up(); |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
178 | elseif field_type == "text-multi" then |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
179 | -- Split into multiple <value> tags, one for each line |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
180 | for line in value:gmatch("([^\r\n]+)\r?\n*") do |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
181 | form:tag("value"):text(line):up(); |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
182 | end |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
183 | elseif field_type == "list-single" then |
441
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
184 | form:tag("value"):text(value):up(); |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
185 | elseif field_type == "list-multi" then |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
186 | for _, val in ipairs(value) do |
441
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
187 | form:tag("value"):text(val):up(); |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
188 | end |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
189 | end |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
190 | end |
441
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
191 | |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
192 | local media = field.media; |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
193 | if media then |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
194 | form:tag("media", { xmlns = "urn:xmpp:media-element", height = ("%g"):format(media.height), width = ("%g"):format(media.width) }); |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
195 | for _, val in ipairs(media) do |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
196 | form:tag("uri", { type = val.type }):text(val.uri):up() |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
197 | end |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
198 | form:up(); |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
199 | end |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
200 | |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
201 | if formtype == "form" and field.required then |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
202 | form:tag("required"):up(); |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
203 | end |
441
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
204 | |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
205 | -- Jump back up to list of fields |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
206 | form:up(); |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
207 | end |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
208 | return form; |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
209 | end |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
210 | |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
211 | local field_readers = {}; |
441
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
212 | local data_validators = {}; |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
213 | |
441
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
214 | function form_t.data(layout, stanza, current) |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
215 | local data = {}; |
334
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
216 | local errors = {}; |
441
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
217 | local present = {}; |
334
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
218 | |
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
219 | for _, field in ipairs(layout) do |
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
220 | local tag; |
441
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
221 | for field_tag in stanza:childtags("field") do |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
222 | if (field.var or field.name) == field_tag.attr.var then |
334
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
223 | tag = field_tag; |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
224 | break; |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
225 | end |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
226 | end |
334
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
227 | |
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
228 | if not tag then |
441
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
229 | if current and current[field.name] ~= nil then |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
230 | data[field.name] = current[field.name]; |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
231 | elseif field.required then |
334
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
232 | errors[field.name] = "Required value missing"; |
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
233 | end |
441
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
234 | elseif field.name then |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
235 | present[field.name] = true; |
334
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
236 | local reader = field_readers[field.type]; |
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
237 | if reader then |
441
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
238 | local value, err = reader(tag, field.required); |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
239 | local validator = field.datatype and data_validators[field.datatype]; |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
240 | if value ~= nil and validator then |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
241 | local valid, ret = validator(value, field); |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
242 | if valid then |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
243 | value = ret; |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
244 | else |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
245 | value, err = nil, ret or ("Invalid value for data of type " .. field.datatype); |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
246 | end |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
247 | end |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
248 | data[field.name], errors[field.name] = value, err; |
334
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
249 | end |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
250 | end |
334
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
251 | end |
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
252 | if next(errors) then |
441
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
253 | return data, errors, present; |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
254 | end |
441
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
255 | return data, nil, present; |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
256 | end |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
257 | |
441
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
258 | local function simple_text(field_tag, required) |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
259 | local data = field_tag:get_child_text("value"); |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
260 | -- XEP-0004 does not say if an empty string is acceptable for a required value |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
261 | -- so we will follow HTML5 which says that empty string means missing |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
262 | if required and (data == nil or data == "") then |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
263 | return nil, "Required value missing"; |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
264 | end |
441
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
265 | return data; -- Return whatever get_child_text returned, even if empty string |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
266 | end |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
267 | |
441
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
268 | field_readers["text-single"] = simple_text; |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
269 | |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
270 | field_readers["text-private"] = simple_text; |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
271 | |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
272 | field_readers["jid-single"] = |
334
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
273 | function (field_tag, required) |
441
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
274 | local raw_data, err = simple_text(field_tag, required); |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
275 | if not raw_data then return raw_data, err; end |
334
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
276 | local data = jid_prep(raw_data); |
441
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
277 | if not data then |
334
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
278 | return nil, "Invalid JID: " .. raw_data; |
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
279 | end |
441
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
280 | return data; |
334
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
281 | end |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
282 | |
334
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
283 | field_readers["jid-multi"] = |
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
284 | function (field_tag, required) |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
285 | local result = {}; |
334
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
286 | local err = {}; |
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
287 | for value_tag in field_tag:childtags("value") do |
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
288 | local raw_value = value_tag:get_text(); |
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
289 | local value = jid_prep(raw_value); |
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
290 | result[#result+1] = value; |
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
291 | if raw_value and not value then |
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
292 | err[#err+1] = ("Invalid JID: " .. raw_value); |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
293 | end |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
294 | end |
334
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
295 | if #result > 0 then |
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
296 | return result, (#err > 0 and t_concat(err, "\n") or nil); |
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
297 | elseif required then |
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
298 | return nil, "Required value missing"; |
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
299 | end |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
300 | end |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
301 | |
334
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
302 | field_readers["list-multi"] = |
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
303 | function (field_tag, required) |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
304 | local result = {}; |
334
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
305 | for value in field_tag:childtags("value") do |
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
306 | result[#result+1] = value:get_text(); |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
307 | end |
441
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
308 | if #result > 0 then |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
309 | return result; |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
310 | elseif required then |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
311 | return nil, "Required value missing"; |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
312 | end |
334
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
313 | end |
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
314 | |
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
315 | field_readers["text-multi"] = |
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
316 | function (field_tag, required) |
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
317 | local data, err = field_readers["list-multi"](field_tag, required); |
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
318 | if data then |
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
319 | data = t_concat(data, "\n"); |
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
320 | end |
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
321 | return data, err; |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
322 | end |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
323 | |
441
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
324 | field_readers["list-single"] = simple_text; |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
325 | |
334
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
326 | local boolean_values = { |
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
327 | ["1"] = true, ["true"] = true, |
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
328 | ["0"] = false, ["false"] = false, |
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
329 | }; |
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
330 | |
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
331 | field_readers["boolean"] = |
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
332 | function (field_tag, required) |
441
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
333 | local raw_value, err = simple_text(field_tag, required); |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
334 | if not raw_value then return raw_value, err; end |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
335 | local value = boolean_values[raw_value]; |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
336 | if value == nil then |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
337 | return nil, "Invalid boolean representation:" .. raw_value; |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
338 | end |
441
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
339 | return value; |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
340 | end |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
341 | |
334
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
342 | field_readers["hidden"] = |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
343 | function (field_tag) |
334
34c52f3b21c4
util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents:
123
diff
changeset
|
344 | return field_tag:get_child_text("value"); |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
345 | end |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
346 | |
441
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
347 | data_validators["xs:integer"] = |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
348 | function (data, field) |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
349 | local n = tonumber(data); |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
350 | if not n then |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
351 | return false, "not a number"; |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
352 | elseif n % 1 ~= 0 then |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
353 | return false, "not an integer"; |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
354 | end |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
355 | if field.range_max and n > field.range_max then |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
356 | return false, "out of bounds"; |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
357 | elseif field.range_min and n < field.range_min then |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
358 | return false, "out of bounds"; |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
359 | end |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
360 | return true, n; |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
361 | end |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
362 | |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
363 | |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
364 | local function get_form_type(form) |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
365 | if not st.is_stanza(form) then |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
366 | return nil, "not a stanza object"; |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
367 | elseif form.attr.xmlns ~= "jabber:x:data" or form.name ~= "x" then |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
368 | return nil, "not a dataform element"; |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
369 | end |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
370 | for field in form:childtags("field") do |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
371 | if field.attr.var == "FORM_TYPE" then |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
372 | return field:get_child_text("value"); |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
373 | end |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
374 | end |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
375 | return ""; |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
376 | end |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
377 | |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
378 | return { |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
379 | new = new; |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
380 | from_stanza = from_stanza; |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
381 | get_type = get_form_type; |
e4c0b1d7fd6b
util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents:
335
diff
changeset
|
382 | }; |
123
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
383 | |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
384 | |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
385 | --[=[ |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
386 | |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
387 | Layout: |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
388 | { |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
389 | |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
390 | title = "MUC Configuration", |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
391 | instructions = [[Use this form to configure options for this MUC room.]], |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
392 | |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
393 | { name = "FORM_TYPE", type = "hidden", required = true }; |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
394 | { name = "field-name", type = "field-type", required = false }; |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
395 | } |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
396 | |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
397 | |
8a079aa70b84
util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
398 | --]=] |