This commit is contained in:
markjcrane 2015-12-01 14:10:01 -07:00
commit dc873eee43
5 changed files with 72 additions and 80 deletions

View File

@ -4,7 +4,6 @@ require "resources.functions.sleep"
local log = require "resources.functions.log".next_fax_task local log = require "resources.functions.log".next_fax_task
local Tasks = require "app.fax.resources.scripts.queue.tasks" local Tasks = require "app.fax.resources.scripts.queue.tasks"
local Esl = require "resources.functions.esl" local Esl = require "resources.functions.esl"
local send_mail = require "resources.functions.send_mail"
local FAX_OPTIONS = { local FAX_OPTIONS = {
"fax_use_ecm=false,fax_enable_t38=true,fax_enable_t38_request=true,fax_disable_v17=default"; "fax_use_ecm=false,fax_enable_t38=true,fax_enable_t38_request=true,fax_disable_v17=default";
@ -15,22 +14,16 @@ local FAX_OPTIONS = {
} }
local function task_send_mail(task) local function task_send_mail(task)
local mail_x_headers = {
["X-FusionPBX-Domain-UUID"] = task.domain_uuid;
["X-FusionPBX-Domain-Name"] = task.domain_name;
["X-FusionPBX-Email-Type"] = 'email2fax';
}
local number_dialed = task.uri:match("/([^/]-)%s*$") local number_dialed = task.uri:match("/([^/]-)%s*$")
if task.reply_address and #task.reply_address > 0 then
send_mail(mail_x_headers, task.reply_address, { Tasks.send_mail_task(task, {
"Fax to: " .. number_dialed .. " FAILED", "Fax to: " .. number_dialed .. " FAILED",
table.concat{ table.concat{
"We are sorry the fax failed to go through. ", "We are sorry the fax failed to go through. ",
"It has been attached. Please check the number " .. number_dialed .. ", ", "It has been attached. Please check the number " .. number_dialed .. ", ",
"and if it was correct you might consider emailing it instead.", "and if it was correct you might consider emailing it instead.",
} }}
}) )
end
end end
local function next_task() local function next_task()

View File

@ -11,6 +11,10 @@
local send_mail = require "resources.functions.send_mail" local send_mail = require "resources.functions.send_mail"
local fax_task_uuid = env:getHeader('fax_task_uuid') local fax_task_uuid = env:getHeader('fax_task_uuid')
if not fax_task_uuid then
log.warning("No [fax_task_uuid] channel variable")
return
end
local task = Tasks.select_task(fax_task_uuid) local task = Tasks.select_task(fax_task_uuid)
if not task then if not task then
log.warningf("Can not find fax task: %q", tostring(fax_task_uuid)) log.warningf("Can not find fax task: %q", tostring(fax_task_uuid))
@ -31,7 +35,7 @@
local domain_name = env:getHeader("domain_name") or task.domain_name local domain_name = env:getHeader("domain_name") or task.domain_name
local origination_caller_id_name = env:getHeader("origination_caller_id_name") or '000000000000000' local origination_caller_id_name = env:getHeader("origination_caller_id_name") or '000000000000000'
local origination_caller_id_number = env:getHeader("origination_caller_id_number") or '000000000000000' local origination_caller_id_number = env:getHeader("origination_caller_id_number") or '000000000000000'
local accountcode = env:getHeader("accountcode") local accountcode = env:getHeader("accountcode") or domain_name
local duration = tonumber(env:getHeader("billmsec")) or 0 local duration = tonumber(env:getHeader("billmsec")) or 0
local sip_to_user = env:getHeader("sip_to_user") local sip_to_user = env:getHeader("sip_to_user")
local bridge_hangup_cause = env:getHeader("bridge_hangup_cause") local bridge_hangup_cause = env:getHeader("bridge_hangup_cause")
@ -142,39 +146,29 @@
) )
end end
--get the values from the fax file log.debug([[<<< DEBUG >>>
if not (fax_uuid and domain_name) then domain_name = '%s'
local array = split(fax_file, "[\\/]+") domain_uuid = '%s'
domain_name = domain_name or array[#array - 3] task.domain_name = '%s'
local fax_extension = fax_extension or array[#array - 2] task.domain_uuid = '%s'
]],
tostring(domain_name ),
tostring(domain_uuid ),
tostring(task.domain_name ),
tostring(task.domain_uuid )
)
if not fax_uuid then assert(fax_uuid, 'no fax server uuid')
local sql = "SELECT fax_uuid FROM v_fax " assert(domain_name, 'no domain name')
sql = sql .. "WHERE domain_uuid = '" .. domain_uuid .. "' " assert(domain_uuid, 'no domain uuid')
sql = sql .. "AND fax_extension = '" .. fax_extension .. "' " assert(domain_uuid:lower() == task.domain_uuid:lower(), 'invalid domain uuid')
fax_uuid = dbh:first_value(sql); assert(domain_name:lower() == task.domain_name:lower(), 'invalid domain name')
end
end
--get the domain_uuid using the domain name required for multi-tenant
if domain_name and not domain_uuid then
local sql = "SELECT domain_uuid FROM v_domains ";
sql = sql .. "WHERE domain_name = '" .. domain_name .. "' "
domain_uuid = dbh:first_value(sql)
end
assert(domain_name and domain_uuid)
--settings --settings
local settings = Settings.new(dbh, domain_name, domain_uuid) local settings = Settings.new(dbh, domain_name, domain_uuid)
local keep_local = settings:get('fax', 'keep_local','boolean') local keep_local = settings:get('fax', 'keep_local','boolean')
local storage_type = (keep_local == "false") and "" or settings:get('fax', 'storage_type', 'text') local storage_type = (keep_local == "false") and "" or settings:get('fax', 'storage_type', 'text')
--be sure accountcode is not empty
if (accountcode == nil) then
accountcode = domain_name
end
local function opt(v, default) local function opt(v, default)
if v then return "'" .. v .. "'" end if v then return "'" .. v .. "'" end
return default or 'NULL' return default or 'NULL'
@ -244,14 +238,6 @@
dbh:query(sql); dbh:query(sql);
end end
--prepare the headers
local mail_x_headers = {
["X-FusionPBX-Domain-UUID"] = domain_uuid;
["X-FusionPBX-Domain-Name"] = domain_name;
["X-FusionPBX-Call-UUID"] = uuid;
["X-FusionPBX-Email-Type"] = 'email2fax';
}
-- add the fax files -- add the fax files
if fax_success == "1" then if fax_success == "1" then
@ -331,16 +317,13 @@
end end
Tasks.remove_task(task) Tasks.remove_task(task)
Tasks.send_mail_task(task, {
if task.reply_address and #task.reply_address > 0 then
send_mail(mail_x_headers, task.reply_address, {
"Fax to: " .. number_dialed .. " SENT", "Fax to: " .. number_dialed .. " SENT",
table.concat{ table.concat{
"We are happy to report the fax was sent successfully.", "We are happy to report the fax was sent successfully.",
"It has been attached for your records.", "It has been attached for your records.",
} }}, uuid
}) )
end
end end
if fax_success ~= "1" then if fax_success ~= "1" then
@ -362,16 +345,14 @@
Tasks.wait_task(task, answered, hangup_cause_q850) Tasks.wait_task(task, answered, hangup_cause_q850)
if task.status ~= 0 then if task.status ~= 0 then
Tasks.remove_task(task) Tasks.remove_task(task)
if task.reply_address and #task.reply_address > 0 then Tasks.send_mail_task(task, {
send_mail(mail_x_headers, task.reply_address, {
"Fax to: " .. number_dialed .. " FAILED", "Fax to: " .. number_dialed .. " FAILED",
table.concat{ table.concat{
"We are sorry the fax failed to go through. ", "We are sorry the fax failed to go through. ",
"It has been attached. Please check the number "..number_dialed..", ", "It has been attached. Please check the number "..number_dialed..", ",
"and if it was correct you might consider emailing it instead.", "and if it was correct you might consider emailing it instead.",
} }}, uuid
}) )
end
end end
end end
end end

View File

@ -1,5 +1,6 @@
local Database = require "resources.functions.database" local Database = require "resources.functions.database"
local Settings = require "resources.functions.lazy_settings" local Settings = require "resources.functions.lazy_settings"
local send_mail = require "resources.functions.send_mail"
local db local db
@ -244,6 +245,21 @@ local function cleanup_tasks()
db:query(remove_finished_tasks_sql) db:query(remove_finished_tasks_sql)
end end
local function send_mail_task(task, message, call_uuid)
if not task.reply_address or #task.reply_address == 0 then
return
end
local mail_x_headers = {
["X-FusionPBX-Domain-UUID"] = task.domain_uuid;
["X-FusionPBX-Domain-Name"] = task.domain_name;
["X-FusionPBX-Call-UUID"] = call_uuid;
["X-FusionPBX-Email-Type"] = 'email2fax';
}
return send_mail(mail_x_headers, task.reply_address, message)
end
return { return {
release_db = function() release_db = function()
if db then if db then
@ -257,4 +273,5 @@ return {
remove_task = remove_task; remove_task = remove_task;
release_task = release_task; release_task = release_task;
cleanup_tasks = cleanup_tasks; cleanup_tasks = cleanup_tasks;
send_mail_task = send_mail_task;
} }

View File

@ -99,7 +99,7 @@ function Settings:_load(category, subcategory, name)
local found = false local found = false
--get the domain settings --get the domain settings
if domain_uuid then if domain_uuid then
sql = "SELECT domain_setting_uuid,domain_setting_category,domain_setting_subcategory,domain_setting_name,domain_setting_value " local sql = "SELECT domain_setting_uuid,domain_setting_category,domain_setting_subcategory,domain_setting_name,domain_setting_value "
sql = sql .. "FROM v_domain_settings "; sql = sql .. "FROM v_domain_settings ";
sql = sql .. "WHERE domain_uuid = '" .. domain_uuid .. "'"; sql = sql .. "WHERE domain_uuid = '" .. domain_uuid .. "'";
sql = sql .. "AND domain_setting_enabled = 'true' "; sql = sql .. "AND domain_setting_enabled = 'true' ";

View File

@ -46,6 +46,7 @@ local LEVELS = {
'warning', 'warning',
'notice', 'notice',
'info', 'info',
'debug',
} }
local TRACE_LEVEL = 'notice' local TRACE_LEVEL = 'notice'