Software /
code /
prosody
Annotate
util/dataforms.lua @ 5877:615a0774e4cc
util.timer: Updated to use util.indexedbheap to provide a more complete API. Timers can now be stopped or rescheduled. Callbacks are now pcall'd. Adding/removing timers from within timer callbacks works better. Optional parameter can be passed when creating timer which gets passed to callback, eliminating the need for closures in various timer uses. Timers are now much more lightweight.
author | Waqas Hussain <waqas20@gmail.com> |
---|---|
date | Wed, 30 Oct 2013 17:44:42 -0400 |
parent | 5776:bd0ff8ae98a8 |
child | 6149:2ae6e9063e88 |
rev | line source |
---|---|
1522
569d58d21612
Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents:
957
diff
changeset
|
1 -- Prosody IM |
2923
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
2488
diff
changeset
|
2 -- Copyright (C) 2008-2010 Matthew Wild |
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
2488
diff
changeset
|
3 -- Copyright (C) 2008-2010 Waqas Hussain |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5693
diff
changeset
|
4 -- |
1522
569d58d21612
Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents:
957
diff
changeset
|
5 -- This project is MIT/X11 licensed. Please see the |
569d58d21612
Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents:
957
diff
changeset
|
6 -- COPYING file in the source package for more information. |
569d58d21612
Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents:
957
diff
changeset
|
7 -- |
569d58d21612
Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents:
957
diff
changeset
|
8 |
951
4b9207949735
util.dataforms: Fixed to actually work, mostly
Matthew Wild <mwild1@gmail.com>
parents:
851
diff
changeset
|
9 local setmetatable = setmetatable; |
4b9207949735
util.dataforms: Fixed to actually work, mostly
Matthew Wild <mwild1@gmail.com>
parents:
851
diff
changeset
|
10 local pairs, ipairs = pairs, ipairs; |
4397
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
11 local tostring, type, next = tostring, type, next; |
954
72e4639c9310
util.dataforms: Fixes for hidden field type
Matthew Wild <mwild1@gmail.com>
parents:
953
diff
changeset
|
12 local t_concat = table.concat; |
951
4b9207949735
util.dataforms: Fixed to actually work, mostly
Matthew Wild <mwild1@gmail.com>
parents:
851
diff
changeset
|
13 local st = require "util.stanza"; |
4397
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
14 local jid_prep = require "util.jid".prep; |
845
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
15 |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 module "dataforms" |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 local xmlns_forms = 'jabber:x:data'; |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
19 |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 local form_t = {}; |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 local form_mt = { __index = form_t }; |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 function new(layout) |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 return setmetatable(layout, form_mt); |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 end |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 |
2488
08bfd7c96531
util.dataforms: Add optional type parameters (defaults to 'form')
Matthew Wild <mwild1@gmail.com>
parents:
2219
diff
changeset
|
27 function form_t.form(layout, data, formtype) |
08bfd7c96531
util.dataforms: Add optional type parameters (defaults to 'form')
Matthew Wild <mwild1@gmail.com>
parents:
2219
diff
changeset
|
28 local form = st.stanza("x", { xmlns = xmlns_forms, type = formtype or "form" }); |
951
4b9207949735
util.dataforms: Fixed to actually work, mostly
Matthew Wild <mwild1@gmail.com>
parents:
851
diff
changeset
|
29 if layout.title then |
4b9207949735
util.dataforms: Fixed to actually work, mostly
Matthew Wild <mwild1@gmail.com>
parents:
851
diff
changeset
|
30 form:tag("title"):text(layout.title):up(); |
4b9207949735
util.dataforms: Fixed to actually work, mostly
Matthew Wild <mwild1@gmail.com>
parents:
851
diff
changeset
|
31 end |
4b9207949735
util.dataforms: Fixed to actually work, mostly
Matthew Wild <mwild1@gmail.com>
parents:
851
diff
changeset
|
32 if layout.instructions then |
4b9207949735
util.dataforms: Fixed to actually work, mostly
Matthew Wild <mwild1@gmail.com>
parents:
851
diff
changeset
|
33 form:tag("instructions"):text(layout.instructions):up(); |
4b9207949735
util.dataforms: Fixed to actually work, mostly
Matthew Wild <mwild1@gmail.com>
parents:
851
diff
changeset
|
34 end |
845
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 for n, field in ipairs(layout) do |
951
4b9207949735
util.dataforms: Fixed to actually work, mostly
Matthew Wild <mwild1@gmail.com>
parents:
851
diff
changeset
|
36 local field_type = field.type or "text-single"; |
845
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
37 -- Add field tag |
951
4b9207949735
util.dataforms: Fixed to actually work, mostly
Matthew Wild <mwild1@gmail.com>
parents:
851
diff
changeset
|
38 form:tag("field", { type = field_type, var = field.name, label = field.label }); |
845
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
39 |
1945
adfd7f3720f5
util.dataforms: Small fix to allow generating forms without specifying any input data
Matthew Wild <mwild1@gmail.com>
parents:
1944
diff
changeset
|
40 local value = (data and data[field.name]) or field.value; |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5693
diff
changeset
|
41 |
2061
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
42 if value then |
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
43 -- Add value, depending on type |
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
44 if field_type == "hidden" then |
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
45 if type(value) == "table" then |
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
46 -- Assume an XML snippet |
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
47 form:tag("value") |
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
48 :add_child(value) |
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
49 :up(); |
1958
e2b0026143c4
util.dataforms: Incorporate slightly modified patch for list-single type from Florob
Matthew Wild <mwild1@gmail.com>
parents:
1945
diff
changeset
|
50 else |
2061
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
51 form:tag("value"):text(tostring(value)):up(); |
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
52 end |
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
53 elseif field_type == "boolean" then |
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
54 form:tag("value"):text((value and "1") or "0"):up(); |
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
55 elseif field_type == "fixed" then |
5551
e1e06f1465be
util.dataforms: Add support for generating type='fixed' fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4928
diff
changeset
|
56 form:tag("value"):text(value):up(); |
2061
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
57 elseif field_type == "jid-multi" then |
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
58 for _, jid in ipairs(value) do |
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
59 form:tag("value"):text(jid):up(); |
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
60 end |
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
61 elseif field_type == "jid-single" then |
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
62 form:tag("value"):text(value):up(); |
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
63 elseif field_type == "text-single" or field_type == "text-private" then |
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
64 form:tag("value"):text(value):up(); |
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
65 elseif field_type == "text-multi" then |
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
66 -- Split into multiple <value> tags, one for each line |
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
67 for line in value:gmatch("([^\r\n]+)\r?\n*") do |
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
68 form:tag("value"):text(line):up(); |
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
69 end |
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
70 elseif field_type == "list-single" then |
3379
17d4298b2a58
util.dataforms: Capability to set default for list-single
Florian Zeitz <florob@babelmonkeys.de>
parents:
2923
diff
changeset
|
71 local has_default = false; |
2061
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
72 for _, val in ipairs(value) do |
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
73 if type(val) == "table" then |
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
74 form:tag("option", { label = val.label }):tag("value"):text(val.value):up():up(); |
3379
17d4298b2a58
util.dataforms: Capability to set default for list-single
Florian Zeitz <florob@babelmonkeys.de>
parents:
2923
diff
changeset
|
75 if val.default and (not has_default) then |
17d4298b2a58
util.dataforms: Capability to set default for list-single
Florian Zeitz <florob@babelmonkeys.de>
parents:
2923
diff
changeset
|
76 form:tag("value"):text(val.value):up(); |
17d4298b2a58
util.dataforms: Capability to set default for list-single
Florian Zeitz <florob@babelmonkeys.de>
parents:
2923
diff
changeset
|
77 has_default = true; |
17d4298b2a58
util.dataforms: Capability to set default for list-single
Florian Zeitz <florob@babelmonkeys.de>
parents:
2923
diff
changeset
|
78 end |
2061
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
79 else |
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
80 form:tag("option", { label= val }):tag("value"):text(tostring(val)):up():up(); |
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
81 end |
1958
e2b0026143c4
util.dataforms: Incorporate slightly modified patch for list-single type from Florob
Matthew Wild <mwild1@gmail.com>
parents:
1945
diff
changeset
|
82 end |
3380
e74e80b454a1
util.dataforms: Add list-multi support
Florian Zeitz <florob@babelmonkeys.de>
parents:
3379
diff
changeset
|
83 elseif field_type == "list-multi" then |
e74e80b454a1
util.dataforms: Add list-multi support
Florian Zeitz <florob@babelmonkeys.de>
parents:
3379
diff
changeset
|
84 for _, val in ipairs(value) do |
e74e80b454a1
util.dataforms: Add list-multi support
Florian Zeitz <florob@babelmonkeys.de>
parents:
3379
diff
changeset
|
85 if type(val) == "table" then |
e74e80b454a1
util.dataforms: Add list-multi support
Florian Zeitz <florob@babelmonkeys.de>
parents:
3379
diff
changeset
|
86 form:tag("option", { label = val.label }):tag("value"):text(val.value):up():up(); |
e74e80b454a1
util.dataforms: Add list-multi support
Florian Zeitz <florob@babelmonkeys.de>
parents:
3379
diff
changeset
|
87 if val.default then |
e74e80b454a1
util.dataforms: Add list-multi support
Florian Zeitz <florob@babelmonkeys.de>
parents:
3379
diff
changeset
|
88 form:tag("value"):text(val.value):up(); |
e74e80b454a1
util.dataforms: Add list-multi support
Florian Zeitz <florob@babelmonkeys.de>
parents:
3379
diff
changeset
|
89 end |
e74e80b454a1
util.dataforms: Add list-multi support
Florian Zeitz <florob@babelmonkeys.de>
parents:
3379
diff
changeset
|
90 else |
e74e80b454a1
util.dataforms: Add list-multi support
Florian Zeitz <florob@babelmonkeys.de>
parents:
3379
diff
changeset
|
91 form:tag("option", { label= val }):tag("value"):text(tostring(val)):up():up(); |
e74e80b454a1
util.dataforms: Add list-multi support
Florian Zeitz <florob@babelmonkeys.de>
parents:
3379
diff
changeset
|
92 end |
e74e80b454a1
util.dataforms: Add list-multi support
Florian Zeitz <florob@babelmonkeys.de>
parents:
3379
diff
changeset
|
93 end |
1958
e2b0026143c4
util.dataforms: Incorporate slightly modified patch for list-single type from Florob
Matthew Wild <mwild1@gmail.com>
parents:
1945
diff
changeset
|
94 end |
845
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
95 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5693
diff
changeset
|
96 |
952
ef648f49e734
util.dataforms: Add support for <required/> fields
Matthew Wild <mwild1@gmail.com>
parents:
951
diff
changeset
|
97 if field.required then |
ef648f49e734
util.dataforms: Add support for <required/> fields
Matthew Wild <mwild1@gmail.com>
parents:
951
diff
changeset
|
98 form:tag("required"):up(); |
ef648f49e734
util.dataforms: Add support for <required/> fields
Matthew Wild <mwild1@gmail.com>
parents:
951
diff
changeset
|
99 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5693
diff
changeset
|
100 |
845
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
101 -- Jump back up to list of fields |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
102 form:up(); |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
103 end |
851
b48c7ed3f7f8
util.dataforms: Return the form
Matthew Wild <mwild1@gmail.com>
parents:
845
diff
changeset
|
104 return form; |
845
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
105 end |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
106 |
955
98ca5a753fee
util.dataforms: Support for retriving the field value data from forms
Matthew Wild <mwild1@gmail.com>
parents:
954
diff
changeset
|
107 local field_readers = {}; |
98ca5a753fee
util.dataforms: Support for retriving the field value data from forms
Matthew Wild <mwild1@gmail.com>
parents:
954
diff
changeset
|
108 |
845
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
109 function form_t.data(layout, stanza) |
955
98ca5a753fee
util.dataforms: Support for retriving the field value data from forms
Matthew Wild <mwild1@gmail.com>
parents:
954
diff
changeset
|
110 local data = {}; |
4397
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
111 local errors = {}; |
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
112 |
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
113 for _, field in ipairs(layout) do |
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
114 local tag; |
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
115 for field_tag in stanza:childtags() do |
2219
9e1c6b6a2ee4
util.dataforms: Don't require type when parsing form XML
Florian Zeitz
parents:
2070
diff
changeset
|
116 if field.name == field_tag.attr.var then |
4397
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
117 tag = field_tag; |
2219
9e1c6b6a2ee4
util.dataforms: Don't require type when parsing form XML
Florian Zeitz
parents:
2070
diff
changeset
|
118 break; |
9e1c6b6a2ee4
util.dataforms: Don't require type when parsing form XML
Florian Zeitz
parents:
2070
diff
changeset
|
119 end |
9e1c6b6a2ee4
util.dataforms: Don't require type when parsing form XML
Florian Zeitz
parents:
2070
diff
changeset
|
120 end |
4397
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
121 |
4434
51a7c85751b9
util.dataforms: Fix form verification
Florian Zeitz <florob@babelmonkeys.de>
parents:
4397
diff
changeset
|
122 if not tag then |
51a7c85751b9
util.dataforms: Fix form verification
Florian Zeitz <florob@babelmonkeys.de>
parents:
4397
diff
changeset
|
123 if field.required then |
51a7c85751b9
util.dataforms: Fix form verification
Florian Zeitz <florob@babelmonkeys.de>
parents:
4397
diff
changeset
|
124 errors[field.name] = "Required value missing"; |
51a7c85751b9
util.dataforms: Fix form verification
Florian Zeitz <florob@babelmonkeys.de>
parents:
4397
diff
changeset
|
125 end |
51a7c85751b9
util.dataforms: Fix form verification
Florian Zeitz <florob@babelmonkeys.de>
parents:
4397
diff
changeset
|
126 else |
51a7c85751b9
util.dataforms: Fix form verification
Florian Zeitz <florob@babelmonkeys.de>
parents:
4397
diff
changeset
|
127 local reader = field_readers[field.type]; |
51a7c85751b9
util.dataforms: Fix form verification
Florian Zeitz <florob@babelmonkeys.de>
parents:
4397
diff
changeset
|
128 if reader then |
4884
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
129 data[field.name], errors[field.name] = reader(tag, field.required); |
4397
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
130 end |
955
98ca5a753fee
util.dataforms: Support for retriving the field value data from forms
Matthew Wild <mwild1@gmail.com>
parents:
954
diff
changeset
|
131 end |
4397
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
132 end |
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
133 if next(errors) then |
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
134 return data, errors; |
955
98ca5a753fee
util.dataforms: Support for retriving the field value data from forms
Matthew Wild <mwild1@gmail.com>
parents:
954
diff
changeset
|
135 end |
98ca5a753fee
util.dataforms: Support for retriving the field value data from forms
Matthew Wild <mwild1@gmail.com>
parents:
954
diff
changeset
|
136 return data; |
845
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
137 end |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
138 |
3540
bc139431830b
Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents:
3380
diff
changeset
|
139 field_readers["text-single"] = |
4884
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
140 function (field_tag, required) |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
141 local data = field_tag:get_child_text("value"); |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
142 if data and #data > 0 then |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
143 return data |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
144 elseif required then |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
145 return nil, "Required value missing"; |
4397
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
146 end |
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
147 end |
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
148 |
3540
bc139431830b
Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents:
3380
diff
changeset
|
149 field_readers["text-private"] = |
955
98ca5a753fee
util.dataforms: Support for retriving the field value data from forms
Matthew Wild <mwild1@gmail.com>
parents:
954
diff
changeset
|
150 field_readers["text-single"]; |
98ca5a753fee
util.dataforms: Support for retriving the field value data from forms
Matthew Wild <mwild1@gmail.com>
parents:
954
diff
changeset
|
151 |
1944
754eebd31538
util.dataforms: Support for jid-single field type especially for Florob :)
Matthew Wild <mwild1@gmail.com>
parents:
1522
diff
changeset
|
152 field_readers["jid-single"] = |
4884
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
153 function (field_tag, required) |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
154 local raw_data = field_tag:get_child_text("value") |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
155 local data = jid_prep(raw_data); |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
156 if data and #data > 0 then |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
157 return data |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
158 elseif raw_data then |
4887
4dd61fe04db4
util.dataforms: Don't return invalid JIDs in jid-single.
Kim Alvefur <zash@zash.se>
parents:
4886
diff
changeset
|
159 return nil, "Invalid JID: " .. raw_data; |
4884
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
160 elseif required then |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
161 return nil, "Required value missing"; |
4397
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
162 end |
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
163 end |
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
164 |
3540
bc139431830b
Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents:
3380
diff
changeset
|
165 field_readers["jid-multi"] = |
4884
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
166 function (field_tag, required) |
2070
25dc4b9d06b1
util.dataforms: Support for jid-multi field type
Florian Zeitz
parents:
2061
diff
changeset
|
167 local result = {}; |
4884
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
168 local err = {}; |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
169 for value_tag in field_tag:childtags("value") do |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
170 local raw_value = value_tag:get_text(); |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
171 local value = jid_prep(raw_value); |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
172 result[#result+1] = value; |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
173 if raw_value and not value then |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
174 err[#err+1] = ("Invalid JID: " .. raw_value); |
2070
25dc4b9d06b1
util.dataforms: Support for jid-multi field type
Florian Zeitz
parents:
2061
diff
changeset
|
175 end |
25dc4b9d06b1
util.dataforms: Support for jid-multi field type
Florian Zeitz
parents:
2061
diff
changeset
|
176 end |
4884
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
177 if #result > 0 then |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
178 return result, (#err > 0 and t_concat(err, "\n") or nil); |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
179 elseif required then |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
180 return nil, "Required value missing"; |
4397
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
181 end |
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
182 end |
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
183 |
4884
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
184 field_readers["list-multi"] = |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
185 function (field_tag, required) |
955
98ca5a753fee
util.dataforms: Support for retriving the field value data from forms
Matthew Wild <mwild1@gmail.com>
parents:
954
diff
changeset
|
186 local result = {}; |
4884
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
187 for value in field_tag:childtags("value") do |
4928
5211c11dd865
util.dataforms: Fix parsing of -multi fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4887
diff
changeset
|
188 result[#result+1] = value:get_text(); |
955
98ca5a753fee
util.dataforms: Support for retriving the field value data from forms
Matthew Wild <mwild1@gmail.com>
parents:
954
diff
changeset
|
189 end |
5693
ef490e9276df
util.dataforms: Return nil for empty list-mutli responses, to be consistent with other readers
Florian Zeitz <florob@babelmonkeys.de>
parents:
5551
diff
changeset
|
190 if #result > 0 then |
ef490e9276df
util.dataforms: Return nil for empty list-mutli responses, to be consistent with other readers
Florian Zeitz <florob@babelmonkeys.de>
parents:
5551
diff
changeset
|
191 return result; |
ef490e9276df
util.dataforms: Return nil for empty list-mutli responses, to be consistent with other readers
Florian Zeitz <florob@babelmonkeys.de>
parents:
5551
diff
changeset
|
192 elseif required then |
ef490e9276df
util.dataforms: Return nil for empty list-mutli responses, to be consistent with other readers
Florian Zeitz <florob@babelmonkeys.de>
parents:
5551
diff
changeset
|
193 return nil, "Required value missing"; |
ef490e9276df
util.dataforms: Return nil for empty list-mutli responses, to be consistent with other readers
Florian Zeitz <florob@babelmonkeys.de>
parents:
5551
diff
changeset
|
194 end |
955
98ca5a753fee
util.dataforms: Support for retriving the field value data from forms
Matthew Wild <mwild1@gmail.com>
parents:
954
diff
changeset
|
195 end |
98ca5a753fee
util.dataforms: Support for retriving the field value data from forms
Matthew Wild <mwild1@gmail.com>
parents:
954
diff
changeset
|
196 |
4884
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
197 field_readers["text-multi"] = |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
198 function (field_tag, required) |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
199 local data, err = field_readers["list-multi"](field_tag, required); |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
200 if data then |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
201 data = t_concat(data, "\n"); |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
202 end |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
203 return data, err; |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
204 end |
4397
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
205 |
1958
e2b0026143c4
util.dataforms: Incorporate slightly modified patch for list-single type from Florob
Matthew Wild <mwild1@gmail.com>
parents:
1945
diff
changeset
|
206 field_readers["list-single"] = |
e2b0026143c4
util.dataforms: Incorporate slightly modified patch for list-single type from Florob
Matthew Wild <mwild1@gmail.com>
parents:
1945
diff
changeset
|
207 field_readers["text-single"]; |
e2b0026143c4
util.dataforms: Incorporate slightly modified patch for list-single type from Florob
Matthew Wild <mwild1@gmail.com>
parents:
1945
diff
changeset
|
208 |
4928
5211c11dd865
util.dataforms: Fix parsing of -multi fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4887
diff
changeset
|
209 local boolean_values = { |
5211c11dd865
util.dataforms: Fix parsing of -multi fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4887
diff
changeset
|
210 ["1"] = true, ["true"] = true, |
5211c11dd865
util.dataforms: Fix parsing of -multi fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4887
diff
changeset
|
211 ["0"] = false, ["false"] = false, |
5211c11dd865
util.dataforms: Fix parsing of -multi fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4887
diff
changeset
|
212 }; |
4397
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
213 |
3540
bc139431830b
Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents:
3380
diff
changeset
|
214 field_readers["boolean"] = |
4884
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
215 function (field_tag, required) |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
216 local raw_value = field_tag:get_child_text("value"); |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
217 local value = boolean_values[raw_value ~= nil and raw_value]; |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
218 if value ~= nil then |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
219 return value; |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
220 elseif raw_value then |
4886
26d8e4665ce9
util.dataforms: Fix validation of booleans.
Kim Alvefur <zash@zash.se>
parents:
4884
diff
changeset
|
221 return nil, "Invalid boolean representation"; |
4884
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
222 elseif required then |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
223 return nil, "Required value missing"; |
4397
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
224 end |
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
225 end |
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
226 |
3540
bc139431830b
Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents:
3380
diff
changeset
|
227 field_readers["hidden"] = |
955
98ca5a753fee
util.dataforms: Support for retriving the field value data from forms
Matthew Wild <mwild1@gmail.com>
parents:
954
diff
changeset
|
228 function (field_tag) |
4884
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
229 return field_tag:get_child_text("value"); |
955
98ca5a753fee
util.dataforms: Support for retriving the field value data from forms
Matthew Wild <mwild1@gmail.com>
parents:
954
diff
changeset
|
230 end |
4397
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
231 |
951
4b9207949735
util.dataforms: Fixed to actually work, mostly
Matthew Wild <mwild1@gmail.com>
parents:
851
diff
changeset
|
232 return _M; |
845
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
233 |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
234 |
951
4b9207949735
util.dataforms: Fixed to actually work, mostly
Matthew Wild <mwild1@gmail.com>
parents:
851
diff
changeset
|
235 --[=[ |
845
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
236 |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
237 Layout: |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
238 { |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
239 |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
240 title = "MUC Configuration", |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
241 instructions = [[Use this form to configure options for this MUC room.]], |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
242 |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
243 { name = "FORM_TYPE", type = "hidden", required = true }; |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
244 { name = "field-name", type = "field-type", required = false }; |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
245 } |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
246 |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
247 |
951
4b9207949735
util.dataforms: Fixed to actually work, mostly
Matthew Wild <mwild1@gmail.com>
parents:
851
diff
changeset
|
248 --]=] |