diff options
-rw-r--r-- | provisioning-controller.lua | 2 | ||||
-rw-r--r-- | provisioning-model.lua | 27 |
2 files changed, 14 insertions, 15 deletions
diff --git a/provisioning-controller.lua b/provisioning-controller.lua index b71af2c..3531514 100644 --- a/provisioning-controller.lua +++ b/provisioning-controller.lua @@ -101,5 +101,5 @@ getdevicevalues = function( self ) end searchdevices = function( self ) - return self.model.search_device_values(self.clientdata.id, self.clientdata.value) + return self.model.search_device_values(self.clientdata.id, self.clientdata.value, self.clientdata.comparison) end diff --git a/provisioning-model.lua b/provisioning-model.lua index ffc52e9..346eef3 100644 --- a/provisioning-model.lua +++ b/provisioning-model.lua @@ -1244,12 +1244,13 @@ get_device_values = function(name) return cfe({ type="group", value=retval, label="Provisioning Device Parameter Values", errtxt=errtxt }) end -search_device_values = function(parameter_id, parameter_value) +search_device_values = function(parameter_id, parameter_value, comparison) local errtxt retval = {} - retval.id = cfe({type="select", label="Parameter", option={"name", "label", "template_id", "template"}, seq=1}) - retval.value = cfe({label="Parameter Value", seq=2}) - retval.result = cfe({type="structure", value={}, label="List of Devices" }) + retval.id = cfe({type="select", value=parameter_id or "name", label="Parameter", option={"name", "label", "template_id", "template"}, seq=1}) + retval.comparison = cfe({type="select", value=comparison or "=", label="Comparison", option={"=", "!=", "~", "!~", "~*", "!*~"}, seq=2}) + retval.value = cfe({label="Parameter Value", value=parameter_value, seq=3}) + retval.result = cfe({type="structure", value={}, label="List of Devices", seq=4 }) local res, err = pcall(function() local connected = databaseconnect() -- Get the group/parameter options @@ -1268,19 +1269,17 @@ search_device_values = function(parameter_id, parameter_value) for i,o in ipairs(blankopt) do retval.id.option[#retval.id.option + 1] = o end - if #tmp>1 then - retval.id.value = retval.id.option[1] - end -- Get the devices from the DB - if parameter_id and parameter_id ~= "" and parameter_value and parameter_value ~= "" then - retval.id.value = parameter_id - retval.value.value = parameter_value + 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" or parameter_id=="template_id" then - sql = sql..escape(parameter_id).."='"..escape(parameter_value).."'" + 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='"..escape(parameter_value).."')" + sql = sql.."template_id IN (SELECT template_id FROM provisioning_templates WHERE label"..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) ".. @@ -1291,7 +1290,7 @@ search_device_values = function(parameter_id, parameter_value) 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='"..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" retval.result.value = getselectresponse(sql) |