diff options
author | Ted Trask <ttrask01@yahoo.com> | 2011-07-04 13:07:48 +0000 |
---|---|---|
committer | Ted Trask <ttrask01@yahoo.com> | 2011-07-04 13:07:48 +0000 |
commit | 1e24bc095c1ae8b00740892c2a3cd869b81281ca (patch) | |
tree | 88baf80e07acd81a19797e8a8e1ccad9152316c1 | |
parent | 065c39555fc7e86a800d14ea8ac8d3ebd48cd0d9 (diff) | |
download | acf-provisioning-1e24bc095c1ae8b00740892c2a3cd869b81281ca.tar.bz2 acf-provisioning-1e24bc095c1ae8b00740892c2a3cd869b81281ca.tar.xz |
Added new dumpdatabase action to dump database without ids - helps compare databases
-rw-r--r-- | provisioning-controller.lua | 4 | ||||
-rw-r--r-- | provisioning-dumpdatabase-html.lsp | 18 | ||||
-rw-r--r-- | provisioning-model.lua | 69 | ||||
-rw-r--r-- | provisioning.menu | 1 | ||||
-rw-r--r-- | provisioning.roles | 2 |
5 files changed, 93 insertions, 1 deletions
diff --git a/provisioning-controller.lua b/provisioning-controller.lua index c76cdfe..d9b4cbc 100644 --- a/provisioning-controller.lua +++ b/provisioning-controller.lua @@ -136,3 +136,7 @@ end editfile = function( self ) return controllerfunctions.handle_form(self, function() return self.model.get_filedetails(self.clientdata.filename) end, self.model.update_filedetails, self.clientdata, "Save", "Edit Script File", "Script File Saved") end + +dumpdatabase = function( self ) + return controllerfunctions.handle_form(self, self.model.get_database, self.model.dump_database, self.clientdata, "Submit", "Dump Provisioning Database") +end diff --git a/provisioning-dumpdatabase-html.lsp b/provisioning-dumpdatabase-html.lsp new file mode 100644 index 0000000..55001f4 --- /dev/null +++ b/provisioning-dumpdatabase-html.lsp @@ -0,0 +1,18 @@ +<% local form, viewlibrary, page_info = ... +require("viewfunctions") +%> + +<% if form.value.data then %> +<H1><%= html.html_escape(form.value.data.label) %></H1> +<DL> +<textarea name="filecontent"> +<%= html.html_escape(form.value.data.value) %> +</textarea> +</DL> +<% end %> + +<H1><%= html.html_escape(form.label) %></H1> +<% + form.value.data = nil + displayform(form, nil, nil, page_info, 2) +%> diff --git a/provisioning-model.lua b/provisioning-model.lua index 12dff83..230f089 100644 --- a/provisioning-model.lua +++ b/provisioning-model.lua @@ -1736,3 +1736,72 @@ function list_files() table.sort(retval, function(a,b) return a.filename < b.filename end) return cfe({ type="structure", value=retval, label="List of Provisioning Script files" }) end + +function get_database() + local devices = cfe({ type="boolean", value=false, label="Include Device Data" }) + return cfe({ type="group", value={devices=devices}, label="Provisioning Database Dump" }) +end + +function dump_database(db) + local res, err = pcall(function() + local connected = databaseconnect() + local lines = {} + local sql = "SELECT name, label, seq FROM provisioning_class_groups ORDER BY name, label" + local tmp = getselectresponse(sql) + for i,t in ipairs(tmp) do + lines[#lines+1] = "INSERT INTO provisioning_class_groups VALUES(default, '"..escape(t.name).."', '"..escape(t.label).."', '"..escape(t.seq).."')" + end + sql = "SELECT g.name AS group, c.label, c.seq FROM provisioning_classes c JOIN provisioning_class_groups g USING(class_group_id) ORDER BY g.name, c.label" + tmp = getselectresponse(sql) + for i,t in ipairs(tmp) do + lines[#lines+1] = "INSERT INTO provisioning_classes VALUES(default, (SELECT class_group_id FROM provisioning_class_groups WHERE name='"..escape(t.group).."'), '"..escape(t.label).."', '"..escape(t.seq).."')" + end + sql = "SELECT name, label, seq FROM provisioning_groups ORDER BY name, label" + tmp = getselectresponse(sql) + for i,t in ipairs(tmp) do + lines[#lines+1] = "INSERT INTO provisioning_groups VALUES(default, '"..escape(t.name).."'), '"..escape(t.label).."', '"..escape(t.seq).."')" + end + sql = "SELECT name, type, label, descr, value, seq, regexp, validate FROM provisioning_params ORDER BY name" + tmp = getselectresponse(sql) + for i,t in ipairs(tmp) do + lines[#lines+1] = "INSERT INTO provisioning_params VALUES(default, '"..escape(t.name).."', '"..escape(t.type).."', '"..escape(t.label).."', '"..escape(t.descr).."', '"..escape(t.value).."', '"..escape(t.seq).."', '"..escape(t.regexp).."', '"..escape(t.validate).."')" + end + sql = "SELECT p.name AS param, o.label, o.value, o.seq FROM provisioning_options o JOIN provisioning_params p USING(param_id) ORDER BY p.name, o.seq, o.label" + tmp = getselectresponse(sql) + for i,t in ipairs(tmp) do + lines[#lines+1] = "INSERT INTO provisioning_options VALUES((SELECT param_id FROM provisioning_params WHERE name='"..escape(t.param).."'), '"..escape(t.label).."', '"..escape(t.value).."', '"..escape(t.seq).."')" + end + sql = "SELECT c.label AS class, g.label AS group FROM provisioning_classes c JOIN classes_to_param_groups USING(class_id) JOIN provisioning_groups g USING(group_id) ORDER BY c.label, g.label" + tmp = getselectresponse(sql) + for i,t in ipairs(tmp) do + lines[#lines+1] = "INSERT INTO classes_to_param_groups VALUES((SELECT class_id FROM provisioning_classes WHERE label='"..escape(t.class).."'), (SELECT group_id FROM provisioning_groups WHERE label='"..escape(t.group).."'))" + end + sql = "SELECT p.name AS param, g.label AS group, t.value, t.editable FROM provisioning_params p JOIN param_groups_to_params t USING(param_id) JOIN provisioning_groups g USING(group_id) ORDER BY p.name, g.label" + tmp = getselectresponse(sql) + for i,t in ipairs(tmp) do + lines[#lines+1] = "INSERT INTO param_groups_to_params VALUES((SELECT group_id FROM provisioning_groups WHERE label='"..escape(t.group).."'), (SELECT param_id FROM provisioning_params WHERE name='"..escape(t.param).."'), '"..escape(t.value).."', "..escape(t.editable)..")" + end + if db.value.devices and db.value.devices.value then + sql = "SELECT device_id FROM devices_to_classes GROUP BY device_id ORDER BY device_id ASC" + devices = getselectresponse(sql) + for i,d in ipairs(devices) do + sql = "SELECT label FROM devices_to_classes JOIN provisioning_classes USING(class_id) WHERE device_id="..escape(d.device_id) + tmp = getselectresponse(sql) + for j,t in ipairs(tmp) do + lines[#lines+1] = "INSERT INTO devices_to_classes VALUES("..i..", (SELECT class_id FROM provisioning_classes WHERE label='"..escape(t.label).."'))" + end + sql = "SELECT group_name, p.name AS param, v.value FROM provisioning_values v JOIN provisioning_params p USING(param_id) WHERE device_id="..escape(d.device_id) + tmp = getselectresponse(sql) + for j,t in ipairs(tmp) do + lines[#lines+1] = "INSERT INTO provisioning_values VALUES("..i..", '"..escape(t.group_name).."', (SELECT param_id FROM provisioning_params WHERE name='"..escape(t.param).."'), '"..t.value.."')" + end + end + end + db.value.data = cfe({ type="longtext", value=table.concat(lines, "\n") or "", label="Database Values" }) + if connected then databasedisconnect() end + end) + if not res and err then + db.errtxt = err + end + return db +end diff --git a/provisioning.menu b/provisioning.menu index 3732a0f..3396a1b 100644 --- a/provisioning.menu +++ b/provisioning.menu @@ -10,3 +10,4 @@ Applications 89Provisioning Classes listclasses Applications 89Provisioning Param_Groups listgroups Applications 89Provisioning Params listparams Applications 89Provisioning Script_Files listfiles +Applications 89Provisioning Database dumpdatabase diff --git a/provisioning.roles b/provisioning.roles index 336b7cb..694aef0 100644 --- a/provisioning.roles +++ b/provisioning.roles @@ -1,4 +1,4 @@ USER=provisioning:getdevicevalues EDITOR=provisioning:searchdevices,provisioning:listdevices,provisioning:editdevice,provisioning:createdevice,provisioning:duplicatedevice,provisioning:deletedevice,provisioning:searchbyextension,provisioning:searchbymac,provisioning:editdeviceparams 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 -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:editoptions,provisioning:listfiles,provisioning:editfile,provisioning:searchbyextension,provisioning:searchbymac +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:editoptions,provisioning:listfiles,provisioning:editfile,provisioning:searchbyextension,provisioning:searchbymac,provisioning:dumpdatabase |