diff options
author | Ted Trask <ttrask01@yahoo.com> | 2010-11-15 14:04:45 +0000 |
---|---|---|
committer | Ted Trask <ttrask01@yahoo.com> | 2010-11-15 14:04:45 +0000 |
commit | eccd3867912fcfac7ab762ff7b6e0a58bdeeb4ac (patch) | |
tree | f45cd2210cc5add9e578d25fc1b3ba3ec4bea682 /provisioning-model.lua | |
parent | 665a734bce62fceaeca2665a21d5262f7070a98a (diff) | |
download | acf-provisioning-eccd3867912fcfac7ab762ff7b6e0a58bdeeb4ac.tar.bz2 acf-provisioning-eccd3867912fcfac7ab762ff7b6e0a58bdeeb4ac.tar.xz |
Added ability to search for device by name, label, and template.
Diffstat (limited to 'provisioning-model.lua')
-rw-r--r-- | provisioning-model.lua | 34 |
1 files changed, 23 insertions, 11 deletions
diff --git a/provisioning-model.lua b/provisioning-model.lua index 71e9434..6edd25c 100644 --- a/provisioning-model.lua +++ b/provisioning-model.lua @@ -671,6 +671,10 @@ update_group = function(group, create) if group.value.name.value == "" then success = false group.value.name.errtxt = "Cannot be blank" + -- Group name cannot be device_id, name, or label or will mess up get_device_params + elseif group.value.name.value == "device_id" or group.value.name.value == "name" or group.value.name.value == "label" then + success = false + group.value.name.errtxt = "Illegal name" end if group.value.label.value == "" then success = false @@ -973,7 +977,7 @@ get_device = function(device_id) tmp = getselectresponse(sql) for i,c in ipairs(tmp) do if not retval.classes.value[c.name] then - retval.classes.value[c.name] = cfe({type="select", label=c.name, option={{value="", label=""}}}) + retval.classes.value[c.name] = cfe({type="select", label=c.name, option={{value="", label=""}}, seq=i}) end local class = retval.classes.value[c.name] class.option[#class.option + 1] = {value=c.class_id, label=c.label} @@ -1272,10 +1276,9 @@ end search_device_values = function(parameter_id, parameter_value) local errtxt retval = {} - retval.id = cfe({type="select", label="Parameter", option={}, seq=1}) + 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" }) - local group, param = string.match(parameter_id or "", "([^%.]*)%.?(.*)") local res, err = pcall(function() local connected = databaseconnect() -- Get the group/parameter options @@ -1298,18 +1301,27 @@ search_device_values = function(parameter_id, parameter_value) retval.id.value = retval.id.option[1] end -- Get the devices from the DB - if param and param ~= "" and parameter_value and parameter_value ~= "" then + if parameter_id and parameter_id ~= "" and parameter_value and parameter_value ~= "" then retval.id.value = parameter_id retval.value.value = parameter_value - sql = "SELECT * FROM provisioning_devices WHERE device_id = (".. - "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)) 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 p.name='"..escape(param).."' AND v.value='"..escape(parameter_value).."'" + 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).."'" + elseif parameter_id=="template" then + -- Search by template label + sql = sql.."template_id = (SELECT template_id FROM provisioning_templates WHERE label='"..escape(parameter_value).."')" else - sql = sql.."WHERE p.name='"..escape(param).."' AND v.value='"..escape(parameter_value).."'" + local group, param = string.match(parameter_id or "", "([^%.]*)%.?(.*)") + sql = "device_id = (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)) ".. + "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 p.name='"..escape(param).."' AND v.value='"..escape(parameter_value).."')" + else + sql = sql.."WHERE p.name='"..escape(param).."' AND v.value='"..escape(parameter_value).."')" + end end - sql = sql..") ORDER BY name ASC, label ASC" + sql = sql.." ORDER BY name ASC, label ASC" retval.result.value = getselectresponse(sql) end if connected then databasedisconnect() end |