<?php
/**
* Copyright (c) 2015, Christopher W.
* Olsen <cwolsen@uBixStudios.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by uBix Technologies.
* 4. Neither the name of uBix Studios nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY uBix Studios ''AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL uBix Studios BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: account_settings_json.php 85 2015-11-27 01:44:45Z reddawg $
*/
/* Start Defines */
define ( 'KEY_CHARS', 'abcdefghijklmnopqrstwxyz1234567890' );
/* Start of uBix VoIP Class */
class ubVoIP {
private $data;
private $voipServers;
public $voip_servers = array (
"AS-EAST-001.uBixVoIP.net" => "AS-EAST-001",
"AS-EAST-002.uBixVoIP.net" => "AS-EAST-002",
"AS-EAST-003.uBixVoIP.net" => "AS-EAST-003",
"AS-EAST-004.uBixVoIP.net" => "AS-EAST-004",
"AS-EAST-INT-004.uBixVoIP.net" => "AS-EAST-INT-004"
);
public $voip_ports = array (
5060
);
public $voip_transports = array (
"DNSnaptr",
"TCPPreferred",
"UDPOnly"
);
/* Class Constructor */
public function __construct(&$_data) {
$this->data = &$_data;
}
/* END: Class Constructor */
public function genAccountCode_Old($len = 16) {
define ( 'KEY_CHARS', 'abcdefghijklmnopqrstwxyz1234567890' );
$k = str_repeat ( '.', $len );
while ( $len-- ) {
$k [$len] = substr ( KEY_CHARS, mt_rand ( 0, strlen ( KEY_CHARS ) - 1 ), 1 );
}
//$query = "SELECT account_code"
return $k;
}
/*
*
* This Function Returns The VoIP Accounts
*
*/
public function getAccountCodes($codeFirst = 0, $all = 0, $json = 0) {
$query = "SELECT account_number, voip_code, account_code, company, system_version FROM accounts WHERE status = 1 ORDER BY company";
$result = $this->data->DB ['main']->query ( $query );
if ($json == 0)
if ($all == 1)
$vcodes = "<option value=\"\">All</option>\n";
else
$vcodes = "<option value=\"\">Please Select</option>\n";
else if ($all == 1)
$vcodes [] = array (
'Desc' => 'All',
'ID' => ''
);
else
$vcodes [] = array (
'Desc' => 'Please Select',
'ID' => ''
);
while ( $qData = $result->fetch_assoc () ) {
$account_code = ($qData ['system_version'] == 1) ? $qData ['voip_code'] : $qData ['account_code'];
if ($json == 0) {
if ($codeFirst == 0) {
if ($this->data->data ['voip_code'] == $account_code)
$vcodes .= "<option value=\"" . $account_code . "\" selected>" . $qData ['company'] . " - " . $account_code . " - " . $qData ['account_number'] . "</option>\n";
else
$vcodes .= "<option value=\"" . $account_code . "\">" . $qData ['company'] . " - " . $account_code . " - " . $qData ['account_number'] . "</option>\n";
}
else {
if ($this->data->data ['voip_code'] == $qData ['voip_code'])
$vcodes .= "<option value=\"" . $account_code . "\" selected>" . $account_code . " - " . $qData ['company'] . " - " . $qData ['account_number'] . "</option>\n";
else
$vcodes .= "<option value=\"" . $account_code . "\">" . $account_code . " - " . $qData ['company'] . " - " . $qData ['account_number'] . "</option>\n";
}
}
else {
$voip_code = ($qData ['system_version'] == 1) ? $qData ['voip_code'] : $qData ['account_code'];
if ($codeFirst == 0)
$vcodes [] = array (
'Desc' => $qData ['company'] . " : " . $qData ['account_number'],
'ID' => $voip_code
);
else
$vcodes [] = array (
'Desc' => $qData ['account_number'] . " : " . $qData ['company'],
'ID' => $voip_code
);
}
}
$result->free ();
return ($vcodes);
}
public function getCarriers() {
$query = "SELECT carrier_id,name FROM carriers ORDER BY name";
$result = $this->data->DB['main']->query($query);
$carriers [] = array (
'Desc' => 'All Carriers',
'ID' => ''
);
while ($cData = $result->fetch_assoc()) {
$carriers[] = array('ID' => $cData['carrier_id'],'Desc' => $cData['name']);
}
$result->free();
return($carriers);
}
public function getAccounts($accountFirst = 0/*, $json = 0*/) {
$query = "SELECT account_number, company FROM accounts WHERE voip_code != '' ORDER BY company";
$result = $this->data->DB ['main']->query ( $query );
/*
* if ($json == 0) {
* $vcodes = "<option value=\"\">All</option>\n";
*
* while ( $qData = $result->fetch_assoc () ) {
* if ($accountFirst == 0) {
* if ($this->data->data ['account_number'] == $qData ['account_number'])
* $vcodes .= "<option value=\"" . $qData ['account_number'] . "\" selected>" . $qData ['company'] . " : " . $qData ['account_number'] . "</option>\n";
* else
* $vcodes .= "<option value=\"" . $qData ['account_number'] . "\">" . $qData ['company'] . " : " . $qData ['account_number'] . "</option>\n";
* } else {
* if ($this->data->data ['account_number'] == $qData ['account_number'])
* $vcodes .= "<option value=\"" . $qData ['account_number'] . "\" selected>" . $qData ['account_number'] . " : " . $qData ['company'] . "</option>\n";
* else
* $vcodes .= "<option value=\"" . $qData ['account_number'] . "\">" . $qData ['account_number'] . " : " . $qData ['company'] . "</option>\n";
* }
* }
* } else {
*/
$vcodes [] = array (
'Desc' => 'All Accounts',
'ID' => ''
);
while ( $qData = $result->fetch_assoc () ) {
if ($accountFirst == 0)
$vcodes [] = array (
'Desc' => $qData ['company'] . " : " . $qData ['account_number'],
'ID' => $qData ['account_number']
);
else
$vcodes [] = array (
'Desc' => $qData ['account_number'] . " : " . $qData ['company'],
'ID' => $qData ['account_number']
);
}
/*
* }
*/
$result->free ();
return ($vcodes);
}
/* END: getAccounts */
/*
* getServers($eI = 0)
* eI = Extended Info
*/
public function getServers($eI = 0) {
$serverList = array ();
if ($eI == 1)
$query = "SELECT server_name, server_address, server_transports, server_ports FROM voip_servers ORDER BY server_name";
else
$query = "SELECT server_name, server_address FROM voip_servers ORDER BY server_name";
$result = $this->data->DB ['main']->query ( $query );
while ( $qData = $result->fetch_assoc () )
$serverList [] = $qData;
$result->free ();
return ($serverList);
}
public function getMailboxes($accountCode = "") {
if ($accountCode != "")
$query = "SELECT mailbox, context FROM voicemail WHERE context = '" . $accountCode . "-voicemail'";
else
$query = "SELECT mailbox, context FROM voicemail";
$result = $this->data->DB ['voicemail']->query ( $query );
$mailboxList [] = Array (
'label' => "No Mailbox",
'mailbox' => ''
);
while ( $qData = $result->fetch_row () )
$mailboxList [] = Array (
'label' => $qData [0],
'mailbox' => $qData [0] . "@" . $qData [1]
);
$result->free ();
return ($mailboxList);
}
public function genPassword($length = 10) {
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
return substr ( str_shuffle ( $chars ), 0, $length );
}
public function selectServer($server) {
$opts = "";
foreach ( $this->voip_servers as $key => $val ) {
if ($server == $key)
$opts .= "<option value=\"" . $key . "\" selected>" . $val . "</option>";
else
$opts .= "<option value=\"" . $key . "\">" . $val . "</option>";
}
return ($opts);
}
/* END: selectServer */
public function selectPort($port) {
$opts = "";
foreach ( $this->voip_ports as $key ) {
if ($port == $key)
$opts .= "<option value=\"" . $key . "\" selected>" . $key . "</option>";
else
$opts .= "<option value=\"" . $key . "\">" . $key . "</option>";
}
return ($opts);
}
/* END: selectPort */
public function selectTransport($transport) {
$opts = "";
foreach ( $this->voip_transports as $key ) {
if ($transport == $key)
$opts .= "<option value=\"" . $key . "\" selected>" . $key . "</option>";
else
$opts .= "<option value=\"" . $key . "\">" . $key . "</option>";
}
return ($opts);
}
/* END: selectTransport */
public function getExtensions_PO($an = '', $ext = '', $wvc = false) {
$opts = "<option value=\"\">Not Assigned</option>";
if ($an != '') {
$query = "SELECT voip_code FROM accounts WHERE account_number = '$an'";
$result = $this->data->DB ['main']->query ( $query );
$vc = $result->fetch_row () [0];
$result->free ();
$query = "SELECT name, accountcode FROM sippeers WHERE accountcode = '$vc' ORDER BY name";
}
else
$query = "SELECT name, accountcode FROM sippeers ORDER BY name";
$result = $this->data ['voip_db']->query ( $query );
while ( $qData = $result->fetch_assoc () ) {
if ($ext == $qData ['name'])
if ($wvc == false)
$opts .= "<option value=\"" . $qData ['name'] . "\" selected>" . $qData ['name'] . "</option>";
else
$opts .= "<option value=\"" . $qData ['name'] . ":" . $qData ['accountcode'] . "\" selected>" . $qData ['name'] . "</option>";
else if ($wvc == false)
$opts .= "<option value=\"" . $qData ['name'] . "\">" . $qData ['name'] . "</option>";
else
$opts .= "<option value=\"" . $qData ['name'] . ":" . $qData ['accountcode'] . "\">" . $qData ['name'] . "</option>";
}
$result->free ();
return ($opts);
}
/* END: getExtensions */
public function getSecret($ext) {
$query = "SELECT secret FROM sippeers WHERE NAME = '$ext'";
$result = $this->data ['voip_db']->query ( $query );
if ($result === false)
$secret = time ();
else {
$secret = $result->fetch_row () [0];
$result->free ();
}
return ($secret);
}
/* END: getSecret */
public function deviceList($vdtid = '', $wL = 0, $json = 0) {
$query = "SELECT vdtid, manufacturer, model, firmware, line_keys FROM voip_device_types ORDER BY manufacturer, model";
$result = $this->data->DB ['main']->query ( $query );
while ( $qData = $result->fetch_assoc () ) {
if ($wL == 0)
$sV = $qData ['vdtid'];
else
$sV = $qData ['vdtid'] . ":" . $qData ['line_keys'];
if ($json == 0) {
$opts = "<option value=\"0\">Select Device</option>";
if ($vdtid == $qData ['vdtid'])
$opts .= "<option value=\"" . $sV . "\" selected>" . $qData ['manufacturer'] . " " . $qData ['model'] . " - Firmware: " . $qData ['firmware'] . " - Line Keys: " . $qData ['line_keys'] . "</option>";
else
$opts .= "<option value=\"" . $sV . "\">" . $qData ['manufacturer'] . " " . $qData ['model'] . " - Firmware: " . $qData ['firmware'] . " - Line Keys: " . $qData ['line_keys'] . "</option>";
}
else {
$opts [] = array (
'Desc' => $qData ['manufacturer'] . " " . $qData ['model'] . " - Firmware: " . $qData ['firmware'] . " - Line Keys: " . $qData ['line_keys'],
'ID' => $sV
);
}
}
$result->free ();
return ($opts);
}
/* END: deviceList */
public function deviceLines($vdtid) {
if ($vdtid != "") {
$query = "SELECT line_keys FROM voip_device_types WHERE vdtid = $vdtid";
$result = $this->data->DB ['main']->query ( $query );
$ret = $result->fetch_row () [0];
$result->free ();
}
else
$ret = "0";
return ($ret);
}
/* END: deviceLine */
public function getExtensions($an = '', $ext = '', $wvc = false, $json = false) {
if ($an != '') {
$query = "SELECT voip_code FROM accounts WHERE account_number = '$an'";
$result = $this->data->DB ['main']->query ( $query );
$vc = $result->fetch_row () [0];
$result->free ();
$query = "SELECT name, accountcode FROM sippeers WHERE accountcode = '$vc' ORDER BY name";
}
else
$query = "SELECT name, accountcode FROM sippeers ORDER BY name";
$result = $this->data->DB ['voip']->query ( $query );
if ($json == false) {
$opts = "<option value=\"\">Not Assigned</option>";
while ( $qData = $result->fetch_assoc () ) {
if ($ext == $qData ['name'])
if ($wvc == false)
$opts .= "<option value=\"" . $qData ['name'] . "\" selected>" . $qData ['name'] . "</option>";
else
$opts .= "<option value=\"" . $qData ['name'] . ":" . $qData ['accountcode'] . "\" selected>" . $qData ['name'] . "</option>";
else if ($wvc == false)
$opts .= "<option value=\"" . $qData ['name'] . "\">" . $qData ['name'] . "</option>";
else
$opts .= "<option value=\"" . $qData ['name'] . ":" . $qData ['accountcode'] . "\">" . $qData ['name'] . "</option>";
}
}
else {
$opts [] = array (
'Desc' => 'Not Assigned',
'ID' => ''
);
while ( $qData = $result->fetch_assoc () ) {
if ($wvc == false)
$opts [] = array (
'Desc' => substr ( $qData ['name'], strlen ( $qData ['accountcode'] ) ),
'ID' => $qData ['name']
);
else
$opts [] = array (
'Desc' => $qData ['name'],
'ID' => $qData ['name'] . ":" . $qData ['accountcode']
);
}
}
$result->free ();
return ($opts);
}
public function peerInfo($peer, $aL, $voipCode) {
if ($aL == 1) {
$query = "SELECT server_primary, server_backup, transport_primary, transport_backup, server_port_primary, server_port_backup FROM accounts WHERE voip_code = '" . $voipCode . "'";
$result = $this->data->DB ['main']->query ( $query );
$qData = $result->fetch_assoc ();
$result->free ();
$server_primary [] = array (
'Desc' => explode ( ".", $qData ['server_primary'] ) [0],
'ID' => $qData ['server_primary']
);
$server_backup [] = array (
'Desc' => explode ( ".", $qData ['server_backup'] ) [0],
'ID' => $qData ['server_backup']
);
$transport_primary [] = array (
'Desc' => $qData ['transport_primary'],
'ID' => $qData ['transport_primary']
);
$transport_backup [] = array (
'Desc' => $qData ['transport_backup'],
'ID' => $qData ['transport_backup']
);
$server_port_primary [] = array (
'Desc' => $qData ['server_port_primary'],
'ID' => $qData ['server_port_primary']
);
$server_port_backup [] = array (
'Desc' => $qData ['server_port_backup'],
'ID' => $qData ['server_port_backup']
);
}
else {
$server_primary [] = array (
'Desc' => 'Select'
);
$server_backup [] = array (
'Desc' => 'Select'
);
$transport_primary [] = array (
'Desc' => 'Select'
);
$transport_backup [] = array (
'Desc' => 'Select'
);
$server_port_primary [] = array (
'Desc' => 'Select'
);
$server_port_backup [] = array (
'Desc' => 'Select'
);
foreach ( $this->voip_servers as $key => $val ) {
$server_primary [] = array (
'Desc' => $val,
'ID' => $key
);
$server_backup [] = array (
'Desc' => $val,
'ID' => $key
);
}
foreach ( $this->voip_ports as $key ) {
$server_port_primary [] = array (
'Desc' => $key,
'ID' => $key
);
$server_port_backup [] = array (
'Desc' => $key,
'ID' => $key
);
}
foreach ( $this->voip_transports as $key ) {
$transport_primary [] = array (
'Desc' => $key,
'ID' => $key
);
$transport_backup [] = array (
'Desc' => $key,
'ID' => $key
);
}
}
$peerInfo [] = array (
'server_primary' => $server_primary,
'server_backup' => $server_backup,
'transport_primary' => $transport_primary,
'transport_backup' => $transport_backup,
'server_port_primary' => $server_port_primary,
'server_port_backup' => $server_port_backup
);
return ($peerInfo);
}
/**
*
* @param unknown $phoneNumber
* @return string
*/
function formatPhoneNumber_Old($phoneNumber) {
$phoneNumber = preg_replace ( '/[^0-9]/', '', $phoneNumber );
if (strlen ( $phoneNumber ) > 10) {
$countryCode = substr ( $phoneNumber, 0, strlen ( $phoneNumber ) - 10 );
$areaCode = substr ( $phoneNumber, -10, 3 );
$nextThree = substr ( $phoneNumber, -7, 3 );
$lastFour = substr ( $phoneNumber, -4, 4 );
$phoneNumber = $countryCode . '-' . $areaCode . '-' . $nextThree . '-' . $lastFour;
// $phoneNumber = '+'.$countryCode.'-'.$areaCode.'-'.$nextThree.'-'.$lastFour;
// $phoneNumber = $countryCode . $areaCode . $nextThree . $lastFour;
}
else if (strlen ( $phoneNumber ) == 10) {
$areaCode = substr ( $phoneNumber, 0, 3 );
$nextThree = substr ( $phoneNumber, 3, 3 );
$lastFour = substr ( $phoneNumber, 6, 4 );
$phoneNumber = $areaCode . '-' . $nextThree . '-' . $lastFour;
}
else if (strlen ( $phoneNumber ) == 7) {
$nextThree = substr ( $phoneNumber, 0, 3 );
$lastFour = substr ( $phoneNumber, 3, 4 );
$phoneNumber = $nextThree . '-' . $lastFour;
}
return $phoneNumber;
}
function formatPhoneNumber($phoneNumber) {
$phoneNumber = preg_replace ( '/[^0-9]/', '', $phoneNumber );
if (strlen ( $phoneNumber ) > 10)
$pN = substr ( $phoneNumber, 0, strlen ( $phoneNumber ) - 10 ) . '-' . substr ( $phoneNumber, -10, 3 ) . '-' . substr ( $phoneNumber, -7, 3 ) . '-' . substr ( $phoneNumber, -4, 4 );
else if (strlen ( $phoneNumber ) == 10)
$pN = substr ( $phoneNumber, 0, 3 ) . '-' . substr ( $phoneNumber, 3, 3 ) . '-' . substr ( $phoneNumber, 6, 4 );
else if (strlen ( $phoneNumber ) == 7)
$pN = substr ( $phoneNumber, 0, 3 ) . '-' . substr ( $phoneNumber, 3, 4 );
else
$pN = "[" . $phoneNumber . "]";
return $pN;
}
public function genAccountCode($len = 16) {
global $db;
tryAgain:
$k = str_repeat ( '.', $len );
while ( $len-- ) {
$k [$len] = substr ( KEY_CHARS, mt_rand ( 0, strlen ( KEY_CHARS ) - 1 ), 1 );
}
$query = "SELECT account_code FROM accounts WHERE account_code = '" . $k . "'";
$res = $this->data->DB ['main']->query ( $query );
if ($res->num_rows > 0)
goto tryAgain;
return $k;
}
}
function voip_getCodes() {
$query = "SELECT voip_code,company FROM accounts ORDER BY voip_code";
$result = $ubF->DB ['main']->query ( $query );
$vcodes = "<option value=\"\">All</option>\n";
while ( $qData = $result->fetch_assoc () ) {
if ($form_data ['voip_code'] == $qData ['voip_code'])
$vcodes .= "<option value=\"" . $qData ['voip_code'] . "\" selected>" . $qData ['voip_code'] . " : " . $qData ['company'] . "</option>\n";
else
$vcodes .= "<option value=\"" . $qData ['voip_code'] . "\">" . $qData ['voip_code'] . " : " . $qData ['company'] . "</option>\n";
}
$result->free ();
return ($vcodes);
}
?>