179 lines
6.0 KiB
PHP
179 lines
6.0 KiB
PHP
|
<?php
|
||
|
|
||
|
/**
|
||
|
* AgileBill - Open Billing Software
|
||
|
*
|
||
|
* This body of work is free software; you can redistribute it and/or
|
||
|
* modify it under the terms of the Open AgileBill License
|
||
|
* License as published at http://www.agileco.com/agilebill/license1-4.txt
|
||
|
*
|
||
|
* For questions, help, comments, discussion, etc., please join the
|
||
|
* Agileco community forums at http://forum.agileco.com/
|
||
|
*
|
||
|
* @link http://www.agileco.com/
|
||
|
* @copyright 2004-2008 Agileco, LLC.
|
||
|
* @license http://www.agileco.com/agilebill/license1-4.txt
|
||
|
* @author Tony Landis <tony@agileco.com> and Thralling Penguin, LLC <http://www.thrallingpenguin.com>
|
||
|
* @package AgileBill
|
||
|
* @version 1.4.93
|
||
|
*/
|
||
|
|
||
|
require_once PATH_MODULES.'product/base_product_plugin.inc.php';
|
||
|
|
||
|
class base_voip_plugin extends base_product_plugin
|
||
|
{
|
||
|
function delete_cart($VAR, $cart, $checkDID = false)
|
||
|
{
|
||
|
if(!isset($cart['product_attr'])) return;
|
||
|
|
||
|
$db =& DB();
|
||
|
$attr = unserialize($cart['product_attr']);
|
||
|
if(!empty($attr['station']))
|
||
|
{
|
||
|
$did = $attr['station'];
|
||
|
|
||
|
if($checkDID) {
|
||
|
// check if user owns did && is in did pool (if so we can assume it was a topup and return)
|
||
|
$didrs = $db->Execute(sqlSelect($db,"voip_did","id,did","did = ::{$did}:: AND account_id=".SESS_ACCOUNT));
|
||
|
if($didrs && $didrs->RecordCount()>0) return;
|
||
|
}
|
||
|
|
||
|
// get E164 so we can determine the country code and did npa/nxx/station and find the did and plugin
|
||
|
include_once(PATH_MODULES.'voip/voip.inc.php');
|
||
|
$v = new voip;
|
||
|
$did_arr = $v->get_did_e164($did);
|
||
|
if(!$did_arr) return;
|
||
|
|
||
|
$plugin_id = $did_arr['voip_did_plugin_id'];
|
||
|
|
||
|
// Get the plugin detials
|
||
|
$rs = & $db->Execute(sqlSelect($db,"voip_did_plugin","plugin,avail_countries","id = $plugin_id"));
|
||
|
if($rs && $rs->RecordCount() > 0) {
|
||
|
$plugin = $rs->fields['plugin'];
|
||
|
} else {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// load the plugin and call release();
|
||
|
$file = PATH_PLUGINS.'voip_did/'.$plugin.'.php';
|
||
|
if(is_file($file)) {
|
||
|
include_once($file);
|
||
|
eval('$plg = new plgn_voip_did_'.$plugin.';');
|
||
|
if(is_object($plg)) {
|
||
|
if(is_callable(array($plg, 'release'))) {
|
||
|
$plg->id = $did_arr['voip_did_plugin_id'];;
|
||
|
$plg->did = $did;
|
||
|
$plg->did_id = $did_arr['id'];
|
||
|
$plg->release();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function validate_cart($VAR, $product, $did, $ported)
|
||
|
{
|
||
|
// get E164 so we can determine the country code and did npa/nxx/station
|
||
|
$db =& DB();
|
||
|
include_once(PATH_MODULES.'voip/voip.inc.php');
|
||
|
$v = new voip;
|
||
|
$cc = ""; $npa = ""; $nxx = ""; $e164 = "";
|
||
|
if ($v->e164($did, $e164, $cc, $npa, $nxx))
|
||
|
{
|
||
|
if ($ported) return true;
|
||
|
|
||
|
// verify this did is in voip_pool, and is not assigned to an account, and is not reserved
|
||
|
if ($cc == '1') {
|
||
|
$station = substr($e164, 8);
|
||
|
$sql = sqlSelect($db,"voip_pool","*",
|
||
|
"(date_reserved IS NULL OR date_reserved=0) AND (account_id IS NULL OR account_id=0) AND country_code=$cc AND npa=$npa AND nxx=$nxx AND station=$station");
|
||
|
} else {
|
||
|
$station = substr($e164, 4 + strlen($cc));
|
||
|
$sql = sqlSelect($db,"voip_pool","*",
|
||
|
"(date_reserved IS NULL OR date_reserved=0) AND (account_id IS NULL OR account_id=0) AND country_code=$cc AND station=$station");
|
||
|
}
|
||
|
$rs = $db->Execute($sql);
|
||
|
if($rs && $rs->RecordCount() > 0) {
|
||
|
$did_id = $rs->fields['id'];
|
||
|
$plugin_id = $rs->fields['voip_did_plugin_id'];
|
||
|
} else {
|
||
|
return "Sorry, the selected number is not available or has been removed from our system, please go back and select another.";
|
||
|
}
|
||
|
} else {
|
||
|
return "The format for the provided number is incorrect.";
|
||
|
}
|
||
|
|
||
|
// get the id of the current country calling code
|
||
|
$country_id = 0;
|
||
|
$country = $db->Execute($sql = sqlSelect($db,"voip_iso_country_code_map","iso_country_code","country_code = $cc"));
|
||
|
if($country && $country->RecordCount() == 1) {
|
||
|
$countryc = & $db->Execute($sql = sqlSelect($db,"voip_iso_country_code","id","code = ::{$country->fields['iso_country_code']}::"));
|
||
|
if($countryc && $countryc->RecordCount() == 1) {
|
||
|
$country_id = $countryc->fields['id'];
|
||
|
} else {
|
||
|
return "Sorry, the selected number is not available as the country is disallowed for the current product";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// validate that the country is available for the selected plugin
|
||
|
$country_auth = false;
|
||
|
$rs = $db->Execute(sqlSelect($db,"voip_did_plugin","plugin,avail_countries","id = $plugin_id"));
|
||
|
if($rs && $rs->RecordCount()) {
|
||
|
$plugin = $rs->fields['plugin'];
|
||
|
$carr = unserialize($rs->fields['avail_countries']);
|
||
|
foreach($carr as $cid) {
|
||
|
if($country_id == $cid) { $country_auth=true; break; }
|
||
|
}
|
||
|
}
|
||
|
if(!$country_auth) return "Sorry, the selected number is not available as the country is disallowed for the current product";
|
||
|
|
||
|
// Get the plugin details and load plugin as an object
|
||
|
$file = PATH_PLUGINS.'voip_did/'.$plugin.'.php';
|
||
|
if(is_file($file)) {
|
||
|
include_once($file);
|
||
|
eval('$plg = new plgn_voip_did_'.$plugin.';');
|
||
|
if(is_object($plg)) {
|
||
|
if(is_callable(array($plg, 'reserve'))) {
|
||
|
$plg->id = $plugin_id;
|
||
|
$plg->did = $did;
|
||
|
$plg->did_id = $did_id;
|
||
|
$plg->country = $cc;
|
||
|
$result = $plg->reserve();
|
||
|
if($result === true) {
|
||
|
return true;
|
||
|
} else {
|
||
|
return $result;
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
return "VoIP DID object couldn't be created.";
|
||
|
}
|
||
|
} else {
|
||
|
return "VoIP DID plugin not found.";
|
||
|
}
|
||
|
// something failed...
|
||
|
return "An unknown error occurred while attempting to reserve your requested number, please try again later.";
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Retrieve the DID assigned to a service ID
|
||
|
*/
|
||
|
function get_parent_did($id)
|
||
|
{
|
||
|
$db = &DB();
|
||
|
$sql = 'SELECT prod_attr_cart FROM '.AGILE_DB_PREFIX.'service WHERE
|
||
|
id = '.$db->qstr($id).' AND
|
||
|
site_id = '.$db->qstr(DEFAULT_SITE);
|
||
|
$rs = $db->Execute($sql);
|
||
|
@$a = unserialize($rs->fields['prod_attr_cart']);
|
||
|
$did = "";
|
||
|
if (!empty($a['station'])) {
|
||
|
$did = str_replace("-", "", $a['station']);
|
||
|
}
|
||
|
if (!empty($a['ported'])) {
|
||
|
$did = $a['ported'];
|
||
|
}
|
||
|
return $did;
|
||
|
}
|
||
|
}
|
||
|
?>
|