diff options
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | config/delete_device.lua | 10 | ||||
-rw-r--r-- | config/update_device_params.lua | 12 | ||||
-rw-r--r-- | provisioning-controller.lua | 26 | ||||
-rw-r--r-- | provisioning-editdevice-html.lsp | 2 | ||||
-rw-r--r-- | provisioning-editdeviceparams-html.lsp | 2 | ||||
-rw-r--r-- | provisioning-getclassvalues-html.lsp | 4 | ||||
-rw-r--r-- | provisioning-listclasses-html.lsp | 4 | ||||
-rw-r--r-- | provisioning-listclassgroups-html.lsp | 2 | ||||
-rw-r--r-- | provisioning-listdevices-html.lsp | 4 | ||||
-rw-r--r-- | provisioning-listgroups-html.lsp | 2 | ||||
-rw-r--r-- | provisioning-listparams-html.lsp | 2 | ||||
-rw-r--r-- | provisioning-listrequests-html.lsp | 6 | ||||
-rw-r--r-- | provisioning-listtemplates-html.lsp | 2 | ||||
-rw-r--r-- | provisioning-model.lua | 206 | ||||
-rw-r--r-- | provisioning.menu | 1 |
16 files changed, 177 insertions, 110 deletions
@@ -1,6 +1,6 @@ APP_NAME=provisioning PACKAGE=acf-$(APP_NAME) -VERSION=0.1.3 +VERSION=0.2.0 APP_DIST=\ provisioning* \ diff --git a/config/delete_device.lua b/config/delete_device.lua index ea69da2..d7e34a1 100644 --- a/config/delete_device.lua +++ b/config/delete_device.lua @@ -10,10 +10,12 @@ APP.logevent("got to delete_device script") -- First, we delete the associated config files if oldparams.value.device and string.match(oldparams.value.device.label, "Polycom") and oldparams.value.device.value.mac then local path = root.."Polycom/" - for d in posix.files(path) do - if string.match(d, string.lower(oldparams.value.device.value.mac.value)) and posix.stat(path..d, "type") == "regular" then - APP.logevent("deleting "..path..d) - os.remove(path..d) + if posix.stat(path, "type") == "directory" then + for d in posix.files(path) do + if string.match(d, string.lower(oldparams.value.device.value.mac.value)) and posix.stat(path..d, "type") == "regular" then + APP.logevent("deleting "..path..d) + os.remove(path..d) + end end end end diff --git a/config/update_device_params.lua b/config/update_device_params.lua index 5d13099..61d33d2 100644 --- a/config/update_device_params.lua +++ b/config/update_device_params.lua @@ -33,11 +33,13 @@ oldparams = oldparams or {value={}} if oldparams.value.device and oldparams.value.device.value.mac and oldparams.value.device.value.mac.value ~= "" and params.value.device and params.value.device.value.mac and params.value.device.value.mac.value ~= oldparams.value.device.value.mac.value then if string.match(oldparams.value.device.label, "Polycom") then local path = root.."Polycom/" - for d in posix.files(path) do - if string.match(d, string.lower(oldparams.value.device.value.mac.value)) and posix.stat(path..d, "type") == "regular" then - local newfile = string.gsub(d, string.lower(oldparams.value.device.value.mac.value), string.lower(params.value.device.value.mac.value)) - APP.logevent("moving "..path..d.." to "..path..newfile) - os.rename(path..d, path..newfile) + if posix.stat(path, "type") == "directory" then + for d in posix.files(path) do + if string.match(d, string.lower(oldparams.value.device.value.mac.value)) and posix.stat(path..d, "type") == "regular" then + local newfile = string.gsub(d, string.lower(oldparams.value.device.value.mac.value), string.lower(params.value.device.value.mac.value)) + APP.logevent("moving "..path..d.." to "..path..newfile) + os.rename(path..d, path..newfile) + end end end end diff --git a/provisioning-controller.lua b/provisioning-controller.lua index da783b1..7dce123 100644 --- a/provisioning-controller.lua +++ b/provisioning-controller.lua @@ -15,7 +15,7 @@ createtemplate = function( self ) end deletetemplate = function( self ) - return self:redirect_to_referrer(self.model.delete_template(self.clientdata.filename)) + return self.handle_form(self, self.model.get_delete_template, self.model.delete_template, self.clientdata, "Delete", "Delete Template", "Template Deleted") end listclassgroups = function( self ) @@ -31,7 +31,7 @@ createclassgroup = function( self ) end deleteclassgroup = function( self ) - return self:redirect_to_referrer(self.model.delete_class_group(self.clientdata.class_group_id)) + return self.handle_form(self, self.model.get_delete_class_group, self.model.delete_class_group, self.clientdata, "Delete", "Delete Class Group", "Class Group Deleted") end listclasses = function( self ) @@ -47,7 +47,7 @@ createclass = function( self ) end deleteclass = function( self ) - return self:redirect_to_referrer(self.model.delete_class(self.clientdata.class_id)) + return self.handle_form(self, self.model.get_delete_class, self.model.delete_class, self.clientdata, "Delete", "Delete Class", "Class Deleted") end getclassvalues = function( self ) @@ -66,8 +66,8 @@ creategroup = function( self ) return self.handle_form(self, self.model.get_group, self.model.create_group, self.clientdata, "Create", "Create Parameter Group", "Parameter Group Created") end -deletegroup = function( self ) - return self:redirect_to_referrer(self.model.delete_group(self.clientdata.group_id)) +deletegroup = function(self ) + return self.handle_form(self, self.model.get_delete_group, self.model.delete_group, self.clientdata, "Delete", "Delete Parameter Group", "Parameter Group Deleted") end listparams = function( self ) @@ -83,7 +83,7 @@ createparam = function( self ) end deleteparam = function( self ) - return self:redirect_to_referrer(self.model.delete_param(self.clientdata.param_id)) + return self.handle_form(self, self.model.get_delete_param, self.model.delete_param, self.clientdata, "Delete", "Delete Parameter", "Parameter Deleted") end listdevices = function( self ) @@ -91,12 +91,12 @@ listdevices = function( self ) end editdevice = function( self ) - return self.handle_form(self, self.model.get_device, self.model.update_device, self.clientdata, "Save", "Edit Device", "Device Saved") + return self.handle_form(self, self.model.get_existing_device, self.model.update_device, self.clientdata, "Save", "Edit Device", "Device Saved") end createdevice = function( self ) - local retval = self.handle_form(self, self.model.get_device, self.model.create_device, self.clientdata, "Create", "Create Device", "Device Created") - if retval.value.device_id.value ~= "" and not retval.errtxt then + local retval = self.handle_form(self, self.model.get_new_device, self.model.create_device, self.clientdata, "Create", "Create Device", "Device Created") + if retval.value.device_id.value ~= "" and not retval.errtxt and self.redirect then -- Successfully created a device, redirect to edit it self:redirect("editdevice?device_id="..retval.value.device_id.value.."&redir=".. (self.clientdata.redir or "listdevices")) end @@ -104,11 +104,11 @@ createdevice = function( self ) end duplicatedevice = function( self ) - return self.handle_form(self, self.model.get_device, self.model.create_device, self.clientdata, "Duplicate", "Duplicate Device", "Duplicate Device Created") + return self.handle_form(self, self.model.get_existing_device, self.model.create_device, self.clientdata, "Duplicate", "Duplicate Device", "Duplicate Device Created") end deletedevice = function( self ) - return self:redirect_to_referrer(self.model.delete_device(self.clientdata.device_id)) + return self.handle_form(self, self.model.get_delete_device, self.model.delete_device, self.clientdata, "Delete", "Delete Device", "Device Deleted") end editdeviceparams = function( self ) @@ -156,12 +156,12 @@ listrequests = function( self ) end deleterequest = function( self ) - return self:redirect_to_referrer(self.model.delete_request(self.clientdata.mac)) + return self.handle_form(self, self.model.get_delete_request, self.model.delete_request, self.clientdata, "Delete", "Delete Request", "Request Deleted") end createdevicefromrequest = function( self ) local retval = self.handle_form(self, self.model.get_request, self.model.create_from_request, self.clientdata, "Create", "Create Device", "Device Created") - if retval.value.device_id and retval.value.device_id.value ~= "" and not retval.errtxt then + if retval.value.device_id and retval.value.device_id.value ~= "" and not retval.errtxt and self.redirect then -- Successfully created a device, redirect to edit it self:redirect("editdevice?device_id="..retval.value.device_id.value.."&redir=".. (self.clientdata.redir or "listdevices")) end diff --git a/provisioning-editdevice-html.lsp b/provisioning-editdevice-html.lsp index fddc888..a1292e0 100644 --- a/provisioning-editdevice-html.lsp +++ b/provisioning-editdevice-html.lsp @@ -16,7 +16,7 @@ require("htmlviewfunctions") <a href='<%= page_info.script..page_info.prefix..page_info.controller.."/editdeviceparams?device_id="..html.html_escape(form.value.device_id.value) %>'><img src='<%= html.html_escape(page_info.wwwprefix..page_info.staticdir) %>/tango/16x16/actions/document-properties.png' title="Edit Parameters"></img> <big>Edit Parameters </big></a> <% end %> <% if viewlibrary.check_permission("deletedevice") then %> - <a href='<%= page_info.script..page_info.prefix..page_info.controller.."/deletedevice?device_id="..html.html_escape(form.value.device_id.value) %>' class="deletedevice"><img src='<%= html.html_escape(page_info.wwwprefix..page_info.staticdir) %>/tango/16x16/emblems/emblem-unreadable.png' title="Delete this Device"></img> <big>Delete this Device </big></a> + <a href='<%= page_info.script..page_info.prefix..page_info.controller.."/deletedevice?submit=true&device_id="..html.html_escape(form.value.device_id.value) %>' class="deletedevice"><img src='<%= html.html_escape(page_info.wwwprefix..page_info.staticdir) %>/tango/16x16/emblems/emblem-unreadable.png' title="Delete this Device"></img> <big>Delete this Device </big></a> <% end %> <% end %> diff --git a/provisioning-editdeviceparams-html.lsp b/provisioning-editdeviceparams-html.lsp index e19d419..c5cd4ae 100644 --- a/provisioning-editdeviceparams-html.lsp +++ b/provisioning-editdeviceparams-html.lsp @@ -14,7 +14,7 @@ require("htmlviewfunctions") <a href='<%= page_info.script..page_info.prefix..page_info.controller.."/editdevice?device_id="..html.html_escape(form.value.device_id.value) %>'><img src='<%= html.html_escape(page_info.wwwprefix..page_info.staticdir) %>/tango/16x16/categories/applications-system.png' title="Edit Class of Service"></img> <big>Edit Class of Service </big></a> <% end %> <% if viewlibrary.check_permission("deletedevice") then %> - <a href='<%= page_info.script..page_info.prefix..page_info.controller.."/deletedevice?device_id="..html.html_escape(form.value.device_id.value) %>' class="deletedevice"><img src='<%= html.html_escape(page_info.wwwprefix..page_info.staticdir) %>/tango/16x16/emblems/emblem-unreadable.png' title="Delete this Device"></img> <big>Delete this Device </big></a> + <a href='<%= page_info.script..page_info.prefix..page_info.controller.."/deletedevice?submit=true&device_id="..html.html_escape(form.value.device_id.value) %>' class="deletedevice"><img src='<%= html.html_escape(page_info.wwwprefix..page_info.staticdir) %>/tango/16x16/emblems/emblem-unreadable.png' title="Delete this Device"></img> <big>Delete this Device </big></a> <% end %> <% end %> diff --git a/provisioning-getclassvalues-html.lsp b/provisioning-getclassvalues-html.lsp index 7dcf42d..e473b8b 100644 --- a/provisioning-getclassvalues-html.lsp +++ b/provisioning-getclassvalues-html.lsp @@ -6,8 +6,8 @@ require("htmlviewfunctions") <H1>Class</H1> <DL> <% if form.errtxt then io.write("<P CLASS='error'>" .. string.gsub(html.html_escape(form.errtxt), "\n", "<BR>") .. "</P>\n") end %> - <% displayitem(form.value.class_id) %> - <% displayitem(form.value.label) %> + <% htmlviewfunctions.displayitem(form.value.class_id) %> + <% htmlviewfunctions.displayitem(form.value.label) %> <H2>Parameter Values</H2> <% require("session") diff --git a/provisioning-listclasses-html.lsp b/provisioning-listclasses-html.lsp index 105e9c6..9ffcf93 100644 --- a/provisioning-listclasses-html.lsp +++ b/provisioning-listclasses-html.lsp @@ -36,13 +36,13 @@ require("htmlviewfunctions") <TR> <TD> <% if viewlibrary.check_permission("deleteclass") then %> - <%= html.link{value=page_info.script..page_info.prefix..page_info.controller.."/deleteclass?class_id="..v.class_id, label="Delete ", class="deleteclass"} %> + <%= html.link{value=page_info.script..page_info.prefix..page_info.controller.."/deleteclass?submit=true&class_id="..v.class_id, label="Delete ", class="deleteclass"} %> <% end %> <% if viewlibrary.check_permission("editclass") then %> <%= html.link{value=page_info.script..page_info.prefix..page_info.controller.."/editclass?class_id="..v.class_id.."&redir="..page_info.orig_action, label="Edit "} %> <% end %> <% if viewlibrary.check_permission("getclassvalues") then %> - <%= html.link{value=page_info.script..page_info.prefix..page_info.controller.."/getclassvalues?class_id="..v.class_id.."&Fetch=Fetch", label="View "} %> + <%= html.link{value=page_info.script..page_info.prefix..page_info.controller.."/getclassvalues?submit=true&class_id="..v.class_id, label="View "} %> <% end %> </TD> <TD><%= html.html_escape(v.group) %></TD> diff --git a/provisioning-listclassgroups-html.lsp b/provisioning-listclassgroups-html.lsp index a1b1ce5..004f77a 100644 --- a/provisioning-listclassgroups-html.lsp +++ b/provisioning-listclassgroups-html.lsp @@ -28,7 +28,7 @@ require("htmlviewfunctions") <TR> <TD> <% if viewlibrary.check_permission("deleteclassgroup") then %> - <%= html.link{value=page_info.script..page_info.prefix..page_info.controller.."/deleteclassgroup?class_group_id="..v.class_group_id, label="Delete ", class="deletegroup"} %> + <%= html.link{value=page_info.script..page_info.prefix..page_info.controller.."/deleteclassgroup?submit=true&class_group_id="..v.class_group_id, label="Delete ", class="deletegroup"} %> <% end %> <% if viewlibrary.check_permission("editclassgroup") then %> <%= html.link{value=page_info.script..page_info.prefix..page_info.controller.."/editclassgroup?class_group_id="..v.class_group_id.."&redir="..page_info.orig_action, label="Edit "} %> diff --git a/provisioning-listdevices-html.lsp b/provisioning-listdevices-html.lsp index 75d947c..669792d 100644 --- a/provisioning-listdevices-html.lsp +++ b/provisioning-listdevices-html.lsp @@ -57,7 +57,7 @@ table.sort(display) <TR> <TD> <% if viewlibrary.check_permission("deletedevice") then %> - <%= html.link{value=page_info.script..page_info.prefix..page_info.controller.."/deletedevice?device_id="..v.device_id, label="Delete ", class="deletedevice"} %> + <%= html.link{value=page_info.script..page_info.prefix..page_info.controller.."/deletedevice?submit=true&device_id="..v.device_id, label="Delete ", class="deletedevice"} %> <% end %> <% if viewlibrary.check_permission("editdevice") then %> <%= html.link{value=page_info.script..page_info.prefix..page_info.controller.."/editdevice?device_id="..v.device_id.."&redir="..page_info.orig_action, label="Edit "} %> @@ -68,7 +68,7 @@ table.sort(display) <%= html.link{value=page_info.script..page_info.prefix..page_info.controller.."/editdeviceparams?device_id="..v.device_id.."&redir="..page_info.orig_action, label="Params "} %> <% end %> <% if viewlibrary.check_permission("getdevicevalues") then %> - <%= html.link{value=page_info.script..page_info.prefix..page_info.controller.."/getdevicevalues?id=device_id&value="..v.device_id.."&Search=Search&viewtype=templated", label="View "} %> + <%= html.link{value=page_info.script..page_info.prefix..page_info.controller.."/getdevicevalues?submit=true&id=device_id&value="..v.device_id.."&viewtype=templated", label="View "} %> <% end %> </TD> <TD><%= html.html_escape(v.device_id) %></TD> diff --git a/provisioning-listgroups-html.lsp b/provisioning-listgroups-html.lsp index d3f51f9..9eb22a9 100644 --- a/provisioning-listgroups-html.lsp +++ b/provisioning-listgroups-html.lsp @@ -28,7 +28,7 @@ require("htmlviewfunctions") <TR> <TD> <% if viewlibrary.check_permission("deletegroup") then %> - <%= html.link{value=page_info.script..page_info.prefix..page_info.controller.."/deletegroup?group_id="..v.group_id, label="Delete ", class="deletegroup"} %> + <%= html.link{value=page_info.script..page_info.prefix..page_info.controller.."/deletegroup?submit=true&group_id="..v.group_id, label="Delete ", class="deletegroup"} %> <% end %> <% if viewlibrary.check_permission("editgroup") then %> <%= html.link{value=page_info.script..page_info.prefix..page_info.controller.."/editgroup?group_id="..v.group_id.."&redir="..page_info.orig_action, label="Edit "} %> diff --git a/provisioning-listparams-html.lsp b/provisioning-listparams-html.lsp index 43b7a17..215d65f 100644 --- a/provisioning-listparams-html.lsp +++ b/provisioning-listparams-html.lsp @@ -29,7 +29,7 @@ require("htmlviewfunctions") <TR> <TD> <% if viewlibrary.check_permission("deleteparam") then %> - <%= html.link{value=page_info.script..page_info.prefix..page_info.controller.."/deleteparam?param_id="..v.param_id, label="Delete ", class="deleteparam"} %> + <%= html.link{value=page_info.script..page_info.prefix..page_info.controller.."/deleteparam?submit=true¶m_id="..v.param_id, label="Delete ", class="deleteparam"} %> <% end %> <% if viewlibrary.check_permission("editparam") then %> <%= html.link{value=page_info.script..page_info.prefix..page_info.controller.."/editparam?param_id="..v.param_id.."&redir="..page_info.orig_action, label="Edit "} %> diff --git a/provisioning-listrequests-html.lsp b/provisioning-listrequests-html.lsp index 8e52bd2..3da64b2 100644 --- a/provisioning-listrequests-html.lsp +++ b/provisioning-listrequests-html.lsp @@ -44,15 +44,15 @@ require("htmlviewfunctions") <TR> <TD> <% if viewlibrary.check_permission("deleterequest") then %> - <%= html.link{value=page_info.script..page_info.prefix..page_info.controller.."/deleterequest?mac="..v.mac, label="Delete ", class="deleterequest"} %> + <%= html.link{value=page_info.script..page_info.prefix..page_info.controller.."/deleterequest?submit=true&mac="..v.mac, label="Delete ", class="deleterequest"} %> <% end %> <% if v.device_id then %> <% if viewlibrary.check_permission("searchdevices") then %> - <%= html.link{value=page_info.script..page_info.prefix..page_info.controller.."/searchdevices?id=device_id&value="..v.device_id.."&redir=searchdevices&Search=Search", label="Search "} %> + <%= html.link{value=page_info.script..page_info.prefix..page_info.controller.."/searchdevices?submit=true&id=device_id&value="..v.device_id.."&redir=searchdevices", label="Search "} %> <% end %> <% else %> <% if viewlibrary.check_permission("createdevicefromrequest") then %> - <%= html.link{value=page_info.script..page_info.prefix..page_info.controller.."/createdevicefromrequest?mac="..v.mac.."&Create=Create", label="Create "} %> + <%= html.link{value=page_info.script..page_info.prefix..page_info.controller.."/createdevicefromrequest?submit=true&mac="..v.mac, label="Create "} %> <% end %> <% end %> </TD> diff --git a/provisioning-listtemplates-html.lsp b/provisioning-listtemplates-html.lsp index a0b079e..d848d26 100644 --- a/provisioning-listtemplates-html.lsp +++ b/provisioning-listtemplates-html.lsp @@ -30,7 +30,7 @@ require("htmlviewfunctions") <TR> <TD> <% if viewlibrary.check_permission("deletetemplate") and v.label then %> - <%= html.link{value=page_info.script..page_info.prefix..page_info.controller.."/deletetemplate?filename="..v.filename, label="Delete ", class="deletetemplate"} %> + <%= html.link{value=page_info.script..page_info.prefix..page_info.controller.."/deletetemplate?submit=true&filename="..v.filename, label="Delete ", class="deletetemplate"} %> <% end %> <% if viewlibrary.check_permission("edittemplate") and v.label then %> <%= html.link{value=page_info.script..page_info.prefix..page_info.controller.."/edittemplate?filename="..v.filename.."&redir="..page_info.orig_action, label="Edit "} %> diff --git a/provisioning-model.lua b/provisioning-model.lua index 2703596..9ecf100 100644 --- a/provisioning-model.lua +++ b/provisioning-model.lua @@ -28,6 +28,11 @@ local con local saved_devices = {} local saved_device_params = {} +-- declare some private functions up front +local get_device +local get_device_params +local set_device_params + local table_creation_scripts = require("provisioning/provisioning-scripts") -- ################################################################################ @@ -530,30 +535,36 @@ update_template = function(self, template, action, create) return template end -delete_template = function(filename) - local result = "" - local errtxt +get_delete_template = function(self, clientdata) + local retval = {} + retval.filename = cfe({ value=clientdata.filename or "", label="File Name" }) + return cfe({ type="group", value=retval, label="Delete Template" }) +end + +delete_template = function(self, delreq) + local filename = delreq.value.filename.value + delreq.errtxt = "Failed to delete template" local res, err = pcall(function() local connected = databaseconnect() local sql = "SELECT * FROM provisioning_options WHERE param_id=(SELECT param_id FROM provisioning_params WHERE name = 'template') AND value='"..escape(filename).."'" local tmp = getselectresponse(sql) if #tmp == 0 then - errtxt = "Template does not exist" + delreq.value.filename.errtxt = "Template does not exist" else -- Remove the template sql = "DELETE FROM provisioning_options WHERE param_id=(SELECT param_id FROM provisioning_params WHERE name = 'template') AND value='"..escape(filename).."'" runsqlcommand(sql) -- Delete the template file os.remove(filename) - result = "Template Deleted" + delreq.errtxt = nil end if connected then databasedisconnect() end end) if not res and err then - errtxt = err + delreq.errtxt = err end - return cfe({ value=result, errtxt=errtxt, label="Delete Template Result" }) + return delreq end list_class_groups = function() @@ -674,27 +685,33 @@ update_class_group = function(self, group, action, create) return group end -delete_class_group = function(class_group_id) - local result = "" - local errtxt +get_delete_class_group = function(self, clientdata) + local retval = {} + retval.class_group_id = cfe({ value=clientdata.class_group_id or "", label="Class Group ID" }) + return cfe({ type="group", value=retval, label="Delete Class Group" }) +end + +delete_class_group = function(self, delreq) + local class_group_id = delreq.value.class_group_id.value + delreq.errtxt = "Failed to delete class group" local res, err = pcall(function() local connected = databaseconnect() local sql = "SELECT * FROM provisioning_class_groups WHERE class_group_id='"..escape(class_group_id).."'" local tmp = getselectresponse(sql) if #tmp == 0 then - errtxt = "Group does not exist" + delreq.value.class_group_id.errtxt = "Group does not exist" else sql = "DELETE FROM provisioning_class_groups WHERE class_group_id='"..escape(class_group_id).."'" runsqlcommand(sql) - result = "Class Group Deleted" + delreq.errtxt = nil end if connected then databasedisconnect() end end) if not res and err then - errtxt = err + delreq.errtxt = err end - return cfe({ value=result, errtxt=errtxt, label="Delete Class Group Result" }) + return delreq end list_classes = function() @@ -848,15 +865,21 @@ update_class = function(self, class, action, create) return class end -delete_class = function(class_id) - local result = "" - local errtxt +get_delete_class = function(self, clientdata) + local retval = {} + retval.class_id = cfe({ value=clientdata.class_id or "", label="Class ID" }) + return cfe({ type="group", value=retval, label="Delete Class" }) +end + +delete_class = function(self, delreq) + local class_id = delreq.value.class_id.value + delreq.errtxt = "Failed to delete class" local res, err = pcall(function() local connected = databaseconnect() local sql = "SELECT * FROM provisioning_classes WHERE class_id='"..escape(class_id).."'" local tmp = getselectresponse(sql) if #tmp == 0 then - errtxt = "Class does not exist" + delreq.value.class_id.errtxt = "Class does not exist" else sql = "BEGIN TRANSACTION" runsqlcommand(sql) @@ -864,18 +887,18 @@ delete_class = function(class_id) runsqlcommand(sql, true) sql = "DELETE FROM provisioning_classes WHERE class_id='"..escape(class_id).."'" runsqlcommand(sql, true) - result = "Class Deleted" sql = "COMMIT" runsqlcommand(sql) + delreq.errtxt = nil end if connected then databasedisconnect() end end) if not res and err then pcall(function() con:execute("ROLLBACK") end) - errtxt = err + delreq.errtxt = err end - return cfe({ value=result, errtxt=errtxt, label="Delete Class Result" }) + return delreq end list_groups = function() @@ -1060,15 +1083,21 @@ update_group = function(self, group, action, create) return group end -delete_group = function(group_id) - local result = "" - local errtxt +get_delete_group = function(self, clientdata) + local retval = {} + retval.group_id = cfe({ value=clientdata.group_id or "", label="Group ID" }) + return cfe({ type="group", value=retval, label="Delete Group" }) +end + +delete_group = function(self, delreq) + local group_id = delreq.value.group_id.value + delreq.errtxt = "Failed to delete parameter group" local res, err = pcall(function() local connected = databaseconnect() local sql = "SELECT * FROM provisioning_groups WHERE group_id='"..escape(group_id).."'" local tmp = getselectresponse(sql) if #tmp == 0 then - errtxt = "Group does not exist" + delreq.value.group_id.errtxt = "Group does not exist" else sql = "BEGIN TRANSACTION" runsqlcommand(sql) @@ -1076,18 +1105,18 @@ delete_group = function(group_id) runsqlcommand(sql, true) sql = "DELETE FROM provisioning_groups WHERE group_id='"..escape(group_id).."'" runsqlcommand(sql, true) - result = "Parameter Group Deleted" sql = "COMMIT" runsqlcommand(sql) + delreq.errtxt = nil end if connected then databasedisconnect() end end) if not res and err then pcall(function() con:execute("ROLLBACK") end) - errtxt = err + delreq.errtxt = err end - return cfe({ value=result, errtxt=errtxt, label="Delete Parameter Group Result" }) + return delreq end list_params = function() @@ -1219,15 +1248,21 @@ update_param = function(self, param, action, create) return param end -delete_param = function(param_id) - local result = "" - local errtxt +get_delete_param = function(self, clientdata) + local retval = {} + retval.param_id = cfe({ value=clientdata.param_id or "", label="Param ID" }) + return cfe({ type="group", value=retval, label="Delete Param" }) +end + +delete_param = function(self, delreq) + local param_id = delreq.value.param_id.value + delreq.errtxt = "Failed to delete parameter" local res, err = pcall(function() local connected = databaseconnect() local sql = "SELECT * FROM provisioning_params WHERE param_id='"..escape(param_id).."'" local tmp = getselectresponse(sql) if #tmp == 0 then - errtxt = "Parameter does not exist" + delreq.value.param_id.errtxt = "Parameter does not exist" else sql = "BEGIN TRANSACTION" runsqlcommand(sql) @@ -1235,18 +1270,18 @@ delete_param = function(param_id) runsqlcommand(sql, true) sql = "DELETE FROM provisioning_params WHERE param_id='"..escape(param_id).."'" runsqlcommand(sql, true) - result = "Parameter Deleted" sql = "COMMIT" runsqlcommand(sql) + delreq.errtxt = nil end if connected then databasedisconnect() end end) if not res and err then pcall(function() con:execute("ROLLBACK") end) - errtxt = err + delreq.errtxt = err end - return cfe({ value=result, errtxt=errtxt, label="Delete Parameter Result" }) + return delreq end list_devices = function() @@ -1274,8 +1309,15 @@ list_devices = function() return cfe({ type="structure", value=retval, label="List of Devices", errtxt=errtxt }) end -get_device = function(self, clientdata) - local device_id = clientdata.device_id +get_existing_device = function(self, clientdata) + return get_device(clientdata.device_id, false) +end + +get_new_device = function(self, clientdata) + return get_device(clientdata.device_id, true) +end + +get_device = function(device_id, create) local retval = {} retval.device_id = cfe({value=device_id or "", label="Device ID", seq=1}) retval.classes = cfe({type="group", value={}, label="Classes", seq=2}) @@ -1283,7 +1325,7 @@ get_device = function(self, clientdata) local res, err = pcall(function() local classes={} local connected = databaseconnect() - if device_id and device_id ~= "" then + if not create and device_id and device_id ~= "" then -- Get the device-to-class mappings local sql = "SELECT class_id FROM devices_to_classes WHERE device_id='"..escape(device_id).."'" local tmp = getselectresponse(sql) @@ -1312,7 +1354,7 @@ get_device = function(self, clientdata) -- Save the device for later use local output = cfe({ type="group", value=retval, label="Provisioning Device", errtxt=errtxt }) - if device_id and device_id ~= "" then saved_devices[device_id] = duplicatestructure(output) end + if not create and device_id and device_id ~= "" then saved_devices[device_id] = duplicatestructure(output) end return output end @@ -1391,15 +1433,21 @@ update_device = function(self, device, action, create) return device end -delete_device = function(device_id) - local result = "" - local errtxt +get_delete_device = function(self, clientdata) + local retval = {} + retval.device_id = cfe({ value=clientdata.device_id or "", label="Device ID" }) + return cfe({ type="group", value=retval, label="Delete Device" }) +end + +delete_device = function(self, delreq) + local device_id = delreq.value.device_id.value + delreq.errtxt = "Failed to delete device" local res, err = pcall(function() local connected = databaseconnect() local sql = "SELECT * FROM devices_to_classes WHERE device_id='"..escape(device_id).."' LIMIT 1" local tmp = getselectresponse(sql) if #tmp == 0 then - errtxt = "Device does not exist" + delreq.value.device_id.errtxt = "Device does not exist" else if not saved_device_params[device_id] then get_device_params(device_id) end if not saved_devices[device_id] then get_device(device_id) end @@ -1410,9 +1458,9 @@ delete_device = function(device_id) runsqlcommand(sql, true) sql = "DELETE FROM devices_to_classes WHERE device_id='"..escape(device_id).."'" runsqlcommand(sql, true) - result = "Device Deleted" sql = "COMMIT" runsqlcommand(sql) + delreq.errtxt = nil callscript(deletedevicescriptfile, saved_devices[device_id], saved_device_params[device_id]) saved_devices[device_id] = nil @@ -1422,10 +1470,10 @@ delete_device = function(device_id) end) if not res and err then pcall(function() con:execute("ROLLBACK") end) - errtxt = err + delreq.errtxt = err end - return cfe({ value=result, errtxt=errtxt, label="Delete Device Result" }) + return delreq end get_editable_device_params = function(self, clientdata, action) @@ -1436,7 +1484,6 @@ get_all_device_params = function(self, clientdata, action) return get_device_params(clientdata.device_id, false) end - get_class_options = function(self, clientdata) local class_id = clientdata.classs_id local retval = {} @@ -1495,7 +1542,7 @@ set_all_device_params = function(self, params) return set_device_params(params, false) end -local set_device_params = function(params, editable) +set_device_params = function(params, editable) -- Validate the settings local success = validateparam(params) local errtxt @@ -1997,28 +2044,34 @@ list_requests = function() return cfe({ type="structure", value=retval, label="List of Requests", errtxt=errtxt }) end -delete_request = function(mac) - local result = "" - local errtxt +get_delete_request = function(self, clientdata) + local retval = {} + retval.mac = cfe({ value=clientdata.mac or "", label="MAC Address" }) + return cfe({ type="group", value=retval, label="Delete Request" }) +end + +delete_request = function(self, delreq) + local mac = delreq.value.mac.value + delreq.errtxt = "Failed to delete request" local res, err = pcall(function() local connected = databaseconnect() local sql = "SELECT * FROM provisioning_requests WHERE mac='"..escape(string.upper(mac)).."'" local tmp = getselectresponse(sql) if #tmp == 0 then - errtxt = "Request does not exist" + delreq.value.mac.errtxt = "Request does not exist" else -- Remove the request sql = "DELETE FROM provisioning_requests WHERE mac='"..escape(string.upper(mac)).."'" runsqlcommand(sql) - result = "Request Deleted" + delreq.errtxt = nil end if connected then databasedisconnect() end end) if not res and err then - errtxt = err + delreq.errtxt = err end - return cfe({ value=result, errtxt=errtxt, label="Delete Request Result" }) + return delreq end get_request = function(self, clientdata) @@ -2042,27 +2095,36 @@ create_from_request = function(self, request) local class, group = callscript(determineclassscriptfile, tmp[1].agent, c) -- Create the device - local device = get_device() + local device = get_device(nil, true) if class and group and device.value.classes.value[group] then device.value.classes.value[group].value = class - end - device = create_device(device) - if device.errtxt then - request.errtxt = device.errtxt - else - local params = get_device_params(device.value.device_id.value) - -- Set the MAC Address - if params.value.device and params.value.device.value.mac then - params.value.device.value.mac.value = string.upper(request.value.mac.value) - params = set_device_params(params) - end - if params.errtxt then - request.errtxt = params.errtxt - delete_device(device.value.device_id.value) + device = create_device(self, device) + if device.errtxt then + request.errtxt = {device.errtxt} + for n,v in pairs(device.value) do + if v.errtxt then + request.errtxt[#request.errtxt + 1] = v.errtxt + end + end + request.errtxt = table.concat(request.errtxt, "\n") else - success = true - request.value.device_id = device.value.device_id + local params = get_device_params(device.value.device_id.value) + -- Set the MAC Address + if params.value.device and params.value.device.value.mac then + params.value.device.value.mac.value = string.upper(request.value.mac.value) + params = set_device_params(params) + end + if params.errtxt then + request.errtxt = params.errtxt + local req = get_delete_device(self, {device_id = device.value.device_id.value}) + delete_device(self, req) + else + success = true + request.value.device_id = device.value.device_id + end end + else + request.errtxt = "Failed to create device - could not determine class" end end if connected then databasedisconnect() end diff --git a/provisioning.menu b/provisioning.menu index e496c3d..2e1f9d4 100644 --- a/provisioning.menu +++ b/provisioning.menu @@ -3,6 +3,7 @@ Applications 89Provisioning Extension searchbyextension Applications 89Provisioning MAC_Address searchbymac Applications 89Provisioning Search searchdevices +Applications 89Provisioning Create createdevice Applications 89Provisioning Devices listdevices Applications 89Provisioning Requests listrequests Applications 89Provisioning Templates listtemplates |