diff --git a/app/click_to_call/click_to_call.php b/app/click_to_call/click_to_call.php index b34d5eea65..6911f803e0 100644 --- a/app/click_to_call/click_to_call.php +++ b/app/click_to_call/click_to_call.php @@ -1,7 +1,7 @@ James Rose - */ + //includes include "root.php"; require_once "resources/require.php"; @@ -51,157 +51,178 @@ //include the header require_once "resources/header.php"; -if (is_array($_REQUEST) && !empty($_REQUEST['src']) && !empty($_REQUEST['dest'])) { - //retrieve submitted variables - $src = check_str($_REQUEST['src']); - $src_cid_name = check_str($_REQUEST['src_cid_name']); - $src_cid_number = check_str($_REQUEST['src_cid_number']); +//send the call + if (is_array($_REQUEST) && !empty($_REQUEST['src']) && !empty($_REQUEST['dest'])) { + //retrieve submitted variables + $src = check_str($_REQUEST['src']); + $src_cid_name = check_str($_REQUEST['src_cid_name']); + $src_cid_number = check_str($_REQUEST['src_cid_number']); - $dest = check_str($_REQUEST['dest']); - $dest_cid_name = check_str($_REQUEST['dest_cid_name']); - $dest_cid_number = check_str($_REQUEST['dest_cid_number']); + $dest = check_str($_REQUEST['dest']); + $dest_cid_name = check_str($_REQUEST['dest_cid_name']); + $dest_cid_number = check_str($_REQUEST['dest_cid_number']); - $auto_answer = check_str($_REQUEST['auto_answer']); //true,false - $rec = check_str($_REQUEST['rec']); //true,false - $ringback = check_str($_REQUEST['ringback']); - $context = $_SESSION['context']; + $auto_answer = check_str($_REQUEST['auto_answer']); //true,false + $rec = check_str($_REQUEST['rec']); //true,false + $ringback = check_str($_REQUEST['ringback']); + $context = $_SESSION['context']; - //clean up variable values - $src = str_replace(array('.','(',')','-',' '), '', $src); - $dest = (strpbrk($dest, '@') != FALSE) ? str_replace(array('(',')',' '), '', $dest) : str_replace(array('.','(',')','-',' '), '', $dest); //don't strip periods or dashes in sip-uri calls, only phone numbers + //clean up variable values + $src = str_replace(array('.','(',')','-',' '), '', $src); + $dest = (strpbrk($dest, '@') != FALSE) ? str_replace(array('(',')',' '), '', $dest) : str_replace(array('.','(',')','-',' '), '', $dest); //don't strip periods or dashes in sip-uri calls, only phone numbers - //adjust variable values - $sip_auto_answer = ($auto_answer == "true") ? ",sip_auto_answer=true" : null; + //adjust variable values + $sip_auto_answer = ($auto_answer == "true") ? ",sip_auto_answer=true" : null; - //mozilla thunderbird TBDialout workaround (seems it can only handle the first %NUM%) - $dest = ($dest == "%NUM%") ? $src_cid_number : $dest; + //mozilla thunderbird TBDialout workaround (seems it can only handle the first %NUM%) + $dest = ($dest == "%NUM%") ? $src_cid_number : $dest; - //translate ringback - switch ($ringback) { - case "music": $ringback_value = "\'local_stream://moh\'"; break; - case "uk-ring": $ringback_value = "\'%(400,200,400,450);%(400,2200,400,450)\'"; break; - case "fr-ring": $ringback_value = "\'%(1500,3500,440.0,0.0)\'"; break; - case "pt-ring": $ringback_value = "\'%(1000,5000,400.0,0.0)\'"; break; - case "rs-ring": $ringback_value = "\'%(1000,4000,425.0,0.0)\'"; break; - case "it-ring": $ringback_value = "\'%(1000,4000,425.0,0.0)\'"; break; - case "de-ring": $ringback_value = "\'%(1000,4000,425.0,0.0)\'"; break; - case "us-ring": - default: - $ringback = 'us-ring'; - $ringback_value = "\'%(2000,4000,440.0,480.0)\'"; - } - - //create the even socket connection and send the event socket command - $fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']); - if (!$fp) { - //error message - echo "
Connection to Event Socket failed.
"; - } - - //set call uuid - $origination_uuid = trim(event_socket_request($fp, "api create_uuid")); - - //add record path and name - if ($rec == "true") { - $record_path = $_SESSION['switch']['recordings']['dir']."/".$_SESSION['domain_name']."/archive/".date("Y")."/".date("M")."/".date("d"); - $record_name = $origination_uuid.".wav"; - } - - //determine call direction - $dir = (strlen($dest) < 7) ? 'local' : 'outbound'; - - //define a leg - set source to display the defined caller id name and number - $source_common = "{"; - $source_common .= "origination_uuid=".$origination_uuid; - $source_common .= ",click_to_call=true"; - $source_common .= ",origination_caller_id_name='".$src_cid_name."'"; - $source_common .= ",origination_caller_id_number=".$src_cid_number; - $source_common .= ",instant_ringback=true"; - $source_common .= ",ringback=".$ringback_value; - $source_common .= ",presence_id=".$src."@".$_SESSION['domains'][$domain_uuid]['domain_name']; - $source_common .= ",call_direction=".$dir; - if ($rec == "true") { - $source_common .= ",record_path='".$record_path."'"; - $source_common .= ",record_name='".$record_name."'"; - } - - if (strlen($src) < 7) { - //source is a local extension - $source = $source_common.$sip_auto_answer. - ",domain_uuid=".$domain_uuid. - ",domain_name=".$_SESSION['domains'][$domain_uuid]['domain_name']."}user/".$src."@".$_SESSION['domains'][$domain_uuid]['domain_name']; - } - else { - //source is an external number - $bridge_array = outbound_route_to_bridge($_SESSION['domain_uuid'], $src); - $source = $source_common."}".$bridge_array[0]; - } - unset($source_common); - - //define b leg - set destination to display the defined caller id name and number - $destination_common = " &bridge({origination_caller_id_name='".$dest_cid_name."',origination_caller_id_number=".$dest_cid_number; - if (strlen($dest) < 7) { - //destination is a local extension - if (strpbrk($dest, '@') != FALSE) { //sip-uri - $switch_cmd = $destination_common.",call_direction=outbound}sofia/external/".$dest.")"; + //translate ringback + switch ($ringback) { + case "music": $ringback_value = "\'local_stream://moh\'"; break; + case "uk-ring": $ringback_value = "\'%(400,200,400,450);%(400,2200,400,450)\'"; break; + case "fr-ring": $ringback_value = "\'%(1500,3500,440.0,0.0)\'"; break; + case "pt-ring": $ringback_value = "\'%(1000,5000,400.0,0.0)\'"; break; + case "rs-ring": $ringback_value = "\'%(1000,4000,425.0,0.0)\'"; break; + case "it-ring": $ringback_value = "\'%(1000,4000,425.0,0.0)\'"; break; + case "de-ring": $ringback_value = "\'%(1000,4000,425.0,0.0)\'"; break; + case "us-ring": + default: + $ringback = 'us-ring'; + $ringback_value = "\'%(2000,4000,440.0,480.0)\'"; } - else { //not sip-uri - $switch_cmd = " &transfer('".$dest." XML ".$context."')"; + + //create the even socket connection and send the event socket command + $fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']); + if (!$fp) { + //error message + echo "
Connection to Event Socket failed.
"; } - } - else { - //local extension (source) > external number (destination) - if (strlen($src) < 7 && strlen($dest_cid_number) == 0) { - //retrieve outbound caller id from the (source) extension - $sql = "select outbound_caller_id_name, outbound_caller_id_number from v_extensions where domain_uuid = '".$_SESSION['domain_uuid']."' and extension = '".$src."' "; - $prep_statement = $db->prepare(check_sql($sql)); - $prep_statement->execute(); - $result = $prep_statement->fetchAll(PDO::FETCH_NAMED); - foreach ($result as &$row) { - $dest_cid_name = $row["outbound_caller_id_name"]; - $dest_cid_number = $row["outbound_caller_id_number"]; - break; //limit to 1 row + + //set call uuid + $origination_uuid = trim(event_socket_request($fp, "api create_uuid")); + + //add record path and name + if ($rec == "true") { + $record_path = $_SESSION['switch']['recordings']['dir']."/".$_SESSION['domain_name']."/archive/".date("Y")."/".date("M")."/".date("d"); + if (isset($_SESSION['recordings']['extension']['text'])) { + $record_extension = $_SESSION['recordings']['extension']['text']; + } + else { + $record_extension = 'wav'; + } + if (isset($_SESSION['recordings']['template']['text'])) { + //${year}${month}${day}-${caller_id_number}-${caller_destination}-${uuid}.${record_extension} + $record_name = $_SESSION['recordings']['template']['text']; + $record_name = str_replace('${year}', date("Y"), $record_name); + $record_name = str_replace('${month}', date("M"), $record_name); + $record_name = str_replace('${day}', date("d"), $record_name); + $record_name = str_replace('${caller_id_name}', $src_cid_name, $record_name); + $record_name = str_replace('${caller_id_number}', $src_cid_number, $record_name); + $record_name = str_replace('${caller_destination}', $dest, $record_name); + $record_name = str_replace('${uuid}', $origination_uuid, $record_name); + $record_name = str_replace('${record_extension}', $record_extension, $record_name); + } + else { + $record_name = $origination_uuid.'.'.$record_extension; } - unset ($prep_statement); } - if (permission_exists('click_to_call_call')) { + + //determine call direction + $dir = (strlen($dest) < 7) ? 'local' : 'outbound'; + + //define a leg - set source to display the defined caller id name and number + $source_common = "{"; + $source_common .= "origination_uuid=".$origination_uuid; + $source_common .= ",click_to_call=true"; + $source_common .= ",origination_caller_id_name='".$src_cid_name."'"; + $source_common .= ",origination_caller_id_number=".$src_cid_number; + $source_common .= ",instant_ringback=true"; + $source_common .= ",ringback=".$ringback_value; + $source_common .= ",presence_id=".$src."@".$_SESSION['domains'][$domain_uuid]['domain_name']; + $source_common .= ",call_direction=".$dir; + if ($rec == "true") { + $source_common .= ",record_path='".$record_path."'"; + $source_common .= ",record_name='".$record_name."'"; + } + + if (strlen($src) < 7) { + //source is a local extension + $source = $source_common.$sip_auto_answer. + ",domain_uuid=".$domain_uuid. + ",domain_name=".$_SESSION['domains'][$domain_uuid]['domain_name']."}user/".$src."@".$_SESSION['domains'][$domain_uuid]['domain_name']; + } + else { + //source is an external number + $bridge_array = outbound_route_to_bridge($_SESSION['domain_uuid'], $src); + $source = $source_common."}".$bridge_array[0]; + } + unset($source_common); + + //define b leg - set destination to display the defined caller id name and number + $destination_common = " &bridge({origination_caller_id_name='".$dest_cid_name."',origination_caller_id_number=".$dest_cid_number; + if (strlen($dest) < 7) { + //destination is a local extension if (strpbrk($dest, '@') != FALSE) { //sip-uri $switch_cmd = $destination_common.",call_direction=outbound}sofia/external/".$dest.")"; } else { //not sip-uri - $bridge_array = outbound_route_to_bridge($_SESSION['domain_uuid'], $dest); - //$switch_cmd = $destination_common."}".$bridge_array[0].")"; // wouldn't set cdr destination correctly, so below used instead $switch_cmd = " &transfer('".$dest." XML ".$context."')"; } } - } - unset($destination_common); - - //create the even socket connection and send the event socket command - $fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']); - if (!$fp) { - //error message - echo "
Connection to Event Socket failed.
"; - } - else { - //display the last command - $switch_cmd = "api originate ".$source.$switch_cmd; - echo "
".$switch_cmd."

".$src." has called ".$dest."
\n"; - //show the command result - $result = trim(event_socket_request($fp, $switch_cmd)); - if (substr($result, 0,3) == "+OK") { - //$uuid = substr($result, 4); - if ($rec == "true") { - //use the server's time zone to ensure it matches the time zone used by freeswitch - date_default_timezone_set($_SESSION['time_zone']['system']); - //create the api record command and send it over event socket - $switch_cmd = "api uuid_record ".$origination_uuid." start ".$record_path."/".$record_name; - $result2 = trim(event_socket_request($fp, $switch_cmd)); + else { + //local extension (source) > external number (destination) + if (strlen($src) < 7 && strlen($dest_cid_number) == 0) { + //retrieve outbound caller id from the (source) extension + $sql = "select outbound_caller_id_name, outbound_caller_id_number from v_extensions where domain_uuid = '".$_SESSION['domain_uuid']."' and extension = '".$src."' "; + $prep_statement = $db->prepare(check_sql($sql)); + $prep_statement->execute(); + $result = $prep_statement->fetchAll(PDO::FETCH_NAMED); + foreach ($result as &$row) { + $dest_cid_name = $row["outbound_caller_id_name"]; + $dest_cid_number = $row["outbound_caller_id_number"]; + break; //limit to 1 row + } + unset ($prep_statement); + } + if (permission_exists('click_to_call_call')) { + if (strpbrk($dest, '@') != FALSE) { //sip-uri + $switch_cmd = $destination_common.",call_direction=outbound}sofia/external/".$dest.")"; + } + else { //not sip-uri + $bridge_array = outbound_route_to_bridge($_SESSION['domain_uuid'], $dest); + //$switch_cmd = $destination_common."}".$bridge_array[0].")"; // wouldn't set cdr destination correctly, so below used instead + $switch_cmd = " &transfer('".$dest." XML ".$context."')"; + } } } - echo "

".$result."

\n"; - } -} + unset($destination_common); + + //create the even socket connection and send the event socket command + $fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']); + if (!$fp) { + //error message + echo "
Connection to Event Socket failed.
"; + } + else { + //display the last command + $switch_cmd = "api originate ".$source.$switch_cmd; + echo "
".$switch_cmd."

".$src." has called ".$dest."
\n"; + //show the command result + $result = trim(event_socket_request($fp, $switch_cmd)); + if (substr($result, 0,3) == "+OK") { + //$uuid = substr($result, 4); + if ($rec == "true") { + //use the server's time zone to ensure it matches the time zone used by freeswitch + date_default_timezone_set($_SESSION['time_zone']['system']); + //create the api record command and send it over event socket + $switch_cmd = "api uuid_record ".$origination_uuid." start ".$record_path."/".$record_name; + $result2 = trim(event_socket_request($fp, $switch_cmd)); + } + } + echo "

".$result."

\n"; + } + } //show html form echo " \n";