diff options
Diffstat (limited to 'vmail-model.lua')
-rw-r--r-- | vmail-model.lua | 213 |
1 files changed, 134 insertions, 79 deletions
diff --git a/vmail-model.lua b/vmail-model.lua index 0148916..683aa77 100644 --- a/vmail-model.lua +++ b/vmail-model.lua @@ -43,7 +43,7 @@ local table_creation_scripts = { "INSERT INTO voicemail_params VALUES(null, 'vm-password-confirm', 'password', 'Enter again to confirm', '', '', '5')", "INSERT INTO voicemail_params VALUES(null, 'vm-mailto', 'text', 'Email Address', 'Email a notification, including audio file if enabled', '', '6')", "INSERT INTO voicemail_params VALUES(null, 'vm-email-all-messages', 'boolean', 'Email Enable', '', 'false', '7')", - "INSERT INTO voicemail_params VALUES(null, 'vm-attach-file', 'boolean', 'Attach voicemail to email', 'Option to attach audio file to email', 'false', '8')", + "INSERT INTO voicemail_params VALUES(null, 'vm-attach-file', 'boolean', 'Attach voicemail to email', 'Option to attach audio file to emaie', 'false', '8')", "INSERT INTO voicemail_params VALUES(null, 'vm-keep-local-after-email', 'boolean', 'Keep voicemail', 'When disabled, the message will be deleted from the voicemailbox after any notification email is sent (whether or not email is enabled). This allows receiving voicemail via email alone, rather than having the voicemail available from the Web interface or by telephone. CAUTION: \"Email Address\" must be valid and \"Email Enable\" and \"Attach voicemail to email\" must be enabled, OTHERWISE YOUR MESSAGES WILL BE LOST FOREVER.', 'true', '9')", "INSERT INTO voicemail_params VALUES(null, 'vm-notify-mailto', 'text', 'Pager Email Address', 'Email a short notification', '', '10')", "INSERT INTO voicemail_params VALUES(null, 'vm-notify-email-all-messages', 'boolean', 'Pager Email Enable', '', 'false', '11')", @@ -362,6 +362,39 @@ local function validateconfig(newconfig) return success, newconfig end +local delete_message = function(messages, username) + local retval = "" + + local sql = "SELECT * FROM voicemail_msgs" + sql = sql .. generatewhereclause(username, messages) + local tmp = getselectresponse(sql) + if #tmp == #messages then + sql = "DELETE FROM voicemail_msgs" .. generatewhereclause(username, messages) + runsqlcommand(sql) + for i,t in ipairs(tmp) do + os.remove(t.file_path) + end + if #messages == 1 then + retval = "Deleted message" + else + retval = "Deleted "..#messages.." messages" + end + if username then + voicemail_update(username, config.domain) + else + for i,m in ipairs(tmp) do + voicemail_update(m.username, m.domain) + end + end + end + + if not res and err then + return false, err + end + + return retval +end + local delete_user = function(username) local users = listusers(username) if #users == 0 then @@ -460,50 +493,51 @@ get_message = function(message, username) return retval end -delete_message = function(message, username) - local retval = cfe({ label="Delete message result", errtxt="Failed to delete message - message not found" }) - local messages = format.string_to_table(message, "%s*,%s*") - local res, err = pcall(function() +get_delete_message = function(clientdata) + local result = {} + result.message = cfe({ value=clientdata.message or "", label="Message" }) + result.username = cfe({ value=clientdata.username or "", label="User Name" }) + return cfe({ type="group", value=result, label="Delete Message" }) +end + +set_delete_message = function(deleterequest) + if not deleterequest.value.message.value or deleterequest.value.message.value == "" then + deleterequest.errtxt = "Failed to delete message - message not found" + return deleterequest + end + local messages = format.string_to_table(deleterequest.value.message.value, "%s*,%s*") + + local res, err = pcall(function() local connected = databaseconnect() - local sql = "SELECT * FROM voicemail_msgs" - sql = sql .. generatewhereclause(username, messages) - local tmp = getselectresponse(sql) - if #tmp == #messages then - sql = "DELETE FROM voicemail_msgs" .. generatewhereclause(username, messages) - runsqlcommand(sql) - for i,t in ipairs(tmp) do - os.remove(t.file_path) - end - if #messages == 1 then - retval.value = "Deleted message" - else - retval.value = "Deleted "..#messages.." messages" - end - retval.errtxt = nil - if username then - voicemail_update(username, config.domain) - else - for i,m in ipairs(tmp) do - voicemail_update(m.username, m.domain) - end - end - end + res, err = delete_message(messages, deleterequest.value.username.value) if connected then databasedisconnect() end end) + + if res then + deleterequest.descr = res + end + if not res and err then - retval.errtxt = err + deleterequest.errtxt = err end + + return deleterequest +end - return retval +get_forward_message = function(clientdata) + local result = {} + result.message = cfe({ value=clientdata.message or "", label="Message" }) + result.username = cfe({ value=clientdata.username or "", label="User Name" }) + result.newuser = cfe({ value=clientdata.newuser or "", label="New User" }) + return cfe({ type="group", value=result, label="Forward Message" }) end -forward_message = function(message, newuser, username) - local retval = cfe({ label="Forward message result" }) - local messages = format.string_to_table(message, "%s*,%s*") +forward_message = function(forwardrequest) + local messages = format.string_to_table(forwardrequest.value.message.value, "%s*,%s*") local res, err = pcall(function() local connected = databaseconnect() -- Check if message exists - local sql = "SELECT * FROM voicemail_msgs" .. generatewhereclause(username, messages) + local sql = "SELECT * FROM voicemail_msgs" .. generatewhereclause(forwardrequest.value.username.value, messages) local mess = getselectresponse(sql) if #mess == #messages then -- Check if newuser exists @@ -511,38 +545,45 @@ forward_message = function(message, newuser, username) for i,m in ipairs(mess) do -- Forward message using mod_voicemail API -- doesn't seem like there's any way to tell whether or not it worked - voicemail_inject(newuser, config.domain, m.file_path, m.cid_number, m.cid_name) + voicemail_inject(forwardrequest.value.newuser.value, config.domain, m.file_path, m.cid_number, m.cid_name) end if #mess == 1 then - retval.value = "Forwarded message" + forwardrequest.descr = "Forwarded message" else - retval.value = "Forwarded "..#mess.." messages" + forwardrequest.descr = "Forwarded "..#mess.." messages" end else - retval.errtxt = "Failed to forward message - invalid user" + forwardrequest.errtxt = "Failed to forward message - invalid user" end else - retval.errtxt = "Failed to forward message - message not found" + forwardrequest.errtxt = "Failed to forward message - message not found" end if connected then databasedisconnect() end end) if not res and err then - retval.errtxt = err + forwardrequest.errtxt = err end - return retval + return forwardrequest +end + +get_email_message = function(clientdata) + local result = {} + result.message = cfe({ value=clientdata.message or "", label="Message" }) + result.address = cfe({ value=clientdata.newuser or "", label="Address" }) + result.username = cfe({ value=clientdata.username or "", label="User Name" }) + return cfe({ type="group", value=result, label="Email Message" }) end -email_message = function(message, address, username) - local retval = cfe({ label="E-mail message result" }) - local messages = format.string_to_table(message, "%s*,%s*") - if address == "" or string.find(address, "%s") or not string.find(address, "@") then - retval.errtxt = "Failed to e-mail message - invalid address" +email_message = function(emailrequest) + local messages = format.string_to_table(emailrequest.value.message.value, "%s*,%s*") + if emailrequest.value.address.value == "" or string.find(emailrequest.value.address.value, "%s") or not string.find(emailrequest.value.address.value, "@") then + emailrequest.errtxt = "Failed to e-mail message - invalid address" else local res, err = pcall(function() local connected = databaseconnect() -- Check if message exists - local sql = "SELECT * FROM voicemail_msgs" .. generatewhereclause(username, messages) + local sql = "SELECT * FROM voicemail_msgs" .. generatewhereclause(emailrequest.value.username.value, messages) local mess = getselectresponse(sql) if #mess == #messages then -- Create a temporary user and settings @@ -552,7 +593,7 @@ email_message = function(message, address, username) end local settings = get_usersettings(newuser) if settings.value["vm-mailto"] and settings.value["vm-email-all-messages"] and settings.value["vm-attach-file"] and settings.value["vm-keep-local-after-email"] then - settings.value["vm-mailto"].value = address + settings.value["vm-mailto"].value = emailrequest.value.address.value settings.value["vm-email-all-messages"].value = true settings.value["vm-attach-file"].value = true settings.value["vm-keep-local-after-email"].value = false @@ -573,95 +614,109 @@ email_message = function(message, address, username) -- Now, delete the temporary user delete_user(newuser) else - retval.errtxt = "Failed to e-mail message - "..settings.errtxt + emailrequest.errtxt = "Failed to e-mail message - "..settings.errtxt end else - retval.errtxt = "Failed to e-mail message - unsupported" + emailrequest.errtxt = "Failed to e-mail message - unsupported" end else - retval.errtxt = "Failed to e-mail message - message not found" + emailrequest.errtxt = "Failed to e-mail message - message not found" end if connected then databasedisconnect() end end) if not res and err then - retval.errtxt = err + emailrequest.errtxt = err end end - return retval + return emailrequest +end + +get_move_message = function(clientdata) + local result = {} + result.message = cfe({ value=clientdata.message or "", label="Message" }) + result.newfolder = cfe({ value=clientdata.newfolder or "", label="New Folder" }) + result.username = cfe({ value=clientdata.username or "", label="User Name" }) + return cfe({ type="group", value=result, label="Move Message" }) end -move_message = function(message, newfolder, username) - local retval = cfe({ label="Move message result" }) - local messages = format.string_to_table(message, "%s*,%s*") +move_message = function(moverequest) + local messages = format.string_to_table(moverequest.value.message.value, "%s*,%s*") local res, err = pcall(function() local connected = databaseconnect() -- Check if message exists - local sql = "SELECT * FROM voicemail_msgs" .. generatewhereclause(username, messages) + local sql = "SELECT * FROM voicemail_msgs" .. generatewhereclause(moverequest.value.username.value, 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) + local sql = "UPDATE voicemail_msgs SET in_folder='"..moverequest.value.newfolder.value.."'" .. generatewhereclause(moverequest.value.username.value, messages) runsqlcommand(sql) end if #mess == 1 then - retval.value = "Moved message" + moverequest.descr = "Moved message" else - retval.value = "Moved "..#mess.." messages" + moverequest.value = "Moved "..#mess.." messages" end - if username then - voicemail_update(username, config.domain) + if moverequest.value.username.value then + voicemail_update(moverequest.value.username.value, config.domain) else for i,m in ipairs(mess) do voicemail_update(m.username, m.domain) end end else - retval.errtxt = "Failed to move message - invalid folder" + moverequest.errtxt = "Failed to move message - invalid folder" end else - retval.errtxt = "Failed to move message - message not found" + moverequest.errtxt = "Failed to move message - message not found" end if connected then databasedisconnect() end end) if not res and err then - retval.errtxt = err + moverequest.errtxt = err end - return retval + return moverequest end -callback_message = function(message, extension, username) - local retval = cfe({ label="Callback message result" }) - if string.find(message, ",") then - retval.errtxt = "Failed to callback message - can only callback one message at a time" - elseif extension == "" or string.find(extension, "[%s@]") then - retval.errtxt = "Failed to callback message - invalid extension" +get_callback_message = function(clientdata) + local result = {} + result.message = cfe({ value=clientdata.message or "", label="Message" }) + result.extension = cfe({ value=clientdata.extension or "", label="Extension" }) + result.username = cfe({ value=clientdata.username or "", label="User Name" }) + return cfe({ type="group", value=result, label="Callback Message" }) +end + +callback_message = function(callbackrequest) + if string.find(callbackrequest.value.message.value, ",") then + callbackrequest.errtxt = "Failed to callback message - can only callback one message at a time" + elseif callbackrequest.value.extension.value == "" or string.find(callbackrequest.value.extension.value, "[%s@]") then + callbackrequest.errtxt = "Failed to callback message - invalid extension" else local res, err = pcall(function() local connected = databaseconnect() -- Check if message exists - local sql = "SELECT * FROM voicemail_msgs" .. generatewhereclause(username, message) + local sql = "SELECT * FROM voicemail_msgs" .. generatewhereclause(callbackrequest.value.username.value, callbackrequest.value.message.value) local mess = getselectresponse(sql) if #mess == 1 then -- Mark the message as read - voicemail_read(mess[1].username, config.domain, message) + voicemail_read(mess[1].username, config.domain, callbackrequest.value.message.value) -- Initiate the call to the extension - voicemail_callback(extension, mess[1].file_path, mess[1].username) - retval.value = "Initiated callback" + voicemail_callback(callbackrequest.value.extension.value, mess[1].file_path, mess[1].username) + callbackrequest.descr = "Initiated callback" else - retval.errtxt = "Failed to callback message - message not found" + callbackrequest.errtxt = "Failed to callback message - message not found" end if connected then databasedisconnect() end end) if not res and err then - retval.errtxt = err + callbackrequest.errtxt = err end end - return retval + return callbackrequest end list_folders = function() |