webmcp
annotate framework/env/ui_deprecated/multiselect.lua @ 2:72860d232f32
Version 1.0.2
Fixed bug with explicit garbage collection (requests > 256kB caused an error)
Views prefixed with an underscore can't be called externally
ui.paginate now displays the last page, if the selected page number is too high.
Fixed bug with explicit garbage collection (requests > 256kB caused an error)
Views prefixed with an underscore can't be called externally
ui.paginate now displays the last page, if the selected page number is too high.
| author | jbe/bsw |
|---|---|
| date | Thu Dec 10 12:00:00 2009 +0100 (2009-12-10) |
| parents | 9fdfb27f8e67 |
| children |
| rev | line source |
|---|---|
| jbe/bsw@0 | 1 function ui_deprecated.multiselect(args) |
| jbe/bsw@0 | 2 local record = assert(slot.get_state_table(), "ui_deprecated.multiselect was not called within a form.").form_record |
| jbe/bsw@0 | 3 local name = args.name |
| jbe/bsw@0 | 4 local relationship = args.relationship |
| jbe/bsw@0 | 5 |
| jbe/bsw@0 | 6 local foreign_records = relationship.foreign_records |
| jbe/bsw@0 | 7 |
| jbe/bsw@0 | 8 local selector = relationship.connected_by_model:new_selector() |
| jbe/bsw@0 | 9 selector:add_where{ relationship.connected_by_my_id .. ' = ?', record[relationship.my_id] } |
| jbe/bsw@0 | 10 local connected_by_records = selector:exec() |
| jbe/bsw@0 | 11 |
| jbe/bsw@0 | 12 local connections = {} |
| jbe/bsw@0 | 13 for i, connected_by_record in ipairs(connected_by_records) do |
| jbe/bsw@0 | 14 connections[connected_by_record[relationship.connected_by_foreign_id]] = connected_by_record |
| jbe/bsw@0 | 15 end |
| jbe/bsw@0 | 16 |
| jbe/bsw@0 | 17 local html = {} |
| jbe/bsw@0 | 18 |
| jbe/bsw@0 | 19 if args.type == "checkboxes" then |
| jbe/bsw@0 | 20 for i, foreign_record in ipairs(foreign_records) do |
| jbe/bsw@0 | 21 local selected = '' |
| jbe/bsw@0 | 22 if connections[foreign_record[relationship.foreign_id]] then |
| jbe/bsw@0 | 23 selected = ' checked="1"' |
| jbe/bsw@0 | 24 end |
| jbe/bsw@0 | 25 html[#html + 1] = '<input type="checkbox" name="' .. name .. '" value="' .. foreign_record[relationship.foreign_id] .. '"' .. selected .. '> ' .. convert.to_human(foreign_record[relationship.foreign_name], "string") .. '<br />\n' |
| jbe/bsw@0 | 26 end |
| jbe/bsw@0 | 27 |
| jbe/bsw@0 | 28 else |
| jbe/bsw@0 | 29 html[#html + 1] = '<select name="' .. name .. '" multiple="1">' |
| jbe/bsw@0 | 30 for i, foreign_record in ipairs(foreign_records) do |
| jbe/bsw@0 | 31 local selected = '' |
| jbe/bsw@0 | 32 if connections[foreign_record[relationship.foreign_id]] then |
| jbe/bsw@0 | 33 selected = ' selected="1"' |
| jbe/bsw@0 | 34 end |
| jbe/bsw@0 | 35 html[#html + 1] = '<option value="' .. foreign_record[relationship.foreign_id] .. '"' .. selected .. '>' .. convert.to_human(foreign_record[relationship.foreign_name], "string") .. '</option>\n' |
| jbe/bsw@0 | 36 end |
| jbe/bsw@0 | 37 html[#html + 1] = '</select>' |
| jbe/bsw@0 | 38 |
| jbe/bsw@0 | 39 end |
| jbe/bsw@0 | 40 |
| jbe/bsw@0 | 41 slot.put('<div class="ui_field ui_multiselect">\n') |
| jbe/bsw@0 | 42 if args.label then |
| jbe/bsw@0 | 43 slot.put('<div class="label">', encode.html(args.label), '</div>\n') |
| jbe/bsw@0 | 44 end |
| jbe/bsw@0 | 45 slot.put('<div class="value">', |
| jbe/bsw@0 | 46 table.concat(html), |
| jbe/bsw@0 | 47 '</div>\n', |
| jbe/bsw@0 | 48 '</div>\n' |
| jbe/bsw@0 | 49 ) |
| jbe/bsw@0 | 50 end |