From a219d102fe69697773800cd91f508443ec293fbf Mon Sep 17 00:00:00 2001 From: Ted Trask Date: Sat, 16 Mar 2019 02:31:10 +0000 Subject: Implement deletedeviceparamgroup action The deletedeviceparamgroup action will delete a parameter group from a device and move up all of the subsequent parameter groups. Only works for parameter groups with names ending with numbers, such as regX. This can be used to delete a registration and move up all of the subsequent registrations, working around the Polycom bug where subsequent registrations do not show up on the device. --- provisioning-controller.lua | 4 +++ provisioning-editdeviceparams-html.lsp | 27 +++++++++----- provisioning-model.lua | 64 ++++++++++++++++++++++++++++++++++ provisioning.roles | 4 +-- 4 files changed, 89 insertions(+), 10 deletions(-) diff --git a/provisioning-controller.lua b/provisioning-controller.lua index 81a8941..7c1dd2f 100644 --- a/provisioning-controller.lua +++ b/provisioning-controller.lua @@ -114,6 +114,10 @@ mymodule.overridedeviceparams = function( self ) return self.handle_form(self, self.model.get_all_device_params, self.model.set_all_device_params, self.clientdata, "Save", "Override Device Parameters", "Device Parameters Saved") end +mymodule.deletedeviceparamgroup = function( self ) + return self.handle_form(self, self.model.get_delete_device_param_group, self.model.delete_device_param_group, self.clientdata, "Delete", "Delete Device Parameter Group", "Device Parameter Group Deleted") +end + mymodule.viewdeviceparams = function( self ) return self.model.get_editable_device_params(self, self.clientdata) end diff --git a/provisioning-editdeviceparams-html.lsp b/provisioning-editdeviceparams-html.lsp index c0d1de8..bd54c1f 100644 --- a/provisioning-editdeviceparams-html.lsp +++ b/provisioning-editdeviceparams-html.lsp @@ -74,15 +74,23 @@ end currentnumber = 0; } - if ((currentsection == previoussection) && (currentnumber != previousnumber) && (0 == $(this).find(".defaultoverride").length) && (0 == $(this).find(".groupdefaultoverride").length) && ($(this).children().first().text().match(currentnumber))) { - $(this).toggle(); - <% if page_info.action ~= "viewdeviceparams" then %> - $(' Add '+$(this).children().first().text()+'').insertAfter($(this)).click(showsection); - if ($(this).prev("a").length == 1) { - // If the previous sibling is also an Add link, hide this one - $(this).next().toggle(); - } + if ((currentsection == previoussection) && (currentnumber != previousnumber) && ($(this).children().first().text().match(currentnumber))) { + // Found a section + <% if page_info.action ~= "viewdeviceparams" and viewlibrary.check_permission("deletedeviceparamgroup") then %> + // Add a delete button to previous section + $(" Delete").insertAfter($(this).prevAll("div").first().children().first()); <% end %> + if ((0 == $(this).find(".defaultoverride").length) && (0 == $(this).find(".groupdefaultoverride").length)) { + // Hide this section + $(this).toggle(); + <% if page_info.action ~= "viewdeviceparams" then %> + $(' '+$(this).children().first().text()+'').insertAfter($(this)).click(showsection); + if ($(this).prev("a").length == 1) { + // If the previous sibling is also an Add link, hide this one + $(this).next().toggle(); + } + <% end %> + } } previoussection = currentsection; @@ -95,9 +103,12 @@ end $(".deletedevice").click(function(){ return confirm("Are you sure you want to delete this device?")}); $(".groupdefaultoverride").siblings().select("contains('Default:')").addClass("error"); hideunuseddivs(); + $(".deletedeviceparamgroup").click(function(){ return confirm("Are you sure you want to delete this parameter group?")}); }); +<% htmlviewfunctions.displaycommandresults({"deletedeviceparamgroup"}, session) %> + <% if form and form.value and form.value.device_id and form.value.device_id.value ~= "" then %> <% if viewlibrary.check_permission("editdevice") then %> Edit Class of Service diff --git a/provisioning-model.lua b/provisioning-model.lua index 6c60ace..8e7c8c8 100644 --- a/provisioning-model.lua +++ b/provisioning-model.lua @@ -1887,6 +1887,70 @@ mymodule.set_all_device_params = function(self, params) return set_device_params(params, false) end +mymodule.get_delete_device_param_group = function(self, clientdata) + clientdata = clientdata or {} + local device_id = clientdata.device_id + local retval = {} + retval.device_id = cfe({value=device_id or "", label="Device ID", seq=0}) + local errtxt = "Cannot find device" + if device_id and device_id ~= "" then + local values = get_device_values(device_id) + if not values.errtxt then + errtxt = nil + retval.group = cfe({type="select", value={}, label="Group", option={}, seq=1}) + local reverseoption = {} + for name in pairs(values.value) do + if not reverseoption[name] and string.match(name, "%d$") then + reverseoption[name] = true + retval.group.option[#retval.group.option+1] = name + end + end + table.sort(retval.group.option) + end + end + + return cfe({ type="group", value=retval, label="Provisioning Device Parameter Groups", errtxt=errtxt }) +end + +mymodule.delete_device_param_group = function(self, group) + local connected + local success = (not group.errtxt) + success = modelfunctions.validateselect(group.value.group) and success + if success then + local res, err = pcall(function() + connected = databaseconnect(true) + local params = get_device_params(group.value.device_id.value, false) + if params.errtxt or not params.value[group.value.group.value] then + group.errtxt = "Failed to delete parameter group" + group.value.device_id.errtxt = params.errtxt + else + local number = tonumber(string.match(group.value.group.value, "%d+$")) + local name = string.match(group.value.group.value, "(.*)"..number.."$"); + local temp = params.value[group.value.group.value] + local i=number+1 + while params.value[name..i] do + params.value[name..(i-1)] = params.value[name..i] + i = i+1 + end + for n,v in pairs(temp.value) do + v.value = v.default + end + params.value[name..(i-1)] = temp + params = set_device_params(params) + group.errtxt = params.errtxt + end + if connected then databasedisconnect() end + end) + if not res and err then + handlesqlexception(connected, err) + group.errtxt = err + end + else + group.errtxt = "Failed to delete parameter group" + end + return group +end + mymodule.fetch_device_values = function(self, search) local connected local res, err = pcall(function() diff --git a/provisioning.roles b/provisioning.roles index 999d62c..7376b66 100644 --- a/provisioning.roles +++ b/provisioning.roles @@ -1,4 +1,4 @@ USER=provisioning:searchdevices,provisioning:listdevices,provisioning:viewdeviceparams,provisioning:searchbyextension,provisioning:searchbymac,provisioning:listrequests,provisioning:bulkdumpdevices,provisioning:bulk,provisioning:viewactivitylog -EDITOR=provisioning:editdevice,provisioning:createdevice,provisioning:duplicatedevice,provisioning:deletedevice,provisioning:editdeviceparams,provisioning:deleterequest,provisioning:createdevicefromrequest,provisioning:bulkcreatedevices +EDITOR=provisioning:editdevice,provisioning:createdevice,provisioning:duplicatedevice,provisioning:deletedevice,provisioning:editdeviceparams,provisioning:deletedeviceparamgroup,provisioning:deleterequest,provisioning:createdevicefromrequest,provisioning:bulkcreatedevices EXPERT=provisioning:listtemplates,provisioning:edittemplate,provisioning:createtemplate,provisioning:deletetemplate,provisioning:listclassgroups,provisioning:editclassgroup,provisioning:createclassgroup,provisioning:deleteclassgroup,provisioning:listclasses,provisioning:editclass,provisioning:createclass,provisioning:deleteclass,provisioning:listgroups,provisioning:editgroup,provisioning:creategroup,provisioning:deletegroup,provisioning:listparams,provisioning:editparam,provisioning:createparam,provisioning:deleteparam,provisioning:overridedeviceparams,provisioning:editoptions,provisioning:listfiles,provisioning:editfile,provisioning:getdevicevalues,provisioning:bulkdumprawdevices -ADMIN=provisioning:listtemplates,provisioning:edittemplate,provisioning:createtemplate,provisioning:deletetemplate,provisioning:searchdevices,provisioning:listdevices,provisioning:editdevice,provisioning:createdevice,provisioning:duplicatedevice,provisioning:deletedevice,provisioning:listclassgroups,provisioning:editclassgroup,provisioning:createclassgroup,provisioning:deleteclassgroup,provisioning:listclasses,provisioning:editclass,provisioning:createclass,provisioning:deleteclass,provisioning:listgroups,provisioning:editgroup,provisioning:creategroup,provisioning:deletegroup,provisioning:listparams,provisioning:editparam,provisioning:createparam,provisioning:deleteparam,provisioning:editdeviceparams,provisioning:overridedeviceparams,provisioning:viewdeviceparams,provisioning:editoptions,provisioning:listfiles,provisioning:editfile,provisioning:searchbyextension,provisioning:searchbymac,provisioning:getdevicevalues,provisioning:dumpdatabase,provisioning:getclassvalues,provisioning:listrequests,provisioning:deleterequest,provisioning:createdevicefromrequest,provisioning:bulkcreatedevices,provisioning:bulkdumprawdevices,provisioning:bulk,provisioning:viewactivitylog +ADMIN=provisioning:listtemplates,provisioning:edittemplate,provisioning:createtemplate,provisioning:deletetemplate,provisioning:searchdevices,provisioning:listdevices,provisioning:editdevice,provisioning:createdevice,provisioning:duplicatedevice,provisioning:deletedevice,provisioning:listclassgroups,provisioning:editclassgroup,provisioning:createclassgroup,provisioning:deleteclassgroup,provisioning:listclasses,provisioning:editclass,provisioning:createclass,provisioning:deleteclass,provisioning:listgroups,provisioning:editgroup,provisioning:creategroup,provisioning:deletegroup,provisioning:listparams,provisioning:editparam,provisioning:createparam,provisioning:deleteparam,provisioning:editdeviceparams,provisioning:deletedeviceparamgroup,provisioning:overridedeviceparams,provisioning:viewdeviceparams,provisioning:editoptions,provisioning:listfiles,provisioning:editfile,provisioning:searchbyextension,provisioning:searchbymac,provisioning:getdevicevalues,provisioning:dumpdatabase,provisioning:getclassvalues,provisioning:listrequests,provisioning:deleterequest,provisioning:createdevicefromrequest,provisioning:bulkcreatedevices,provisioning:bulkdumprawdevices,provisioning:bulk,provisioning:viewactivitylog -- cgit v1.2.3