diff options
author | Ted Trask <ttrask01@yahoo.com> | 2014-06-30 18:43:17 +0000 |
---|---|---|
committer | Ted Trask <ttrask01@yahoo.com> | 2014-06-30 18:43:17 +0000 |
commit | d476c52adca9c1a2550b60cc49c4670cf3e800bd (patch) | |
tree | f02bcddbcc28cf96af2ede8423762b3eca3b755a | |
parent | 1ef6dd7f0646e3e84f97d5c4a2047e9710853382 (diff) | |
download | acf-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-- | Makefile | 3 | ||||
-rw-r--r-- | kamailio-controller.lua | 22 | ||||
-rw-r--r-- | kamailio-listtables-html.lsp | 54 | ||||
-rw-r--r-- | kamailio-model.lua | 251 | ||||
-rw-r--r-- | kamailio-viewtable-html.lsp | 69 |
5 files changed, 387 insertions, 12 deletions
@@ -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 %> |