diff options
author | Ted Trask <ttrask01@yahoo.com> | 2011-03-01 16:10:16 +0000 |
---|---|---|
committer | Ted Trask <ttrask01@yahoo.com> | 2011-03-01 16:10:16 +0000 |
commit | cd761a32e4afafd6104a95867d3770f23229fde2 (patch) | |
tree | 068369f1c52725031ef636a6be2887486fdd7c83 | |
parent | 10db00827279e3cc3d8a6c2f4c89db325ae62ef4 (diff) | |
download | acf-provisioning-cd761a32e4afafd6104a95867d3770f23229fde2.tar.bz2 acf-provisioning-cd761a32e4afafd6104a95867d3770f23229fde2.tar.xz |
Made getdevicevalues and searchdevices into proper forms and added searchbyextension and searchbymac actions.
-rw-r--r-- | provisioning-controller.lua | 4 | ||||
-rw-r--r-- | provisioning-getdevicevalues-templated.lsp | 2 | ||||
-rw-r--r-- | provisioning-listdevices-html.lsp | 2 | ||||
-rw-r--r-- | provisioning-model.lua | 79 | ||||
-rw-r--r-- | provisioning-searchbyextension-html.lsp | 25 | ||||
-rw-r--r-- | provisioning-searchbymac-html.lsp | 25 | ||||
-rw-r--r-- | provisioning-searchdevices-html.lsp | 1 | ||||
-rw-r--r-- | provisioning.roles | 4 |
8 files changed, 103 insertions, 39 deletions
diff --git a/provisioning-controller.lua b/provisioning-controller.lua index 155e17f..75daa40 100644 --- a/provisioning-controller.lua +++ b/provisioning-controller.lua @@ -113,11 +113,11 @@ overridedeviceparams = function( self ) end getdevicevalues = function( self ) - return self.model.fetch_device_values(self.clientdata.id, self.clientdata.value, self.clientdata.comparison) + return controllerfunctions.handle_form(self, self.model.get_search_options, self.model.fetch_device_values, self.clientdata, "Search", "Get Device Values") end searchdevices = function( self ) - return self.model.search_device_values(self.clientdata.id, self.clientdata.value, self.clientdata.comparison) + return controllerfunctions.handle_form(self, self.model.get_search_options, self.model.search_device_values, self.clientdata, "Search", "Search Device Parameters") end editoptions = function( self ) diff --git a/provisioning-getdevicevalues-templated.lsp b/provisioning-getdevicevalues-templated.lsp index 77cb63b..6e4a79d 100644 --- a/provisioning-getdevicevalues-templated.lsp +++ b/provisioning-getdevicevalues-templated.lsp @@ -1,7 +1,7 @@ <% local data, viewlibrary, page_info = ... %> <% -if not data.errtxt and data.value.values.value.device and data.value.values.value.device.template then +if not data.errtxt and data.value.values and data.value.values.value.device and data.value.values.value.device.template then print("Status: 200 OK") print() local func = haserl.loadfile(data.value.values.value.device.template) diff --git a/provisioning-listdevices-html.lsp b/provisioning-listdevices-html.lsp index a6b0554..e93bdca 100644 --- a/provisioning-listdevices-html.lsp +++ b/provisioning-listdevices-html.lsp @@ -44,7 +44,7 @@ require("viewfunctions") <%= 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.."&viewtype=templated", label="View "} %> + <%= 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 "} %> <% end %> </TD> <TD><%= html.html_escape(v.label) %></TD> diff --git a/provisioning-model.lua b/provisioning-model.lua index b667154..d303855 100644 --- a/provisioning-model.lua +++ b/provisioning-model.lua @@ -1439,28 +1439,28 @@ set_device_params = function(params, editable) return params end -fetch_device_values = function(parameter_id, parameter_value, comparison) - local retval = cfe({}) +fetch_device_values = function(search) local res, err = pcall(function() local connected = databaseconnect() - retval = search_device_values(parameter_id, parameter_value, comparison) - if retval.errtxt then - elseif #retval.value.result.value == 0 then - retval.errtxt = "Device not found" - elseif #retval.value.result.value > 1 then - retval.errtxt = "Multiple devices found" + search = search_device_values(search) + if search.errtxt then + -- Just return the error + elseif #search.value.result.value == 0 then + search.errtxt = "Device not found" + elseif #search.value.result.value > 1 then + search.errtxt = "Multiple devices found" else - retval.value.values = get_device_values(retval.value.result.value[1].device_id) - retval.value.values.seq = 5 + search.value.values = get_device_values(search.value.result.value[1].device_id) + search.value.values.seq = 5 end if connected then databasedisconnect() end end) if not res and err then - retval.errtxt = err + search.errtxt = err end - retval.label="Provisioning Device Parameter Values" - return retval + search.label="Provisioning Device Parameter Values" + return search end get_device_values = function(device_id) @@ -1496,13 +1496,12 @@ get_device_values = function(device_id) return cfe({type="structure", value=retval, label="Parameter Values", errtxt=errtxt}) end -search_device_values = function(parameter_id, parameter_value, comparison) +get_search_options = function() local errtxt retval = {} - retval.id = cfe({type="select", value=parameter_id or "label", label="Parameter", option={"device_id", "label"}, seq=1}) - retval.comparison = cfe({type="select", value=comparison or "=", label="Comparison", option={"=", "!=", "~", "!~", "~*", "!*~"}, seq=2}) - retval.value = cfe({label="Parameter Value", value=parameter_value, descr="Parameter value or SQL regular expression", seq=3}) - retval.result = cfe({type="structure", value={}, label="List of Devices", seq=4 }) + retval.id = cfe({type="select", value="label", label="Parameter", option={"device_id", "label"}, seq=1}) + retval.comparison = cfe({type="select", value="=", label="Comparison", option={"=", "!=", "~", "!~", "~*", "!*~"}, seq=2}) + retval.value = cfe({label="Parameter Value", descr="Parameter value or SQL regular expression", seq=3}) local res, err = pcall(function() local connected = databaseconnect() -- Get the group/parameter options @@ -1521,15 +1520,29 @@ search_device_values = function(parameter_id, parameter_value, comparison) for i,o in ipairs(blankopt) do retval.id.option[#retval.id.option + 1] = o end - -- Get the devices from the DB - if parameter_id and modelfunctions.validateselect(retval.id) and modelfunctions.validateselect(retval.comparison) then - parameter_value = parameter_value or "" + 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 + +search_device_values = function(search) + local success = true + success = modelfunctions.validateselect(search.value.id) and success + success = modelfunctions.validateselect(search.value.comparison) and success + if success then + retval.result = cfe({type="structure", value={}, label="List of Devices", seq=4 }) + local res, err = pcall(function() + local connected = databaseconnect() + -- Get the devices from the DB sql = "SELECT d.device_id, d.label, " - local group, param = string.match(parameter_id or "", "([^%.]*)%.(.*)") + local group, param = string.match(search.value.id.value, "([^%.]*)%.(.*)") if not group then - sql = sql.."'"..escape(parameter_id).."' AS param, " - sql = sql.."d."..escape(parameter_id).." AS value FROM provisioning_devices d WHERE d."..escape(parameter_id) - sql = sql..retval.comparison.value.."'"..escape(parameter_value).."'" + sql = sql.."'"..search.value.id.value.."' AS param, " + sql = sql.."d."..search.value.id.value.." AS value FROM provisioning_devices d WHERE d."..search.value.id.value + sql = sql..search.value.comparison.value.."'"..escape(search.value.value.value).."'" else sql = sql.."g.name as group, p.name as param, 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 FROM ".. "provisioning_devices d JOIN devices_to_classes d2t USING(device_id) JOIN provisioning_classes t USING(class_id) JOIN classes_to_param_groups t2g USING(class_id) ".. @@ -1540,17 +1553,19 @@ search_device_values = function(parameter_id, parameter_value, comparison) else sql = sql.."WHERE" end - sql = sql.." p.name='"..escape(param).."' AND CASE WHEN v.value IS NOT NULL THEN v.value WHEN g2p.value IS NOT NULL THEN g2p.value ELSE p.value END"..retval.comparison.value.."'"..escape(parameter_value).."'" + sql = sql.." p.name='"..escape(param).."' AND CASE WHEN v.value IS NOT NULL THEN v.value WHEN g2p.value IS NOT NULL THEN g2p.value ELSE p.value END"..search.value.comparison.value.."'"..escape(search.value.value.value).."'" end sql = sql.." ORDER BY d.label ASC" - retval.result.value = getselectresponse(sql) + search.value.result.value = getselectresponse(sql) + if connected then databasedisconnect() end + end) + if not res and err then + search.errtxt = err end - if connected then databasedisconnect() end - end) - if not res and err then - errtxt = err + else + search.errtxt = "Search failed" end - return cfe({type="group", value=retval, label="Device Search", errtxt=errtxt}) + return search end get_param_options = function(param_id) diff --git a/provisioning-searchbyextension-html.lsp b/provisioning-searchbyextension-html.lsp new file mode 100644 index 0000000..b1ac206 --- /dev/null +++ b/provisioning-searchbyextension-html.lsp @@ -0,0 +1,25 @@ +<% local form, viewlibrary, page_info, session = ... +require("viewfunctions") +%> + +<% +if session.searchdevicesresult then + local data = session.searchdevicesresult + session.searchdevicesresult = nil + + if data.value and data.value.result then + local func = haserl.loadfile(page_info.viewfile:gsub("searchbyextension", "listdevices")) + func(data.value.result, viewlibrary, page_info, session) + end +end +%> + +<H1>Search by Extension</H1> +<DL> +<form action="/cgi-bin/acf/provisioning/provisioning/searchdevices" method="POST"> +<input type="hidden" name="id" value=".extension"> +<input type="hidden" name="comparison" value="~"> +<DT>Extension</DT> +<DD><input class="text" type="text" name="value" value="" ></DD> +<DT></DT><DD><input class="submit" type="submit" name="Search" value="Search"></DD> +</FORM></DL> diff --git a/provisioning-searchbymac-html.lsp b/provisioning-searchbymac-html.lsp new file mode 100644 index 0000000..8c5cb9c --- /dev/null +++ b/provisioning-searchbymac-html.lsp @@ -0,0 +1,25 @@ +<% local form, viewlibrary, page_info, session = ... +require("viewfunctions") +%> + +<% +if session.searchdevicesresult then + local data = session.searchdevicesresult + session.searchdevicesresult = nil + + if data.value and data.value.result then + local func = haserl.loadfile(page_info.viewfile:gsub("searchbymac", "listdevices")) + func(data.value.result, viewlibrary, page_info, session) + end +end +%> + +<H1>Search by MAC Address</H1> +<DL> +<form action="/cgi-bin/acf/provisioning/provisioning/searchdevices" method="POST"> +<input type="hidden" name="id" value="device.mac"> +<input type="hidden" name="comparison" value="~"> +<DT>MAC Address</DT> +<DD><input class="text" type="text" name="value" value="" ></DD> +<DT></DT><DD><input class="submit" type="submit" name="Search" value="Search"></DD> +</FORM></DL> diff --git a/provisioning-searchdevices-html.lsp b/provisioning-searchdevices-html.lsp index 45e44d6..b000c3e 100644 --- a/provisioning-searchdevices-html.lsp +++ b/provisioning-searchdevices-html.lsp @@ -25,6 +25,5 @@ elseif form.value.result then <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.roles b/provisioning.roles index dde3064..10d0715 100644 --- a/provisioning.roles +++ b/provisioning.roles @@ -1,5 +1,5 @@ GUEST=provisioning:getdevicevalues USER= -EDITOR=provisioning:searchdevices,provisioning:listdevices,provisioning:editdevice,provisioning:createdevice,provisioning:duplicatedevice,provisioning:deletedevice +EDITOR=provisioning:searchdevices,provisioning:listdevices,provisioning:editdevice,provisioning:createdevice,provisioning:duplicatedevice,provisioning:deletedevice,provisioning:searchbyextension 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 +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 |