net.dns: Ensure all pending requests get notified of a timeout when looking up a...
[prosody.git] / util / dataforms.lua
index 85bb39c146f959d4b6ff81fca46a27c597c97dd3..01a8eef327c1ac566a0ecfabb997c03207f6f237 100644 (file)
@@ -53,7 +53,7 @@ function form_t.form(layout, data, formtype)
                        elseif field_type == "boolean" then
                                form:tag("value"):text((value and "1") or "0"):up();
                        elseif field_type == "fixed" then
-                               
+                               form:tag("value"):text(value):up();
                        elseif field_type == "jid-multi" then
                                for _, jid in ipairs(value) do
                                        form:tag("value"):text(jid):up();
@@ -93,6 +93,15 @@ function form_t.form(layout, data, formtype)
                                end
                        end
                end
+
+               local media = field.media;
+               if media then
+                       form:tag("media", { xmlns = "urn:xmpp:media-element", height = media.height, width = media.width });
+                       for _, val in ipairs(media) do
+                               form:tag("uri", { type = val.type }):text(val.uri):up()
+                       end
+                       form:up();
+               end
                
                if field.required then
                        form:tag("required"):up();
@@ -156,7 +165,7 @@ field_readers["jid-single"] =
                if data and #data > 0 then
                        return data
                elseif raw_data then
-                       return raw_data, "Invalid JID";
+                       return nil, "Invalid JID: " .. raw_data;
                elseif required then
                        return nil, "Required value missing";
                end
@@ -185,9 +194,13 @@ field_readers["list-multi"] =
        function (field_tag, required)
                local result = {};
                for value in field_tag:childtags("value") do
-                       result[#result+1] = value;
+                       result[#result+1] = value:get_text();
+               end
+               if #result > 0 then
+                       return result;
+               elseif required then
+                       return nil, "Required value missing";
                end
-               return result, (required and #result == 0 and "Required value missing" or nil);
        end
 
 field_readers["text-multi"] =
@@ -202,10 +215,10 @@ field_readers["text-multi"] =
 field_readers["list-single"] =
        field_readers["text-single"];
 
-       local boolean_values = {
-               ["1"] = true, ["true"] = true,
-               ["0"] = false, ["false"] = false,
-       };
+local boolean_values = {
+       ["1"] = true, ["true"] = true,
+       ["0"] = false, ["false"] = false,
+};
 
 field_readers["boolean"] =
        function (field_tag, required)
@@ -214,7 +227,7 @@ field_readers["boolean"] =
                if value ~= nil then
                        return value;
                elseif raw_value then
-                       return "Invalid boolean representation";
+                       return nil, "Invalid boolean representation";
                elseif required then
                        return nil, "Required value missing";
                end