| rev | line source | 
| bsw@51 | 1 function util.autoapi_xml(args) | 
| bsw@51 | 2   local selector = assert(args.selector) | 
| bsw@51 | 3   local fields = assert(args.fields) | 
| bsw@51 | 4   local rows = selector:exec() | 
| bsw@51 | 5   slot.set_layout("xml") | 
| bsw@51 | 6   slot.put("<initiative_list>\n") | 
| bsw@51 | 7   for i_row, row in ipairs(rows) do | 
| bsw@51 | 8     slot.put("  <initiative>\n") | 
| bsw@51 | 9     for i_field, field in ipairs(fields) do | 
| bsw@51 | 10       slot.put("    <", field.name, ">") | 
| bsw@51 | 11       local value | 
| bsw@51 | 12       if field.func then | 
| bsw@51 | 13         value = field.func(row) | 
| bsw@51 | 14       elseif field.field then | 
| bsw@51 | 15         value = row[field.name] | 
| bsw@51 | 16       end | 
| bsw/jbe@52 | 17       if value ~= nil then | 
| bsw@51 | 18         slot.put(encode.html(tostring(value))) | 
| bsw/jbe@52 | 19       else | 
| bsw/jbe@52 | 20         slot.put("NULL") | 
| bsw@51 | 21       end | 
| bsw@51 | 22       slot.put("</", field.name, ">\n") | 
| bsw@51 | 23     end | 
| bsw@51 | 24     slot.put("  </initiative>\n") | 
| bsw@51 | 25   end | 
| bsw@51 | 26   slot.put("</initiative_list>\n") | 
| bsw@51 | 27 end | 
| bsw@51 | 28 | 
| bsw@51 | 29 function util.autoapi_json(args) | 
| bsw@51 | 30   slot.set_layout("blank") | 
| bsw@51 | 31   local selector = assert(args.selector) | 
| bsw@51 | 32   local fields = assert(args.fields) | 
| bsw@51 | 33   local rows = selector:exec() | 
| bsw@51 | 34   slot.put("{\n") | 
| bsw@51 | 35   for i_row, row in ipairs(rows) do | 
| bsw@51 | 36     slot.put("  {\n") | 
| bsw@51 | 37     for i_field, field in ipairs(fields) do | 
| bsw@51 | 38       slot.put("    ", field.name, ": ") | 
| bsw@51 | 39       local value | 
| bsw@51 | 40       if field.func then | 
| bsw@51 | 41         value = field.func(row) | 
| bsw@51 | 42       elseif field.field then | 
| bsw@51 | 43         value = row[field.name] | 
| bsw@51 | 44       end | 
| bsw@51 | 45         slot.put(encode.json(value)) | 
| bsw@51 | 46       slot.put(",\n") | 
| bsw@51 | 47     end | 
| bsw@51 | 48     slot.put("  },\n") | 
| bsw@51 | 49   end | 
| bsw@51 | 50   slot.put("}\n") | 
| bsw@51 | 51 end | 
| bsw@51 | 52 | 
| bsw@51 | 53 function util.autoapi(args) | 
| bsw@51 | 54   local selector = assert(args.selector) | 
| bsw@51 | 55   local fields = assert(args.fields) | 
| bsw@51 | 56   local api_engine = assert(args.api_engine) | 
| bsw@51 | 57 | 
| bsw@51 | 58   selector:reset_fields() | 
| bsw@51 | 59 | 
| bsw@51 | 60   for i_field, field in ipairs(fields) do | 
| bsw@51 | 61     if field.field then | 
| bsw@51 | 62       selector:add_field(field.field, field.name) | 
| bsw@51 | 63     end | 
| bsw@51 | 64   end | 
| bsw@51 | 65 | 
| bsw@51 | 66   if api_engine == "xml" then | 
| bsw@51 | 67     util.autoapi_xml{ | 
| bsw@51 | 68       selector = selector, | 
| bsw@51 | 69       fields = fields | 
| bsw@51 | 70     } | 
| bsw@51 | 71   elseif api_engine == "json" then | 
| bsw@51 | 72     util.autoapi_json{ | 
| bsw@51 | 73       selector = selector, | 
| bsw@51 | 74       fields = fields | 
| bsw@51 | 75     } | 
| bsw@51 | 76   end | 
| bsw@51 | 77 | 
| bsw@51 | 78 end |