summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTed Trask <ttrask01@yahoo.com>2015-06-22 11:47:25 -0400
committerTed Trask <ttrask01@yahoo.com>2015-06-22 11:47:25 -0400
commit367f4f733f76da068f4125d420c475e8d085cf49 (patch)
treeff552a8abe06c9f0987721191fa47f78dff00e17
parenta23996b6ea30c01edb424c77421ef2d64cf62fc7 (diff)
downloadacf-freeswitch-vmail-367f4f733f76da068f4125d420c475e8d085cf49.tar.bz2
acf-freeswitch-vmail-367f4f733f76da068f4125d420c475e8d085cf49.tar.xz
Add searchusers action and make editusers and listusers actually be different
-rw-r--r--vmail-controller.lua4
-rw-r--r--[l---------]vmail-editusers-html.lsp17
-rw-r--r--vmail-listusers-html.lsp8
-rw-r--r--vmail-model.lua39
-rw-r--r--vmail-searchusers-html.lsp24
-rw-r--r--vmail.menu1
-rw-r--r--vmail.roles4
7 files changed, 84 insertions, 13 deletions
diff --git a/vmail-controller.lua b/vmail-controller.lua
index 517664c..5c0c89a 100644
--- a/vmail-controller.lua
+++ b/vmail-controller.lua
@@ -10,8 +10,8 @@ mymodule.listusers = function( self )
return self.model.list_users()
end
-mymodule.editusers = function( self )
- return self.model.list_users()
+mymodule.searchusers = function( self )
+ return self.handle_form(self, self.model.get_search_options, self.model.search_users, self.clientdata, "Search", "Search Users")
end
mymodule.deleteuser = function( self )
diff --git a/vmail-editusers-html.lsp b/vmail-editusers-html.lsp
index 215a6d3..0a708e9 120000..100644
--- a/vmail-editusers-html.lsp
+++ b/vmail-editusers-html.lsp
@@ -1 +1,16 @@
-vmail-listusers-html.lsp \ No newline at end of file
+<% local view, viewlibrary, page_info, session = ...
+htmlviewfunctions = require("htmlviewfunctions")
+%>
+
+<% if viewlibrary and viewlibrary.dispatch_component and viewlibrary.check_permission("listusers") then
+ viewlibrary.dispatch_component("listusers")
+end %>
+
+<% local redir = cfe({ type="hidden", value=page_info.orig_action }) %>
+<% if viewlibrary and viewlibrary.dispatch_component and viewlibrary.check_permission("createuser") then %>
+<% htmlviewfunctions.displayitem(cfe({type="link", value={redir=redir}, label="Create New User", option="Create", action="createuser" }), page_info) %>
+<% end %>
+
+<% if viewlibrary and viewlibrary.dispatch_component and viewlibrary.check_permission("createmanyusers") then %>
+<% htmlviewfunctions.displayitem(cfe({type="link", value={redir=redir}, label="Create Multiple Users", option="Create", action="createmanyusers" }), page_info) %>
+<% end %>
diff --git a/vmail-listusers-html.lsp b/vmail-listusers-html.lsp
index 1972dc5..877b382 100644
--- a/vmail-listusers-html.lsp
+++ b/vmail-listusers-html.lsp
@@ -62,12 +62,4 @@ html = require("acf.html")
<p>No users found</p>
<% end %>
-<% if viewlibrary and viewlibrary.dispatch_component and viewlibrary.check_permission("createuser") then %>
-<% htmlviewfunctions.displayitem(cfe({type="link", value={redir=redir}, label="Create New User", option="Create", action="createuser" }), page_info, header_level2) %>
-<% end %>
-
-<% if viewlibrary and viewlibrary.dispatch_component and viewlibrary.check_permission("createmanyusers") then %>
-<% htmlviewfunctions.displayitem(cfe({type="link", value={redir=redir}, label="Create Multiple Users", option="Create", action="createmanyusers" }), page_info, header_level2) %>
-<% end %>
-
<% htmlviewfunctions.displaysectionend(header_level) %>
diff --git a/vmail-model.lua b/vmail-model.lua
index 51261cf..f3f7cac 100644
--- a/vmail-model.lua
+++ b/vmail-model.lua
@@ -751,6 +751,45 @@ mymodule.list_users = function()
return cfe({ type="structure", value=users, label="Voicemail Users", errtxt=errtxt })
end
+mymodule.get_search_options = function(self, clientdata)
+ retval = cfe({type="group", value={}, label="User Search"})
+ retval.value.username = cfe({label="Extension", seq=1})
+ retval.value.firstname = cfe({label="First Name", seq=2})
+ retval.value.lastname = cfe({label="Last Name", seq=3})
+ return retval
+end
+
+mymodule.search_users = function(self, search)
+ -- No validation
+ local res, err = pcall(function()
+ local connected = vmaildb.databaseconnect()
+ local where = {}
+ if search.value.username.value ~= "" then
+ where[#where+1] = "u.username ~ '"..vmaildb.escape(search.value.username.value).."'"
+ end
+ if search.value.firstname.value ~= "" then
+ where[#where+1] = "v2.value ~ '"..vmaildb.escape(search.value.firstname.value).."'"
+ end
+ if search.value.lastname.value ~= "" then
+ where[#where+1] = "v1.value ~ '"..vmaildb.escape(search.value.lastname.value).."'"
+ end
+ -- This crazy query gets the username from voicemail_users, the firstname and lastname from two instances of voicemail_values (using voicemail_params to determine the corresponding nid values) drops usernames starting with "tempuser" and ordering by username
+ local sql = "SELECT u.username, v1.value lastname, v2.value firstname FROM voicemail_users u LEFT OUTER JOIN voicemail_values v1 ON u.uid = v1.uid AND v1.nid=(SELECT nid FROM voicemail_params WHERE name='lastname') LEFT OUTER JOIN voicemail_values v2 ON u.uid = v2.uid AND v2.nid=(SELECT nid FROM voicemail_params WHERE name='firstname')"
+ if #where then
+ sql = sql.." WHERE "..table.concat(where, " AND ")
+ end
+ sql = sql.." ORDER BY u.username"
+ local users = vmaildb.getselectresponse(sql)
+ search.value.result = cfe({ type="structure", value=users, label="Voicemail Users" })
+ if connected then databasedisconnect() end
+ end)
+ if not res and err then
+ search.errtxt = err
+ end
+
+ return search
+end
+
mymodule.get_delete_user = function(self, clientdata)
local result = {}
result.username = cfe({ value=clientdata.username or "", label="User Name" })
diff --git a/vmail-searchusers-html.lsp b/vmail-searchusers-html.lsp
new file mode 100644
index 0000000..92cd7fd
--- /dev/null
+++ b/vmail-searchusers-html.lsp
@@ -0,0 +1,24 @@
+<% 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>
+
+<% htmlviewfunctions.displaycommandresults({"createuser", "deleteuser", "editusersettings"}, session) %>
+
+<%
+if form.value.result then
+ local func = haserl.loadfile(page_info.viewfile:gsub("searchusers", "listusers"))
+ func(form.value.result, viewlibrary, page_info, session)
+end
+%>
+
+<%
+ form.value.result = nil
+ htmlviewfunctions.displayitem(form, page_info)
+%>
diff --git a/vmail.menu b/vmail.menu
index e6c8895..04c4dcd 100644
--- a/vmail.menu
+++ b/vmail.menu
@@ -1,5 +1,6 @@
# Prefix and controller are already known at this point
# Cat Group Tab Action
+Applications 88Voicemail Search searchusers
Applications 88Voicemail Users editusers
Applications 88Voicemail Voicemail listmessages
Applications 88Voicemail Voicemail listmymessages
diff --git a/vmail.roles b/vmail.roles
index 43395b4..a4e728f 100644
--- a/vmail.roles
+++ b/vmail.roles
@@ -1,5 +1,5 @@
GUEST=vmail:processdialplanxml,vmail:processdirectoryxml
-USER=vmail:listfolders,vmail:listusers,vmail:listmymessages,vmail:downloadmymessage,vmail:deletemymessage,vmail:editmyusersettings,vmail:forwardmymessage,vmail:movemymessage,vmail:emailmymessage,vmail:callbackmymessage
+USER=vmail:listfolders,vmail:listusers,vmail:searchusers,vmail:listmymessages,vmail:downloadmymessage,vmail:deletemymessage,vmail:editmyusersettings,vmail:forwardmymessage,vmail:movemymessage,vmail:emailmymessage,vmail:callbackmymessage
EDITOR=vmail:editusers,vmail:createuser,vmail:createmanyusers,vmail:deleteuser,vmail:editusersettings
EXPERT=vmail:editconfig,vmail:listmessages,vmail:downloadmessage,vmail:deletemessage,vmail:forwardmessage,vmail:movemessage,vmail:emailmessage,vmail:callbackmessage
-ADMIN=vmail:listmessages,vmail:downloadmessage,vmail:deletemessage,vmail:forwardmessage,vmail:movemessage,vmail:emailmessage,vmail:callbackmessage,vmail:editusersettings,vmail:listfolders,vmail:listusers,vmail:editusers,vmail:createuser,vmail:createmanyusers,vmail:deleteuser,vmail:editconfig
+ADMIN=vmail:listmessages,vmail:downloadmessage,vmail:deletemessage,vmail:forwardmessage,vmail:movemessage,vmail:emailmessage,vmail:callbackmessage,vmail:editusersettings,vmail:listfolders,vmail:listusers,vmail:searchusers,vmail:editusers,vmail:createuser,vmail:createmanyusers,vmail:deleteuser,vmail:editconfig