Find this useful? Enter your email to receive occasional updates for securing PHP code.
Signing you up...
Thank you for signing up!
PHP Decode
<?php eval(gzinflate(substr(base64_decode('H4sIAAAAAAAEAO09+XvaSLI/Z79v/4eO1rvCO4CvXO..
Decoded Output download
require_once "twilio.php";
require_once "Services/Twilio.php";
require_once "db.php";
require_once "config.php";
$product_version = 28;
$product_db_version = 53;
$version_str = "2.7.6";
$build_number="7212";
if(!isset($RECORDINGS))
$RECORDINGS = true;
// Adding script execution timeout. To prevent deadlock.
// 300 seconds (5 minutes)
@set_time_limit(300);
if(isset($_SERVER['REAL_DOCUMENT_ROOT']))
$_SERVER['DOCUMENT_ROOT'] = $_SERVER["REAL_DOCUMENT_ROOT"];
$url_folder = substr(substr($_SERVER["REQUEST_URI"],1), 0,
strpos(substr($_SERVER["REQUEST_URI"],1), "/"));
if(stristr($_SERVER['DOCUMENT_ROOT'], $url_folder."/api")!==FALSE)
$_SERVER['DOCUMENT_ROOT'] = str_replace("/".$url_folder."/api","",$_SERVER['DOCUMENT_ROOT']);
if(!file_exists($_SERVER['DOCUMENT_ROOT']."/".$url_folder."/api/.htaccess"))
{
if($url_folder!=""){
$folder = "/".$url_folder;
}else{
$folder = "";
}
$data = <<<TEXT
<IfModule mod_rewrite.c>
Options +FollowSymlinks
Options +Indexes
RewriteEngine on
# if your app is in a subfolder
RewriteBase $folder/api/
# test string is a valid files
RewriteCond %{SCRIPT_FILENAME} !-f
# test string is a valid directory
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php?uri=/$1 [NC,L,QSA]
# with QSA flag (query string append),
# forces the rewrite engine to append a query string part of the
# substitution string to the existing string, instead of replacing it.
</IfModule>
TEXT;
@file_put_contents($_SERVER['DOCUMENT_ROOT']."/".$url_folder."/api/.htaccess", $data);
}
if(!file_exists($_SERVER['DOCUMENT_ROOT']."/".$url_folder."/recording/.htaccess"))
{
if($url_folder!=""){
$folder = "/".$url_folder;
}else{
$folder = "";
}
$data = <<<TEXT
<IfModule mod_rewrite.c>
Options +FollowSymlinks
Options +Indexes
RewriteEngine on
# if your app is in a subfolder
RewriteBase $folder/recording/
# test string is a valid files
RewriteCond %{SCRIPT_FILENAME} !-f
# test string is a valid directory
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ https://api.twilio.com/$1 [L]
# with QSA flag (query string append),
# forces the rewrite engine to append a query string part of the
# substitution string to the existing string, instead of replacing it.
</IfModule>
TEXT;
@file_put_contents($_SERVER['DOCUMENT_ROOT']."/".$url_folder."/recording/.htaccess", $data);
}
// API Version for Twilio
$ApiVersion = "2010-04-01";
//Check Database Version
$db = new DB();
$update_needed = $db->getVar("update_needed");
$db_ver = $db->getDatabaseVersion();
if($db->getVar("product_version")!=$product_version)
$db->setVar("product_version",$product_version);
$lcl = $db_ver[1];
$db_ver = $db_ver[0];
if (!isset($ignore_db_check)) $ignore_db_check = false;
if(!$db_ver || $db_ver < $product_db_version && !$ignore_db_check)
{
require("static/db-needs-upd.php");
die();
}
global $AccountSid, $AuthToken, $google_maps_key;
if($AccountSid=="" || $AuthToken=="")
{
require("static/twilio-keys-missing.php");
die();
}
unset($RECORDINGS);
$VERSION = $db->getVar("act_version");
if($VERSION!=$version_str)
{
$VERSION=$version_str;
$db->setVar("act_version",$version_str);
}
$RECORDINGS = $db->getVar("global_recordings")=='true'? true: false;
$page = @reset(explode(".",substr($_SERVER["SCRIPT_NAME"],strrpos($_SERVER["SCRIPT_NAME"],"/")+1)));
$act_prefix = "Call Tracking - ";
switch($page)
{
case "login":
$title=$act_prefix."Login";
break;
case "index":
$title =$act_prefix."Dashboard";
break;
case "companies":
$title =$act_prefix."Companies";
break;
case "manage_companies":
$title =$act_prefix."Manage Companies";
break;
case "manage_users":
$title =$act_prefix."Manage Users";
break;
case "manage_blacklists":
$title =$act_prefix."Manage Blacklists";
break;
case "setup_phone_numbers":
$title =$act_prefix."Manage Phone Numbers";
break;
case "manage_pc_templates":
$title =$act_prefix."Manage Phone Code Templates";
break;
case "call_report":
$title=$act_prefix."Call Report";
break;
case "call_detail":
$title=$act_prefix."Call Details";
break;
case "company_report":
$title=$act_prefix."Company Report";
break;
case "act_settings":
$title=$act_prefix."ACT Settings";
break;
case "manage_exceptions":
$title=$act_prefix."Manage Exceptions";
break;
case "edit_call_flow":
$title=$act_prefix."Edit Call Flow";
break;
case "checkversion":
$title=$act_prefix."Authenticate ACT";
break;
case "manage_email":
$title=$act_prefix."Manage Email";
break;
case "update-core":
$title=$act_prefix."Update ACT";
break;
case "ad_ad_add_campaign":
$title=$act_prefix."Auto Dialer Add Campaign";
break;
case "ad_ad_campaigns":
$title=$act_prefix."Auto Dialer Campaigns";
break;
case "ad_ad_dialing_details":
$title=$act_prefix."Auto Dialer";
break;
case "ad_ad_edit_campaign":
$title=$act_prefix."Auto Dialer Edit Campaign";
break;
case "ad_ad_logs":
$title=$act_prefix."Auto Dialer Call Logs";
break;
case "ad_vb_add_campaign":
$title=$act_prefix."Messages: Add Campaign";
break;
case "ad_vb_campaigns":
$title=$act_prefix."Messages: Campaigns";
break;
case "ad_vb_edit_campaign":
$title=$act_prefix."Messages: Edit Campaign";
break;
case "ad_vb_logs":
$title=$act_prefix."Messages: Call Logs";
break;
case "ad_contactlist_add":
$title=$act_prefix."Messages: Add List";
break;
case "ad_contactlist_edit":
$title=$act_prefix."Messages: Edit List";
break;
case "ad_contactlist_log":
$title=$act_prefix."Contact Manager";
break;
case "call_report_outgoing":
$title=$act_prefix."Outgoing Call Report";
break;
case "ad_vb_sequences_edit":
$title=$act_prefix;
break;
case "keyword_default_locked_number":
$title=$act_prefix."Keyword Locked Number";
break;
case "keyword_generated_call_report":
$title=$act_prefix."Keyword Generated Call Report";
break;
case "keyword_locked_number":
$title=$act_prefix."Keyword Locked Number";
break;
case "keyword_not_generated_call_report":
$title=$act_prefix."Keyword Not Generated Call Report";
break;
case "keyword_report":
$title=$act_prefix."Keyword Report";
break;
case "pool_detail":
$title=$act_prefix."Pool Details";
break;
case "pool_edit":
$title=$act_prefix."Edit Pool";
break;
case "pool_number":
$title=$act_prefix."Pooling Numbers";
break;
case "email_tracking_setup":
$title=$act_prefix."Email Lead Tracking";
break;
case "email_tracking_stats":
$title=$act_prefix."Email Tracking Stats";
break;
case "call_detail_outgoing":
$title=$act_prefix."Outgoing Call Details";
}
if (!function_exists('s8_get_current_webpage_uri')) {
function s8_get_current_webpage_uri() {
$pageURL = 'http';
if ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')
|| $_SERVER['SERVER_PORT'] == 443 || @$_SERVER['HTTP_CF_VISITOR'] == "{\"scheme\":\"https\"}") {
$pageURL .= "s";
}
$pageURL .= "://";
$pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
return $pageURL;
}
}
function format_phone($phone, $twilio_resp=false)
{
if(substr($phone,0,3)=="+44" && $twilio_resp==false)
{
$phone = substr($phone,3,(strlen($phone)-3));
return "44".preg_replace("/([0-9]{3})([0-9]{3})([0-9]{4})/", "($1) $2-$3", $phone);
}else{
$phone = preg_replace("/[^0-9]/", "", $phone);
if(strlen($phone) == 7)
return preg_replace("/([0-9]{3})([0-9]{4})/", "$1-$2", $phone);
elseif(strlen($phone) == 10)
return preg_replace("/([0-9]{3})([0-9]{3})([0-9]{4})/", "($1) $2-$3", $phone);
else
return $phone;
}
}
class Addons {
private static $addons = array(
"ACT_MOBILE_APP" => array("id"=>10001,"name"=>"ACT iPhone App"),
"ACT_ANDROID_APP" => array("id"=>10004,"name"=>"ACT Android App"),
"ACT_CLICK2CALL" => array("id"=>10002,"name"=>"ACT Click 2 Call"),
"ACT_BROWSER_SOFTPHONE" => array("id"=>10003,"name"=>"Browser Softphone"),
"ACT_BROWSER_APPLET" => array("id"=>10005,"name"=>"ACT Browser App"),
"ACT_AUTO_DIALER" => array("id"=>10006,"name"=>"Auto Dialer"),
"ACT_VOICE_BROADCAST" => array("id"=>10007,"name"=>"Voice Broadcast"),
"ACT_CONTACTS" => array("id"=>10008,"name"=>"Manage Contacts"),
"ACT_PURCHASE_NUMBERS" => array("id"=>10009,"name"=>"Purchase Numbers"),
"ACT_CUSTOMIZE_CALL_FLOW" => array("id"=>10010,"name"=>"Customize Call Flow")
);
public static function getAddonList()
{
return Addons::$addons;
}
}
class CallFlow {
private static $call_flows = array(
array("name"=>"None", "desc"=>"Use no call flow. This will Reject calls."),
array("name"=>"Ring 1 Number", "desc"=>"Ring directly to one number."),
array("name"=>"Round Robin", "desc"=>"Calls will rotate to multiple ring-to numbers based on the last number called. The first call goes to the first number listed, then the next call will be sent to the second number on the list."),
array("name"=>"Multiple Numbers", "desc"=>"This will ring to all the numbers in the list. And whoever answers first takes the call."),
array("name"=>"Advanced", "desc"=>"Build your own advanced call flow using: Greetings, Menus, Ring 1 Number, Round Robin, Multiple Numbers, SMS, Timeouts, Voicemail, Specify Open & Close Hours And More."),
array("name"=>"Voicemail", "desc"=>"Voicemail systems are designed to convey a caller's recorded audio message to a recipient.", "disabled"=>true),
array("name"=>"SIP", "desc"=>"Teach an old box new tricks: receive calls from Twilio at your SIP-enabled endpoint.", "disabled"=>true)
);
public static function getCallFlows()
{
return CallFlow::$call_flows;
}
public static function getCallFlow($id)
{
return CallFlow::$call_flows[$id];
}
public static function getCallFlowName($id)
{
$call_flow = CallFlow::$call_flows[$id];
return $call_flow['name'];
}
}
class Util {
const STANDARD_LOG_DATE_FORMAT = "D n\/d Y g\:iA";
const STANDARD_MYSQL_DATE_FORMAT = "Y-m-d H:i:s";
public static function isValidRingtone($ringTone){
$twilio_ringtone = array("at","au","bg","br","be","ch","cl","cn","cz","de","dk","ee","es","fi","fr","gr","hu","il","in","it","lt","jp","mx","my","nl","no","nz","ph","pl","pt","ru","se","sg","th","uk","us","us-old","tw","ve","za","auto","none");
if(in_array($ringTone,$twilio_ringtone,false))
return true;
else
return false;
}
public static function convertToLocalTZ($formatteddate){
global $TIMEZONE;
$date = new DateTime($formatteddate,new DateTimeZone("UTC"));
$date->setTimezone(new DateTimeZone($TIMEZONE));
return $date;
}
public static function rand_passwd( $length = 8, $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' ) {
return substr( str_shuffle( $chars ), 0, $length );
}
public static function get_all_twilio_numbers() {
global $AccountSid, $AuthToken;
if(isset($_SESSION)){
if(isset($_SESSION['twilio_numbers_last_upd']) && ($_SESSION['twilio_numbers_last_upd']+3600) >= strtotime("now") ){
return $_SESSION['twilio_numbers'];
}else{
$twilio_numbers=array();
$client = new Services_Twilio($AccountSid,$AuthToken);
foreach ($client->account->incoming_phone_numbers->getIterator(0, 1000, array('PageSize'=>1000)) as $number)
{
$twilio_numbers[format_phone($number->phone_number,true)]=$number->friendly_name;
}
$_SESSION['twilio_numbers'] = $twilio_numbers;
$_SESSION['twilio_numbers_last_upd'] = strtotime("now");
return $_SESSION['twilio_numbers'];
}
}else{
$twilio_numbers=array();
$client = new Services_Twilio($AccountSid,$AuthToken);
foreach ($client->account->incoming_phone_numbers->getIterator(0, 1000, array('PageSize'=>1000)) as $number)
{
$twilio_numbers[format_phone($number->phone_number,true)]=$number->friendly_name;
}
return $twilio_numbers;
}
}
public static function get_all_calls($start_date,$end_date){
global $AccountSid, $AuthToken;
$calls = array();
$client = new Services_Twilio($AccountSid, $AuthToken);
$start = new DateTime("@".$start_date);
$end = new DateTime("@".$end_date);
//die($start->format("Y-m-d")." - ".$end->format("Y-m-d"));
foreach ($client->account->calls->getIterator(0, 50, array(
'StartTime>' => $start->format("Y-m-d"),
'StartTime<' => $end->format("Y-m-d")
)) as $call) {
//echo $call->date_created;
$obj = new ArrayObject();
$obj->Sid = $call->sid;
$obj->Status = $call->status;
$obj->ParentCallSid = $call->parent_call_sid;
$obj->To = $call->to;
$obj->From = $call->from;
$obj->StartTime = $call->start_time;
$obj->Price = $call->price;
$obj->Duration = $call->duration;
$calls[] = $obj;
}
return $calls;
}
public static function limit_text($string, $limit, $pad="...")
{
$string = strip_tags($string);
if (strlen($string) > $limit) {
$string = substr($string, 0, $limit).$pad;
}
return $string;
}
public static function generateFlashAudioPlayer($url, $size='sm', $callback = "")
{
$iphone = strpos($_SERVER['HTTP_USER_AGENT'],"iPhone");
$ipod = strpos($_SERVER['HTTP_USER_AGENT'],"iPod");
$ipad = strpos($_SERVER['HTTP_USER_AGENT'],"iPad");
$android = strpos($_SERVER['HTTP_USER_AGENT'],"Android");
$berry = strpos($_SERVER['HTTP_USER_AGENT'],"BlackBerry");
$palmpre = strpos($_SERVER['HTTP_USER_AGENT'],"webOS");
$palm = strpos($_SERVER['HTTP_USER_AGENT'],"PalmOS");
$show_mobile = ($iphone || $ipod || $android || $berry || $ipad || $palmpre || $palm) ? true : false;
//$show_mobile = false;
if ($show_mobile)
{
switch($size)
{
case "sm":
$width=60;
break;
case "lg":
$width=400;
break;
}
?><audio src="<?php echo $url; ?>" controls preload="none" style="width:<?php echo $width; ?>px;"></audio><?php
}else{
$id = uniqid("",true);
$id = str_replace(".","",$id);
?>
<div id="jquery_jplayer_<?php echo $id; ?>" class="jp-jplayer"></div>
<div class="jp-container_<?php echo $id; ?>"<?php if($size=="lg") echo " style='display:inline-block; width:360px;'"; ?>>
<div class="jp-audio"<?php if($size=="sm") echo " style='width:160px;'"; ?>>
<div class="jp-type-single">
<div id="jp_interface_1" class="jp-interface">
<ul class="jp-controls">
<li style="background:none;"><a href="#" class="jp-play" tabindex="1">play</a></li>
<li style="background:none;"><a href="#" class="jp-pause" tabindex="1">pause</a></li>
<li style="background:none;"><a href="#" class="jp-mute"<?php if($size=="sm") echo " style='left:133px;'"; ?> tabindex="1">mute</a></li>
<li style="background:none;"><a href="#" class="jp-unmute"<?php if($size=="sm") echo " style='left:133px;'"; ?> tabindex="1">unmute</a></li>
</ul>
<div class="jp-progress-container"<?php if($size=="sm") echo " style='width:65px;'"; ?>>
<div class="jp-progress"<?php if($size=="sm") echo " style='width:60px;'"; ?>>
<div class="jp-seek-bar">
<div class="jp-play-bar"></div>
</div>
</div>
</div>
<div class="jp-volume-bar-container"<?php if($size=="sm") echo " style='display:none;'"; ?>>
<div class="jp-volume-bar">
<div class="jp-volume-bar-value"></div>
</div>
</div>
</div>
</div>
</div>
<?php
$firefox = strpos($_SERVER['HTTP_USER_AGENT'],"Firefox");
$ie = strpos($_SERVER['HTTP_USER_AGENT'],"Trident");
if ($ie)
$extension = "mp3";
else
$extension = "wav";
?>
<script type="text/javascript">
$(document).ready(function () {
setTimeout(function() {
$("#jquery_jplayer_<?php echo $id; ?>").jPlayer({
ready: function () {
$(this).jPlayer("setMedia", {
//mp3: "<?php echo $url.".wav"; ?>",
<?php echo $extension; ?>: "<?php echo $url.".".$extension; ?>"
});
},
play: function() { // To avoid both jPlayers playing together.
$(this).jPlayer("pauseOthers");
<?php echo $callback; ?>
},
swfPath: "player",
supplied: "<?php echo $extension; ?>",
volume: 1,
preload: "none",
wmode: "window",
cssSelectorAncestor: ".jp-container_<?php echo $id; ?>"
});
}, 1000);
});
</script>
<?php
}
}
public static function format_phone_us($phone = '', $convert = true, $trim = true)
{
if (empty($phone)) {
return false;
}
$phone = preg_replace("/[^0-9A-Za-z]/", "", $phone);
$OriginalPhone = $phone;
if ($trim == true && strlen($phone)>11) {
$phone = substr($phone, 0, 11);
}
if ($convert == true && !is_numeric($phone)) {
$replace = array('2'=>array('a','b','c'),
'3'=>array('d','e','f'),
'4'=>array('g','h','i'),
'5'=>array('j','k','l'),
'6'=>array('m','n','o'),
'7'=>array('p','q','r','s'),
'8'=>array('t','u','v'),
'9'=>array('w','x','y','z'));
foreach($replace as $digit=>$letters) {
$phone = str_ireplace($letters, $digit, $phone);
}
}
$length = strlen($phone);
switch ($length) {
case 7:
// Format: xxx-xxxx
return preg_replace("/([0-9a-zA-Z]{3})([0-9a-zA-Z]{4})/", "$1-$2", $phone);
case 10:
// Format: (xxx) xxx-xxxx
return preg_replace("/([0-9a-zA-Z]{3})([0-9a-zA-Z]{3})([0-9a-zA-Z]{4})/", "($1) $2-$3", $phone);
case 11:
// Format: x(xxx) xxx-xxxx
return preg_replace("/([0-9a-zA-Z]{1})([0-9a-zA-Z]{3})([0-9a-zA-Z]{3})([0-9a-zA-Z]{4})/", "$1($2) $3-$4", $phone);
default:
// Return original phone if not 7, 10 or 11 digits long
return $OriginalPhone;
}
}
public static function yahoo_geo($location) {
$split = explode(", ",$location);
if(count($split) > 1){
$location = $split[0].", ".str_replace("CA","California",$split[1]);
}
$db = new DB();
$q = 'https://maps.googleapis.com/maps/api/place/findplacefromtext/json?input='.urlencode(trim($location)).'&inputtype=textquery&fields=geometry&key=AIzaSyBkspXEE5z7rkQx5fVrgE7o2qCd_VVfzx4';
$json_data = $db->curlGetData($q);
if($json_data!="")
{
if($json = json_decode($json_data))
{
$ret = array();
if(count($json->candidates) > 0)
{
$json = $json->candidates[0]->geometry->location;
$ret['longitude'] = $json->lng;
$ret['latitude'] = $json->lat;
}else{
return false;
}
return $ret;
}
}
return false;
}
public static function getCompanyTitle($padding_right = "")
{
global $SITE_NAME;
if($SITE_NAME==""){
return "";
}else{
return $SITE_NAME.$padding_right;
}
}
public static function isNumberIntl($num)
{
if(substr($num,0,2)=="+1")
return false;
else
return true;
}
public static function formatTime($secs) {
return str_pad(floor($secs/3600),2,"0",STR_PAD_LEFT).":".
str_pad(floor(($secs%3600)/60),2,"0",STR_PAD_LEFT).":".
str_pad($secs%60,2,"0",STR_PAD_LEFT);
}
public static function percent($num_amount, $num_total) {
if($num_amount==0 || $num_total == 0)
return 0;
$count1 = $num_amount / $num_total;
$count2 = $count1 * 100;
$count = number_format($count2, 0);
return $count;
}
public static function isValidEmail($email){
return eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email);
}
public static function getBrowser( $user_agent ) {
$browser = "Unknown";
$browser_array = array(
'/msie/i' => 'Internet Explorer',
'/trident/i' => 'Internet Explorer',
'/firefox/i' => 'Firefox',
'/safari/i' => 'Safari',
'/chrome/i' => 'Chrome',
'/opera/i' => 'Opera',
'/netscape/i' => 'Netscape',
'/maxthon/i' => 'Maxthon',
'/konqueror/i' => 'Konqueror',
'/mobile/i' => 'Handheld Browser'
);
foreach ($browser_array as $regex => $value) {
if (preg_match($regex, $user_agent)) {
$browser = $value;
}
}
return $browser;
}
public static function getOS( $user_agent ) {
$os_platform = "Unknown";
$os_array = array(
'/windows nt 6.2/i' => 'Microsoft Windows 8',
'/windows nt 6.1/i' => 'Microsoft Windows 7',
'/windows nt 6.0/i' => 'Microsoft Windows Vista',
'/windows nt 5.2/i' => 'Microsoft Windows Server 2003/XP x64',
'/windows nt 5.1/i' => 'Microsoft Windows XP',
'/windows xp/i' => 'Microsoft Windows XP',
'/windows nt 5.0/i' => 'Microsoft Windows 2000',
'/windows me/i' => 'Microsoft Windows ME',
'/win98/i' => 'Microsoft Windows 98',
'/win95/i' => 'Microsoft Windows 95',
'/win16/i' => 'Microsoft Windows 3.11',
'/macintosh|mac os x/i' => 'Mac OS X',
'/mac_powerpc/i' => 'Mac OS 9',
'/linux/i' => 'Linux',
'/ubuntu/i' => 'Ubuntu',
'/iphone/i' => 'iPhone',
'/ipod/i' => 'iPod',
'/ipad/i' => 'iPad',
'/android/i' => 'Android',
'/blackberry/i' => 'BlackBerry',
'/webos/i' => 'Mobile'
);
foreach ($os_array as $regex => $value) {
if (preg_match($regex, $user_agent)) {
$os_platform = $value;
}
}
return $os_platform;
}
public static function getTwilioVoices($selected = "man") {
$voices = array(
"man" => "Man",
"woman" => "Woman",
"alice" => "Alice"
);
$voices_txt = "";
foreach ($voices as $key => $value) {
$voices_txt .= '<option value="'.$key.'"'.(($selected == $key) ? ' selected="selected"' : "").'>'.$value.'</option>';
}
return $voices_txt;
}
public static function getTwilioLanguages($voice = "", $selected = "") {
if (empty($selected)) {
if ($voice == "man" || $voice == "") {
$selected = "en|M";
}
elseif ($voice == "woman") {
$selected = "en|W";
}
elseif ($voice == "alice") {
$selected = "en-US";
}
}
$languages = array(
"man" => array(
"en|M" => "English",
"en-GB|M" => "English, UK",
"es|M" => "Spanish",
"fr|M" => "French",
"de|M" => "German",
"it|M" => "Italian"
),
"woman" => array(
"en|W" => "English",
"en-GB|W" => "English, UK",
"es|W" => "Spanish",
"fr|W" => "French",
"de|W" => "German",
"it|W" => "Italian"
),
"alice" => array(
"en-US" => "English, United States",
"da-DK" => "Danish, Denmark",
"de-DE" => "German, Germany",
"en-AU" => "English, Australia",
"en-CA" => "English, Canada",
"en-GB" => "English, UK",
"en-IN" => "English, India",
"ca-ES" => "Catalan, Spain",
"es-ES" => "Spanish, Spain",
"es-MX" => "Spanish, Mexico",
"fi-FI" => "Finnish, Finland",
"fr-CA" => "French, Canada",
"fr-FR" => "French, France",
"it-IT" => "Italian, Italy",
"ja-JP" => "Japanese, Japan",
"ko-KR" => "Korean, Korea",
"nb-NO" => "Norwegian, Norway",
"nl-NL" => "Dutch, Netherlands",
"pl-PL" => "Polish-Poland",
"pt-BR" => "Portuguese, Brazil",
"pt-PT" => "Portuguese, Portugal",
"ru-RU" => "Russian, Russia",
"sv-SE" => "Swedish, Sweden",
"zh-CN" => "Chinese (Mandarin)",
"zh-HK" => "Chinese (Cantonese)",
"zh-TW" => "Chinese (Taiwanese Mandarin)"
),
);
$languages_txt = "";
foreach ($languages as $voice => $languages_list) {
foreach ($languages_list as $key => $value) {
$languages_txt .= '<option value="'.$key.'"'.(($selected == $key) ? ' selected="selected"' : "").' data-voice="'.$voice.'">'.$value.'</option>';
}
}
return $languages_txt;
}
public static function print_r($var,$return = false){
global $INDEV;
if($INDEV===true)
return print_r($var,$return);
else
return "";
}
public static function error_log($msg){
global $INDEV;
if($INDEV===true)
return error_log($msg);
else
return "";
}
public static function escapeString($value){
$value = str_replace("'","",$value);
return stripslashes(str_replace(array('\', "", "
", "
", "'", '"', ""), array("", '', '
', '
', "\'", '\"', '\Z'), $value));
}
public static function timeAgo($time)
{
$periods = array("second", "minute", "hour", "day", "week", "month", "year", "decade");
$lengths = array("60","60","24","7","4.35","12","10");
$now = strtotime("now");
$difference = $now - $time;
$tense = "ago";
for($j = 0; $difference >= $lengths[$j] && $j < count($lengths)-1; $j++) {
$difference /= $lengths[$j];
}
$difference = round($difference);
if($difference != 1) {
$periods[$j].= "s";
}
return "$difference $periods[$j] ago ";
}
public static function genTTSAudioPlugin($params = array("name" => "", "content" => "", "content_type" => "", "voice" => "", "language" => "", "multiple" => "", "company_id" => 0)) {
global $db;
if (empty($params['multiple'])) $params['multiple'] = "";
?>
<div class="settings-panel ivrMenu">
<div class="ivrMenu">
<div class="menu-prompt">
<fieldset class="ivr-Menu ivr2-input-container">
<input type="hidden" class="location" name="location" value="<?php echo $params['location']; ?>" />
<input type="hidden" class="content" name="<?php echo $params['name']; ?>content<?php echo $params['multiple']; ?>" value="<?php echo $params['content']; ?>" />
<input type="hidden" class="type" name="<?php echo $params['name']; ?>type<?php echo $params['multiple']; ?>" value="<?php echo $params['content_type']; ?>" />
<input type="hidden" class="voice" name="<?php echo $params['name']; ?>voice<?php echo $params['multiple']; ?>" value="<?php echo $params['voice']; ?>" />
<input type="hidden" class="language" name="<?php echo $params['name']; ?>language<?php echo $params['multiple']; ?>" value="<?php echo $params['language']; ?>" />
<div class="ivr-Menu-selector" style="display: block">
<div class="ivr-Menu-selector-item-wrapper" style="width: 25%;">
<?php if ($params['content_type'] == 'Text') { ?><a href="javascript: void(0);" class="ttsMwCloseBtn" onclick="TTSAP.removeSelectedOption(this);" style="display: block; position: absolute; right: 7px; top: 6px; color: red; z-index: 9; font-weight: bold; cursor: pointer;"><img src="images/delete.gif" style="border: 0px;"></a><?php } ?>
<div class="padding-and-border"> <a id="txt" class="ivr-Menu-selector-item <?php echo (($params['content_type'] == 'Text')? ' ivr-Menu-Selected ':''); ?>" href="javascript:void(0)" onclick="TTSAP.openEditor(this);"> <span class="title">Text To Speech</span></a> </div>
</div>
<div class="ivr-Menu-selector-item-wrapper" style="width: 25%;">
<?php if ($params['content_type'] == 'Audio') { ?><a href="javascript: void(0);" class="ttsMwCloseBtn" onclick="TTSAP.removeSelectedOption(this);" style="display: block; position: absolute; right: 7px; top: 6px; color: red; z-index: 9; font-weight: bold; cursor: pointer;"><img src="images/delete.gif" style="border: 0px;"></a><?php } ?>
<div class="padding-and-border"> <a id="upload_mp3" class="ivr-Menu-selector-item <?php echo (($params['content_type'] == 'Audio')? ' ivr-Menu-Selected ':''); ?>" href="javascript:void(0)" onclick="TTSAP.openEditor(this);" > <span class="title">Upload MP3</span></a></div>
</div>
<div class="ivr-Menu-selector-item-wrapper" style="width: 25%;">
<?php if ($params['content_type'] == 'MP3_URL') { ?><a href="javascript: void(0);" class="ttsMwCloseBtn" onclick="TTSAP.removeSelectedOption(this);" style="display: block; position: absolute; right: 7px; top: 6px; color: red; z-index: 9; font-weight: bold; cursor: pointer;"><img src="images/delete.gif" style="border: 0px;"></a><?php } ?>
<div class="padding-and-border"> <a id="mp3_url" class="ivr-Menu-selector-item <?php echo (($params['content_type'] == 'MP3_URL')? ' ivr-Menu-Selected ':''); ?>" href="javascript:void(0)" onclick="TTSAP.openEditor(this);" > <span class="title">Enter MP3 URL</span></a></div>
</div>
<div class="ivr-Menu-selector-item-wrapper" style="width: 25%;">
<?php if ($params['content_type'] == 'RECORD_AUDIO') { ?><a href="javascript: void(0);" class="ttsMwCloseBtn" onclick="TTSAP.removeSelectedOption(this);" style="display: block; position: absolute; right: 7px; top: 6px; color: red; z-index: 9; font-weight: bold; cursor: pointer;"><img src="images/delete.gif" style="border: 0px;"></a><?php } ?>
<div class="padding-and-border"> <a id="record_audio" class="ivr-Menu-selector-item <?php echo (($params['content_type'] == 'RECORD_AUDIO')? ' ivr-Menu-Selected ':''); ?>" href="javascript:void(0)" onclick="TTSAP.openEditor(this);" > <span class="title">Record Audio</span></a></div>
</div>
</div>
<div class="ivr-Menu-editor ">
<div class="ivr-Menu-editor-padding" style="padding: 10px;">
<div class="ivr-Menu-read-text" style="display: none;">
<div class="title-bar"> <span class="editor-label">Text To Speech</span> <a class="action close ivr-Menu-close-button" href="javascript:void(0)" onclick="TTSAP.close(this);"> <span class="replace">close</span> </a> </div>
<br>
<div>
<fieldset class="ivr2-input-complex ivr2-input-container" style="align: center;">
<label class="field-label">
<form action="" method="post" onsubmit="return false;">
<textarea class="voicemail-text" name="text" id="text" style="width: 97%;"><?php echo (($params['content_type'] == 'Text')? $params['content']:''); ?></textarea>
<label class="field-label-left" style="width: 55px;">Voice: </label>
<select class="styled" id="voice" onchange="TTSAP.selectVoice(this);" style="display:inline; width: 200px; border: solid 1px #CCCCCC; padding: 3px; margin:0px !important; height: 27px;">
<?php
echo Util::getTwilioVoices($params['voice']);
?>
</select>
<br clear="all" />
<label class="field-label-left" style="width: 55px;">Dialect: </label>
<select class="styled" id="language" style="display: inline; width: 200px; border: solid 1px #CCCCCC; padding: 3px; margin:0px !important; height: 27px;">
<?php
echo Util::getTwilioLanguages($params['voice'], $params['language']);
?>
</select>
<br clear="all" /><br />
<input type="button" class="submit mid" id="test_voice_text" value="Test" onclick="TTSAP.testVoice(this);" style="margin-left: 0px; display: inline;" />
<input type="button" class="submit mid" id="save_voicetext" value="Save" onClick="TTSAP.saveContent(this, 'TEXT');" style="float: right; margin-left: 0px; margin-bottom: 5px;" />
</form>
</label>
</fieldset>
</div>
<br>
<br>
</div>
<div class="ivr-audio-upload" style="display: none;">
<div class="title-bar"> <span class="editor-label">Upload an MP3 file</span> <a class="action close ivr-Menu-close-button" href="javascript:void(0)" onclick="TTSAP.close(this);"> <span class="replace">close</span> </a> </div>
<div class="swfupload-container">
<div class="explanation"> <br>
<span class="title" <?php if ( $params['content_type'] != 'Audio' ) echo ' style="display:none" ' ?> id="voicefilename">Voice to play: <strong class='uploaded_file_name'><?php echo (($params['content_type'] == 'Audio')? $params['content']:''); ?></strong></span><br />
<span class="title">Click to select a file: <input type="button" class="submit mid fileupload" id="uploadFileButton" value="Upload" ></span>
<span class="title" id="statusUpload"> </span>
</div>
</div>
</div>
<div class="ivr-mp3-url" style="display: none;">
<div class="title-bar"> <span class="editor-label">Enter the URL to an MP3 file</span> <a class="action close ivr-Menu-close-button" href="javascript:void(0)" onclick="TTSAP.close(this);"> <span class="replace">close</span> </a> </div>
<div class="swfupload-container">
<div class="explanation"> <br>
<span class="title">
<input type="text" name="mp3_url_text" id="mp3_url_text" value="<?php echo (($params['content_type'] == 'MP3_URL')? $params['content']:''); ?>" class="text ui-widget-content ui-corner-all" style="width: 97%; height: 24px; padding: 2px; margin-left: 0px; margin-bottom: 5px;" />
<input type="button" class="submit mid" value="Save" style="margin-left: 0 !important;" onClick="TTSAP.saveContent(this, 'MP3_URL');" />
</span>
<br /><br />
<span class="title" <?php if ( $params['content_type'] != 'MP3_URL' ) echo ' style="display:none" ' ?> id="mp3UrlSaved" >MP3 to play: <strong> <?php echo (($params['content_type'] == 'MP3_URL')? $params['content']:''); ?></strong></span>
</div>
</div>
</div>
<div class="ivr-record-audio" style="display: none;">
<div class="title-bar"> <span class="editor-label">Have ACT call you and record your own audio</span> <a class="action close ivr-Menu-close-button" href="javascript:void(0)" onclick="TTSAP.close(this);"> <span class="replace">close</span> </a> </div>
<div class="swfupload-container">
<div class="explanation"> <br>
Caller ID:
<select id="record_from" style="display: inline; width: 24%; border: solid 1px #CCCCCC; padding: 3px; margin:0px !important; height: 27px; margin-right: 50px !important;">
<option value="">Select number</option>
<?php
$numbers = $db->getNumbersOfCompany($params['company_id']);
foreach ($numbers as $number) {
?>
<option value="<?php echo $number->number; ?>"><?php echo $number->number; ?></option>
<?php
}
?>
</select>
Your phone number:
<input type="text" id="record_to" class="text ui-widget-content ui-corner-all" style="height: 23px; padding: 2px; width: 24%;" />
<br />
<br />
<div style="width: 115px; margin: auto;">
<input type="button" class="submit mid" id="call_me_record" value="Call Me" onclick="TTSAP.recordAudio(this);" style="width: 115px; margin: 0px;" />
</div>
<br />
<span class="title" <?php if ( $params['content_type'] != 'RECORD_AUDIO' ) echo ' style="display:none" ' ?> id="recordedAudioSaved" >
<?php if ($params['content_type'] == 'RECORD_AUDIO') { echo Util::generateFlashAudioPlayer($params['content'], 'sm'); } ?>
</span>
</div>
</div>
</div>
</div>
</div>
</fieldset>
</div>
</div>
</div>
<?php
}
public static function maskRecordingURL($url) {
$main_url = s8_get_current_webpage_uri();
$exploded = explode("?", $main_url);
$main_url = $exploded[0];
if (dirname($main_url) != "http:") {
$main_url = dirname($main_url);
}
$exploded = explode("/include", $main_url);
$main_url = $exploded[0];
$new_url = (empty($url) ? "" : str_replace("http://api.twilio.com/", $main_url."/recording/", $url));
$new_url = (empty($url) ? "" : str_replace("https://api.twilio.com/", $main_url."/recording/", $url));
if ($new_url == "http://api.twilio.com.mp3" || $new_url == "http://api.twilio.com.wav") $new_url = "";
return $new_url;
}
public static function sendEmail($params) {
global $db, $SITE_NAME;
if(@$_REQUEST['NoEmail']==true)
return;
$sent = false;
$smtp_settings = $db->getVar("smtp_settings");
if (empty($smtp_settings)) {
$smtp_username = $db->getVar("smtp_username");
$smtp_password = $db->getVar("smtp_password");
if (!empty($smtp_username) && !empty($smtp_password)) {
$smtp_settings = json_encode(array(
"email" => $smtp_username,
"username" => $smtp_username,
"password" => $smtp_password,
"host" => "smtp.gmail.com",
"port" => 465,
"ssl_tls" => "SSL"
));
}
}
if (!empty($smtp_settings)) {
$smtp_settings = json_decode($smtp_settings, true);
require_once("include/class.phpmailer.php");
try {
$mail = new PHPMailer(true);
$mail->IsSMTP();
$mail->SMTPDebug = 0;
$mail->SMTPAuth = true;
if (!empty($smtp_settings['ssl_tls'])) $mail->SMTPSecure = $smtp_settings['ssl_tls'];
$mail->Host = $smtp_settings['host'];
$mail->Port = $smtp_settings['port'];
$mail->Username = $smtp_settings['username'];
$mail->Password = $smtp_settings['password'];
$mail->SetFrom($smtp_settings['email'], $smtp_settings['name']);
$mail->AddReplyTo($smtp_settings['email'], $smtp_settings['name']);
$mail->Subject = $params['subject'];
$mail->Body = $params['msg'];
if (!empty($params['emails'])) {
foreach ($params['emails'] as $email) {
$mail->AddAddress($email);
}
}
$mail->IsHTML(false);
$sent = $mail->Send();
if (!$sent) {
$mail->Host = "ssl://".$smtp_settings['host'];
$sent = $mail->Send();
}
}
catch (Exception $e) {
$sent = false;
}
}
if (!$sent) {
$host = explode(".",$_SERVER['HTTP_HOST']);
$host = $host[count($host)-2].".".$host[count($host)-1];
if($SITE_NAME!="")
$site_name = $SITE_NAME;
else
$site_name = "Call Tracking";
$headers = 'From: '.$SITE_NAME.' <act@' . $host . ">";
if (!empty($params['emails'])) {
foreach ($params['emails'] as $email) {
mail($email,$params['subject'],$params['msg'],$headers);
}
}
}
}
public static function curPageURL() {
$pageURL = 'http';
if (@$_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80") {
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
} else {
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
}
return $pageURL;
}
public static function getRingTone() {
global $db;
$option_ringtone = $db->getVar("option_ringtone");
$intl_dialtone_url = $db->getVar("intl_dialtone_url");
$intl_dialtone = false;
if ($db->getVar("intl_dialtone") == "yes")
$intl_dialtone = true;
if (empty($option_ringtone) && $intl_dialtone && !empty($intl_dialtone_url)) {
$exploded = explode("/", $intl_dialtone_url);
$new_or = substr($exploded[count($exploded) - 1], 0, 2);
if (!in_array($new_or, array_keys(Util::$supported_countries))) {
$option_ringtone = $new_or;
}
}
if (empty($option_ringtone))
$option_ringtone = "auto";
return $option_ringtone;
}
//
// parsed from https://www.twilio.com/resources/rates/international-phone-number-rates.csv
// https://www.twilio.com/docs/api/rest/available-phone-numbers#countries
//
public static $supported_countries = array(
'CA'=>array('Canada','1',1),
'GB'=>array('United Kingdom','44',1),
'AU'=>array('Australia','61'),
'AT'=>array('Austria','43'),
'BH'=>array('Bahrain','973'),
'BE'=>array('Belgium','32'),
'BR'=>array('Brazil','55'),
'BG'=>array('Bulgaria','359'),
'CY'=>array('Cyprus','357'),
'CZ'=>array('Czech Republic','420'),
'DK'=>array('Denmark','45'),
'DO'=>array('Dominican Republic','1809'),
'SV'=>array('El Salvador','503'),
'EE'=>array('Estonia','372'),
'FI'=>array('Finland','358'),
'FR'=>array('France','33'),
'DE'=>array('Germany','49'),
'GR'=>array('Greece','30'),
'HK'=>array('Hong Kong','852'),
'IE'=>array('Ireland','353'),
'IL'=>array('Israel','972'),
'IT'=>array('Italy','39'),
'JP'=>array('Japan','81'),
'LV'=>array('Latvia','371'),
'LT'=>array('Lithuania','370'),
'LU'=>array('Luxembourg','352'),
'MT'=>array('Malta','356'),
'MX'=>array('Mexico','52'),
'NZ'=>array('New Zealand','64'),
'NO'=>array('Norway','47'),
'PE'=>array('Peru','51'),
'PL'=>array('Poland','48'),
'PT'=>array('Portugal','351'),
'PR'=>array('Puerto Rico','1787'),
'RO'=>array('Romania','40'),
'SK'=>array('Slovakia','421'),
'ZA'=>array('South Africa','27'),
'ES'=>array('Spain','34'),
'SE'=>array('Sweden','46'),
'CH'=>array('Switzerland','41'),
'NL'=>array('The Netherlands','31'),
//'US'=>array('United States','1'),
);
public static $countriesList = array(
'AF' => "Afghanistan",
'AL' => "Albania",
'DZ' => "Algeria",
'AS' => "American Samoa",
'AD' => "Andorra",
'AO' => "Angola",
'AI' => "Anguilla",
'AQ' => "Antarctica",
'AG' => "Antigua And Barbuda",
'AR' => "Argentina",
'AM' => "Armenia",
'AW' => "Aruba",
'AU' => "Australia",
'AT' => "Austria",
'AZ' => "Azerbaijan",
'BS' => "Bahamas",
'BH' => "Bahrain",
'BD' => "Bangladesh",
'BB' => "Barbados",
'BY' => "Belarus",
'BE' => "Belgium",
'BZ' => "Belize",
'BJ' => "Benin",
'BM' => "Bermuda",
'BT' => "Bhutan",
'BO' => "Bolivia",
'BA' => "Bosnia And Herzegovina",
'BW' => "Botswana",
'BV' => "Bouvet Island",
'BR' => "Brazil",
'IO' => "British Indian Ocean Territory",
'BN' => "Brunei",
'BG' => "Bulgaria",
'BF' => "Burkina Faso",
'BI' => "Burundi",
'KH' => "Cambodia",
'CM' => "Cameroon",
'CA' => "Canada",
'CV' => "Cape Verde",
'KY' => "Cayman Islands",
'CF' => "Central African Republic",
'TD' => "Chad",
'CL' => "Chile",
'CN' => "China",
'CX' => "Christmas Island",
'CC' => "Cocos (Keeling) Islands",
'CO' => "Columbia",
'KM' => "Comoros",
'CG' => "Congo",
'CK' => "Cook Islands",
'CR' => "Costa Rica",
'CI' => "Cote D'Ivorie (Ivory Coast)",
'HR' => "Croatia (Hrvatska)",
'CU' => "Cuba",
'CY' => "Cyprus",
'CZ' => "Czech Republic",
'CD' => "Democratic Republic Of Congo (Zaire)",
'DK' => "Denmark",
'DJ' => "Djibouti",
'DM' => "Dominica",
'DO' => "Dominican Republic",
'TP' => "East Timor",
'EC' => "Ecuador",
'EG' => "Egypt",
'SV' => "El Salvador",
'GQ' => "Equatorial Guinea",
'ER' => "Eritrea",
'EE' => "Estonia",
'ET' => "Ethiopia",
'FK' => "Falkland Islands (Malvinas)",
'FO' => "Faroe Islands",
'FJ' => "Fiji",
'FI' => "Finland",
'FR' => "France",
'FX' => "France, Metropolitan",
'GF' => "French Guinea",
'PF' => "French Polynesia",
'TF' => "French Southern Territories",
'GA' => "Gabon",
'GM' => "Gambia",
'GE' => "Georgia",
'DE' => "Germany",
'GH' => "Ghana",
'GI' => "Gibraltar",
'GR' => "Greece",
'GL' => "Greenland",
'GD' => "Grenada",
'GP' => "Guadeloupe",
'GU' => "Guam",
'GT' => "Guatemala",
'GN' => "Guinea",
'GW' => "Guinea-Bissau",
'GY' => "Guyana",
'HT' => "Haiti",
'HM' => "Heard And McDonald Islands",
'HN' => "Honduras",
'HK' => "Hong Kong",
'HU' => "Hungary",
'IS' => "Iceland",
'IN' => "India",
'ID' => "Indonesia",
'IR' => "Iran",
'IQ' => "Iraq",
'IE' => "Ireland",
'IM' => "Isle of Man",
'IL' => "Israel",
'IT' => "Italy",
'JM' => "Jamaica",
'JP' => "Japan",
'JO' => "Jordan",
'KZ' => "Kazakhstan",
'KE' => "Kenya",
'KI' => "Kiribati",
'KW' => "Kuwait",
'KG' => "Kyrgyzstan",
'LA' => "Laos",
'LV' => "Latvia",
'LB' => "Lebanon",
'LS' => "Lesotho",
'LR' => "Liberia",
'LY' => "Libya",
'LI' => "Liechtenstein",
'LT' => "Lithuania",
'LU' => "Luxembourg",
'MO' => "Macau",
'MK' => "Macedonia",
'MG' => "Madagascar",
'MW' => "Malawi",
'MY' => "Malaysia",
'MV' => "Maldives",
'ML' => "Mali",
'MT' => "Malta",
'MH' => "Marshall Islands",
'MQ' => "Martinique",
'MR' => "Mauritania",
'MU' => "Mauritius",
'YT' => "Mayotte",
'MX' => "Mexico",
'FM' => "Micronesia",
'MD' => "Moldova",
'MC' => "Monaco",
'MN' => "Mongolia",
'MS' => "Montserrat",
'MA' => "Morocco",
'MZ' => "Mozambique",
'MM' => "Myanmar (Burma)",
'NA' => "Namibia",
'NR' => "Nauru",
'NP' => "Nepal",
'NL' => "Netherlands",
'AN' => "Netherlands Antilles",
'NC' => "New Caledonia",
'NZ' => "New Zealand",
'NI' => "Nicaragua",
'NE' => "Niger",
'NG' => "Nigeria",
'NU' => "Niue",
'NF' => "Norfolk Island",
'KP' => "North Korea",
'MP' => "Northern Mariana Islands",
'NO' => "Norway",
'OM' => "Oman",
'PK' => "Pakistan",
'PW' => "Palau",
'PA' => "Panama",
'PG' => "Papua New Guinea",
'PY' => "Paraguay",
'PE' => "Peru",
'PH' => "Philippines",
'PN' => "Pitcairn",
'PL' => "Poland",
'PT' => "Portugal",
'PR' => "Puerto Rico",
'QA' => "Qatar",
'RE' => "Reunion",
'RO' => "Romania",
'RU' => "Russia",
'RW' => "Rwanda",
'SH' => "Saint Helena",
'KN' => "Saint Kitts And Nevis",
'LC' => "Saint Lucia",
'PM' => "Saint Pierre And Miquelon",
'VC' => "Saint Vincent And The Grenadines",
'SM' => "San Marino",
'ST' => "Sao Tome And Principe",
'SA' => "Saudi Arabia",
'SN' => "Senegal",
'SC' => "Seychelles",
'SL' => "Sierra Leone",
'SG' => "Singapore",
'SK' => "Slovak Republic",
'SI' => "Slovenia",
'SB' => "Solomon Islands",
'SO' => "Somalia",
'ZA' => "South Africa",
'GS' => "South Georgia And South Sandwich Islands",
'KR' => "South Korea",
'ES' => "Spain",
'LK' => "Sri Lanka",
'SD' => "Sudan",
'SR' => "Suriname",
'SJ' => "Svalbard And Jan Mayen",
'SZ' => "Swaziland",
'SE' => "Sweden",
'CH' => "Switzerland",
'SY' => "Syria",
'TW' => "Taiwan",
'TJ' => "Tajikistan",
'TZ' => "Tanzania",
'TH' => "Thailand",
'TG' => "Togo",
'TK' => "Tokelau",
'TO' => "Tonga",
'TT' => "Trinidad And Tobago",
'TN' => "Tunisia",
'TR' => "Turkey",
'TM' => "Turkmenistan",
'TC' => "Turks And Caicos Islands",
'TV' => "Tuvalu",
'UG' => "Uganda",
'UA' => "Ukraine",
'AE' => "United Arab Emirates",
'GB' => "United Kingdom",
'US' => "United States",
'UM' => "United States Minor Outlying Islands",
'UY' => "Uruguay",
'UZ' => "Uzbekistan",
'VU' => "Vanuatu",
'VA' => "Vatican City (Holy See)",
'VE' => "Venezuela",
'VN' => "Vietnam",
'VG' => "Virgin Islands (British)",
'VI' => "Virgin Islands (US)",
'WF' => "Wallis And Futuna Islands",
'EH' => "Western Sahara",
'WS' => "Western Samoa",
'YE' => "Yemen",
'YU' => "Yugoslavia",
'ZM' => "Zambia",
'ZW' => "Zimbabwe"
);
}
?>
Did this file decode correctly?
Original Code
<?php
eval(gzinflate(substr(base64_decode('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'),10,-8))); ?>
Function Calls
substr | 1 |
gzinflate | 1 |
base64_decode | 1 |
Stats
MD5 | 43d9bc6c4122bbe9a35fe490282c3bea |
Eval Count | 1 |
Decode Time | 146 ms |