Beispiel #1
0
 function Request($security_key, $called, $calling, $callerid, $callback_time, $uniqueid)
 {
     global $A2B;
     /*
     $status = 'PENDING';
     $server_ip = 'localhost';
     $num_attempt = 0;
     $channel = 'SIP/'.$phone_number.'@mylittleIP';	
     $exten = $phone_number;
     $context = 'a2billing';
     $priority = 1;
     //$timeout	callerid
     $variable = "phonenumber=$phone_number|callerid=$callerid";
     */
     $phone_number = $called;
     $insert_id_callback = 'null';
     if (strlen($uniqueid) == 0) {
         $uniqueid = MDP_STRING(5) . '-' . MDP_NUMERIC(10);
     }
     $FG_regular[] = array("^([0-9]{4})-([0-9]{2})-([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2})\$", "(YYYY-MM-DD HH:MM:SS)");
     // The wrapper variables for security
     // $security_key = API_SECURITY_KEY;
     write_log(LOG_CALLBACK, " Service_Callback( security_key={$security_key}, called={$called}, calling={$calling}, callerid={$callerid}, uniqueid={$uniqueid}, callback_time={$callback_time})");
     $mysecurity_key = API_SECURITY_KEY;
     // CHECK CALLERID
     if (strlen($callerid) < 1) {
         write_log(LOG_CALLBACK, basename(__FILE__) . ' line:' . __LINE__ . "[" . date("Y/m/d G:i:s", mktime()) . "] " . " ERROR FORMAT CALLERID AT LEAST 1 DIGIT ");
         sleep(2);
         return array($insert_id_callback, 'result=Error', " ERROR - FORMAT CALLERID AT LEAST 1 DIGIT ");
     }
     // CHECK PHONE_NUMBER
     if (strlen($phone_number) < 10) {
         write_log(LOG_CALLBACK, basename(__FILE__) . ' line:' . __LINE__ . "[" . date("Y/m/d G:i:s", mktime()) . "] " . " ERROR FORMAT PHONENUMBER AT LEAST 10 DIGITS ");
         sleep(2);
         return array($insert_id_callback, 'result=Error', " ERROR - FORMAT PHONENUMBER AT LEAST 10 DIGITS ");
     }
     // CHECK CALLBACK TIME
     if (strlen($callback_time) > 1 && !ereg($FG_regular[0][0], $callback_time)) {
         write_log(LOG_CALLBACK, basename(__FILE__) . ' line:' . __LINE__ . "[" . date("Y/m/d G:i:s", mktime()) . "] " . " ERROR FORMAT CALLBACKTIME : " . $FG_regular[0][0]);
         sleep(2);
         return array($insert_id_callback, 'result=Error', " ERROR - FORMAT CALLBACKTIME : " . $FG_regular[0][0]);
     }
     // CHECK SECURITY KEY
     if (md5($mysecurity_key) !== $security_key || strlen($security_key) == 0) {
         write_log(LOG_CALLBACK, basename(__FILE__) . ' line:' . __LINE__ . "[" . date("Y/m/d G:i:s", mktime()) . "] " . " CODE_ERROR SECURITY_KEY");
         sleep(2);
         return array($insert_id_callback, 'result=Error', ' KEY - BAD PARAMETER ');
     }
     $DBHandle = DbConnect();
     if (!$DBHandle) {
         write_log(LOG_CALLBACK, basename(__FILE__) . ' line:' . __LINE__ . "[" . date("Y/m/d G:i:s", mktime()) . "] " . " ERROR CONNECT DB");
         sleep(2);
         return array($insert_id_callback, 'result=Error', ' ERROR - CONNECT DB ');
     }
     $A2B->DBHandle = $DBHandle;
     $instance_table = new Table();
     $A2B->set_instance_table($instance_table);
     $called = ereg_replace("^\\+", "011", $called);
     $calling = ereg_replace("^\\+", "011", $calling);
     $called = ereg_replace("[^0-9]", "", $called);
     $calling = ereg_replace("[^0-9]", "", $calling);
     $called = ereg_replace("^01100", "011", $called);
     $calling = ereg_replace("^01100", "011", $calling);
     $called = ereg_replace("^00", "011", $called);
     $calling = ereg_replace("^00", "011", $calling);
     $called = ereg_replace("^0111", "1", $called);
     $calling = ereg_replace("^0111", "1", $calling);
     $A2B->credit = 1000;
     $A2B->tariff = $A2B->config["callback"]['all_callback_tariff'];
     $RateEngine = new RateEngine();
     // $RateEngine -> webui = 0;
     // LOOKUP RATE : FIND A RATE FOR THIS DESTINATION
     $A2B->dnid = $A2B->destination = $caller_areacode . $calling;
     $resfindrate = $RateEngine->rate_engine_findrates($A2B, $A2B->destination, $A2B->tariff);
     // IF FIND RATE
     if ($resfindrate != 0) {
         //$RateEngine -> debug_st = 1;
         $res_all_calcultimeout = $RateEngine->rate_engine_all_calcultimeout($A2B, $A2B->credit);
         if ($res_all_calcultimeout) {
             // MAKE THE CALL
             if ($RateEngine->ratecard_obj[0][34] != '-1') {
                 $usetrunk = 34;
                 $usetrunk_failover = 1;
                 $RateEngine->usedtrunk = $RateEngine->ratecard_obj[$k][34];
             } else {
                 $usetrunk = 29;
                 $RateEngine->usedtrunk = $RateEngine->ratecard_obj[$k][29];
                 $usetrunk_failover = 0;
             }
             $prefix = $RateEngine->ratecard_obj[0][$usetrunk + 1];
             $tech = $RateEngine->ratecard_obj[0][$usetrunk + 2];
             $ipaddress = $RateEngine->ratecard_obj[0][$usetrunk + 3];
             $removeprefix = $RateEngine->ratecard_obj[0][$usetrunk + 4];
             $timeout = $RateEngine->ratecard_obj[0]['timeout'];
             $failover_trunk = $RateEngine->ratecard_obj[0][40 + $usetrunk_failover];
             $addparameter = $RateEngine->ratecard_obj[0][42 + $usetrunk_failover];
             $destination = $A2B->destination;
             if (strncmp($destination, $removeprefix, strlen($removeprefix)) == 0) {
                 $destination = substr($destination, strlen($removeprefix));
             }
             $pos_dialingnumber = strpos($ipaddress, '%dialingnumber%');
             $ipaddress = str_replace("%cardnumber%", $A2B->cardnumber, $ipaddress);
             $ipaddress = str_replace("%dialingnumber%", $prefix . $destination, $ipaddress);
             if ($pos_dialingnumber !== false) {
                 $dialstr = "{$tech}/{$ipaddress}" . $dialparams;
             } else {
                 if ($A2B->agiconfig['switchdialcommand'] == 1) {
                     $dialstr = "{$tech}/{$prefix}{$destination}@{$ipaddress}" . $dialparams;
                 } else {
                     $dialstr = "{$tech}/{$ipaddress}/{$prefix}{$destination}" . $dialparams;
                 }
             }
             //ADDITIONAL PARAMETER 			%dialingnumber%,	%cardnumber%
             if (strlen($addparameter) > 0) {
                 $addparameter = str_replace("%cardnumber%", $A2B->cardnumber, $addparameter);
                 $addparameter = str_replace("%dialingnumber%", $prefix . $destination, $addparameter);
                 $dialstr .= $addparameter;
             }
             $channel = $dialstr;
             $exten = $calling;
             $context = $A2B->config["callback"]['context_callback'];
             $id_server_group = $A2B->config["callback"]['id_server_group'];
             $priority = 1;
             $timeout = $A2B->config["callback"]['timeout'] * 1000;
             $application = '';
             $status = 'PENDING';
             $server_ip = 'localhost';
             $num_attempt = 0;
             $variable = "MODE=CID|CALLED={$called}|CALLING={$calling}|CBID={$uniqueid}|TARIFF=" . $A2B->tariff;
             if (is_numeric($A2B->config["callback"]['sec_wait_before_callback']) && $A2B->config["callback"]['sec_wait_before_callback'] >= 1) {
                 $sec_wait_before_callback = $A2B->config["callback"]['sec_wait_before_callback'];
             } else {
                 $sec_wait_before_callback = 1;
             }
             // LIST FIELDS TO INSERT CALLBACK REQUEST
             $QUERY_FIELS = 'uniqueid, status, server_ip, num_attempt, channel, exten, context, priority, variable, id_server_group, callback_time, account, callerid, timeout';
             // DEFINE THE CORRECT VALUE FOR THE INSERT
             if (strlen($callback_time) > 1) {
                 $QUERY_VALUES = "'{$uniqueid}', '{$status}', '{$server_ip}', '{$num_attempt}', '{$channel}', '{$exten}', '{$context}', '{$priority}', '{$variable}', '{$id_server_group}', '{$callback_time}', '{$account}', '{$callerid}', '30000'";
             } else {
                 if ($A2B->config["database"]['dbtype'] != "postgres") {
                     // MYSQL
                     $QUERY_VALUES = "'{$uniqueid}', '{$status}', '{$server_ip}', '{$num_attempt}', '{$channel}', '{$exten}', '{$context}', '{$priority}', '{$variable}', '{$id_server_group}', ADDDATE( CURRENT_TIMESTAMP, INTERVAL {$sec_wait_before_callback} SECOND ), '{$account}', '{$callerid}', '30000'";
                 } else {
                     // POSTGRESQL
                     $QUERY_VALUES = "'{$uniqueid}', '{$status}', '{$server_ip}', '{$num_attempt}', '{$channel}', '{$exten}', '{$context}', '{$priority}', '{$variable}', '{$id_server_group}',  (CURRENT_TIMESTAMP + INTERVAL '{$sec_wait_before_callback} SECOND'), '{$account}', '{$callerid}', '30000'";
                 }
             }
             $insert_id_callback = $instance_table->Add_table($DBHandle, $QUERY_VALUES, $QUERY_FIELS, 'cc_callback_spool', 'id');
             if (!$insert_id_callback) {
                 // FAIL INSERT
                 write_log(LOG_CALLBACK, basename(__FILE__) . ' line:' . __LINE__ . "[" . date("Y/m/d G:i:s", mktime()) . "] " . " ERROR INSERT -> \n QUERY=" . $QUERY);
                 sleep(2);
                 return array($insert_id_callback, 'result=Error', ' ERROR - INSERT INTO DB');
             }
             // SUCCEED INSERT
             write_log(LOG_CALLBACK, basename(__FILE__) . ' line:' . __LINE__ . "[" . date("Y/m/d G:i:s", mktime()) . "] " . " CALLBACK INSERTED -> \n QUERY=" . $QUERY);
             return array($insert_id_callback, 'result=Success', " Success - Callback request has been accepted ");
         } else {
             $error_msg = 'Error : You don t have enough credit to call you back !!!';
         }
     } else {
         $error_msg = 'Error : There is no route to call back your phonenumber !!!';
     }
     // CALLBACK FAIL
     write_log(LOG_CALLBACK, "error_msg = {$error_msg}");
     return array($insert_id_callback, 'result=Error', " ERROR - {$error_msg}");
 }
        Header("Location: " . $HD_Form->FG_GO_LINK_AFTER_ACTION);
        exit;
    }
    $form_action = "add";
    $_POST['accountcode'] = $_POST['username'] = $_POST['name'] = $_POST['cardnumber'] = $cardnumber;
    $_POST['allow'] = FRIEND_ALLOW;
    $_POST['context'] = FRIEND_CONTEXT;
    $_POST['nat'] = FRIEND_NAT;
    $_POST['amaflags'] = FRIEND_AMAFLAGS;
    $_POST['regexten'] = $cardnumber;
    $_POST['id_cc_card'] = $id_cc_card;
    $_POST['callerid'] = $useralias;
    $_POST['qualify'] = FRIEND_QUALIFY;
    $_POST['host'] = FRIEND_HOST;
    $_POST['dtmfmode'] = FRIEND_DTMFMODE;
    $_POST['secret'] = MDP_NUMERIC(5) . MDP_STRING(10) . MDP_NUMERIC(5);
    // for the getProcessed var
    $HD_Form->_vars = array_merge((array) $_GET, (array) $_POST);
}
$HD_Form->FG_EDITION_LINK = filter_input(INPUT_SERVER, 'PHP_SELF', FILTER_SANITIZE_URL) . "?form_action=ask-edit&atmenu={$atmenu}&id=";
$HD_Form->FG_DELETION_LINK = filter_input(INPUT_SERVER, 'PHP_SELF', FILTER_SANITIZE_URL) . "?form_action=ask-delete&atmenu={$atmenu}&id=";
if ($id != "" || !is_null($id)) {
    $HD_Form->FG_EDITION_CLAUSE = str_replace("%id", "{$id}", $HD_Form->FG_EDITION_CLAUSE);
}
if (!isset($form_action)) {
    $form_action = "list";
}
//ask-add
if (!isset($action)) {
    $action = $form_action;
}
 if (isset($iax) && $iax == 1) {
     $iax_buddy = 1;
 }
 $creditlimit = is_numeric($creditlimit) ? $creditlimit : 0;
 //initialize refill parameter
 $description_refill = gettext("CREATION CARD REFILL");
 $field_insert_refill = " credit,card_id, description";
 $instance_refill_table = new Table("cc_logrefill", $field_insert_refill);
 for ($k = 0; $k < $nbcard; $k++) {
     $arr_card_alias = gen_card_with_alias("cc_card", 0, $cardnumberlenght_list);
     $accountnumber = $arr_card_alias[0];
     $useralias = $arr_card_alias[1];
     if (!is_numeric($addcredit)) {
         $addcredit = 0;
     }
     $passui_secret = MDP_NUMERIC(5) . MDP_STRING(10) . MDP_NUMERIC(5);
     $FG_ADITION_SECOND_ADD_VALUE = "'{$accountnumber}', '{$useralias}', '{$addcredit}', '{$choose_tariff}', 't', '{$gen_id}', '', '', '', '', '', '{$id_country}', '', '', {$choose_simultaccess}, '{$choose_currency}', " . "{$choose_typepaid}, {$creditlimit}, {$enableexpire}, '{$expirationdate}', {$expiredays}, '{$passui_secret}', '{$runservice}', '{$tag}', '{$id_group}', '{$discount}', '{$id_seria}', " . "'{$id_didgroup}', {$sip_buddy}, {$iax_buddy}, '{$vat}'";
     if (DB_TYPE != "postgres") {
         $FG_ADITION_SECOND_ADD_VALUE .= ", now() ";
     }
     $id_cc_card = $instance_sub_table->Add_table($HD_Form->DBHandle, $FG_ADITION_SECOND_ADD_VALUE, null, null, $HD_Form->FG_TABLE_ID);
     //create refill for each cards
     if ($addcredit > 0) {
         $value_insert_refill = "'{$addcredit}', '{$id_cc_card}', '{$description_refill}' ";
         $instance_refill_table->Add_table($HD_Form->DBHandle, $value_insert_refill, null, null);
     }
     $instance_realtime->insert_voip_config($sip, $iax, $id_cc_card, $accountnumber, $passui_secret);
 }
 // Save Sip accounts to file
 if (isset($sip)) {
     $instance_realtime->create_trunk_config_file('sip');
	function Create_Instance ($security_key, $instance_name) {
		
		if (!$this->Check_SecurityKey ($security_key)) {
		    return array("ERROR", "INVALID KEY");
		}
		
		if (!strlen($instance_name) > 0) {
		    return array("ERROR", "NO INSTANCE_NAME PROVIDED");
		}
		
		$this->instance_table = new Table();
		
		$instance_key = $instance_name.'_'.MDP_STRING(4).'-'.MDP_NUMERIC(4);
		
		// Check that there is not an existing Group with this name
		$QUERY = "SELECT count(*) FROM cc_card_group WHERE name='$instance_key'";
		$result = $this->instance_table -> SQLExec ($this->DBHandle, $QUERY);
		if (!is_array($result) || $result[0][0] > 0 )
		{
		    return array(false, "EXISTING GROUP WITH SAME NAME AND KEY");
		}
		
        $value = "'$instance_key'";
        $func_fields = "name";
        $func_table = 'cc_card_group';
        $id_name = "id";
        $inserted = $this->instance_table->Add_table($this->DBHandle, $value, $func_fields, $func_table, $id_name);
		
		if (!$inserted) {
		    return array(false, "ERROR CREATING ACCOUNT GROUP");
		}
		return array($instance_key, "Create_Instance SUCCESS");
	}
 //default callerid
 $callerid = '111111111';
 $cidgroupid = $phone["id_cid_group"];
 if ($A2B->config["database"]['dbtype'] == "postgres") {
     $QUERY = "SELECT cid FROM cc_outbound_cid_list WHERE activated = 1 AND outbound_cid_group = {$cidgroupid} ORDER BY RANDOM() LIMIT 1";
 } else {
     $QUERY = "SELECT cid FROM cc_outbound_cid_list WHERE activated = 1 AND outbound_cid_group = {$cidgroupid} ORDER BY RAND() LIMIT 1";
 }
 $instance_cid_table = new Table();
 echo "QUERY CID : " . $QUERY;
 $cidresult = $instance_cid_table->SQLExec($A2B->DBHandle, $QUERY);
 if (is_array($cidresult) && count($cidresult) > 0) {
     $callerid = $cidresult[0][0];
 }
 $account = $_SESSION["pr_login"];
 $uniqueid = MDP_NUMERIC(5) . '-' . MDP_STRING(7);
 $status = 'PENDING';
 $server_ip = 'localhost';
 $num_attempt = 0;
 $variable = "CALLED={$destination}|USERNAME={$phone['8']}|USERID={$phone['6']}|CBID={$uniqueid}|PHONENUMBER_ID=" . $phone['cc_phonenumber_id'] . "|CAMPAIGN_ID=" . $phone['cc_campaign_id'];
 $res = $instance_table->Add_table($A2B->DBHandle, "'{$uniqueid}', '{$status}', '{$server_ip}', '{$num_attempt}', '{$channel}', '{$exten}', '{$context}', '{$priority}', '{$variable}', '{$id_server_group}',  now(), '{$account}', '{$callerid}', '30000'", "uniqueid, status, server_ip, num_attempt, channel, exten, context, priority, variable, id_server_group, callback_time, account, callerid, timeout", "cc_callback_spool", "id");
 if (!$res) {
     if ($verbose_level >= 1) {
         echo "[Cannot insert the callback request in the spool!]";
     }
 } else {
     if ($verbose_level >= 1) {
         echo "[Your callback request has been queued correctly!]";
     }
     if ($action == "update") {
         $query = "UPDATE cc_campaign_phonestatus SET id_callback = '{$uniqueid}', lastuse = CURRENT_TIMESTAMP WHERE id_phonenumber ={$phone['0']} AND id_campaign = {$phone['2']} ";
Beispiel #6
0
}
// -----------------------------------
// CREATE CARDS
// -----------------------------------
$instance_callplan = new Table("cc_tariffgroup", "id");
$result_callplan_id = $instance_callplan->Get_list($A2B->DBHandle, null, null, null, null, null, 1000, 1);
$nb_db_callplan = sizeof($result_callplan_id);
for ($i = 0; $i < $nb_customer; $i++) {
    if ($verbose > 1) {
        echo "CREATE CARD : {$i}\n";
    }
    $id_callplan = $result_callplan_id[rand(0, $nb_db_callplan)]['id'];
    $array_card_generated = gen_card_with_alias("cc_card", 0, 10, $A2B->DBHandle);
    $card_number = $array_card_generated[0];
    $card_alias = $array_card_generated[1];
    $pass = MDP_NUMERIC(5) . MDP_STRING(10) . MDP_NUMERIC(5);
    $query = "INSERT INTO cc_card (username, useralias, uipass, id_group, credit, language, tariff, id_didgroup, status, simultaccess, currency, runservice, autorefill, initialbalance, typepaid, enableexpire, expirationdate, expiredays, voicemail_permitted, voicemail_activated, invoiceday, lastname, firstname, country, id_timezone, sip_buddy, iax_buddy, inuse, credit_notification, notify_email ) values" . "('1111', '11111', '1111', '1', '10', 'en', '1', '-1', '-1', '1', 'USD', '0', '0', '0', '0', '0', '2018-09-02 23:21:33', '0', '1', '0', '0', '11111', 'card', 'AFG', '1', '0', '0', '0', '-1', '0'); ";
    $instance_table->SQLExec($A2B->DBHandle, $query);
}
$query = "SELECT count(*) FROM cc_card;";
$nb_db_card = $instance_table->SQLExec($A2B->DBHandle, $query, 1);
if ($verbose > 0) {
    echo "TOTAL DB CARDS : " . $nb_db_card[0][0] . " <br><br>\n\n";
}
// Get a list of card
$instance_card = new Table("cc_card", "id");
$result_card_id = $instance_card->Get_list($A2B->DBHandle, null, null, null, null, null, 1000, 1);
$nb_db_card = sizeof($result_card_id);
// -----------------------------------
// CALLERID
// -----------------------------------
Beispiel #7
0
 *
 *
**/
include './lib/customer.defines.php';
include './lib/customer.module.access.php';
include './lib/Form/Class.FormHandler.inc.php';
if (!isset($form_action)) {
    $form_action = "ask-add";
}
if (!isset($action)) {
    $action = $form_action;
}
// PROVISION TEST DATA
if (false) {
    $_POST["lastname"] = $_POST["firstname"] = $_POST["address"] = $_POST["city"] = $_POST["state"] = $_POST["country"] = 'SIGN-' . MDP_STRING(5) . '-' . MDP_NUMERIC(3);
    $_POST["email"] = MDP_STRING(10) . '@sign-up.com';
    $_POST["zipcode"] = $_POST["phone"] = '12345667789';
}
include './form_data/FG_var_signup.inc';
include './lib/customer.smarty.php';
if (!$A2B->config["signup"]['enable_signup']) {
    echo "No Signup page!";
    exit;
}
getpost_ifset(array('subscriber_signup'));
if (!is_numeric($subscriber_signup)) {
    //check subscriber_signup
    $table_check_subscriber = new Table("cc_subscription_signup", "COUNT(*)");
    $clause_check_subscriber = "";
    $result_check_subscriber = $table_check_subscriber->Get_list(DbConnect(), $clause_check_subscriber);
    $check_subscriber = $result_check_subscriber[0][0];
Beispiel #8
0
<?php



include("../lib/customer.defines.php");

$code = MDP_STRING(6);
$_SESSION["captcha_code"] = $code;
$seed = MDP_NUMERIC(6);

$captcha_gd = 1;

if ($captcha_gd)
{
	include('captcha_gd.php');
}
else
{
	include('captcha_non_gd.php');
}

$captcha = new captcha();
$captcha->execute($code, $seed);	




Beispiel #9
0
 function Create_Card($security_key, $transaction_code, $account_number, $tariff, $uipass, $credit, $language, $activated, $status, $simultaccess, $currency, $runservice, $typepaid, $creditlimit, $enableexpire, $expirationdate, $expiredays, $lastname, $firstname, $address, $city, $state, $country, $zipcode, $phone, $fax, $callerid_list, $iax_friend, $sip_friend)
 {
     // The wrapper variables for security
     // $security_key = API_SECURITY_KEY;
     $logfile = SOAP_LOGFILE;
     $mysecurity_key = API_SECURITY_KEY;
     $mail_content = "[" . date("Y/m/d G:i:s", mktime()) . "] " . "SOAP API - Request asked: Create_Card [{$transaction_code}, {$account_number}, {$tariff}, {$uipass}, {$credit}, {$language}, {$activated}, {$simultaccess}, {$currency}, {$runservice}, {$typepaid}, {$creditlimit}, {$enableexpire}, {$expirationdate}, {$expiredays}, {$lastname}, {$firstname}, {$address}, {$city}, {$state}, {$country}, {$zipcode}, {$phone}, {$fax}, {$callerid_list}, {$iax_friend}, {$sip_friend}]";
     // CHECK SECURITY KEY
     if (md5($mysecurity_key) !== $security_key || strlen($security_key) == 0) {
         a2b_mail(EMAIL_ADMIN, "ALARM : API - CODE_ERROR SECURITY_KEY ", $mail_content);
         error_log("[" . date("Y/m/d G:i:s", mktime()) . "] " . " CODE_ERROR SECURITY_KEY" . "\n", 3, $logfile);
         sleep(2);
         return array($transaction_code, '', '', '', '', 'Error', 'KEY - BAD PARAMETER' . "{$security_key} - {$mysecurity_key}");
     }
     // Create new account
     $FG_ADITION_SECOND_ADD_TABLE = "cc_card";
     $FG_ADITION_SECOND_ADD_FIELDS = "username, useralias, credit, tariff, id_didgroup, activated, status, lastname, firstname, email, address, city, state, country, zipcode, phone, fax, userpass, simultaccess, currency, typepaid, creditlimit, language, runservice, enableexpire, expirationdate, expiredays, uipass, sip_buddy, iax_buddy";
     $arr_card_alias = gen_card_with_alias('cc_card', 1);
     $cardnum = $arr_card_alias[0];
     $useralias = $arr_card_alias[1];
     if ($uipass == '' || strlen($uipass) == 0) {
         $uipass = MDP_STRING();
     }
     // CHECK PARAMETERS LASTNAME ; FIRSTNAME ; ADDRESS ; ....
     if (!is_numeric($credit) || !is_numeric($creditlimit) || !is_numeric($expiredays) || $activated != 0 && $activated != 1 || $simultaccess != 0 && $simultaccess != 1 || $runservice != 0 && $runservice != 1 || strlen($lastname) > 40 || strlen($firstname) > 40 || strlen($address) > 100 || strlen($city) > 40 || strlen($state) > 40 || strlen($country) > 40 || strlen($zipcode) > 40 || strlen($phone) > 40 || strlen($email) > 60 || strlen($fax) > 40) {
         a2b_mail(EMAIL_ADMIN, "ALARM : API  - BAD PARAMETER ", $mail_content);
         error_log("[" . date("Y/m/d G:i:s", mktime()) . "] " . " - BAD PARAMETER " . "\n", 3, $logfile);
         return array($transaction_code, '', '', '', '', 'Error', 'BAD PARAMETER');
     } else {
         if ($expirationdate == '') {
             $expirationdate = "now()";
         } else {
             $expirationdate = "'{$expirationdate}'";
         }
         $DBHandle = DbConnect();
         $instance_sub_table = new Table($FG_ADITION_SECOND_ADD_TABLE, $FG_ADITION_SECOND_ADD_FIELDS);
         $FG_ADITION_SECOND_ADD_VALUE = "'{$cardnum}', '{$useralias}', '" . $credit . "', '" . $tariff . "', '0', '{$activated}', '{$status}', '{$lastname}', '{$firstname}', '{$email}', '{$address}', '{$city}', " . "'{$state}', '{$country}', '{$zipcode}', '{$phone}', '{$fax}', '{$cardnum}', " . $simultaccess . ", '" . $currency . "', '" . $typepaid . "','" . $creditlimit . "', '" . $language . "', '" . $runservice . "', '" . $enableexpire . "', {$expirationdate}, '{$expiredays}', '{$uipass}', '{$iax_friend}', '{$sip_friend}'";
         $result_query = $instance_sub_table->Add_table($DBHandle, $FG_ADITION_SECOND_ADD_VALUE, null, null, 'id');
         if ($result_query) {
             $id_cc_card = $result_query;
             if (strlen($callerid_list) > 1) {
                 $callerid_list = split(',', $callerid_list);
                 if (count($callerid_list) > 0) {
                     $k = 0;
                     foreach ($callerid_list as $mycallerid) {
                         $k++;
                         if (strlen($mycallerid) > 1) {
                             $QUERY = "SELECT * FROM cc_callerid WHERE cid='{$mycallerid}'";
                             $result = $instance_sub_table->SQLExec($DBHandle, $QUERY);
                             if (!is_array($result)) {
                                 $QUERY = "INSERT INTO cc_callerid (cid, id_cc_card) VALUES ('{$mycallerid}', '{$id_cc_card}')";
                                 $result = $instance_sub_table->SQLExec($DBHandle, $QUERY, 0);
                                 if ($result == false) {
                                     $callerid_result .= "|callerid{$k}-{$mycallerid}=NOK";
                                 } else {
                                     $callerid_result .= "|callerid{$k}-{$mycallerid}=OK";
                                 }
                             } else {
                                 $callerid_result .= "|callerid{$k}-{$mycallerid}=NOK";
                             }
                         }
                     }
                 }
             }
             //return array('transaction_code', 'account_number', 'card_number', $useralias, 'uipass', 'result', "IDCARD_CREATED=$id_cc_card"."$callerid_result");
             //|LASTQUERY=$QUERY
             // CHECK IF THERE IS A FRIEND TO CREATE
             if ($iax_friend || $sip_friend) {
                 // NEW ACCOUNT CREATED
                 $type = FRIEND_TYPE;
                 $allow = FRIEND_ALLOW;
                 $context = FRIEND_CONTEXT;
                 $nat = FRIEND_NAT;
                 $amaflags = FRIEND_AMAFLAGS;
                 $qualify = FRIEND_QUALIFY;
                 $host = FRIEND_HOST;
                 $dtmfmode = FRIEND_DTMFMODE;
                 $uipass = MDP_STRING();
                 $FG_QUERY_ADITION_SIP_IAX = 'name, type, username, accountcode, regexten, callerid, amaflags, secret, md5secret, nat, dtmfmode, qualify, canreinvite,disallow, allow, host, callgroup, context, defaultip, fromuser, fromdomain, insecure, language, mailbox, permit, deny, mask, pickupgroup, port,restrictcid, rtptimeout, rtpholdtimeout, musiconhold, regseconds, ipaddr, cancallforward';
                 // For IAX and SIP
                 $param_add_fields = "name, accountcode, regexten, amaflags, callerid, context, dtmfmode, host,  type, username, allow, secret";
                 $param_add_value = "'{$cardnum}', '{$cardnum}', '{$cardnum}', '{$amaflags}', '{$cardnum}', '{$context}', '{$dtmfmode}','{$host}', '{$type}', '{$cardnum}', '{$allow}', '" . $uipass . "', '{$id_cc_card}', '{$nat}', '{$qualify}'";
                 $list_names = explode(",", $FG_QUERY_ADITION_SIP_IAX);
                 $FG_TABLE_SIP_NAME = "cc_sip_buddies";
                 $FG_TABLE_IAX_NAME = "cc_iax_buddies";
                 for ($ki = 0; $ki < 2; $ki++) {
                     if ($ki == 0) {
                         if (!$sip_friend) {
                             continue;
                         }
                         $cfriend = 'sip';
                         $FG_TABLE_NAME = "cc_sip_buddies";
                         $buddyfile = BUDDY_SIP_FILE;
                     } else {
                         if (!$iax_friend) {
                             continue;
                         }
                         $cfriend = 'iax';
                         $FG_TABLE_NAME = "cc_iax_buddies";
                         $buddyfile = BUDDY_IAX_FILE;
                     }
                     // Insert Sip/Iax account info
                     if ($ki == 0 && $sip_friend || $ki == 1 && $iax_friend) {
                         $instance_table1 = new Table($FG_TABLE_NAME, $FG_QUERY_ADITION_SIP_IAX);
                         $result_query1 = $instance_table1->Add_table($DBHandle, $param_add_value, $param_add_fields, null, null);
                         $instance_table_friend = new Table($FG_TABLE_NAME, 'id, ' . $FG_QUERY_ADITION_SIP_IAX);
                         $list_friend = $instance_table_friend->Get_list($DBHandle, '', null, null, null, null);
                         $fd = fopen($buddyfile, "w");
                         if (!$fd) {
                             a2b_mail($email_alarm, "ALARM : SOAP-API  - Could not open buddy file '{$buddyfile}'", $mail_content);
                             error_log("[" . date("Y/m/d G:i:s", mktime()) . "] " . "[Could not open buddy file '{$buddyfile}'] - SOAP-API " . "\n", 3, $logfile);
                             return array($transaction_code, '', '', '', '', 'Error', 'SOAP-API  - Could not open buddy file $buddyfile');
                         } else {
                             foreach ($list_friend as $data) {
                                 $line = "\n\n[" . $data[1] . "]\n";
                                 if (fwrite($fd, $line) === FALSE) {
                                     error_log("[" . date("Y/m/d G:i:s", mktime()) . "] " . "[Impossible to write to the file ({$buddyfile})] - CODE_ERROR 8" . "\n", 3, $logfile);
                                     return array($transaction_code, '', '', '', '', 'Error', 'SOAP-API Impossible to write to the file ($buddyfile)');
                                 } else {
                                     for ($i = 1; $i < count($data) - 1; $i++) {
                                         if (strlen($data[$i + 1]) > 0) {
                                             if (trim($list_names[$i]) == 'allow') {
                                                 $codecs = explode(",", $data[$i + 1]);
                                                 $line = "";
                                                 foreach ($codecs as $value) {
                                                     $line .= trim($list_names[$i]) . '=' . $value . "\n";
                                                 }
                                             } else {
                                                 $line = trim($list_names[$i]) . '=' . $data[$i + 1] . "\n";
                                             }
                                             if (fwrite($fd, $line) === FALSE) {
                                                 error_log("[" . date("Y/m/d G:i:s", mktime()) . "] " . "[Impossible to write to the file ({$buddyfile})] - CODE_ERROR 8" . "\n", 3, $logfile);
                                                 return array($transaction_code, '', '', '', '', 'Error', 'SOAP-API ERROR : Card created in the DB but Impossible to write to the file ($buddyfile)');
                                             }
                                         }
                                     }
                                 }
                             }
                             fclose($fd);
                         }
                     }
                 }
                 // END OF FOR - KI
             }
             // END if ($iax_friend || $sip_friend)
             return array($transaction_code, $account_number, $cardnum, $useralias, $uipass, 'result=OK', "ID CARD_CREATED={$result_query}{$callerid_result}");
         } else {
             a2b_mail(EMAIL_ADMIN, "ALARM : SOAP-API (Add_table)", "{$FG_ADITION_SECOND_ADD_VALUE}\n\n" . $mail_content);
             error_log("[" . date("Y/m/d G:i:s", mktime()) . "] " . "[SOAP-API CODE_ERROR Add_table " . "\n", 3, $logfile);
             return array($transaction_code, '', '', '', '', 'Error', 'SOAP-API CODE_ERROR Add_table');
         }
     }
     // END - CHECK PARAMETERS LASTNAME ; FIRSTNAME ; ADDRESS ; ....
 }
 public function Request($security_key, $called, $calling, $callerid, $callback_time, $uniqueid, $accountnumber)
 {
     // $called : PHONE NUMBER PERSON CALLING
     // $calling : DESTINATION PHONE NUMBER
     global $A2B;
     /*
     $status = 'PENDING';
     $server_ip = 'localhost';
     $num_attempt = 0;
     $channel = 'SIP/'.$phone_number.'@mylittleIP';
     $exten = $phone_number;
     $context = 'a2billing';
     $priority = 1;
     //$timeout	callerid
     $variable = "phonenumber=$phone_number|callerid=$callerid";
     */
     $phone_number = $called;
     $insert_id_callback = 'null';
     if (strlen($uniqueid) == 0) {
         $uniqueid = MDP_STRING(5) . '-' . MDP_NUMERIC(5) . MDP_STRING(10) . MDP_NUMERIC(5);
     }
     $FG_regular[] = array("^([0-9]{4})-([0-9]{2})-([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2})\$", "(YYYY-MM-DD HH:MM:SS)");
     // The wrapper variables for security
     // $security_key = API_SECURITY_KEY;
     write_log(LOG_CALLBACK, " Service_Callback( security_key={$security_key}, called={$called}, calling={$calling}, callerid={$callerid}, uniqueid={$uniqueid}, callback_time={$callback_time})");
     $mysecurity_key = API_SECURITY_KEY;
     // CHECK CALLERID
     if (strlen($callerid) < 1) {
         write_log(LOG_CALLBACK, basename(__FILE__) . ' line:' . __LINE__ . "[" . date("Y/m/d G:i:s", mktime()) . "] " . " ERROR FORMAT CALLERID AT LEAST 1 DIGIT ");
         return array($insert_id_callback, 'result=Error', " ERROR - FORMAT CALLERID AT LEAST 1 DIGIT ");
     }
     // CHECK PHONE_NUMBER
     if (strlen($phone_number) < 10) {
         write_log(LOG_CALLBACK, basename(__FILE__) . ' line:' . __LINE__ . "[" . date("Y/m/d G:i:s", mktime()) . "] " . " ERROR FORMAT PHONENUMBER AT LEAST 10 DIGITS ");
         return array($insert_id_callback, 'result=Error', " ERROR - FORMAT PHONENUMBER AT LEAST 10 DIGITS ");
     }
     // CHECK DESTINATION NUMBER
     if (strlen($calling) < 2) {
         write_log(LOG_CALLBACK, basename(__FILE__) . ' line:' . __LINE__ . "[" . date("Y/m/d G:i:s", mktime()) . "] " . " ERROR FORMAT DESTINATION NUMBER AT LEAST 2 DIGITS ");
         return array($insert_id_callback, 'result=Error', " ERROR - FORMAT DESTINATION NUMBER AT LEAST 2 DIGITS ");
     }
     // CHECK CALLBACK TIME
     if (strlen($callback_time) > 1 && !preg_match("/" . $FG_regular[0][0] . "/", $callback_time)) {
         write_log(LOG_CALLBACK, basename(__FILE__) . ' line:' . __LINE__ . "[" . date("Y/m/d G:i:s", mktime()) . "] " . " ERROR FORMAT CALLBACKTIME : " . $FG_regular[0][0]);
         return array($insert_id_callback, 'result=Error', " ERROR - FORMAT CALLBACKTIME : " . $FG_regular[0][0]);
     }
     // CHECK SECURITY KEY
     if (md5($mysecurity_key) !== $security_key || strlen($security_key) == 0) {
         write_log(LOG_CALLBACK, basename(__FILE__) . ' line:' . __LINE__ . "[" . date("Y/m/d G:i:s", mktime()) . "] " . " CODE_ERROR SECURITY_KEY");
         sleep(2);
         return array($insert_id_callback, 'result=Error', ' KEY - BAD PARAMETER ');
     }
     $DBHandle = DbConnect();
     if (!$DBHandle) {
         write_log(LOG_CALLBACK, basename(__FILE__) . ' line:' . __LINE__ . "[" . date("Y/m/d G:i:s", mktime()) . "] " . " ERROR CONNECT DB");
         sleep(2);
         return array($insert_id_callback, 'result=Error', ' ERROR - CONNECT DB ');
     }
     $A2B->DBHandle = $DBHandle;
     $instance_table = new Table();
     $A2B->set_instance_table($instance_table);
     $A2B->credit = 1000;
     $A2B->tariff = $A2B->config["callback"]['all_callback_tariff'];
     if (strlen($accountnumber) > 1) {
         // IF WE HAVE AN ACCOUNT NUMBER DEFINED
         $QUERY = "SELECT tariff, typepaid, credit, creditlimit FROM cc_card WHERE username='******'";
         $card_data = $instance_table->SQLExec($DBHandle, $QUERY);
         if (is_array($card_data)) {
             $A2B->credit = $card_data[0]['credit'];
             if ($card_data[0]['typepaid'] == 1) {
                 $A2B->credit = $A2B->credit + $card_data[0]['creditlimit'];
             }
             $A2B->tariff = $card_data[0]['tariff'];
         }
         //Else find accountnumber from caller's CallerID
     } else {
         $QUERY .= "SELECT cc_card.tariff, cc_card.typepaid, cc_card.credit, cc_card.creditlimit, cc_card.username" . " FROM cc_card " . " JOIN cc_callerid" . " ON cc_card.id=cc_callerid.id_cc_card " . " WHERE cc_callerid.cid='" . $phone_number . "'";
         $QUERY .= "ORDER BY 1";
         $card_data = $instance_table->SQLExec($DBHandle, $QUERY);
         if (!is_array($card_data)) {
             return array($insert_id_callback, 'result=Error', "CALLING'S PARTY CALLERID DOES NOT EXIST IN DATABASE");
         }
         $accountnumber = $card_data[0]['username'];
         if (is_array($card_data)) {
             $A2B->credit = $card_data[0]['credit'];
             if ($card_data[0]['typepaid'] == 1) {
                 $A2B->credit = $A2B->credit + $card_data[0]['creditlimit'];
             }
             $A2B->tariff = $card_data[0]['tariff'];
         }
     }
     $RateEngine = new RateEngine();
     $A2B->extension = $A2B->dnid = $A2B->destination = $called;
     // LOOKUP RATE : FIND A RATE FOR THIS DESTINATION
     $resfindrate = $RateEngine->rate_engine_findrates($A2B, $A2B->destination, $A2B->tariff);
     if ($resfindrate != 0) {
         //$RateEngine -> debug_st = 1;
         $res_all_calcultimeout = $RateEngine->rate_engine_all_calcultimeout($A2B, $A2B->credit);
         if ($res_all_calcultimeout) {
             // MAKE THE CALL
             if ($RateEngine->ratecard_obj[0][34] != '-1') {
                 $usetrunk = 34;
                 $usetrunk_failover = 1;
                 $RateEngine->usedtrunk = $RateEngine->ratecard_obj[0][34];
             } else {
                 $usetrunk = 29;
                 $RateEngine->usedtrunk = $RateEngine->ratecard_obj[0][29];
                 $usetrunk_failover = 0;
             }
             $prefix = $RateEngine->ratecard_obj[0][$usetrunk + 1];
             $tech = $RateEngine->ratecard_obj[0][$usetrunk + 2];
             $ipaddress = $RateEngine->ratecard_obj[0][$usetrunk + 3];
             $removeprefix = $RateEngine->ratecard_obj[0][$usetrunk + 4];
             $timeout = $RateEngine->ratecard_obj[0]['timeout'];
             $failover_trunk = $RateEngine->ratecard_obj[0][40 + $usetrunk_failover];
             $addparameter = $RateEngine->ratecard_obj[0][42 + $usetrunk_failover];
             $destination = $A2B->destination;
             if (strncmp($destination, $removeprefix, strlen($removeprefix)) == 0) {
                 $destination = substr($destination, strlen($removeprefix));
             }
             $pos_dialingnumber = strpos($ipaddress, '%dialingnumber%');
             $ipaddress = str_replace("%cardnumber%", $A2B->cardnumber, $ipaddress);
             $ipaddress = str_replace("%dialingnumber%", $prefix . $destination, $ipaddress);
             $dialparams = '';
             if ($pos_dialingnumber !== false) {
                 $dialstr = "{$tech}/{$ipaddress}" . $dialparams;
             } else {
                 if ($A2B->agiconfig['switchdialcommand'] == 1) {
                     $dialstr = "{$tech}/{$prefix}{$destination}@{$ipaddress}" . $dialparams;
                 } else {
                     $dialstr = "{$tech}/{$ipaddress}/{$prefix}{$destination}" . $dialparams;
                 }
             }
             //ADDITIONAL PARAMETER 			%dialingnumber%,	%cardnumber%
             if (strlen($addparameter) > 0) {
                 $addparameter = str_replace("%cardnumber%", $A2B->cardnumber, $addparameter);
                 $addparameter = str_replace("%dialingnumber%", $prefix . $destination, $addparameter);
                 $dialstr .= $addparameter;
             }
             $channel = $dialstr;
             $exten = $calling;
             $context = $A2B->config["callback"]['context_callback'];
             $id_server_group = $A2B->config["callback"]['id_server_group'];
             $priority = 1;
             $timeout = $A2B->config["callback"]['timeout'] * 1000;
             $application = '';
             $status = 'PENDING';
             $server_ip = 'localhost';
             $num_attempt = 0;
             $sep = $A2B->config['global']['asterisk_version'] == "1_2" || $A2B->config['global']['asterisk_version'] == "1_4" ? '|' : ',';
             $variable = "CALLED={$called}" . $sep . "CALLING={$calling}" . $sep . "CBID={$uniqueid}" . $sep . "TARIFF=" . $A2B->tariff;
             if (is_numeric($A2B->config["callback"]['sec_wait_before_callback']) && $A2B->config["callback"]['sec_wait_before_callback'] >= 1) {
                 $sec_wait_before_callback = $A2B->config["callback"]['sec_wait_before_callback'];
             } else {
                 $sec_wait_before_callback = 1;
             }
             // LIST FIELDS TO INSERT CALLBACK REQUEST
             $QUERY_FIELS = 'uniqueid, status, server_ip, num_attempt, channel, exten, context, priority, variable, id_server_group, callback_time, account, callerid, timeout';
             // DEFINE THE CORRECT VALUE FOR THE INSERT
             if (strlen($callback_time) > 1) {
                 $QUERY_VALUES = "'{$uniqueid}', '{$status}', '{$server_ip}', '{$num_attempt}', '{$channel}', '{$exten}', '{$context}', '{$priority}', '{$variable}', '{$id_server_group}', '{$callback_time}', '{$accountnumber}', '{$callerid}', '30000'";
             } else {
                 $QUERY_VALUES = "'{$uniqueid}', '{$status}', '{$server_ip}', '{$num_attempt}', '{$channel}', '{$exten}', '{$context}', '{$priority}', '{$variable}', '{$id_server_group}', ADDDATE( CURRENT_TIMESTAMP, INTERVAL {$sec_wait_before_callback} SECOND ), '{$accountnumber}', '{$callerid}', '30000'";
             }
             $insert_id_callback = $instance_table->Add_table($DBHandle, $QUERY_VALUES, $QUERY_FIELS, 'cc_callback_spool', 'id');
             if (!$insert_id_callback) {
                 // FAIL INSERT
                 write_log(LOG_CALLBACK, basename(__FILE__) . ' line:' . __LINE__ . "[" . date("Y/m/d G:i:s", mktime()) . "] " . " ERROR INSERT -> \n QUERY= {$QUERY_FIELS} :: {$QUERY_VALUES}");
                 sleep(2);
                 return array($insert_id_callback, 'result=Error', ' ERROR - INSERT INTO DB');
             }
             // SUCCEED INSERT
             write_log(LOG_CALLBACK, basename(__FILE__) . ' line:' . __LINE__ . "[" . date("Y/m/d G:i:s", mktime()) . "] " . " CALLBACK INSERTED -> \n QUERY= {$QUERY_FIELS} :: {$QUERY_VALUES}");
             return array($insert_id_callback, 'result=Success', " Success - Callback request has been accepted ");
         } else {
             $error_msg = 'Error : You don t have enough credit to call you back !!!';
         }
     } else {
         $error_msg = 'Error : There is no route to call back your phonenumber !!!';
     }
     // CALLBACK FAIL
     write_log(LOG_CALLBACK, "error_msg = {$error_msg}");
     return array($insert_id_callback, 'result=Error', " ERROR - {$error_msg}");
 }
Beispiel #11
0
    exit;
}
if ($FG_DEBUG > 0) {
    echo "NEW ACCOUNT CREATED - <b>result_query={$result_query}</b> <br> {$FG_ADITION_SECOND_ADD_VALUE}";
}
$id_cc_card = $result_query;
$type = FRIEND_TYPE;
$allow = FRIEND_ALLOW;
$context = FRIEND_CONTEXT;
$nat = FRIEND_NAT;
$amaflags = FRIEND_AMAFLAGS;
$qualify = FRIEND_QUALIFY;
$host = FRIEND_HOST;
$dtmfmode = FRIEND_DTMFMODE;
$FG_QUERY_ADITION_SIP_IAX = 'name, type, username, accountcode, regexten, callerid, amaflags, secret, md5secret, nat, dtmfmode, qualify, canreinvite,disallow, allow, host, callgroup, context, defaultip, fromuser, fromdomain, insecure, language, mailbox, permit, deny, mask, pickupgroup, port,restrictcid, rtptimeout, rtpholdtimeout, musiconhold, regseconds, ipaddr, cancallforward';
$uipass = MDP_STRING();
// For IAX and SIP
$param_add_fields = "name, accountcode, regexten, amaflags, callerid, context, dtmfmode, host,  type, username, allow, secret, id_cc_card, nat,  qualify";
$param_add_value = "'{$cardnum}', '{$cardnum}', '{$cardnum}', '{$amaflags}', '{$cardnum}', '{$context}', '{$dtmfmode}','{$host}', '{$type}', '{$cardnum}', '{$allow}', '" . $uipass . "', '{$id_cc_card}', '{$nat}', '{$qualify}'";
$list_names = explode(",", $FG_QUERY_ADITION_SIP_IAX);
$FG_TABLE_SIP_NAME = "cc_sip_buddies";
$FG_TABLE_IAX_NAME = "cc_iax_buddies";
for ($ki = 0; $ki < 2; $ki++) {
    if ($ki == 0) {
        $cfriend = 'sip';
        $FG_TABLE_NAME = "cc_sip_buddies";
        $buddyfile = BUDDY_SIP_FILE;
    } else {
        $cfriend = 'iax';
        $FG_TABLE_NAME = "cc_iax_buddies";
        $buddyfile = BUDDY_IAX_FILE;
 public function Create_Customer($security_key, $instance, $id_callplan, $id_didgroup, $units, $accountnumber_len, $balance, $activated, $status, $simultaccess, $currency, $typepaid, $sip, $iax, $language, $voicemail_enabled, $country)
 {
     $arr_check = $this->Check_KeyInstance($security_key, $instance);
     if ($arr_check[0] == 'ERROR') {
         return $arr_check;
     }
     $id_group = $arr_check[0];
     if (!is_numeric($id_callplan)) {
         return array("ERROR", "NO ID_CALLPLAN PROVIDED");
     }
     if ($accountnumber_len < 2 || $accountnumber_len > 40) {
         return array("ERROR", "WRONG ACCOUNT NUMBER LENGTH - {$accountnumber_len}");
     }
     if (strlen($country) == 3) {
         $country = strtoupper($country);
     } else {
         $country = 'USA';
     }
     if (strlen($language) == 2) {
         $language = strtolower($language);
     } else {
         $language = 'en';
     }
     if ($activated) {
         $activated = 't';
     } else {
         $activated = 'f';
     }
     $instance_realtime = new Realtime();
     $FG_ADITION_SECOND_ADD_TABLE = "cc_card";
     $FG_ADITION_SECOND_ADD_FIELDS = "username, useralias, credit, tariff, country, language, activated, simultaccess, currency, typepaid, uipass, id_group, id_didgroup, sip_buddy, iax_buddy";
     if (DB_TYPE != "postgres") {
         $FG_ADITION_SECOND_ADD_FIELDS .= ",creationdate ";
     }
     $instance_sub_table = new Table($FG_ADITION_SECOND_ADD_TABLE, $FG_ADITION_SECOND_ADD_FIELDS);
     $sip_buddy = $iax_buddy = 0;
     if (isset($sip) && $sip == 1) {
         $sip_buddy = 1;
     }
     if (isset($iax) && $iax == 1) {
         $iax_buddy = 1;
     }
     //initialize refill parameter
     $description_refill = gettext("CREATION CARD REFILL");
     $field_insert_refill = "credit, card_id, description";
     $instance_refill_table = new Table("cc_logrefill", $field_insert_refill);
     $arr_account = array();
     for ($k = 0; $k < $units; $k++) {
         $arr_card_alias = gen_card_with_alias("cc_card", 0, $accountnumber_len);
         $accountnumber = $arr_card_alias[0];
         $useralias = $arr_card_alias[1];
         if (!is_numeric($balance)) {
             $balance = 0;
         }
         $passui_secret = MDP_NUMERIC(5) . MDP_STRING(10) . MDP_NUMERIC(5);
         $FG_ADITION_SECOND_ADD_VALUE = "'{$accountnumber}', '{$useralias}', '{$balance}', '{$id_callplan}', '{$country}', '{$language}', '{$activated}', " . " {$simultaccess}, '{$currency}', {$typepaid}, '{$passui_secret}', '{$id_group}', '{$id_didgroup}', {$sip_buddy}, {$iax_buddy}";
         if (DB_TYPE != "postgres") {
             $FG_ADITION_SECOND_ADD_VALUE .= ", now() ";
         }
         $id_cc_card = $instance_sub_table->Add_table($this->DBHandle, $FG_ADITION_SECOND_ADD_VALUE, null, null, 'id');
         if (!$id_cc_card) {
             return array(false, "ERROR CREATING ACCOUNT (" . $k . " Accounts created)");
         }
         $arr_account[] = array($accountnumber, $id_cc_card);
         // create refill for card
         if ($balance > 0) {
             $value_insert_refill = "'{$balance}', '{$id_cc_card}', '{$description_refill}' ";
             $instance_refill_table->Add_table($this->DBHandle, $value_insert_refill, null, null);
         }
         $instance_realtime->insert_voip_config($sip_buddy, $iax_buddy, $id_cc_card, $accountnumber, $passui_secret);
     }
     // Save Sip accounts to file
     $instance_realtime->create_trunk_config_file('sip');
     // Save IAX accounts to file
     $instance_realtime->create_trunk_config_file('iax');
     return array(serialize($arr_account), "Create_Customer SUCCESS - " . $k . " ACCOUNTS CREATED");
 }