summaryrefslogtreecommitdiffstats
path: root/provisioning-model.lua
diff options
context:
space:
mode:
authorTed Trask <ttrask01@yahoo.com>2017-02-22 21:23:32 +0000
committerTed Trask <ttrask01@yahoo.com>2017-02-22 21:23:32 +0000
commita1da445f34e1c4139e49591a661902f63eef75a4 (patch)
treea50dbd8c5039626ca2a2e04d335453e4c694b5cb /provisioning-model.lua
parent07027036bc14ebbb75e54f81b3134ec2b9dc0783 (diff)
downloadacf-provisioning-a1da445f34e1c4139e49591a661902f63eef75a4.tar.bz2
acf-provisioning-a1da445f34e1c4139e49591a661902f63eef75a4.tar.xz
Revert "Add notifydevices param and add it to all actions that modify devices (not yet implemented)"
Diffstat (limited to 'provisioning-model.lua')
-rw-r--r--provisioning-model.lua487
1 files changed, 184 insertions, 303 deletions
diff --git a/provisioning-model.lua b/provisioning-model.lua
index 6d3dc59..5787daa 100644
--- a/provisioning-model.lua
+++ b/provisioning-model.lua
@@ -321,33 +321,11 @@ local checkgroupdefaultoverride = function(device_id)
return (#tmp ~= 0)
end
-local add_notify_devices = function(p)
- local connected
- if not p.errtxt then
- local res, err = pcall(function()
- connected = databaseconnect(true)
-
- local sql = "SELECT * FROM provisioning_params WHERE name='notifydevices'"
- local tmp = getselectresponse(sql)
- if tmp and #tmp ~= 0 then
- p.value.notifydevices = tmp[1]
- end
-
- if connected then databasedisconnect() end
- end)
- if not res and err then
- handlesqlexception(connected, err)
- p.errtxt = err
- end
- end
- return p
-end
-
-- This function is used by scripts, do not change prototype
local get_device = function(device_id, create)
local connected
local retval = {}
- if not create then retval.device_id = cfe({value=device_id or "", label="Device ID", readonly=true, seq=0}) end
+ retval.device_id = cfe({value=device_id or "", label="Device ID", seq=1})
retval.classes = cfe({type="group", value={}, label="Classes", seq=2})
local errtxt
local res, err = pcall(function()
@@ -617,54 +595,45 @@ mymodule.list_templates = function()
return cfe({ type="structure", value=retval, label="Templates", errtxt=errtxt })
end
-mymodule.get_new_template = function(self, clientdata)
- local retval = cfe({ type="group", value={}, label="Provisioning Template" })
- retval.value.filename = cfe({label="File Name", descr="Must be in "..baseurl, seq=1})
- retval.value.label = cfe({label="Label", seq=2})
- retval.value.seq = cfe({label="Sequence", seq=3})
- self.handle_clientdata(retval, clientdata)
- return retval
-end
-
mymodule.get_template = function(self, clientdata)
local connected
- local retval = mymodule.get_new_template(self, clientdata)
-
- local filename = retval.value.filename.value
- if filename~="" and not string.match(filename, "/") then
+ clientdata = clientdata or {}
+ local filename = clientdata.filename
+ local retval = {}
+ if filename and not string.match(filename, "/") then
filename = baseurl .. filename
- retval.value.filename.value = filename
end
- if filename ~= "" then
+ retval.filename = cfe({value=filename or "", label="File Name", descr="Must be in "..baseurl, seq=1})
+ retval.label = cfe({label="Label", seq=2})
+ retval.seq = cfe({label="Sequence", seq=3})
+ local errtxt
+ if filename and filename ~= "" then
local res, err = pcall(function()
connected = databaseconnect(true)
local sql = "SELECT * FROM provisioning_options WHERE param_id=(SELECT param_id FROM provisioning_params WHERE name = 'template') AND value='"..provdb.escape(filename).."' ORDER BY seq ASC, label ASC, value ASC"
local tmp = getselectresponse(sql)
if tmp and #tmp > 0 then
for n,v in pairs(tmp[1]) do
- if retval.value[n] then
- retval.value[n].value = v
+ if n == "value" then
+ retval.filename.value = v
+ elseif retval[n] then
+ retval[n].value = v
end
end
- else
- retval.errtxt = "Template does not exist"
end
if connected then databasedisconnect() end
-
- local filedetails = modelfunctions.getfiledetails(retval.value.filename.value, function(filename) return validator.is_valid_filename(filename, baseurl) end)
- for i,n in ipairs({"filecontent", "size", "mtime"}) do
- retval.value[n] = filedetails.value[n]
- end
end)
if not res and err then
handlesqlexception(connected, err)
- retval.errtxt = err
+ errtxt = err
end
- else
- retval.errtxt = "Template does not exist"
+ end
+ local filedetails = modelfunctions.getfiledetails(retval.filename.value, function(filename) return validator.is_valid_filename(filename, baseurl) end)
+ for i,n in ipairs({"filecontent", "size", "mtime"}) do
+ retval[n] = filedetails.value[n]
end
- return add_notify_devices(retval)
+ return cfe({ type="group", value=retval, label="Provisioning Template", errtxt=errtxt })
end
mymodule.create_template = function(self, template, action)
@@ -713,9 +682,7 @@ mymodule.update_template = function(self, template, action, create)
end
runsqlcommand(sql)
- if template.value.filecontent then
- fs.write_file(template.value.filename.value, string.gsub(format.dostounix(template.value.filecontent.value), "\n+$", ""))
- end
+ fs.write_file(template.value.filename.value, string.gsub(format.dostounix(template.value.filecontent.value), "\n+$", ""))
end
if connected then databasedisconnect() end
end)
@@ -799,48 +766,39 @@ mymodule.list_class_groups = function()
return cfe({ type="structure", value=retval, label="Class Groups", errtxt=errtxt })
end
-mymodule.get_new_class_group = function(self, clientdata)
- local retval = cfe({ type="group", value={}, label="Provisioning Class Group" })
- retval.value.name = cfe({label="Name", seq=2})
- retval.value.label = cfe({label="Label", seq=3})
- retval.value.seq = cfe({label="Sequence", seq=4})
- self.handle_clientdata(retval, clientdata)
- return retval
-end
-
mymodule.get_class_group = function(self, clientdata)
local connected
- local retval = mymodule.get_new_class_group(self, clientdata)
- retval.value.class_group_id = cfe({label="Class Group ID", seq=0})
- self.handle_clientdata(retval, clientdata)
- retval.value.class_group_id.readonly=true
-
- local class_group_id = retval.value.class_group_id.value
- if class_group_id ~= "" then
- local res, err = pcall(function()
- connected = databaseconnect(true)
+ clientdata = clientdata or {}
+ local class_group_id = clientdata.class_group_id
+ local retval = {}
+ retval.class_group_id = cfe({value=class_group_id or "", label="Class Group ID", readonly=true, seq=1})
+ retval.name = cfe({label="Name", seq=2})
+ retval.label = cfe({label="Label", seq=3})
+ retval.seq = cfe({label="Sequence", seq=4})
+ local errtxt
+ local res, err = pcall(function()
+ connected = databaseconnect(true)
+ if class_group_id and class_group_id ~= "" then
sql = "SELECT * FROM provisioning_class_groups WHERE class_group_id='"..provdb.escape(class_group_id).."'"
tmp = getselectresponse(sql)
if tmp and #tmp > 0 then
for n,v in pairs(tmp[1]) do
- if retval.value[n] then
- retval.value[n].value = v
+ if retval[n] then
+ retval[n].value = v
end
end
- else
- retval.errtxt = "Class Group does not exist"
end
- if connected then databasedisconnect() end
- end)
- if not res and err then
- handlesqlexception(connected, err)
- retval.errtxt = err
+ else
+ retval.class_group_id = nil
end
- else
- retval.errtxt = "Class Group does not exist"
+ if connected then databasedisconnect() end
+ end)
+ if not res and err then
+ handlesqlexception(connected, err)
+ errtxt = err
end
- return add_notify_devices(retval)
+ return cfe({ type="group", value=retval, label="Provisioning Class Group", errtxt=errtxt })
end
mymodule.create_class_group = function(self, group, action)
@@ -967,94 +925,66 @@ mymodule.list_classes = function()
return cfe({ type="structure", value=retval, label="Classes", errtxt=errtxt })
end
-mymodule.get_new_class = function(self, clientdata)
+mymodule.get_class = function(self, clientdata)
local connected
- local retval = cfe({ type="group", value={}, label="Provisioning Class" })
- retval.value.class_group_id = cfe({type="select", label="Class Group", option={}, seq=2})
- retval.value.label = cfe({label="Label", seq=3})
- retval.value.seq = cfe({label="Sequence", seq=4})
- retval.value.groups = cfe({type="group", value={}, label="Parameter Groups", seq=5})
-
+ clientdata = clientdata or {}
+ local class_id = clientdata.class_id
+ local retval = {}
+ retval.class_id = cfe({value=class_id or "", label="Class ID", readonly=true, seq=1})
+ retval.class_group_id = cfe({type="select", label="Class Group", option={}, seq=2})
+ retval.label = cfe({label="Label", seq=3})
+ retval.seq = cfe({label="Sequence", seq=4})
+ retval.groups = cfe({type="group", value={}, label="Parameter Groups", seq=5})
+ local errtxt
local res, err = pcall(function()
+ local groups = {}
connected = databaseconnect(true)
+ if class_id and class_id ~= "" then
+ local sql = "SELECT * FROM provisioning_classes WHERE class_id='"..provdb.escape(class_id).."'"
+ 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
+ end
+ -- Now, get the class-to-paramgroup mappings
+ sql = "SELECT group_id FROM classes_to_param_groups WHERE class_id='"..provdb.escape(class_id).."'"
+ tmp = getselectresponse(sql)
+ for i,g in ipairs(tmp) do
+ groups[g.group_id] = true
+ end
+ else
+ retval.class_id = nil
+ end
-- Get the class_group_id options
sql = "SELECT * from provisioning_class_groups ORDER BY seq ASC, label ASC"
tmp = getselectresponse(sql)
for i,g in ipairs(tmp) do
- retval.value.class_group_id.option[#retval.value.class_group_id.option + 1] = {value=g.class_group_id, label=g.label}
+ retval.class_group_id.option[#retval.class_group_id.option + 1] = {value=g.class_group_id, label=g.label}
end
-- Finally, get the paramgroup options
sql = "SELECT group_id, name, label FROM provisioning_groups ORDER BY seq ASC, name ASC"
tmp = getselectresponse(sql)
for i,g in ipairs(tmp) do
- if not retval.value.groups.value[g.name] then
- retval.value.groups.value[g.name] = cfe({type="select", label=g.name, option={{value="", label=""}}, seq=i})
+ if not retval.groups.value[g.name] then
+ retval.groups.value[g.name] = cfe({type="select", label=g.name, option={{value="", label=""}}, seq=i})
end
- local group = retval.value.groups.value[g.name]
+ 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)
if not res and err then
handlesqlexception(connected, err)
- retval.errtxt = err
- end
-
- self.handle_clientdata(retval, clientdata)
- return retval
-end
-
-mymodule.get_class = function(self, clientdata)
- local connected
- local retval = mymodule.get_new_class(self, clientdata)
- retval.value.class_id = cfe({label="Class ID", seq=0})
- self.handle_clientdata(retval, clientdata)
- retval.value.class_id.readonly=true
-
- local class_id = retval.value.class_id.value
- if class_id ~= "" then
- local res, err = pcall(function()
- local groups = {}
- connected = databaseconnect(true)
- local sql = "SELECT * FROM provisioning_classes WHERE class_id='"..provdb.escape(class_id).."'"
- local tmp = getselectresponse(sql)
- if tmp and #tmp > 0 then
- for n,v in pairs(tmp[1]) do
- if retval.value[n] then
- retval.value[n].value = v
- end
- end
-
- -- Now, get the class-to-paramgroup mappings
- sql = "SELECT group_id FROM classes_to_param_groups WHERE class_id='"..provdb.escape(class_id).."'"
- tmp = getselectresponse(sql)
- for i,g in ipairs(tmp) do
- groups[g.group_id] = true
- end
-
- -- Loop through the groups and options to mark the mappings
- for n,g in pairs(retval.value.groups.value) do
- for i,o in ipairs(g.option) do
- if groups[o.value] then
- g.value = o.value
- break
- end
- end
- end
- else
- retval.errtxt = "Class does not exist"
- end
- if connected then databasedisconnect() end
- end)
- if not res and err then
- handlesqlexception(connected, err)
- retval.errtxt = err
- end
- else
- retval.errtxt = "Class does not exist"
+ errtxt = err
end
- return add_notify_devices(retval)
+ return cfe({ type="group", value=retval, label="Provisioning Class", errtxt=errtxt })
end
mymodule.create_class = function(self, class, action)
@@ -1189,26 +1119,29 @@ mymodule.list_groups = function()
return cfe({ type="structure", value=retval, label="Parameter Groups", errtxt=errtxt })
end
-mymodule.get_new_group = function(self, clientdata)
+mymodule.get_group = function(self, clientdata)
local connected
- local retval = cfe({ type="group", value={}, label="Provisioning Parameter Group" })
- retval.value.name = cfe({label="Name", seq=2})
- retval.value.label = cfe({label="Label", seq=3})
- retval.value.seq = cfe({label="Sequence", seq=4})
- retval.value.params = cfe({type="multi", value={}, label="Parameters", option={}, descr="Each selected parameter will be included in the group", seq=5})
- retval.value.editable = cfe({type="multi", value={}, label="Editable Parameters", option={}, descr="Each selected parameter will be user editable", seq=6})
- retval.value.override = cfe({type="multi", value={}, label="Overridden Parameters", option={}, descr="Each selected parameter will override the parameter default from the group defaults", seq=7})
- retval.value.defaults = cfe({type="group", value={}, label="Parameter Defaults", seq=8})
-
+ clientdata = clientdata or {}
+ local group_id = clientdata.group_id
+ local retval = {}
+ retval.group_id = cfe({value=group_id or "", label="Group ID", readonly=true, seq=1})
+ retval.name = cfe({label="Name", seq=2})
+ retval.label = cfe({label="Label", seq=3})
+ retval.seq = cfe({label="Sequence", seq=4})
+ retval.params = cfe({type="multi", value={}, label="Parameters", option={}, descr="Each selected parameter will be included in the group", seq=5})
+ retval.editable = cfe({type="multi", value={}, label="Editable Parameters", option={}, descr="Each selected parameter will be user editable", seq=6})
+ retval.override = cfe({type="multi", value={}, label="Overridden Parameters", option={}, descr="Each selected parameter will override the parameter default from the group defaults", seq=7})
+ retval.defaults = cfe({type="group", value={}, label="Parameter Defaults", seq=8})
+ local errtxt
local res, err = pcall(function()
connected = databaseconnect(true)
- -- Get all the parameters to set up the params.options and defaults
+ -- First, let's get all the parameters to set up the params.options and defaults
local sql = "SELECT * FROM provisioning_params ORDER BY seq ASC, name ASC"
local tmp = getselectresponse(sql)
for i,p in ipairs(tmp) do
- retval.value.params.option[#retval.value.params.option + 1] = {value=p.param_id, label=p.label}
- retval.value.editable.option[#retval.value.editable.option + 1] = {value=p.param_id, label=p.label}
- retval.value.override.option[#retval.value.override.option + 1] = {value=p.param_id, label=p.label}
+ retval.params.option[#retval.params.option + 1] = {value=p.param_id, label=p.label}
+ retval.editable.option[#retval.editable.option + 1] = {value=p.param_id, label=p.label}
+ retval.override.option[#retval.override.option + 1] = {value=p.param_id, label=p.label}
p.seq = i
if p.type == "select" then
sql = "SELECT * FROM provisioning_options WHERE param_id='"..provdb.escape(p.param_id).."' ORDER BY seq ASC"
@@ -1218,70 +1151,46 @@ mymodule.get_new_group = function(self, clientdata)
p.value = (p.value == "true")
end
p.default = p.value
- retval.value.defaults.value[p.param_id] = p
+ retval.defaults.value[p.param_id] = p
end
- if connected then databasedisconnect() end
- end)
- if not res and err then
- handlesqlexception(connected, err)
- retval.errtxt = err
- end
-
- self.handle_clientdata(retval, clientdata)
- return retval
-end
-
-mymodule.get_group = function(self, clientdata)
- local connected
- local retval = mymodule.get_new_group(self, clientdata)
- retval.value.group_id = cfe({value=group_id or "", label="Group ID", seq=0})
- self.handle_clientdata(retval, clientdata)
- retval.value.group_id.readonly=true
-
- local group_id = retval.value.group_id.value
- if group_id ~= "" then
- local res, err = pcall(function()
- connected = databaseconnect(true)
+ if group_id and group_id ~= "" then
sql = "SELECT * FROM provisioning_groups WHERE group_id='"..provdb.escape(group_id).."'"
tmp = getselectresponse(sql)
if tmp and #tmp > 0 then
for n,v in pairs(tmp[1]) do
- if retval.value[n] then
- retval.value[n].value = v
+ if retval[n] then
+ retval[n].value = v
end
end
-
- -- Now, get the paramgroup-to-param mappings
- sql = "SELECT * FROM param_groups_to_params WHERE group_id='"..provdb.escape(group_id).."'"
- tmp = getselectresponse(sql)
- for i,p in ipairs(tmp) do
- retval.value.params.value[#retval.value.params.value + 1] = p.param_id
- if (p.editable == "t") then
- retval.value.editable.value[#retval.value.editable.value + 1] = p.param_id
- end
- if p.value then
- retval.value.override.value[#retval.value.override.value + 1] = p.param_id
- if retval.value.defaults.value[p.param_id].type == "boolean" then
- retval.value.defaults.value[p.param_id].value = (p.value == "true")
- else
- retval.value.defaults.value[p.param_id].value = p.value
- end
+ end
+ -- Now, get the paramgroup-to-param mappings
+ sql = "SELECT * FROM param_groups_to_params WHERE group_id='"..provdb.escape(group_id).."'"
+ tmp = getselectresponse(sql)
+ for i,p in ipairs(tmp) do
+ retval.params.value[#retval.params.value + 1] = p.param_id
+ if (p.editable == "t") then
+ retval.editable.value[#retval.editable.value + 1] = p.param_id
+ end
+ if p.value then
+ retval.override.value[#retval.override.value + 1] = p.param_id
+ if retval.defaults.value[p.param_id].type == "boolean" then
+ retval.defaults.value[p.param_id].value = (p.value == "true")
+ else
+ retval.defaults.value[p.param_id].value = p.value
end
end
- else
- retval.errtxt = "Group does not exist"
end
- if connected then databasedisconnect() end
- end)
- if not res and err then
- handlesqlexception(connected, err)
- retval.errtxt = err
+ else
+ retval.group_id = nil
end
- else
- retval.errtxt = "Group does not exist"
+ if connected then databasedisconnect() end
+ end)
+ if not res and err then
+ handlesqlexception(connected, err)
+ errtxt = err
end
- return add_notify_devices(retval)
+ return cfe({ type="group", value=retval, label="Provisioning Parameter Group", errtxt=errtxt })
end
mymodule.create_group = function(self, group, action)
@@ -1458,54 +1367,44 @@ mymodule.list_params = function()
return cfe({ type="structure", value=retval, label="Parameters", errtxt=errtxt })
end
-mymodule.get_new_param = function(self, clientdata)
- local retval = cfe({ type="group", value={}, label="Provisioning Parameter" })
- retval.value.name = cfe({label="Name", seq=2})
- retval.value.type = cfe({type="select", label="Type", option={"text", "boolean", "select"}, seq=3})
- retval.value.label = cfe({label="Label", seq=4})
- retval.value.descr = cfe({label="Description", seq=5})
- retval.value.value = cfe({label="Default Value", descr="Warning, this value is not validated", seq=6})
- retval.value.regexp = cfe({label="Regular Expression", descr="Lua regular expression for validating the text parameter value", seq=7})
- retval.value.validate = cfe({type="longtext", label="Validation Code", descr="Lua code to validate the parameter value. Returns updated value and error text. Not used to validate group defaults.", seq=8})
- retval.value.seq = cfe({label="Sequence", seq=9})
-
- self.handle_clientdata(retval, clientdata)
- return retval
-end
-
mymodule.get_param = function(self, clientdata)
local connected
- local retval = mymodule.get_new_param(self, clientdata)
- retval.value.param_id = cfe({value=param_id or "", label="Param ID", seq=0})
- self.handle_clientdata(retval, clientdata)
- retval.value.param_id.readonly=true
-
- local param_id = retval.value.param_id.value
- if param_id ~= "" then
- local res, err = pcall(function()
- connected = databaseconnect(true)
+ clientdata = clientdata or {}
+ local param_id = clientdata.param_id
+ local retval = {}
+ retval.param_id = cfe({value=param_id or "", label="Param ID", readonly=true, seq=1})
+ retval.name = cfe({label="Name", seq=2})
+ retval.type = cfe({type="select", label="Type", option={"text", "boolean", "select"}, seq=3})
+ retval.label = cfe({label="Label", seq=4})
+ retval.descr = cfe({label="Description", seq=5})
+ retval.value = cfe({label="Default Value", descr="Warning, this value is not validated", seq=6})
+ retval.regexp = cfe({label="Regular Expression", descr="Lua regular expression for validating the text parameter value", seq=7})
+ retval.validate = cfe({type="longtext", label="Validation Code", descr="Lua code to validate the parameter value. Returns updated value and error text. Not used to validate group defaults.", seq=8})
+ retval.seq = cfe({label="Sequence", seq=9})
+ local errtxt
+ local res, err = pcall(function()
+ connected = databaseconnect(true)
+ if param_id and param_id ~= "" then
sql = "SELECT * FROM provisioning_params WHERE param_id='"..provdb.escape(param_id).."'"
tmp = getselectresponse(sql)
if tmp and #tmp > 0 then
for n,v in pairs(tmp[1]) do
- if retval.value[n] then
- retval.value[n].value = v
+ if retval[n] then
+ retval[n].value = v
end
end
- else
- retval.errtxt = "Parameter does not exist"
end
- if connected then databasedisconnect() end
- end)
- if not res and err then
- handlesqlexception(connected, err)
- retval.errtxt = err
+ else
+ retval.param_id = nil
end
- else
- retval.errtxt = "Parameter does not exist"
+ if connected then databasedisconnect() end
+ end)
+ if not res and err then
+ handlesqlexception(connected, err)
+ errtxt = err
end
- return add_notify_devices(retval)
+ return cfe({ type="group", value=retval, label="Provisioning Parameter", errtxt=errtxt })
end
mymodule.create_param = function(self, param, action)
@@ -1741,17 +1640,13 @@ mymodule.list_devices = function(self, clientdata)
end
mymodule.get_existing_device = function(self, clientdata)
- local tmp = cfe({ type="group", value={device_id = cfe()} })
- self.handle_clientdata(tmp, clientdata)
- retval = get_device(tmp.value.device_id.value, false)
- self.handle_clientdata(retval, clientdata)
- return add_notify_devices(retval)
+ clientdata = clientdata or {}
+ return get_device(clientdata.device_id, false)
end
mymodule.get_new_device = function(self, clientdata)
- retval = get_device(nil, true)
- self.handle_clientdata(retval, clientdata)
- return retval
+ clientdata = clientdata or {}
+ return get_device(clientdata.device_id, true)
end
mymodule.create_device = function(self, device, action)
@@ -1783,29 +1678,25 @@ mymodule.update_device = function(self, device, action, create)
end
end
if success then
- local device_id
+ if not saved_devices[device.value.device_id.value] then get_device(device.value.device_id.value) end
+ if not saved_device_params[device.value.device_id.value] then get_device_params(device.value.device_id.value) end
+
if create then
sql = "SELECT nextval('provisioning_device_seq')"
local tmp = getselectresponse(sql)
if tmp and #tmp>0 then
- device_id = tmp[1].nextval
- -- Add to cfe so can use to redirect to editdeviceparams
- device.value.device_id = cfe({value=device_id or "", label="Device ID", readonly=true, seq=0})
+ device.value.device_id.value = tmp[1].nextval
end
- logcall("create_device "..device_id)
+ logcall("create_device "..device.value.device_id.value)
else
- device_id = device.value.device_id.value
- if not saved_devices[device_id] then get_device(device_id) end
- if not saved_device_params[device_id] then get_device_params(device_id) end
-
- logcall("update_device "..device_id)
+ logcall("update_device "..device.value.device_id.value)
end
- sql = "DELETE FROM devices_to_classes WHERE device_id='"..provdb.escape(device_id).."'"
+ sql = "DELETE FROM devices_to_classes WHERE device_id='"..provdb.escape(device.value.device_id.value).."'"
runsqlcommand(sql)
-- Insert the device to class entries
for n,c in pairs(device.value.classes.value) do
if c.value ~= "" then
- sql = "INSERT INTO devices_to_classes VALUES('"..provdb.escape(device_id).."', '"..provdb.escape(c.value).."')"
+ sql = "INSERT INTO devices_to_classes VALUES('"..provdb.escape(device.value.device_id.value).."', '"..provdb.escape(c.value).."')"
runsqlcommand(sql)
end
end
@@ -1813,8 +1704,8 @@ mymodule.update_device = function(self, device, action, create)
device.descr = "Device Created"
-- Notify the device that its params might have changed (this will also validate)
- local s = saved_device_params[device_id]
- local r = set_device_params(get_device_params(device_id, false), false)
+ local s = saved_device_params[device.value.device_id.value]
+ local r = set_device_params(get_device_params(device.value.device_id.value, false), false)
if r.errtxt then
if create then
device.descr = device.descr.."\nERROR: Failed to update params\n"..r:print_errtxt()
@@ -1823,9 +1714,9 @@ mymodule.update_device = function(self, device, action, create)
end
end
- callscript(updatedevicescriptfile, device, saved_devices[device_id], r, s)
+ callscript(updatedevicescriptfile, device, saved_devices[device.value.device_id.value], r, s)
- saved_devices[device_id] = device
+ saved_devices[device.value.device_id.value] = device
end
if connected then databasedisconnect() end
end)
@@ -1889,26 +1780,21 @@ mymodule.delete_device = function(self, delreq)
end
mymodule.get_editable_device_params = function(self, clientdata, action)
- local tmp = cfe({ type="group", value={device_id = cfe()} })
- self.handle_clientdata(tmp, clientdata)
- retval = get_device_params(tmp.value.device_id.value, true)
- self.handle_clientdata(retval, clientdata)
- return add_notify_devices(retval)
+ clientdata = clientdata or {}
+ return get_device_params(clientdata.device_id, true)
end
mymodule.get_all_device_params = function(self, clientdata, action)
- local tmp = cfe({ type="group", value={device_id = cfe()} })
- self.handle_clientdata(tmp, clientdata)
- retval = get_device_params(tmp.value.device_id.value, false)
- self.handle_clientdata(retval, clientdata)
- return add_notify_devices(retval)
+ clientdata = clientdata or {}
+ return get_device_params(clientdata.device_id, false)
end
mymodule.get_class_options = function(self, clientdata)
- local retval = cfe({ type="group", value={}, label="Provisioning Class Values" })
- retval.value.class_id = cfe({label="Class ID", seq=1})
- self.handle_clientdata(retval, clientdata)
- return retval
+ clientdata = clientdata or {}
+ local class_id = clientdata.class_id
+ local retval = {}
+ retval.class_id = cfe({value=class_id or "", label="Class ID", seq=1})
+ return cfe({ type="group", value=retval, label="Provisioning Class Values" })
end
mymodule.get_class_values = function(self, retval)
@@ -2476,10 +2362,11 @@ mymodule.delete_request = function(self, delreq)
end
mymodule.get_request = function(self, clientdata)
- local retval = cfe({ type="group", value={}, label="Create Device from Request" })
- retval.value.mac = cfe({ label="MAC Address" })
- self.handle_clientdata(retval, clientdata)
- return add_notify_devices(retval)
+ clientdata = clientdata or {}
+ local mac = clientdata.mac
+ local retval = {}
+ retval.mac = cfe({ value=mac or "", label="MAC Address" })
+ return cfe({ type="group", value=retval, label="Create Device from Request" })
end
mymodule.create_from_request = function(self, request)
@@ -2538,20 +2425,14 @@ mymodule.create_from_request = function(self, request)
end
mymodule.get_bulk_create_request = function(self, clientdata)
- local retval = cfe({ type="group", value={}, label="Create Multiple Devices" })
- retval.value.bulkdevicedata = cfe({ type="list", value={}, label="Bulk device list", descr="List of devices as comma-separated fields (first row must contain column headers)" })
- return add_notify_devices(retval)
+ local retval = {}
+ retval.bulkdevicedata = cfe({ type="list", value={}, label="Bulk device list", descr="List of devices as comma-separated fields (first row must contain column headers)" })
+ return cfe({ type="group", value=retval, label="Create Multiple Devices" })
end
mymodule.bulk_create_devices = function(self, devicelist)
logcall("bulk_create_devices")
local connected
-
- if #devicelist.value.bulkdevicedata.value == 0 then
- devicelist.errtxt = "No devices specified"
- return devicelist
- end
-
-- To allow uploading a file, check the bulkdevicedata format
-- Haserl will pass a temporary file name if a file is uploaded
if #devicelist.value.bulkdevicedata.value == 1 and string.find(devicelist.value.bulkdevicedata.value[1], "^/tmp/[^.]+$") and fs.is_file(devicelist.value.bulkdevicedata.value[1]) then