Software / code / prosody
Comparison
util/dataforms.lua @ 6981:bcaa553de6e8
util.dataforms: Track which fields are included in a form
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Tue, 08 Dec 2015 20:16:49 +0100 |
| parent | 6830:e08f5d081a6c |
| child | 7442:156c95bfed0b |
comparison
equal
deleted
inserted
replaced
| 6980:daaa52b3f45f | 6981:bcaa553de6e8 |
|---|---|
| 116 local field_readers = {}; | 116 local field_readers = {}; |
| 117 | 117 |
| 118 function form_t.data(layout, stanza) | 118 function form_t.data(layout, stanza) |
| 119 local data = {}; | 119 local data = {}; |
| 120 local errors = {}; | 120 local errors = {}; |
| 121 local present = {}; | |
| 121 | 122 |
| 122 for _, field in ipairs(layout) do | 123 for _, field in ipairs(layout) do |
| 123 local tag; | 124 local tag; |
| 124 for field_tag in stanza:childtags("field") do | 125 for field_tag in stanza:childtags("field") do |
| 125 if field.name == field_tag.attr.var then | 126 if field.name == field_tag.attr.var then |
| 131 if not tag then | 132 if not tag then |
| 132 if field.required then | 133 if field.required then |
| 133 errors[field.name] = "Required value missing"; | 134 errors[field.name] = "Required value missing"; |
| 134 end | 135 end |
| 135 else | 136 else |
| 137 present[field.name] = true; | |
| 136 local reader = field_readers[field.type]; | 138 local reader = field_readers[field.type]; |
| 137 if reader then | 139 if reader then |
| 138 data[field.name], errors[field.name] = reader(tag, field.required); | 140 data[field.name], errors[field.name] = reader(tag, field.required); |
| 139 end | 141 end |
| 140 end | 142 end |
| 141 end | 143 end |
| 142 if next(errors) then | 144 if next(errors) then |
| 143 return data, errors; | 145 return data, errors, present; |
| 144 end | 146 end |
| 145 return data; | 147 return data, nil, present; |
| 146 end | 148 end |
| 147 | 149 |
| 148 local function simple_text(field_tag, required) | 150 local function simple_text(field_tag, required) |
| 149 local data = field_tag:get_child_text("value"); | 151 local data = field_tag:get_child_text("value"); |
| 150 -- XEP-0004 does not say if an empty string is acceptable for a required value | 152 -- XEP-0004 does not say if an empty string is acceptable for a required value |