diff options
Diffstat (limited to 'provisioning-model.lua')
-rw-r--r-- | provisioning-model.lua | 70 |
1 files changed, 26 insertions, 44 deletions
diff --git a/provisioning-model.lua b/provisioning-model.lua index 041d64e..b667154 100644 --- a/provisioning-model.lua +++ b/provisioning-model.lua @@ -1114,7 +1114,7 @@ list_devices = function() -- Get the devices from the DB local res, err = pcall(function() local connected = databaseconnect() - local sql = "SELECT * FROM provisioning_devices WHERE name IS NOT NULL ORDER BY name ASC, label ASC" + local sql = "SELECT * FROM provisioning_devices ORDER BY label ASC" retval = getselectresponse(sql) if connected then databasedisconnect() end end) @@ -1128,9 +1128,8 @@ end get_device = function(device_id) local retval = {} retval.device_id = cfe({value=device_id or "", label="Device ID", seq=1}) - retval.name = cfe({label="Name", seq=2}) - retval.label = cfe({label="Label", seq=3}) - retval.classes = cfe({type="group", value={}, label="Classes", seq=5}) + retval.label = cfe({label="Label", seq=2}) + retval.classes = cfe({type="group", value={}, label="Classes", seq=3}) local errtxt local res, err = pcall(function() local classes={} @@ -1185,9 +1184,9 @@ update_device = function(device, create) local success = true local errtxt -- Validate the settings - if device.value.name.value == "" then + if device.value.label.value == "" then success = false - device.value.name.errtxt = "Cannot be blank" + device.value.label.errtxt = "Cannot be blank" end for n,c in pairs(device.value.classes.value) do success = modelfunctions.validateselect(c) and success @@ -1210,15 +1209,15 @@ update_device = function(device, create) local sql = "BEGIN TRANSACTION" runsqlcommand(sql) if create then - sql = "INSERT INTO provisioning_devices VALUES(DEFAULT, '"..escape(device.value.name.value).."', '"..escape(device.value.label.value).."')" + sql = "INSERT INTO provisioning_devices VALUES(DEFAULT, '"..escape(device.value.label.value).."')" runsqlcommand(sql, true) - sql = "SELECT device_id FROM provisioning_devices WHERE name='"..escape(device.value.name.value).."' AND label='"..escape(device.value.label.value).."'" + sql = "SELECT device_id FROM provisioning_devices WHERE label='"..escape(device.value.label.value).."'" local tmp = getselectresponse(sql, true) if tmp and #tmp>0 then device.value.device_id.value = tmp[1].device_id end else - sql = "UPDATE provisioning_devices SET (name, label) = ('"..escape(device.value.name.value).."', '"..escape(device.value.label.value).."') WHERE device_id='"..escape(device.value.device_id.value).."'" + sql = "UPDATE provisioning_devices SET (label) = ('"..escape(device.value.label.value).."') WHERE device_id='"..escape(device.value.device_id.value).."'" runsqlcommand(sql, true) sql = "DELETE FROM devices_to_classes WHERE device_id='"..escape(device.value.device_id.value).."'" runsqlcommand(sql, true) @@ -1302,7 +1301,6 @@ end get_device_params = function(device_id, editable) local retval = {} retval.device_id = cfe({value=device_id or "", label="Device ID", seq=0}) - retval.name = cfe({label="Name", seq=0}) retval.label = cfe({label="Label", seq=0}) local errtxt = "Cannot find device" if device_id and device_id ~= "" then @@ -1313,7 +1311,6 @@ get_device_params = function(device_id, editable) local tmp = getselectresponse(sql) if tmp and #tmp > 0 then errtxt = nil - retval.name.value = tmp[1].name retval.label.value = tmp[1].label -- Next, get all of the param groups sql = "SELECT * FROM provisioning_groups" @@ -1442,41 +1439,28 @@ set_device_params = function(params, editable) return params end -get_device_values_by_name = function(name) - local retval = {} - retval.device_id = cfe({label="Device ID", seq=1}) - retval.name = cfe({value=name or "", label="Name", seq=2}) - retval.label = cfe({label="Label", seq=3}) - retval.values = cfe({type="structure", value={}, label="Parameter Values", option={}, seq=5}) - local errtxt +fetch_device_values = function(parameter_id, parameter_value, comparison) + local retval = cfe({}) local res, err = pcall(function() local connected = databaseconnect() - if name and name ~= "" then - local sql = "SELECT * FROM provisioning_devices WHERE name='"..escape(name).."'" - local tmp = getselectresponse(sql) - if tmp and #tmp > 0 then - for n,v in pairs(tmp[1]) do - if retval[n] then - retval[n].value = v - end - end - - -- Next, get all of the parameter values for this device - retval.values = get_device_values(tmp[1].device_id) - retval.values.seq = 5 - else - errtxt = "Invalid device name" - end - if connected then databasedisconnect() end + 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" else - errtxt = "Invalid device name" + retval.value.values = get_device_values(retval.value.result.value[1].device_id) + retval.value.values.seq = 5 end + if connected then databasedisconnect() end end) if not res and err then - errtxt = err + retval.errtxt = err end - return cfe({ type="group", value=retval, label="Provisioning Device Parameter Values", errtxt=errtxt }) + retval.label="Provisioning Device Parameter Values" + return retval end get_device_values = function(device_id) @@ -1515,7 +1499,7 @@ end search_device_values = function(parameter_id, parameter_value, comparison) local errtxt retval = {} - retval.id = cfe({type="select", value=parameter_id or "name", label="Parameter", option={"name", "label"}, seq=1}) + 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 }) @@ -1540,13 +1524,11 @@ 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 d.device_id, d.name, d.label, " + sql = "SELECT d.device_id, d.label, " 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) - end + 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).."'" 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 ".. @@ -1560,7 +1542,7 @@ search_device_values = function(parameter_id, parameter_value, comparison) 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).."'" end - sql = sql.." ORDER BY d.name ASC, d.label ASC" + sql = sql.." ORDER BY d.label ASC" retval.result.value = getselectresponse(sql) end if connected then databasedisconnect() end |