summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTed Trask <ttrask01@yahoo.com>2010-11-10 09:04:44 +0000
committerTed Trask <ttrask01@yahoo.com>2010-11-10 09:04:44 +0000
commit665a734bce62fceaeca2665a21d5262f7070a98a (patch)
tree3fa7b60736d1851c32ca82204adf86071a231c09
parente905ff5e3144a05570da51bcad192c9b81745eae (diff)
downloadacf-provisioning-665a734bce62fceaeca2665a21d5262f7070a98a.tar.bz2
acf-provisioning-665a734bce62fceaeca2665a21d5262f7070a98a.tar.xz
Added searchdevices action and fixed getdeviceparams to be proper structure, not array
-rw-r--r--provisioning-controller.lua10
-rw-r--r--provisioning-listdevices-html.lsp2
-rw-r--r--provisioning-model.lua60
-rw-r--r--provisioning-searchdevices-html.lsp15
-rw-r--r--provisioning.menu1
-rw-r--r--provisioning.roles4
6 files changed, 85 insertions, 7 deletions
diff --git a/provisioning-controller.lua b/provisioning-controller.lua
index 88971ea..c2d6ea9 100644
--- a/provisioning-controller.lua
+++ b/provisioning-controller.lua
@@ -89,6 +89,9 @@ deletedevice = function( self )
end
editdeviceparams = function( self )
+ if self.clientdata.viewtype then
+ self.conf.viewtype = self.clientdata.viewtype
+ end
return controllerfunctions.handle_form(self, function() return self.model.get_editable_device_params(self.clientdata.device_id) end, self.model.set_editable_device_params, self.clientdata, "Save", "Edit Device Parameters", "Device Parameters Saved")
end
@@ -102,3 +105,10 @@ getdevicevalues = function( self )
end
return self.model.get_device_values(self.clientdata.name)
end
+
+searchdevices = function( self )
+ if self.clientdata.viewtype then
+ self.conf.viewtype = self.clientdata.viewtype
+ end
+ return self.model.search_device_values(self.clientdata.id, self.clientdata.value)
+end
diff --git a/provisioning-listdevices-html.lsp b/provisioning-listdevices-html.lsp
index df81bfe..0b646c0 100644
--- a/provisioning-listdevices-html.lsp
+++ b/provisioning-listdevices-html.lsp
@@ -53,8 +53,8 @@ require("viewfunctions")
<% if #view.value == 0 then %>
<p>No devices found</p>
<% end %>
+</DL>
<% if viewlibrary and viewlibrary.dispatch_component and viewlibrary.check_permission("createdevice") then
viewlibrary.dispatch_component("createdevice")
end %>
-</DL>
diff --git a/provisioning-model.lua b/provisioning-model.lua
index fa2ddad..71e9434 100644
--- a/provisioning-model.lua
+++ b/provisioning-model.lua
@@ -1120,7 +1120,6 @@ get_device_params = function(device_id, editable)
for i,g in ipairs(tmp) do
retval[g.name] = g
retval[g.name].type="group"
- retval[g.name].value={}
end
-- Then, get all of the parameters for this device
sql = "SELECT g.name AS group, p.param_id, p.name, p.type, p.label, p.descr, p.seq, CASE WHEN v.value IS NOT NULL THEN v.value WHEN g2p.value IS NOT NULL THEN g2p.value ELSE p.value END AS value, g2p.value AS default "..
@@ -1133,15 +1132,18 @@ get_device_params = function(device_id, editable)
local tmp = getselectresponse(sql)
-- Loop through the params and put them into the groups
for i,p in ipairs(tmp) do
+ if not retval[p.group].value then
+ retval[p.group].value = {}
+ end
local value = retval[p.group].value
if p.type == "boolean" then
p.value = (p.value == "true")
end
- value[#value+1] = p
+ value[p.name] = p
end
-- Finally, loop through the result and remove empty groups
for name,val in pairs(retval) do
- if #val.value == 0 then
+ if not val.value then
retval[name] = nil
end
end
@@ -1152,7 +1154,6 @@ get_device_params = function(device_id, editable)
errtxt = err
end
end
-
return cfe({ type="group", value=retval, label="Provisioning Device Parameters", errtxt=errtxt })
end
@@ -1267,3 +1268,54 @@ get_device_values = function(name)
return cfe({ type="group", value=retval, label="Provisioning Device Parameter Values", errtxt=errtxt })
end
+
+search_device_values = function(parameter_id, parameter_value)
+ local errtxt
+ retval = {}
+ retval.id = cfe({type="select", label="Parameter", option={}, seq=1})
+ retval.value = cfe({label="Parameter Value", seq=2})
+ retval.result = cfe({type="structure", value={}, label="List of Devices" })
+ local group, param = string.match(parameter_id or "", "([^%.]*)%.?(.*)")
+ local res, err = pcall(function()
+ local connected = databaseconnect()
+ -- Get the group/parameter options
+ local sql = "SELECT g.name AS group_name, p.name AS param_name FROM provisioning_groups g JOIN param_groups_to_params USING(group_id) JOIN provisioning_params p USING(param_id) GROUP BY g.name, p.name ORDER BY g.name ASC, p.name ASC"
+ local tmp = getselectresponse(sql)
+ local blankopt = {}
+ local blankexists = {}
+ for i,v in ipairs(tmp) do
+ retval.id.option[#retval.id.option + 1] = v.group_name.."."..v.param_name
+ if not blankexists[v.param_name] then
+ blankopt[#blankopt+1] = "."..v.param_name
+ blankexists[v.param_name] = true
+ end
+ end
+ table.sort(blankopt)
+ for i,o in ipairs(blankopt) do
+ retval.id.option[#retval.id.option + 1] = o
+ end
+ if #tmp>1 then
+ retval.id.value = retval.id.option[1]
+ end
+ -- Get the devices from the DB
+ if param and param ~= "" and parameter_value and parameter_value ~= "" then
+ retval.id.value = parameter_id
+ retval.value.value = parameter_value
+ sql = "SELECT * FROM provisioning_devices WHERE device_id = ("..
+ "SELECT d2t.device_id FROM (devices_to_classes d2t JOIN provisioning_classes t USING(class_id) JOIN classes_to_param_groups t2g USING(class_id) JOIN provisioning_groups g USING(group_id) "..
+ "JOIN param_groups_to_params g2p USING(group_id) JOIN provisioning_params p USING(param_id)) LEFT JOIN provisioning_values v ON(d2t.device_id=v.device_id AND p.param_id=v.param_id AND g.name=v.group_name ) "
+ if group and group ~= "" then
+ sql = sql.."WHERE g.name='"..escape(group).."' AND p.name='"..escape(param).."' AND v.value='"..escape(parameter_value).."'"
+ else
+ sql = sql.."WHERE p.name='"..escape(param).."' AND v.value='"..escape(parameter_value).."'"
+ end
+ sql = sql..") ORDER BY name ASC, label ASC"
+ retval.result.value = getselectresponse(sql)
+ end
+ if connected then databasedisconnect() end
+ end)
+ if not res and err then
+ errtxt = err
+ end
+ return cfe({type="group", value=retval, label="Device Search", errtxt=errtxt})
+end
diff --git a/provisioning-searchdevices-html.lsp b/provisioning-searchdevices-html.lsp
new file mode 100644
index 0000000..f0d39b0
--- /dev/null
+++ b/provisioning-searchdevices-html.lsp
@@ -0,0 +1,15 @@
+<% local form, viewlibrary, page_info = ...
+require("viewfunctions")
+%>
+
+<% if form.value.result then
+ local func = haserl.loadfile(page_info.viewfile:gsub("searchdevices", "listdevices"))
+ func(form.value.result, viewlibrary, page_info, session)
+end %>
+
+<H1><%= html.html_escape(form.label) %></H1>
+<%
+ form.value.result = nil
+ form.option = "Search"
+ displayform(form, nil, nil, page_info, 2)
+%>
diff --git a/provisioning.menu b/provisioning.menu
index 350dd63..dd7dd86 100644
--- a/provisioning.menu
+++ b/provisioning.menu
@@ -1,5 +1,6 @@
# Prefix and controller are already known at this point
# Cat Group Tab Action
+Applications 89Provisioning Search searchdevices
Applications 89Provisioning Devices listdevices
Applications 89Provisioning Templates listtemplates
Applications 89Provisioning Classes listclasses
diff --git a/provisioning.roles b/provisioning.roles
index 9b75956..0e7e57d 100644
--- a/provisioning.roles
+++ b/provisioning.roles
@@ -1,5 +1,5 @@
GUEST=provisioning:getdevicevalues
USER=
-EDITOR=provisioning:listdevices,provisioning:editdevice,provisioning:createdevice,provisioning:duplicatedevice,provisioning:deletedevice
+EDITOR=provisioning:searchdevices,provisioning:listdevices,provisioning:editdevice,provisioning:createdevice,provisioning:duplicatedevice,provisioning:deletedevice
EXPERT=provisioning:listtemplates,provisioning:edittemplate,provisioning:createtemplate,provisioning:deletetemplate,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
-ADMIN=provisioning:listtemplates,provisioning:edittemplate,provisioning:createtemplate,provisioning:deletetemplate,provisioning:listdevices,provisioning:editdevice,provisioning:createdevice,provisioning:duplicatedevice,provisioning:deletedevice,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
+ADMIN=provisioning:listtemplates,provisioning:edittemplate,provisioning:createtemplate,provisioning:deletetemplate,provisioning:searchdevices,provisioning:listdevices,provisioning:editdevice,provisioning:createdevice,provisioning:duplicatedevice,provisioning:deletedevice,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