James Rose */ include "root.php"; require_once "resources/require.php"; require_once "resources/check_auth.php"; if (permission_exists('click_to_call_view')) { //access granted } else { echo "access denied"; exit; } //add multi-lingual support require_once "app_languages.php"; foreach($text as $key => $value) { $text[$key] = $value[$_SESSION['domain']['language']['code']]; } require_once "resources/header.php"; if (is_array($_REQUEST) && !empty($_REQUEST['src']) && !empty($_REQUEST['dest'])) { //get the http variables and set them as variables $src = check_str($_REQUEST['src']); $dest = check_str($_REQUEST['dest']); $ringback = check_str($_REQUEST['ringback']); $src = str_replace(array('.', '(', ')', '-', ' '), '', $src); if (strpbrk($dest, '@') != FALSE) { $dest = str_replace(array('(', ')', ' '), '', $dest); //don't strip periods or dashes in sip-uri calls } else { $dest = str_replace(array('.', '(', ')', '-', ' '), '', $dest); //strip the periods for phone numbers. } $src_cid_name = check_str($_REQUEST['src_cid_name']); $src_cid_number = check_str($_REQUEST['src_cid_number']); $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 if ($auto_answer == "true") { $sip_auto_answer = "sip_auto_answer=true,"; } else { $sip_auto_answer = ''; } if (strlen($cid_number) == 0) { $cid_number = $src;} if (strlen($_SESSION['context']) > 0) { $context = $_SESSION['context']; } else { $context = 'default'; } //workaround for TBDialout on Thunderbird //seems it can only handle the first %NUM% if ($dest == "%NUM%"){ //echo "Thunderbird fix, dest now = $src_cid_number
"; $dest = $src_cid_number; } //translate ringback switch ($ringback) { case "us-ring": $ringback_value = "\'%(2000,4000,440.0,480.0)\'"; 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 "music": $ringback_value = "\'local_stream://moh\'"; break; default: $ringback = 'us-ring'; $ringback_value = "\'%(2000,4000,440.0,480.0)\'"; } //source should see the destination caller id if (strlen($src) < 7) { $source = "{".$sip_auto_answer."origination_caller_id_name='$src_cid_name',origination_caller_id_number=$src_cid_number,instant_ringback=true,ringback=$ringback_value,presence_id=$src@".$_SESSION['domains'][$domain_uuid]['domain_name'].",call_direction=outbound,domain_uuid=".$domain_uuid.",domain_name=".$_SESSION['domains'][$domain_uuid]['domain_name']."}user/$src@".$_SESSION['domains'][$domain_uuid]['domain_name']; } else { $bridge_array = outbound_route_to_bridge ($_SESSION['domain_uuid'], $src); $source = "{origination_caller_id_name='$src_cid_name',origination_caller_id_number=$src_cid_number,instant_ringback=true,ringback=$ringback_value,presence_id=$src@".$_SESSION['domains'][$domain_uuid]['domain_name'].",call_direction=outbound}".$bridge_array[0]; } //destination needs to see the source caller id if (strlen($dest) < 7) { if (strpbrk($dest, '@') != FALSE) { //echo "Found an @ 2

"; $switch_cmd = "api originate $source &bridge({origination_caller_id_name='$src_cid_name',origination_caller_id_number=$src_cid_number,call_direction=outbound}sofia/external/$dest)"; echo "$switch_cmd"; } else { $switch_cmd = "api originate $source &transfer('".$dest." XML ".$context."')"; } } else { if (strlen($src) < 7) { if (strlen($dest_cid_number) == 0) { //get the caller id from the extension caller id comes from the extension (the source number) $sql = "select * from v_extensions "; $sql .= "where domain_uuid = '".$_SESSION['domain_uuid']."' "; $sql .= "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); } } $bridge_array = outbound_route_to_bridge ($_SESSION['domain_uuid'], $dest); $destination = "{origination_caller_id_name='$dest_cid_name',origination_caller_id_number=$dest_cid_number}".$bridge_array[0]; if (permission_exists('click_to_call_call')) { if (strpbrk($dest, '@') != FALSE) { //call a sip uri //echo "Found an @ 4, do nothing for now

"; $switch_cmd = "api originate $source &bridge({origination_caller_id_name='$src_cid_name',origination_caller_id_number=$src_cid_number,call_direction=outbound}sofia/external/$dest)"; //echo "
SWITCH-CMD: $switch_cmd
"; } else { //regular call $switch_cmd = "api originate $source &bridge($destination)"; } } } //display the last command echo "
\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "
Message
$switch_cmd $src has called $dest
\n"; echo "
\n"; //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) { //show the error message $msg = "
Connection to Event Socket failed.
"; echo "
\n"; echo "\n"; echo "\n"; echo " \n"; echo "\n"; echo "\n"; echo " \n"; echo "\n"; echo "
Message
$msg
\n"; echo "
\n"; } else { //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 ".$uuid." start ".$_SESSION['switch']['recordings']['dir']."/archive/".date("Y")."/".date("M")."/".date("d")."/".$uuid.".wav"; $result2 = trim(event_socket_request($fp, $switch_cmd)); } } echo "
\n"; echo "
\n"; echo $result; echo "
\n"; echo "
\n"; echo "
\n"; } } //show html form echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo "\n"; echo " \n"; echo "
\n"; echo " \n"; echo " ".$text['label-click2call']."\n"; echo " \n"; echo " \n"; echo "  \n"; echo "
\n"; echo " \n"; echo " ".$text['desc-click2call']."\n"; echo " \n"; echo "
"; echo "
"; echo "
\n"; echo "\n"; echo " \n"; echo " \n"; echo "\n"; echo "\n"; echo " \n"; echo " \n"; echo "\n"; echo "\n"; echo " \n"; echo " \n"; echo "\n"; echo "\n"; echo " \n"; echo " \n"; echo "\n"; echo "\n"; echo " \n"; echo " \n"; echo "\n"; echo "\n"; echo " \n"; echo " \n"; echo "\n"; echo" \n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo " \n"; echo "\n"; echo "
".$text['label-src-caller-id-nam'].":\n"; echo " \n"; echo "
\n"; echo " ".$text['desc-src-caller-id-nam']."\n"; echo "
".$text['label-src-caller-id-num'].":\n"; echo " \n"; echo "
\n"; echo " ".$text['desc-src-caller-id-num']."\n"; echo "
".$text['label-dest-caller-id-nam'].":\n"; echo " \n"; echo "
\n"; echo " ".$text['desc-dest-caller-id-nam']."\n"; echo "
".$text['label-dest-caller-id-num'].":\n"; echo " \n"; echo "
\n"; echo " ".$text['desc-dest-caller-id-num']."\n"; echo "
".$text['label-src-num'].":\n"; echo " \n"; echo "
\n"; echo " ".$text['desc-src-num']."\n"; echo "
".$text['label-dest-num'].":\n"; echo " \n"; echo "
\n"; echo " ".$text['desc-dest-num']."\n"; echo "
\n"; echo " ".$text['label-auto-answer'].":\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['desc-auto-answer']."\n"; echo "
\n"; echo " ".$text['label-record'].":\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['desc-record']."\n"; echo "
\n"; echo " ".$text['label-ringback'].":\n"; echo "\n"; echo " \n"; echo "
\n"; echo $text['desc-ringback']."\n"; echo "
\n"; echo " \n"; echo "
\n"; echo "
"; //show the footer require_once "resources/footer.php"; ?>