diff options
-rw-r--r-- | provisioning-listdevices-html.lsp | 16 | ||||
-rw-r--r-- | provisioning-model.lua | 31 |
2 files changed, 33 insertions, 14 deletions
diff --git a/provisioning-listdevices-html.lsp b/provisioning-listdevices-html.lsp index 0b646c0..40da260 100644 --- a/provisioning-listdevices-html.lsp +++ b/provisioning-listdevices-html.lsp @@ -20,6 +20,13 @@ require("viewfunctions") <TH>Action</TH> <TH>Name</TH> <TH>Label</TH> + <% if page_info.action == "searchdevices" then %> + <% if view.value[1] and view.value[1].group and view.value[1].group ~= "" then %> + <TH>Group</TH> + <% end %> + <TH>Param</TH> + <TH>Value</TH> + <% end %> </TR> </THEAD><TBODY> <% for k,v in ipairs( view.value ) do %> @@ -42,6 +49,13 @@ require("viewfunctions") </TD> <TD><%= html.html_escape(v.name) %></TD> <TD><%= html.html_escape(v.label) %></TD> + <% if page_info.action == "searchdevices" then %> + <% if v.group and v.group ~= "" then %> + <TD><%= html.html_escape(v.group) %></TD> + <% end %> + <TD><%= html.html_escape(v.param) %></TD> + <TD><%= html.html_escape(v.value) %></TD> + <% end %> </TR> <% end %> </TBODY> @@ -55,6 +69,6 @@ require("viewfunctions") <% end %> </DL> -<% if viewlibrary and viewlibrary.dispatch_component and viewlibrary.check_permission("createdevice") then +<% if page_info.action == "listdevices" and viewlibrary and viewlibrary.dispatch_component and viewlibrary.check_permission("createdevice") then viewlibrary.dispatch_component("createdevice") end %> diff --git a/provisioning-model.lua b/provisioning-model.lua index e517907..1c063fd 100644 --- a/provisioning-model.lua +++ b/provisioning-model.lua @@ -1292,27 +1292,32 @@ search_device_values = function(parameter_id, parameter_value, comparison) -- Get the devices from the DB if parameter_id and modelfunctions.validateselect(retval.id) and modelfunctions.validateselect(retval.comparison) then parameter_value = parameter_value or "" - sql = "SELECT * FROM provisioning_devices WHERE " - if parameter_id == "name" or parameter_id=="label" then - sql = sql..escape(parameter_id)..retval.comparison.value.."'"..escape(parameter_value).."'" - elseif parameter_id=="template_id" then - sql = sql.."CAST(template_id AS text)"..retval.comparison.value.."'"..escape(parameter_value).."'" - elseif parameter_id=="template" then - -- Search by template label - sql = sql.."template_id IN (SELECT template_id FROM provisioning_templates WHERE label"..retval.comparison.value.."'"..escape(parameter_value).."')" + sql = "SELECT d.device_id, d.name, d.label, d.template_id, " + local group, param = string.match(parameter_id or "", "([^%.]*)%.(.*)") + if not group then + sql = sql.."'"..escape(parameter_id).."' AS param, " + if parameter_id == "name" or parameter_id=="label" then + sql = sql.."d."..escape(parameter_id).." AS value FROM provisioning_devices d WHERE d."..escape(parameter_id) + elseif parameter_id=="template_id" then + sql = sql.."d.template_id AS value FROM provisioning_devices d WHERE CAST(d.template_id AS text)" + elseif parameter_id=="template" then + -- Search by template label + sql = sql.."t.label AS value FROM provisioning_devices d JOIN provisioning_templates t USING(template_id) WHERE t.label" + end + sql = sql..retval.comparison.value.."'"..escape(parameter_value).."'" else - local group, param = string.match(parameter_id or "", "([^%.]*)%.?(.*)") - sql = sql.."device_id IN (SELECT d2t.device_id FROM (devices_to_classes d2t JOIN provisioning_classes t USING(class_id) JOIN classes_to_param_groups t2g USING(class_id) ".. - "JOIN provisioning_groups g USING(group_id) JOIN param_groups_to_params g2p USING(group_id) JOIN provisioning_params p USING(param_id)) ".. + sql = sql.."g.name as group, p.name as param, CASE WHEN v.value IS NOT NULL THEN v.value WHEN g2p.value IS NOT NULL THEN g2p.value ELSE p.value END as value FROM ".. + "provisioning_devices d JOIN devices_to_classes d2t USING(device_id) JOIN provisioning_classes t USING(class_id) JOIN classes_to_param_groups t2g USING(class_id) ".. + "JOIN provisioning_groups g USING(group_id) JOIN param_groups_to_params g2p USING(group_id) JOIN provisioning_params p USING(param_id) ".. "LEFT JOIN provisioning_values v ON(d2t.device_id=v.device_id AND p.param_id=v.param_id AND g.name=v.group_name ) " if group and group ~= "" then sql = sql.."WHERE g.name='"..escape(group).."' AND" else sql = sql.."WHERE" end - sql = sql.." p.name='"..escape(param).."' AND CASE WHEN v.value IS NOT NULL THEN v.value WHEN g2p.value IS NOT NULL THEN g2p.value ELSE p.value END"..retval.comparison.value.."'"..escape(parameter_value).."')" + sql = sql.." p.name='"..escape(param).."' AND CASE WHEN v.value IS NOT NULL THEN v.value WHEN g2p.value IS NOT NULL THEN g2p.value ELSE p.value END"..retval.comparison.value.."'"..escape(parameter_value).."'" end - sql = sql.." ORDER BY name ASC, label ASC" + sql = sql.." ORDER BY d.name ASC, d.label ASC" retval.result.value = getselectresponse(sql) end if connected then databasedisconnect() end |