From 570fd742bb0bcf2b3a0cd51a1222e42e05ac8f77 Mon Sep 17 00:00:00 2001 From: Ted Trask Date: Thu, 28 Oct 2010 14:08:15 +0000 Subject: Modified get/update device/class to device up classes/groups by name to make selection clearer. --- provisioning-model.lua | 52 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 37 insertions(+), 15 deletions(-) diff --git a/provisioning-model.lua b/provisioning-model.lua index 6d3d480..0142910 100644 --- a/provisioning-model.lua +++ b/provisioning-model.lua @@ -432,12 +432,13 @@ end get_class = function(class_id) local retval = {} - retval.class_id = cfe({value=class_id or "", label="Class ID"}) - retval.name = cfe({label="Name"}) - retval.label = cfe({label="Label"}) - retval.groups = cfe({type="multi", value={}, label="Parameter Groups", option={}}) + retval.class_id = cfe({value=class_id or "", label="Class ID", seq=1}) + retval.name = cfe({label="Name", seq=2}) + retval.label = cfe({label="Label", seq=3}) + retval.groups = cfe({type="group", value={}, label="Parameter Groups", seq=4}) local errtxt local res, err = pcall(function() + local groups = {} local connected = databaseconnect() if class_id and class_id ~= "" then local sql = "SELECT * FROM provisioning_classes WHERE class_id='"..escape(class_id).."'" @@ -453,14 +454,22 @@ get_class = function(class_id) sql = "SELECT group_id FROM classes_to_param_groups WHERE class_id="..escape(class_id) tmp = getselectresponse(sql) for i,g in ipairs(tmp) do - retval.groups.value[#retval.groups.value + 1] = g.group_id + groups[g.group_id] = true end end -- Finally, get the paramgroup options sql = "SELECT group_id, name, label FROM provisioning_groups ORDER BY label ASC" tmp = getselectresponse(sql) for i,g in ipairs(tmp) do - retval.groups.option[#retval.groups.option + 1] = {value=g.group_id, label=g.label, name=g.name} + if not retval.groups.value[g.name] then + -- Use this line to allow blank selection: retval.groups.value[g.name] = cfe({type="select", label=g.name, option={{value="", label=""}}}) + retval.groups.value[g.name] = cfe({type="select", label=g.name, option={}}) + end + local group = retval.groups.value[g.name] + group.option[#group.option + 1] = {value=g.group_id, label=g.label} + if groups[g.group_id] then + group.value = g.group_id + end end if connected then databasedisconnect() end end) @@ -479,7 +488,6 @@ update_class = function(class, create) local success = true local errtxt -- Validate the settings - success = modelfunctions.validatemulti(class.value.groups) if class.value.name.value == "" then success = false class.value.name.errtxt = "Cannot be blank" @@ -488,6 +496,9 @@ update_class = function(class, create) success = false class.value.label.errtxt = "Cannot be blank" end + for n,g in pairs(class.value.groups.value) do + success = modelfunctions.validateselect(g) and success + end if success then local res, err = pcall(function() local connected = databaseconnect() @@ -517,8 +528,8 @@ update_class = function(class, create) runsqlcommand(sql, true) end -- Insert the class to group entries - for i,g in ipairs(class.value.groups.value) do - sql = "INSERT INTO classes_to_param_groups VALUES('"..escape(class.value.class_id.value).."', '"..escape(g).."')" + for n,g in pairs(class.value.groups.value) do + sql = "INSERT INTO classes_to_param_groups VALUES('"..escape(class.value.class_id.value).."', '"..escape(g.value).."')" runsqlcommand(sql, true) end @@ -926,9 +937,10 @@ get_device = function(device_id) retval.name = cfe({label="Name", seq=2}) retval.label = cfe({label="Label", seq=3}) retval.template_id = cfe({type="select", label="Template", option={}, seq=4}) - retval.classes = cfe({type="multi", value={}, label="Classes", option={}, seq=5}) + retval.classes = cfe({type="group", value={}, label="Classes", seq=5}) local errtxt local res, err = pcall(function() + local classes={} local connected = databaseconnect() if device_id and device_id ~= "" then local sql = "SELECT * FROM provisioning_devices WHERE device_id='"..escape(device_id).."'" @@ -944,7 +956,7 @@ get_device = function(device_id) sql = "SELECT class_id FROM devices_to_classes WHERE device_id="..escape(device_id) tmp = getselectresponse(sql) for i,g in ipairs(tmp) do - retval.classes.value[#retval.classes.value + 1] = g.class_id + classes[g.class_id] = true end end -- Next, get the template options @@ -957,7 +969,15 @@ get_device = function(device_id) sql = "SELECT * FROM provisioning_classes ORDER BY class_id ASC" tmp = getselectresponse(sql) for i,c in ipairs(tmp) do - retval.classes.option[#retval.classes.option + 1] = {value=c.class_id, label=c.label} + if not retval.classes.value[c.name] then + -- Use this line to allow blank selection: 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={}}) + end + local class = retval.classes.value[c.name] + class.option[#class.option + 1] = {value=c.class_id, label=c.label} + if classes[c.class_id] then + class.value = c.class_id + end end if connected then databasedisconnect() end end) @@ -977,11 +997,13 @@ update_device = function(device, create) local errtxt -- Validate the settings success = modelfunctions.validateselect(device.value.template_id) - success = modelfunctions.validatemulti(device.value.classes) and success if device.value.name.value == "" then success = false device.value.name.errtxt = "Cannot be blank" end + for n,c in pairs(device.value.classes.value) do + success = modelfunctions.validateselect(c) and success + end if success then local res, err = pcall(function() local connected = databaseconnect() @@ -1011,8 +1033,8 @@ update_device = function(device, create) runsqlcommand(sql, true) end -- Insert the device to class entries - for i,c in ipairs(device.value.classes.value) do - sql = "INSERT INTO devices_to_classes VALUES('"..escape(device.value.device_id.value).."', '"..escape(c).."')" + for n,c in pairs(device.value.classes.value) do + sql = "INSERT INTO devices_to_classes VALUES('"..escape(device.value.device_id.value).."', '"..escape(c.value).."')" runsqlcommand(sql, true) end -- cgit v1.2.3