From 31f68d1ea1390017773e691cccd0e6f9cc1fd0a7 Mon Sep 17 00:00:00 2001 From: Ted Trask Date: Wed, 23 Feb 2011 14:24:20 +0000 Subject: Added searchdatabase action --- kamailio-controller.lua | 4 ++++ kamailio-model.lua | 33 +++++++++++++++++++++++++++++++++ kamailio-searchdatabase-html.lsp | 28 ++++++++++++++++++++++++++++ kamailio-viewtable-html.lsp | 5 ++++- kamailio.menu | 1 + kamailio.roles | 4 ++-- 6 files changed, 72 insertions(+), 3 deletions(-) create mode 100644 kamailio-searchdatabase-html.lsp diff --git a/kamailio-controller.lua b/kamailio-controller.lua index 9352aac..ff16c50 100644 --- a/kamailio-controller.lua +++ b/kamailio-controller.lua @@ -60,3 +60,7 @@ end function createdatabase(self) return self:redirect_to_referrer(self.model.create_database()) end + +searchdatabase = function( self ) + return self.model.search_database(self.clientdata.id, self.clientdata.value, self.clientdata.comparison) +end diff --git a/kamailio-model.lua b/kamailio-model.lua index 9c24346..7937ea8 100644 --- a/kamailio-model.lua +++ b/kamailio-model.lua @@ -469,3 +469,36 @@ function create_database() local result = f:read("*a") return cfe({ value=result, label="Create database result" }) end + +function search_database(id, value, comparison) + local errtxt + retval = {} + retval.id = cfe({type="select", value=id or "", label="Table.Column", option={}, seq=1}) + retval.comparison = cfe({type="select", value=comparison or "=", label="Comparison", option={"=", "!=", "~", "!~", "~*", "!*~"}, seq=2}) + retval.value = cfe({label="Value", value=value or "", descr="Value or SQL regular expression", seq=3}) + local res, err = pcall(function() + local connected = databaseconnect() + local tables = listtables() or {} + for i,t in ipairs(tables) do + local columns = listcolumns(t) or {} + for i,c in ipairs(columns) do + retval.id.option[#retval.id.option + 1] = t.."."..c + end + end + -- Get the rows from the DB + if id and modelfunctions.validateselect(retval.id) and modelfunctions.validateselect(retval.comparison) then + retval.result = cfe({type="structure", value={}, label="List of Rows", seq=4 }) + local table, column = string.match(id, "^([^.]*)%.(.*)") + if table then + local sql = "SELECT * FROM "..table.." WHERE "..column..comparison.."'"..value.."'" + retval.result.value = getselectresponse(sql) + end + end + if connected then databasedisconnect() end + end) + if not res and err then + errtxt = err + end + return cfe({type="group", value=retval, label="Database Search", errtxt=errtxt}) +end + diff --git a/kamailio-searchdatabase-html.lsp b/kamailio-searchdatabase-html.lsp new file mode 100644 index 0000000..87f0a9d --- /dev/null +++ b/kamailio-searchdatabase-html.lsp @@ -0,0 +1,28 @@ +<% local form, viewlibrary, page_info = ... +require("viewfunctions") +%> + +<% if form.value.result then + local func = haserl.loadfile(page_info.viewfile:gsub("searchdatabase", "viewtable")) + local table, column = string.match(form.value.id.value, "^([^.]*)%.(.*)") + form.value.table = cfe({ value=table }) + form.value.fields = cfe({ value={} }) + for i,o in ipairs(form.value.id.option) do + local t,c = string.match(o, "^([^.]*)%.(.*)") + if t == table then + form.value.fields.value[#form.value.fields.value + 1] = c + end + end + form.value.entries = form.value.result + func(form, viewlibrary, page_info, session) + form.value.entries = nil + form.value.table = nil + form.value.fields = nil +end %> + +

<%= html.html_escape(form.label) %>

+<% + form.value.result = nil + form.option = "Search" + displayform(form, nil, nil, page_info, 2) +%> diff --git a/kamailio-viewtable-html.lsp b/kamailio-viewtable-html.lsp index 7d0aa41..f0c5ff9 100644 --- a/kamailio-viewtable-html.lsp +++ b/kamailio-viewtable-html.lsp @@ -41,8 +41,11 @@ <% end %> +<% if #form.value.entries.value == 0 then %> +

No entries found

+<% end %> -<% if viewlibrary and viewlibrary.dispatch_component and viewlibrary.check_permission("createtableentry") then +<% if page_info.action == "viewtable" and viewlibrary and viewlibrary.dispatch_component and viewlibrary.check_permission("createtableentry") then viewlibrary.dispatch_component("createtableentry", {table=form.value.table.value}) end %> diff --git a/kamailio.menu b/kamailio.menu index 4a9a3e5..9d51be7 100644 --- a/kamailio.menu +++ b/kamailio.menu @@ -3,4 +3,5 @@ Applications 86Kamailio Status status Applications 86Kamailio Users listusers Applications 86Kamailio Database listtables +Applications 86Kamailio Search_Database searchdatabase Applications 86Kamailio Expert listfiles diff --git a/kamailio.roles b/kamailio.roles index c425a7b..be6e771 100644 --- a/kamailio.roles +++ b/kamailio.roles @@ -1,4 +1,4 @@ USER=kamailio:status,kamailio:startstop,kamailio:listusers -EDITOR=kamailio:createuser,kamailio:updateuser,kamailio:deleteuser,kamailio:listtables,kamailio:viewtable,kamailio:deletetableentry,kamailio:updatetableentry,kamailio:createtableentry +EDITOR=kamailio:createuser,kamailio:updateuser,kamailio:deleteuser,kamailio:listtables,kamailio:viewtable,kamailio:deletetableentry,kamailio:updatetableentry,kamailio:createtableentry,kamailio:searchdatabase EXPERT=kamailio:listfiles,kamailio:edit,kamailio:createdatabase -ADMIN=kamailio:status,kamailio:startstop,kamailio:listusers,kamailio:createuser,kamailio:updateuser,kamailio:deleteuser,kamailio:listfiles,kamailio:edit,kamailio:listtables,kamailio:viewtable,kamailio:deletetableentry,kamailio:updatetableentry,kamailio:createtableentry,kamailio:createdatabase +ADMIN=kamailio:status,kamailio:startstop,kamailio:listusers,kamailio:createuser,kamailio:updateuser,kamailio:deleteuser,kamailio:listfiles,kamailio:edit,kamailio:listtables,kamailio:viewtable,kamailio:deletetableentry,kamailio:updatetableentry,kamailio:createtableentry,kamailio:createdatabase,kamailio:searchdatabase -- cgit v1.2.3