webmcp
view framework/env/ui_deprecated/multiselect.lua @ 3:795b764629ca
Version 1.0.3
Important bugfix related to internal forwards (Bug was introduced by the restriction of views with underscore prefix in Version 1.0.2)
Important bugfix related to internal forwards (Bug was introduced by the restriction of views with underscore prefix in Version 1.0.2)
author | jbe |
---|---|
date | Thu Dec 10 12:00:00 2009 +0100 (2009-12-10) |
parents | 9fdfb27f8e67 |
children |
line source
1 function ui_deprecated.multiselect(args)
2 local record = assert(slot.get_state_table(), "ui_deprecated.multiselect was not called within a form.").form_record
3 local name = args.name
4 local relationship = args.relationship
6 local foreign_records = relationship.foreign_records
8 local selector = relationship.connected_by_model:new_selector()
9 selector:add_where{ relationship.connected_by_my_id .. ' = ?', record[relationship.my_id] }
10 local connected_by_records = selector:exec()
12 local connections = {}
13 for i, connected_by_record in ipairs(connected_by_records) do
14 connections[connected_by_record[relationship.connected_by_foreign_id]] = connected_by_record
15 end
17 local html = {}
19 if args.type == "checkboxes" then
20 for i, foreign_record in ipairs(foreign_records) do
21 local selected = ''
22 if connections[foreign_record[relationship.foreign_id]] then
23 selected = ' checked="1"'
24 end
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'
26 end
28 else
29 html[#html + 1] = '<select name="' .. name .. '" multiple="1">'
30 for i, foreign_record in ipairs(foreign_records) do
31 local selected = ''
32 if connections[foreign_record[relationship.foreign_id]] then
33 selected = ' selected="1"'
34 end
35 html[#html + 1] = '<option value="' .. foreign_record[relationship.foreign_id] .. '"' .. selected .. '>' .. convert.to_human(foreign_record[relationship.foreign_name], "string") .. '</option>\n'
36 end
37 html[#html + 1] = '</select>'
39 end
41 slot.put('<div class="ui_field ui_multiselect">\n')
42 if args.label then
43 slot.put('<div class="label">', encode.html(args.label), '</div>\n')
44 end
45 slot.put('<div class="value">',
46 table.concat(html),
47 '</div>\n',
48 '</div>\n'
49 )
50 end