diff options
author | Ted Trask <ttrask01@yahoo.com> | 2011-03-01 16:10:16 +0000 |
---|---|---|
committer | Ted Trask <ttrask01@yahoo.com> | 2011-03-01 16:10:16 +0000 |
commit | cd761a32e4afafd6104a95867d3770f23229fde2 (patch) | |
tree | 068369f1c52725031ef636a6be2887486fdd7c83 /provisioning-model.lua | |
parent | 10db00827279e3cc3d8a6c2f4c89db325ae62ef4 (diff) | |
download | acf-provisioning-cd761a32e4afafd6104a95867d3770f23229fde2.tar.bz2 acf-provisioning-cd761a32e4afafd6104a95867d3770f23229fde2.tar.xz |
Made getdevicevalues and searchdevices into proper forms and added searchbyextension and searchbymac actions.
Diffstat (limited to 'provisioning-model.lua')
-rw-r--r-- | provisioning-model.lua | 79 |
1 files changed, 47 insertions, 32 deletions
diff --git a/provisioning-model.lua b/provisioning-model.lua index b667154..d303855 100644 --- a/provisioning-model.lua +++ b/provisioning-model.lua @@ -1439,28 +1439,28 @@ set_device_params = function(params, editable) return params end -fetch_device_values = function(parameter_id, parameter_value, comparison) - local retval = cfe({}) +fetch_device_values = function(search) local res, err = pcall(function() local connected = databaseconnect() - retval = search_device_values(parameter_id, parameter_value, comparison) - if retval.errtxt then - elseif #retval.value.result.value == 0 then - retval.errtxt = "Device not found" - elseif #retval.value.result.value > 1 then - retval.errtxt = "Multiple devices found" + search = search_device_values(search) + if search.errtxt then + -- Just return the error + elseif #search.value.result.value == 0 then + search.errtxt = "Device not found" + elseif #search.value.result.value > 1 then + search.errtxt = "Multiple devices found" else - retval.value.values = get_device_values(retval.value.result.value[1].device_id) - retval.value.values.seq = 5 + search.value.values = get_device_values(search.value.result.value[1].device_id) + search.value.values.seq = 5 end if connected then databasedisconnect() end end) if not res and err then - retval.errtxt = err + search.errtxt = err end - retval.label="Provisioning Device Parameter Values" - return retval + search.label="Provisioning Device Parameter Values" + return search end get_device_values = function(device_id) @@ -1496,13 +1496,12 @@ get_device_values = function(device_id) return cfe({type="structure", value=retval, label="Parameter Values", errtxt=errtxt}) end -search_device_values = function(parameter_id, parameter_value, comparison) +get_search_options = function() local errtxt retval = {} - retval.id = cfe({type="select", value=parameter_id or "label", label="Parameter", option={"device_id", "label"}, seq=1}) - retval.comparison = cfe({type="select", value=comparison or "=", label="Comparison", option={"=", "!=", "~", "!~", "~*", "!*~"}, seq=2}) - retval.value = cfe({label="Parameter Value", value=parameter_value, descr="Parameter value or SQL regular expression", seq=3}) - retval.result = cfe({type="structure", value={}, label="List of Devices", seq=4 }) + retval.id = cfe({type="select", value="label", label="Parameter", option={"device_id", "label"}, seq=1}) + retval.comparison = cfe({type="select", value="=", label="Comparison", option={"=", "!=", "~", "!~", "~*", "!*~"}, seq=2}) + retval.value = cfe({label="Parameter Value", descr="Parameter value or SQL regular expression", seq=3}) local res, err = pcall(function() local connected = databaseconnect() -- Get the group/parameter options @@ -1521,15 +1520,29 @@ search_device_values = function(parameter_id, parameter_value, comparison) for i,o in ipairs(blankopt) do retval.id.option[#retval.id.option + 1] = o end - -- 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 "" + if connected then databasedisconnect() end + end) + if not res and err then + errtxt = err + end + return cfe({type="group", value=retval, label="Device Search", errtxt=errtxt}) +end + +search_device_values = function(search) + local success = true + success = modelfunctions.validateselect(search.value.id) and success + success = modelfunctions.validateselect(search.value.comparison) and success + if success then + retval.result = cfe({type="structure", value={}, label="List of Devices", seq=4 }) + local res, err = pcall(function() + local connected = databaseconnect() + -- Get the devices from the DB sql = "SELECT d.device_id, d.label, " - local group, param = string.match(parameter_id or "", "([^%.]*)%.(.*)") + local group, param = string.match(search.value.id.value, "([^%.]*)%.(.*)") if not group then - sql = sql.."'"..escape(parameter_id).."' AS param, " - sql = sql.."d."..escape(parameter_id).." AS value FROM provisioning_devices d WHERE d."..escape(parameter_id) - sql = sql..retval.comparison.value.."'"..escape(parameter_value).."'" + sql = sql.."'"..search.value.id.value.."' AS param, " + sql = sql.."d."..search.value.id.value.." AS value FROM provisioning_devices d WHERE d."..search.value.id.value + sql = sql..search.value.comparison.value.."'"..escape(search.value.value.value).."'" else 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) ".. @@ -1540,17 +1553,19 @@ search_device_values = function(parameter_id, parameter_value, comparison) 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"..search.value.comparison.value.."'"..escape(search.value.value.value).."'" end sql = sql.." ORDER BY d.label ASC" - retval.result.value = getselectresponse(sql) + search.value.result.value = getselectresponse(sql) + if connected then databasedisconnect() end + end) + if not res and err then + search.errtxt = err end - if connected then databasedisconnect() end - end) - if not res and err then - errtxt = err + else + search.errtxt = "Search failed" end - return cfe({type="group", value=retval, label="Device Search", errtxt=errtxt}) + return search end get_param_options = function(param_id) |