summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--config/delete_device.lua10
-rw-r--r--config/update_device_params.lua12
-rw-r--r--provisioning-controller.lua26
-rw-r--r--provisioning-editdevice-html.lsp2
-rw-r--r--provisioning-editdeviceparams-html.lsp2
-rw-r--r--provisioning-getclassvalues-html.lsp4
-rw-r--r--provisioning-listclasses-html.lsp4
-rw-r--r--provisioning-listclassgroups-html.lsp2
-rw-r--r--provisioning-listdevices-html.lsp4
-rw-r--r--provisioning-listgroups-html.lsp2
-rw-r--r--provisioning-listparams-html.lsp2
-rw-r--r--provisioning-listrequests-html.lsp6
-rw-r--r--provisioning-listtemplates-html.lsp2
-rw-r--r--provisioning-model.lua206
-rw-r--r--provisioning.menu1
16 files changed, 177 insertions, 110 deletions
diff --git a/Makefile b/Makefile
index fe45e15..7d34779 100644
--- a/Makefile
+++ b/Makefile
@@ -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&param_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