summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTed Trask <ttrask01@yahoo.com>2010-09-10 12:42:50 +0000
committerTed Trask <ttrask01@yahoo.com>2010-09-10 12:42:50 +0000
commit391591626bbd83eba8a0165a1591b3bedc1d3370 (patch)
treefa55d9937b01e137331d6acf4d43b33cf5d05a94
parentc307fe5f317b0f3fded6125e8566ec425f09fd95 (diff)
downloadacf-freeswitch-vmail-391591626bbd83eba8a0165a1591b3bedc1d3370.tar.bz2
acf-freeswitch-vmail-391591626bbd83eba8a0165a1591b3bedc1d3370.tar.xz
Added support for folders, even though default vm IVR doesn't handle them.
Basically, they'll be hidden unless you add folder definitions to voicemail_folders table.
-rw-r--r--vmail-controller.lua12
-rw-r--r--vmail-listmessages-html.lsp50
-rw-r--r--vmail-model.lua76
-rw-r--r--vmail.roles6
4 files changed, 130 insertions, 14 deletions
diff --git a/vmail-controller.lua b/vmail-controller.lua
index 7b947fb..2ac08f5 100644
--- a/vmail-controller.lua
+++ b/vmail-controller.lua
@@ -4,6 +4,10 @@ require("controllerfunctions")
default_action = "listmessages"
+listfolders = function( self )
+ return self.model.list_folders()
+end
+
listusers = function( self )
return self.model.list_users()
end
@@ -58,6 +62,14 @@ emailmymessage = function( self )
return self:redirect_to_referrer(self.model.email_message(self.clientdata.message, self.clientdata.address, self.sessiondata.userinfo.userid))
end
+movemessage = function( self )
+ return self:redirect_to_referrer(self.model.move_message(self.clientdata.message, self.clientdata.newfolder))
+end
+
+movemymessage = function( self )
+ return self:redirect_to_referrer(self.model.move_message(self.clientdata.message, self.clientdata.newfolder, self.sessiondata.userinfo.userid))
+end
+
editusersettings = function( self )
return controllerfunctions.handle_form(self, function() return self.model.get_usersettings(self.clientdata.username) end, self.model.update_usersettings, self.clientdata, "Save", "Edit Settings", "Settings Saved")
end
diff --git a/vmail-listmessages-html.lsp b/vmail-listmessages-html.lsp
index 853d05c..78687d1 100644
--- a/vmail-listmessages-html.lsp
+++ b/vmail-listmessages-html.lsp
@@ -5,13 +5,32 @@ require("viewfunctions")
<% -- Pregenerate the list of users
if viewlibrary.check_permission("listusers") and (viewlibrary.check_permission("forwardmessage") or viewlibrary.check_permission("forwardmymessage")) then
local users = viewlibrary.dispatch_component("listusers", nil, true)
- options = {}
+ useroptions = {}
for i,u in ipairs(users.value) do
if u.username ~= session.userinfo.userid then
- options[#options+1] = '<option value="'..html.html_escape(u.username)..'">'..html.html_escape(u.fullname)..' ('..html.html_escape(u.username)..')</option>'
+ useroptions[#useroptions+1] = '<option value="'..html.html_escape(u.username)..'">'..html.html_escape(u.fullname)..' ('..html.html_escape(u.username)..')</option>'
end
end
- options = table.concat(options)
+ useroptions = table.concat(useroptions)
+end
+%>
+<% -- Pregenerate the list of folders
+reversefolders = {}
+if viewlibrary.check_permission("listfolders") then
+ local folders = viewlibrary.dispatch_component("listfolders", nil, true)
+ for i,u in ipairs(folders.value) do
+ reversefolders[u.in_folder] = u.label
+ end
+ if (viewlibrary.check_permission("movemessage") or viewlibrary.check_permission("movemymessage")) then
+ if #folders.value <= 1 then
+ dontmove = true
+ end
+ folderoptions = {}
+ for i,u in ipairs(folders.value) do
+ folderoptions[#folderoptions+1] = '<option value="'..html.html_escape(u.in_folder)..'">'..html.html_escape(u.label)..'</option>'
+ end
+ folderoptions = table.concat(folderoptions)
+ end
end
%>
@@ -20,7 +39,7 @@ end
<script type="text/javascript">
function PlayMessage() {
$(".temporaryplayer").remove();
- $(this).parent().parent().after("<tr class='temporaryplayer'><td colspan='8'><embed width='100%' height='25px' marginheight='0' marginwidth='0' frameborder='0' scrolling='no' autostart='false' autoplay='false' loop='false' src='" + $(this).attr("href") + "'></embed></TD></TR>");
+ $(this).parent().parent().after("<tr class='temporaryplayer'><td colspan='9'><embed width='100%' height='25px' marginheight='0' marginwidth='0' frameborder='0' scrolling='no' autostart='false' autoplay='false' loop='false' src='" + $(this).attr("href") + "'></embed></TD></TR>");
return false;
}
function HandleMulti() {
@@ -45,10 +64,13 @@ end
<% if viewlibrary.check_permission("emailmessage") or viewlibrary.check_permission("emailmymessage") then %>
$("#multiemail").click(HandleMulti);
<% end %>
+<% if viewlibrary.check_permission("movemessage") or viewlibrary.check_permission("movemymessage") then %>
+ $("#multimove").click(HandleMulti);
+<% end %>
});
</script>
-<% displaycommandresults({"deletemessage", "deletemymessage", "forwardmessage", "forwardmymessage", "emailmessage", "emailmymessage"}, session) %>
+<% displaycommandresults({"deletemessage", "deletemymessage", "forwardmessage", "forwardmymessage", "emailmessage", "emailmymessage", "movemessage", "movemymessage"}, session) %>
<h1>Messages</h1>
<DL>
@@ -68,7 +90,7 @@ end
" method="POST">
<input class="hidden" type="hidden" name="redir" value="<%= html.html_escape(page_info.orig_action) %>" >
<input class="hidden" type="hidden" name="message" value="" >
- <select name="newuser"><%= (options or "") %></select>
+ <select name="newuser"><%= (useroptions or "") %></select>
<input class="submit" type="submit" value="Forward">
</form>
<% end %>
@@ -82,6 +104,18 @@ end
<input class="submit" type="submit" value="E-mail">
</form>
<% end %>
+<% if viewlibrary.check_permission("movemessage") or viewlibrary.check_permission("movemymessage") then %>
+ <% if not dontmove then %>
+ <form id="multimove" action="<%= html.html_escape(page_info.script .. page_info.prefix .. page_info.controller) %>/
+ <% if viewlibrary.check_permission("movemessage") then io.write("movemessage") else io.write("movemymessage") end %>
+ " method="POST">
+ <input class="hidden" type="hidden" name="redir" value="<%= html.html_escape(page_info.orig_action) %>" >
+ <input class="hidden" type="hidden" name="message" value="" >
+ <select name="newfolder"><%= (folderoptions or "") %></select>
+ <input class="submit" type="submit" value="Move">
+ </form>
+ <% end %>
+<% end %>
</TD></TR></TABLE>
<TABLE id="list" class="tablesorter"><THEAD>
@@ -92,7 +126,8 @@ end
<TH>Time</TH>
<TH>Caller ID</TH>
<TH>Priority</TH>
- <TH>Orig Mailbox</Th>
+ <TH>Orig Mailbox</TH>
+ <TH>Folder</TH>
<TH>Duration</TH>
</TR>
</THEAD><TBODY>
@@ -113,6 +148,7 @@ end
<TD><%= html.html_escape(v.cid_number) %></TD>
<TD><%= html.html_escape(v.read_flags) %></TD>
<TD><%= html.html_escape(v.username) %></TD>
+ <TD><%= html.html_escape(reversefolders[v.in_folder] or v.in_folder) %></TD>
<TD><%= html.html_escape(v.message_len) %></TD>
</TR>
<% end %>
diff --git a/vmail-model.lua b/vmail-model.lua
index 886e910..1a4ce01 100644
--- a/vmail-model.lua
+++ b/vmail-model.lua
@@ -22,15 +22,15 @@ local env
local con
local voicemail_users_creation_script = {
- "CREATE TABLE voicemail_users (username text)",
+ "CREATE TABLE voicemail_users (username VARCHAR(255))",
}
local voicemail_values_creation_script = {
- "CREATE TABLE voicemail_values (username text, name text, value text)",
+ "CREATE TABLE voicemail_values (username VARCHAR(255), name VARCHAR(255), value VARCHAR(255))",
}
local voicemail_params_creation_script = {
- "CREATE TABLE voicemail_params (name text primary key, type text, label text, descr text, value text)",
+ "CREATE TABLE voicemail_params (name VARCHAR(255) primary key, type VARCHAR(255), label VARCHAR(255), descr VARCHAR(255), value VARCHAR(255))",
"INSERT INTO voicemail_params VALUES('username', 'text', 'Extension', '', '')",
"INSERT INTO voicemail_params VALUES('fullname', 'text', 'Full User Name', '', '')",
"INSERT INTO voicemail_params VALUES('vm-password', 'text', 'Voicemail Password', '', '')",
@@ -43,6 +43,11 @@ local voicemail_params_creation_script = {
"INSERT INTO voicemail_params VALUES('vm-notify-email-all-messages', 'boolean', 'Pager Email Enable', '', 'false')",
}
+local voicemail_folders_creation_script = {
+ "CREATE TABLE voicemail_folders (in_folder VARCHAR(255) primary key, label VARCHAR(255))",
+ "INSERT INTO voicemail_folders VALUES('inbox', 'Inbox')",
+}
+
local voicemail_prefs_creation_script = "CREATE TABLE voicemail_prefs (username VARCHAR(255), domain VARCHAR(255), name_path VARCHAR(255), greeting_path VARCHAR(255), password VARCHAR(255))"
-- ################################################################################
@@ -136,7 +141,7 @@ local getselectresponse = function(sql)
return retval
end
-local generatewhereclause = function(username, message)
+local generatewhereclause = function(username, message, foldername)
local sql = ""
local where = {}
if username and username ~= "" then
@@ -151,6 +156,9 @@ local generatewhereclause = function(username, message)
end
where[#where+1] = "(" .. table.concat(where2, " OR ") .. ")"
end
+ if foldername and foldername ~= "" then
+ where[#where+1] = "in_folder = '"..escape(foldername).."'"
+ end
if #where > 0 then
sql = " WHERE " .. table.concat(where, " AND ")
end
@@ -159,6 +167,16 @@ end
-- These funtions access the new voicemail tables added for ACF
+local listfolders = function(foldername)
+ if not checktable("voicemail_folders") then runscript(voicemail_folders_creation_script) end
+ local sql = "SELECT * FROM voicemail_folders" .. generatewhereclause(nil, nil, foldername).." ORDER BY label"
+ return getselectresponse(sql)
+end
+
+local validfolder = function(foldername)
+ return foldername and (foldername ~= "") and (#listfolders(foldername) > 0)
+end
+
local listusers = function(username)
if not checktable("voicemail_users") then runscript(voicemail_users_creation_script) end
local sql = "SELECT * FROM voicemail_users" .. generatewhereclause(username).." ORDER BY username"
@@ -465,6 +483,56 @@ email_message = function(message, address, username)
return retval
end
+move_message = function(message, newfolder, username)
+ local retval = cfe({ label="Move message result" })
+ local messages = format.string_to_table(message, "%s*,%s*")
+ local res, err = pcall(function()
+ local connected = databaseconnect()
+ -- Check if message exists
+ local sql = "SELECT * FROM voicemail_msgs" .. generatewhereclause(username, messages)
+ local mess = getselectresponse(sql)
+ if #mess == #messages then
+ -- Check if newfolder exists
+ if validfolder(newfolder) then
+ for i,m in ipairs(mess) do
+ local sql = "UPDATE voicemail_msgs SET in_folder='"..newfolder.."'" .. generatewhereclause(username, messages)
+ assert (con:execute(sql))
+ end
+ if #mess == 1 then
+ retval.value = "Moved message"
+ else
+ retval.value = "Moved "..#mess.." messages"
+ end
+ else
+ retval.errtxt = "Failed to move message - invalid folder"
+ end
+ else
+ retval.errtxt = "Failed to move message - message not found"
+ end
+ if connected then databasedisconnect() end
+ end)
+ if not res and err then
+ retval.errtxt = err
+ end
+
+ return retval
+end
+
+list_folders = function()
+ local errtxt
+ local folders = {}
+ local res, err = pcall(function()
+ local connected = databaseconnect()
+ folders = listfolders()
+ if connected then databasedisconnect() end
+ end)
+ if not res and err then
+ errtxt = err
+ end
+
+ return cfe({ type="structure", value=folders, label="Voicemail Folders", errtxt=errtxt })
+end
+
list_users = function()
local errtxt
local users = {}
diff --git a/vmail.roles b/vmail.roles
index 6d72cb8..34cba80 100644
--- a/vmail.roles
+++ b/vmail.roles
@@ -1,5 +1,5 @@
GUEST=vmail:processdialplanxml,vmail:processdirectoryxml
-USER=vmail:listusers,vmail:listmymessages,vmail:downloadmymessage,vmail:deletemymessage,vmail:editmyusersettings,vmail:forwardmymessage,vmail:emailmymessage
+USER=vmail:listfolders,vmail:listusers,vmail:listmymessages,vmail:downloadmymessage,vmail:deletemymessage,vmail:editmyusersettings,vmail:forwardmymessage,vmail:movemymessage,vmail:emailmymessage
EDITOR=vmail:editusers,vmail:createuser,vmail:deleteuser,vmail:editusersettings
-EXPERT=vmail:editconfig,vmail:listmessages,vmail:downloadmessage,vmail:deletemessage,vmail:forwardmessage,vmail:emailmessage
-ADMIN=vmail:listmessages,vmail:downloadmessage,vmail:deletemessage,vmail:forwardmessage,vmail:emailmessage,vmail:editusersettings,vmail:listusers,vmail:editusers,vmail:createuser,vmail:deleteuser,vmail:editconfig
+EXPERT=vmail:editconfig,vmail:listmessages,vmail:downloadmessage,vmail:deletemessage,vmail:forwardmessage,vmail:movemessage,vmail:emailmessage
+ADMIN=vmail:listmessages,vmail:downloadmessage,vmail:deletemessage,vmail:forwardmessage,vmail:movemessage,vmail:emailmessage,vmail:editusersettings,vmail:listfolders,vmail:listusers,vmail:editusers,vmail:createuser,vmail:deleteuser,vmail:editconfig