summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kamailio-controller.lua4
-rw-r--r--kamailio-model.lua33
-rw-r--r--kamailio-searchdatabase-html.lsp28
-rw-r--r--kamailio-viewtable-html.lsp5
-rw-r--r--kamailio.menu1
-rw-r--r--kamailio.roles4
6 files changed, 72 insertions, 3 deletions
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 %>
+
+<H1><%= html.html_escape(form.label) %></H1>
+<%
+ 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 @@
</TR>
<% end %>
</TABLE>
+<% if #form.value.entries.value == 0 then %>
+<p>No entries found</p>
+<% end %>
</DL>
-<% 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