summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTed Trask <ttrask01@yahoo.com>2011-07-04 13:07:48 +0000
committerTed Trask <ttrask01@yahoo.com>2011-07-04 13:07:48 +0000
commit1e24bc095c1ae8b00740892c2a3cd869b81281ca (patch)
tree88baf80e07acd81a19797e8a8e1ccad9152316c1
parent065c39555fc7e86a800d14ea8ac8d3ebd48cd0d9 (diff)
downloadacf-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.lua4
-rw-r--r--provisioning-dumpdatabase-html.lsp18
-rw-r--r--provisioning-model.lua69
-rw-r--r--provisioning.menu1
-rw-r--r--provisioning.roles2
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