summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--provisioning-controller.lua4
-rw-r--r--provisioning-getdevicevalues-templated.lsp2
-rw-r--r--provisioning-listdevices-html.lsp2
-rw-r--r--provisioning-model.lua79
-rw-r--r--provisioning-searchbyextension-html.lsp25
-rw-r--r--provisioning-searchbymac-html.lsp25
-rw-r--r--provisioning-searchdevices-html.lsp1
-rw-r--r--provisioning.roles4
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