summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTed Trask <ttrask01@yahoo.com>2014-06-30 18:43:17 +0000
committerTed Trask <ttrask01@yahoo.com>2014-06-30 18:43:17 +0000
commitd476c52adca9c1a2550b60cc49c4670cf3e800bd (patch)
treef02bcddbcc28cf96af2ede8423762b3eca3b755a
parent1ef6dd7f0646e3e84f97d5c4a2047e9710853382 (diff)
downloadacf-kamailio-d476c52adca9c1a2550b60cc49c4670cf3e800bd.tar.bz2
acf-kamailio-d476c52adca9c1a2550b60cc49c4670cf3e800bd.tar.xz
Removed acf-db references and directly included functionality
The acf-db module is not complete and was not meant to be released yet
-rw-r--r--Makefile3
-rw-r--r--kamailio-controller.lua22
-rw-r--r--kamailio-listtables-html.lsp54
-rw-r--r--kamailio-model.lua251
-rw-r--r--kamailio-viewtable-html.lsp69
5 files changed, 387 insertions, 12 deletions
diff --git a/Makefile b/Makefile
index 404a94e..9386feb 100644
--- a/Makefile
+++ b/Makefile
@@ -25,9 +25,6 @@ dist: $(tarball)
install:
mkdir -p "$(install_dir)"
cp -a $(APP_DIST) "$(install_dir)"
- for i in $$(ls -1 $(DESTDIR)/$(acflibdir)/db-*.lsp); do\
- ln -sf $$i $(install_dir)/$$(echo "$$(basename $$i)" | sed "s/db/$(APP_NAME)/");\
- done
$(tarball): $(DISTFILES)
rm -rf $(P)
diff --git a/kamailio-controller.lua b/kamailio-controller.lua
index 985eb39..ae454b9 100644
--- a/kamailio-controller.lua
+++ b/kamailio-controller.lua
@@ -43,10 +43,24 @@ function mymodule.searchdatabase(self)
return self.handle_form(self, self.model.get_search_database, self.model.search_database, self.clientdata, "Search", "Search Database")
end
--- Use acf-db to allow editing of the database
-dbcontrollerfunctions = require("dbcontrollerfunctions")
-for n,f in pairs(dbcontrollerfunctions) do
- mymodule[n] = f
+function mymodule.listtables(self)
+ return self.model.list_tables(self, self.clientdata)
+end
+
+function mymodule.viewtable(self)
+ return self.model.list_table_entries(self, self.clientdata)
+end
+
+function mymodule.deletetableentry(self)
+ return self.handle_form(self, self.model.get_delete_table_entry, self.model.delete_table_entry, self.clientdata, "Delete", "Delete Table Entry", "Table Entry deleted")
+end
+
+function mymodule.updatetableentry(self)
+ return self.handle_form(self, self.model.get_table_entry, self.model.update_table_entry, self.clientdata, "Update", "Update Table Entry", "Entry updated")
+end
+
+function mymodule.createtableentry(self)
+ return self.handle_form(self, self.model.get_new_table_entry, self.model.create_table_entry, self.clientdata, "Create", "Create New Table Entry", "Entry created")
end
return mymodule
diff --git a/kamailio-listtables-html.lsp b/kamailio-listtables-html.lsp
new file mode 100644
index 0000000..23ecfc4
--- /dev/null
+++ b/kamailio-listtables-html.lsp
@@ -0,0 +1,54 @@
+<% local form, viewlibrary, page_info, session = ... %>
+<% htmlviewfunctions = require("htmlviewfunctions") %>
+<% html = require("acf.html") %>
+
+<% if #form.value>0 then %>
+<script type="text/javascript">
+ if (typeof jQuery == 'undefined') {
+ document.write('<script type="text/javascript" src="<%= html.html_escape(page_info.wwwprefix) %>/js/jquery-latest.js"><\/script>');
+ }
+</script>
+
+<script type="text/javascript">
+ if (typeof $.tablesorter == 'undefined') {
+ document.write('<script type="text/javascript" src="<%= html.html_escape(page_info.wwwprefix) %>/js/jquery.tablesorter.js"><\/script>');
+ }
+</script>
+
+<script type="text/javascript">
+ $(document).ready(function() {
+ $("#listtables").tablesorter({headers: {0:{sorter: false}}, widgets: ['zebra']});
+ });
+</script>
+<% end %>
+
+<% htmlviewfunctions.displaycommandresults({"createdatabase"}, session) %>
+
+<% local header_level = htmlviewfunctions.displaysectionstart(form, page_info) %>
+<% htmlviewfunctions.displayinfo(form) %>
+<% if #form.value>0 then %>
+<table id="listtables" class="tablesorter"><thead>
+ <tr>
+ <th>Action</th>
+ <th>Table</th>
+ </tr>
+</thead><tbody>
+<% local table = cfe({ type="hidden" }) %>
+<% for i,tab in ipairs(form.value) do %>
+ <% table.value = tab %>
+ <tr>
+ <td>
+ <% if viewlibrary.check_permission("viewtable") then %>
+ <% htmlviewfunctions.displayitem(cfe({type="link", value={table=table}, label="", option="View", action="viewtable"}), page_info, -1) %>
+ <% end %>
+ </td>
+ <td><%= html.html_escape(tab) %></td>
+ </tr>
+<% end %>
+</tbody></table>
+<% elseif viewlibrary.check_permission("createdatabase") then %>
+ <% htmlviewfunctions.displayitem(cfe({type="form", value={}, label="Create Database", option="Create", action="createdatabase" }), page_info, 0) %>
+<% else %>
+<p>No tables found</p>
+<% end %>
+<% htmlviewfunctions.displaysectionend(header_level) %>
diff --git a/kamailio-model.lua b/kamailio-model.lua
index 587f7ad..fe7d378 100644
--- a/kamailio-model.lua
+++ b/kamailio-model.lua
@@ -3,7 +3,6 @@ local mymodule = {}
-- Load libraries
posix = require("posix")
modelfunctions = require("modelfunctions")
-dbmodelfunctions = require("dbmodelfunctions")
fs = require("acf.fs")
format = require("acf.format")
validator = require("acf.validator")
@@ -55,6 +54,8 @@ local databasecreate = function()
-- connect to data source
dbkam = db.create(engine, config.DBNAME or "openser", config.DBRWUSER or "openser", config.DBRWPW or "openserrw", config.DBHOST, config.DBPORT)
end
+
+ return dbkam
end
local databaseconnect = function()
@@ -330,11 +331,251 @@ function mymodule.search_database(self, search)
return search
end
-for n,f in pairs(dbmodelfunctions) do
- mymodule[n] = function(...)
- databasecreate()
- return f(dbkam, ...)
+function mymodule.list_databases(self, clientdata)
+ local retval = {}
+ local errtxt
+ local res, err = pcall(function()
+ local db = databasecreate()
+ retval = db.listdatabases()
+ end)
+ if not res and err then
+ errtxt = err
+ end
+
+ return cfe({ type="list", value=retval, label="List of Databases", errtxt=errtxt })
+end
+
+function mymodule.list_tables(self, clientdata)
+ local retval = {}
+ local errtxt
+ local res, err = pcall(function()
+ local db = databasecreate()
+ local connected = db.databaseconnect()
+ retval = db.listtables()
+ if connected then db.databasedisconnect() end
+ end)
+ if not res and err then
+ errtxt = err
+ end
+
+ return cfe({ type="list", value=retval, label="List of Database Tables", errtxt=errtxt })
+end
+
+function mymodule.list_table_entries(self, clientdata)
+ local table = clientdata.table
+ local retval = {}
+ retval.table = cfe({ value=table or "", label="Table", key=true })
+ retval.fields = cfe({ type="list", value={}, label="List of Table Fields" })
+ retval.entries = cfe({ type="structure", value={}, label="List of Database Entries" })
+ local errtxt
+ local res, err = pcall(function()
+ local db = databasecreate()
+ local connected = db.databaseconnect()
+ local tables = db.listtables()
+ retval.table.errtxt = "Table does not exist"
+ errtxt = "Table does not exist"
+ for i,t in ipairs(tables) do
+ if t == table then
+ retval.table.errtxt = nil
+ errtxt = nil
+ retval.entries.value = db.getselectresponse("SELECT * FROM "..db.escape(table).." ORDER BY id ASC") or {}
+ retval.fields.value = db.listcolumns(table) or {}
+ end
+ end
+ if connected then db.databasedisconnect() end
+ end)
+ if not res and err then
+ errtxt = err
+ end
+
+ return cfe({ type="group", value=retval, label="Database Table Entries", errtxt=errtxt })
+end
+
+function mymodule.get_new_table_entry(self, clientdata)
+ local retval = {}
+ retval.table = cfe({ value=clientdata.table or "", label="Table", errtxt="Table does not exist", readonly=true, seq=0 })
+ local errtxt = "Table does not exist"
+ if clientdata.table and clientdata.table ~= "" then
+ local res, err = pcall(function()
+ local db = databasecreate()
+ local connected = db.databaseconnect()
+ local tables = db.listtables()
+ for i,t in ipairs(tables) do
+ if t == clientdata.table then
+ retval.table.errtxt = nil
+ errtxt = nil
+ break
+ end
+ end
+ if not errtxt then
+ local fields = db.listcolumns(clientdata.table)
+ for i,f in ipairs(fields) do
+ retval[f] = cfe({ label=f, seq=i })
+ end
+ if retval.id then
+ retval.id.type = "hidden"
+ end
+ end
+ if connected then db.databasedisconnect() end
+ end)
+ if not res and err then
+ errtxt = err
+ end
+ end
+
+ return cfe({ type="group", value=retval, label="Database Table Entry", errtxt=errtxt })
+end
+
+function mymodule.get_table_entry(self, clientdata)
+ local retval = mymodule.get_new_table_entry(self, clientdata)
+ if not retval.value.table.errtxt and retval.value.id then
+ retval.value.id.type = "text"
+ local res, err = pcall(function()
+ local db = databasecreate()
+ local connected = db.databaseconnect()
+ retval.errtxt = "Entry does not exist"
+ if retval.value.id then
+ retval.value.id.value = clientdata.id or ""
+ retval.value.id.errtxt = "Entry does not exist"
+ if clientdata.id and clientdata.id ~= "" then
+ local entry = db.getselectresponse("SELECT * FROM "..db.escape(clientdata.table).." WHERE id='"..db.escape(clientdata.id).."'")
+ if entry and #entry > 0 then
+ for n,v in pairs(entry[1]) do
+ if retval.value[n] then retval.value[n].value = v end
+ if n == "id" then
+ retval.value.id.readonly = true
+ retval.value.id.errtxt = nil
+ retval.errtxt = nil
+ end
+ end
+ end
+ end
+ end
+ if connected then db.databasedisconnect() end
+ end)
+ if not res and err then
+ retval.errtxt = err
+ end
+ end
+
+ return retval
+end
+
+function mymodule.create_table_entry(self, entry, action)
+ return mymodule.update_table_entry(self, entry, action, true)
+end
+
+function mymodule.update_table_entry(self, entry, action, create)
+ local success = true
+ local errtxt
+ -- Validate the settings
+ -- relying on get_table_entry to do the validation of table
+ if entry.value.table.value == "" or entry.value.table.errtxt then
+ success = false
+ entry.value.table.errtxt = "Table does not exist"
+ end
+ if not create then
+ if not entry.value.id then
+ success = false
+ elseif not entry.value.id.value or entry.value.id.value == "" then
+ success = false
+ entry.value.id.errtxt = "Invalid id"
+ end
+ end
+ if success then
+ local res, err = pcall(function()
+ local db = databasecreate()
+ local connected = db.databaseconnect()
+ local tables = db.listtables()
+ success = false
+ entry.value.table.errtxt = "Table does not exist"
+ for i,t in ipairs(tables) do
+ if t == entry.value.table.value then
+ success = true
+ entry.value.table.errtxt = nil
+ break
+ end
+ end
+ if success and not create then
+ local sql = "SELECT * FROM "..db.escape(entry.value.table.value).." WHERE id='"..db.escape(entry.value.id.value).."'"
+ local tmp = db.getselectresponse(sql)
+ if not tmp or #tmp == 0 then
+ success = false
+ entry.value.id.errtxt = "Entry does not exist"
+ errtxt = "Entry does not exist"
+ end
+ end
+ if success then
+ local names = {}
+ local values = {}
+ for n,v in pairs(entry.value) do
+ if n ~= "table" and n ~= "id" then
+ names[#names+1] = db.escape(n)
+ values[#values+1] = db.escape(v.value)
+ end
+ end
+ if create then
+ sql = "INSERT INTO "..db.escape(entry.value.table.value).." ("..table.concat(names, ", ")..") VALUES('"..table.concat(values, "', '").."')"
+ else
+ sql = "UPDATE "..db.escape(entry.value.table.value).." SET ("..table.concat(names, ", ")..") = ('"..table.concat(values, "', '").."') WHERE id='"..db.escape(entry.value.id.value).."'"
+ end
+ db.runsqlcommand(sql)
+ end
+ if connected then db.databasedisconnect() end
+ end)
+ if not res and err then
+ success = false
+ errtxt = err
+ end
end
+ if not success then
+ if create then
+ entry.errtxt = errtxt or "Failed to create entry"
+ else
+ entry.errtxt = errtxt or "Failed to save entry"
+ end
+ end
+ return entry
+end
+
+function mymodule.get_delete_table_entry(self, clientdata)
+ local retval = {}
+ retval.table = cfe({ value=clientdata.table or "", label="Table", seq=0 })
+ retval.id = cfe({ value=clientdata.id or "", label="ID", seq=1 })
+ return cfe({ type="group", value=retval, label="Delete Database Table Entry" })
+end
+
+function mymodule.delete_table_entry(self, entry)
+ entry.errtxt = "Failed to delete table entry"
+ if entry.value.table.value == "" then
+ entry.value.table.errtxt = "Invalid table"
+ elseif entry.value.id.value == "" then
+ entry.value.id.errtxt = "Invalid entry"
+ else
+ local res, err = pcall(function()
+ local db = databasecreate()
+ local connected = db.databaseconnect()
+ entry.value.table.errtxt = "Invalid table"
+ local tables = db.listtables()
+ for i,t in ipairs(tables) do
+ if t == entry.value.table.value then
+ entry.value.table.errtxt = nil
+ break
+ end
+ end
+ if not entry.value.table.errtxt then
+ local sql = "DELETE FROM "..db.escape(entry.value.table.value).." WHERE id='"..db.escape(entry.value.id.value).."'"
+ db.runsqlcommand(sql)
+ entry.errtxt = nil
+ end
+ if connected then db.databasedisconnect() end
+ end)
+ if not res and err then
+ entry.errtxt = err
+ end
+ end
+
+ return entry
end
return mymodule
diff --git a/kamailio-viewtable-html.lsp b/kamailio-viewtable-html.lsp
new file mode 100644
index 0000000..2ee1140
--- /dev/null
+++ b/kamailio-viewtable-html.lsp
@@ -0,0 +1,69 @@
+<% local form, viewlibrary, page_info, session = ... %>
+<% htmlviewfunctions = require("htmlviewfunctions") %>
+<% html = require("acf.html") %>
+
+<script type="text/javascript">
+ if (typeof jQuery == 'undefined') {
+ document.write('<script type="text/javascript" src="<%= html.html_escape(page_info.wwwprefix) %>/js/jquery-latest.js"><\/script>');
+ }
+</script>
+
+<script type="text/javascript">
+ if (typeof $.tablesorter == 'undefined') {
+ document.write('<script type="text/javascript" src="<%= html.html_escape(page_info.wwwprefix) %>/js/jquery.tablesorter.js"><\/script>');
+ }
+</script>
+
+<script type="text/javascript">
+ $(document).ready(function() {
+ $("#list").tablesorter({widgets: ['zebra']});
+ $(".deletetableentry").click(function(){ return confirm("Are you sure you want to delete this entry?")});
+ });
+</script>
+
+<% htmlviewfunctions.displaycommandresults({"deletetableentry", "updatetableentry"}, session) %>
+<% htmlviewfunctions.displaycommandresults({"createtableentry"}, session, true) %>
+
+<% local header_level = htmlviewfunctions.displaysectionstart(form, page_info) %>
+<% htmlviewfunctions.displayformitem(form.value.table) %>
+<table id="list" class="tablesorter"><thead>
+ <tr>
+ <% if viewlibrary.check_permission("deletetableentry") or viewlibrary.check_permission("updatetableentry") then %>
+ <th>Action</th>
+ <% end %>
+ <% for i,f in ipairs(form.value.fields.value) do %>
+ <th><%= html.html_escape(f) %></th>
+ <% end %>
+ </tr>
+</thead><tbody>
+<% local redir = cfe({ type="hidden", value=page_info.orig_action.."?table="..form.value.table.value }) %>
+<% local table = cfe({ type="hidden", value=form.value.table.value }) %>
+<% local id = cfe({ type="hidden" }) %>
+<% for i,tableentry in ipairs(form.value.entries.value) do %>
+ <tr>
+ <% if viewlibrary.check_permission("deletetableentry") or viewlibrary.check_permission("updatetableentry") then %>
+ <% id.value = tableentry.id %>
+ <td>
+ <% if viewlibrary.check_permission("updatetableentry") then %>
+ <% htmlviewfunctions.displayitem(cfe({type="link", value={table=table, id=id, redir=redir}, label="", option="Update", action="updatetableentry"}), page_info, -1) %>
+ <% end %>
+ <% if viewlibrary.check_permission("deletetableentry") then %>
+ <% htmlviewfunctions.displayitem(cfe({type="form", value={table=table, id=id}, label="", option="Delete", action="deletetableentry", class="deletetableentry"}), page_info, -1) %>
+ <% end %>
+ </td>
+ <% end %>
+ <% for i,f in ipairs(form.value.fields.value) do %>
+ <td><%= html.html_escape(tableentry[f]) %></td>
+ <% end %>
+ </tr>
+<% end %>
+</tbody></table>
+<% htmlviewfunctions.displayinfo(form) %>
+<% if #form.value.entries.value == 0 then %>
+<p>No entries found</p>
+<% end %>
+<% htmlviewfunctions.displaysectionend(header_level) %>
+
+<% 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 %>