2008-11-26 22:50:40 +00:00
< ? 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
*/
class voip_prepaid
{
# Open the constructor for this mod
function voip_prepaid ()
{
$db =& DB ();
$rs = $db -> Execute ( sqlSelect ( $db , " voip " , " prepaid_low_balance " , " id=:: " . DEFAULT_SITE . " :: " ));
2008-12-30 01:43:41 +00:00
if ( $rs && $rs -> RecordCount () > 0 )
{
# e-mail user's once when balance reaches this amount:
$this -> lowBalance = $rs -> fields [ 0 ];
2008-12-30 12:39:04 +00:00
}
else
{
$this -> lowBalance = false ;
}
2008-12-30 01:43:41 +00:00
2008-12-30 12:39:04 +00:00
$this -> pinLenth = 10 ; // up to 10
2008-12-30 01:43:41 +00:00
2008-12-30 12:39:04 +00:00
# name of this module:
$this -> module = " voip_prepaid " ;
2008-12-30 01:43:41 +00:00
2008-12-30 12:39:04 +00:00
# location of the construct XML file:
$this -> xml_construct = PATH_MODULES . " " . $this -> module . " / " . $this -> module . " _construct.xml " ;
2008-12-30 01:43:41 +00:00
2008-12-30 12:39:04 +00:00
# open the construct file for parsing
$C_xml = new CORE_xml ;
$construct = $C_xml -> xml_to_array ( $this -> xml_construct );
$this -> method = $construct [ " construct " ][ " method " ];
$this -> field = $construct [ " construct " ][ " field " ];
$this -> table = $construct [ " construct " ][ " table " ];
$this -> module = $construct [ " construct " ][ " module " ];
$this -> cache = $construct [ " construct " ][ " cache " ];
$this -> order_by = $construct [ " construct " ][ " order_by " ];
$this -> limit = $construct [ " construct " ][ " limit " ];
2008-11-26 22:50:40 +00:00
}
/** generate a new pin */
function genPin ()
{
for ( $trys = 0 ; $trys <= 10 ; $trys ++ )
{
$rand = rand ( 1000000000 , 9999999999 );
$pin = substr ( $rand , 0 , $this -> pinLenth );
// check if unique
$db =& DB ();
$rs = $db -> Execute ( sqlSelect ( $db , " voip_prepaid " , " id " , " pin = :: $pin :: " ));
if ( $rs -> RecordCount () > 0 ) {
$trys ++ ; // pin is not unique
} else {
return $pin ; // pin is unique
}
}
return false ;
}
/** balance notification task */
function task ( $VAR )
{
include_once ( PATH_MODULES . 'email_template/email_template.inc.php' );
2008-12-30 12:39:04 +00:00
if ( defined $this -> lowBalance )
2008-11-26 22:50:40 +00:00
{
2008-12-30 02:45:00 +00:00
// delete expired pins?
// $delrs = & $db->Execute(sqlDelete($db,"voip_prepaid"," date_expire <> 0 and date_expire is not null and date_expire > ".time()));
// get low balances and notify
$db =& DB ();
$rs = & $db -> Execute ( $sql = sqlSelect ( $db , " voip_prepaid " , " * " , " balance <= $this->lowBalance and (bulk is null or bulk=0) and (date_email is null or date_email = 0) " ));
if ( $rs && $rs -> RecordCount () > 0 )
2008-11-26 22:50:40 +00:00
{
2008-12-30 02:45:00 +00:00
while ( ! $rs -> EOF )
{
# send the user the details
$email = new email_template ;
$email -> send ( 'voip_balance_prepaid' , $rs -> fields [ 'account_id' ], $rs -> fields [ 'id' ], '' , number_format ( $rs -> fields [ 'balance' ], 4 ));
2008-11-26 22:50:40 +00:00
2008-12-30 02:45:00 +00:00
# update the record
$db -> Execute ( sqlUpdate ( $db , " voip_prepaid " , array ( 'date_email' => time ()), " id= { $rs -> fields [ 'id' ] } " ));
$rs -> MoveNext ();
}
2008-11-26 22:50:40 +00:00
}
}
}
/** provision pin */
function provision_pin_new ( & $obj )
{
$db =& DB ();
// default field values:
if ( ! empty ( $obj -> product_attr [ 'expire' ]) && ! empty ( $obj -> product_attr [ 'expire_days' ]))
$fields [ 'expire_days' ] = $obj -> product_attr [ 'expire_days' ];
$fields [ 'date_expire' ] = 0 ;
// check if user passed existing pin
if ( ! empty ( $obj -> prod_attr_cart [ 'pin' ]))
{
// if existing pin, validate that it belongs to the user and we can add a balance to it
$pin = $obj -> prod_attr_cart [ 'pin' ];
$pinrs = & $db -> Execute ( sqlSelect ( $db , " voip_prepaid " , " * " , " pin = :: $pin :: AND account_id = { $obj -> account [ 'id' ] } " ));
if ( $pinrs && $pinrs -> RecordCount () == 1 )
{
// update existing pin:
$fields [ 'balance' ] = $obj -> service [ 'price' ] + $pinrs -> fields [ 'balance' ];
$rs = $db -> Execute ( sqlUpdate ( $db , " voip_prepaid " , $fields , " pin = :: $pin :: " ));
return true ;
}
}
// the balance from the invoice line item (not including setup fee)
$itemid = $obj -> service [ 'invoice_item_id' ];
$invoiceItem = $db -> Execute ( sqlSelect ( $db , " invoice_item " , " price_base " , " id = $itemid " ));
if ( $invoiceItem && $invoiceItem -> RecordCount () > 0 ) {
$balance = $invoiceItem -> fields [ 'price_base' ];
} else {
$balance = $obj -> service [ 'price' ];
}
// still here? generate a new pin
$pin = $this -> genPin ();
if ( ! $pin ) return false ; // could not generate unique
$fields = Array ( 'account_id' => $obj -> account [ 'id' ],
'product_id' => $obj -> service [ 'product_id' ],
'pin' => $pin ,
'balance' => $balance ,
'in_use' => 0 );
if ( ! empty ( $obj -> product_attr [ 'expire' ]) && ! empty ( $obj -> product_attr [ 'expire_days' ])) $fields [ 'expire_days' ] = $obj -> product_attr [ 'expire_days' ];
$pin_id = sqlGenID ( $db , " voip_prepaid " );
$sql = sqlInsert ( $db , " voip_prepaid " , $fields , $pin_id );
$rs = $db -> Execute ( $sql );
if ( $rs ) {
# send the user the details
include_once ( PATH_MODULES . 'email_template/email_template.inc.php' );
$email = new email_template ;
$email -> send ( 'voip_new_prepaid_pin' , $obj -> account [ 'id' ], $pin_id , $pin , $obj -> plugin_data [ 'number' ]);
} else {
return false ;
}
return true ;
}
/** provision ani */
function provision_ani_new ( $obj )
{
$db =& DB ();
// default field values:
if ( ! empty ( $obj -> product_attr [ 'expire' ]) && ! empty ( $obj -> product_attr [ 'expire_days' ]))
$fields [ 'expire_days' ] = $obj -> product_attr [ 'expire_days' ];
$fields [ 'date_expire' ] = 0 ;
// check if ani exists already in db
$pin = $obj -> prod_attr_cart [ 'ani_new' ];
if ( ! empty ( $pin )) {
$pinexists = $db -> Execute ( sqlSelect ( $db , " voip_prepaid " , " * " , " pin = :: $pin :: AND ani=1 " ));
}
if ( $pinexists && $pinexists -> RecordCount () > 0 )
{
// update existing pin:
$fields [ 'balance' ] = $obj -> service [ 'price' ] + $pinexists -> fields [ 'balance' ];
$rs = $db -> Execute ( sqlUpdate ( $db , " voip_prepaid " , $fields , " pin = :: $pin :: AND ani=1 " ));
return true ;
}
elseif ( ! empty ( $obj -> prod_attr_cart [ 'ani_old' ]))
{
// existing ani provided by user
$pin = $obj -> prod_attr_cart [ 'ani_old' ];
$pinrs = $db -> Execute ( sqlSelect ( $db , " voip_prepaid " , " * " , " pin = :: $pin :: AND ani=1 " ));
if ( $pinrs && $pinrs -> RecordCount () == 1 )
{
// update existing pin:
$fields [ 'balance' ] = $obj -> service [ 'price' ] + $pinexists -> fields [ 'balance' ];
$rs = $db -> Execute ( sqlUpdate ( $db , " voip_new_prepaid_did " , $fields , " pin = :: $pin :: AND ani=1 " ));
return true ;
}
}
// the balance from the invoice line item (not including setup fee)
$itemid = $obj -> service [ 'invoice_item_id' ];
$invoiceItem = $db -> Execute ( sqlSelect ( $db , " invoice_item " , " price_base " , " id = $itemid " ));
if ( $invoiceItem && $invoiceItem -> RecordCount () > 0 ) {
$balance = $invoiceItem -> fields [ 'price_base' ];
} else {
$balance = $obj -> service [ 'price' ];
}
// still here? generate a new ani prepaid record
$pin = $obj -> prod_attr_cart [ 'ani_new' ];
$fields = Array ( 'account_id' => $obj -> account [ 'id' ],
'product_id' => $obj -> service [ 'product_id' ],
'pin' => trim ( $pin ),
'balance' => $balance ,
'in_use' => 0 ,
'ani' => 1 );
if ( ! empty ( $obj -> product_attr [ 'expire' ]) && ! empty ( $obj -> product_attr [ 'expire_days' ]))
$fields [ 'expire_days' ] = $obj -> product_attr [ 'expire_days' ];
$pin_id = sqlGenID ( $db , " voip_prepaid " );
$sql = sqlInsert ( $db , " voip_prepaid " , $fields , $pin_id );
$rs = $db -> Execute ( $sql );
if ( $rs ) {
# send the user the details
include_once ( PATH_MODULES . 'email_template/email_template.inc.php' );
$email = new email_template ;
$email -> send ( 'voip_new_prepaid_ani' , $obj -> account [ 'id' ], $pin_id , $pin_id , $obj -> plugin_data [ 'number' ]);
} else {
return false ;
}
return true ;
}
/** provision did */
function provision_did_new ( $obj )
{
@ $a = unserialize ( $obj -> service [ 'prod_attr_cart' ]);
$did = $a [ 'station' ];
// new or top-up?
$db =& DB ();
$didrs = $db -> Execute ( $sql = sqlSelect ( $db , " voip_prepaid " , " id,pin,balance " , " pin = :: { $did } :: AND voip_did_id is not null AND voip_did_id <> 0 " ));
if ( $didrs && $didrs -> RecordCount () > 0 ) {
$new = false ;
} else {
$new = true ;
}
// the balance from the invoice line item (not including setup fee)
$itemid = $obj -> service [ 'invoice_item_id' ];
$invoiceItem = $db -> Execute ( sqlSelect ( $db , " invoice_item " , " price_base " , " id = $itemid " ));
if ( $invoiceItem && $invoiceItem -> RecordCount () > 0 ) {
$balance = $invoiceItem -> fields [ 'price_base' ];
} else {
$balance = $obj -> service [ 'price' ];
}
/*
echo " <BR><BR> $sql <BR><BR> " ;
echo $new ;
echo " $ " . $balance ;
#print_r($obj->service);
*/
if ( $new )
{
// include voip plugin and provision the did
include_once ( PATH_PLUGINS . 'product/VOIP.php' );
$voip = new plgn_prov_VOIP ;
if ( ! $voip -> p_one ( $obj -> service_id )) return false ;
# create the prepaid record
$didrs = $db -> Execute ( sqlSelect ( $db , " voip_did " , " id,did " , " service_id = :: { $obj -> service_id } :: " ));
if ( $didrs && $didrs -> RecordCount () > 0 )
{
$fields = Array ( 'account_id' => $obj -> account [ 'id' ],
'product_id' => $obj -> service [ 'product_id' ],
'voip_did_id' => $didrs -> fields [ 'id' ],
'pin' => $didrs -> fields [ 'did' ],
'balance' => $balance ,
'in_use' => 0 );
$pin_id = sqlGenID ( $db , " voip_prepaid " );
$sql = sqlInsert ( $db , " voip_prepaid " , $fields , $pin_id );
$rs = $db -> Execute ( $sql );
return true ;
} else {
return false ;
}
}
else
{
# top-up the prepaid balance
$fields = Array ( 'balance' => $balance + $didrs -> fields [ 'balance' ]);
$db -> Execute ( $sql = sqlUpdate ( $db , " voip_prepaid " , $fields , " id = { $didrs -> fields [ 'id' ] } " ));
return true ;
}
return true ;
}
/** get users existing prepaid numbers */
function menu_did ( $VAR )
{
global $smarty ;
if ( ! SESS_LOGGED ) {
$smarty -> assign ( 'ani' , false );
return ;
}
if ( ! empty ( $VAR [ 'account_id' ]))
$account_id = $VAR [ 'account_id' ];
else
$account_id = SESS_ACCOUNT ;
$db =& DB ();
$rs = & $db -> Execute ( $sql = sqlSelect ( $db , " voip_prepaid " , " * " , " voip_did_id is not null AND voip_did_id <> 0 AND (ani <> 1 or ani is null) AND account_id = " . $account_id ));
if ( $rs && $rs -> RecordCount () > 0 ) {
$arr [ 0 ] = " -- New Number -- " ;
while ( ! $rs -> EOF ) {
$arr [ " { $rs -> fields [ 'pin' ] } " ] = " Number: " . $rs -> fields [ 'pin' ] . ' -- Balance: ' . number_format ( $rs -> fields [ 'balance' ], 6 );
$rs -> MoveNext ();
}
} else {
$arr = false ;
}
$smarty -> assign ( 'dids' , $arr );
return ;
}
/** get users existing ani numbers */
function menu_ani ( $VAR )
{
global $smarty ;
if ( ! SESS_LOGGED ) {
$smarty -> assign ( 'ani' , false );
return ;
}
if ( ! empty ( $VAR [ 'account_id' ]))
$account_id = $VAR [ 'account_id' ];
else
$account_id = SESS_ACCOUNT ;
$db =& DB ();
$rs = & $db -> Execute ( sqlSelect ( $db , " voip_prepaid " , " * " , " ani=1 AND account_id = " . $account_id ));
if ( $rs && $rs -> RecordCount () > 0 ) {
$arr [ 0 ] = " -- New Number -- " ;
while ( ! $rs -> EOF ) {
$arr [ " { $rs -> fields [ 'pin' ] } " ] = " Number: " . $rs -> fields [ 'pin' ] . ' -- Balance: ' . number_format ( $rs -> fields [ 'balance' ], 6 );
$rs -> MoveNext ();
}
} else {
$arr = false ;
}
$smarty -> assign ( 'ani' , $arr );
return ;
}
/** get users existing pin numbers */
function menu_pins ( $VAR )
{
global $smarty ;
if ( ! SESS_LOGGED ) {
$smarty -> assign ( 'pins' , false );
return ;
}
if ( ! empty ( $VAR [ 'account_id' ]))
$account_id = $VAR [ 'account_id' ];
else
$account_id = SESS_ACCOUNT ;
$db =& DB ();
$rs = & $db -> Execute ( sqlSelect ( $db , " voip_prepaid " , " * " , " (ani = 0 OR ani is null) AND account_id = " . $account_id ));
if ( $rs && $rs -> RecordCount () > 0 ) {
$arr [ 0 ] = " -- Generate a new Pin # for this purchase -- " ;
while ( ! $rs -> EOF ) {
$arr [ " { $rs -> fields [ 'pin' ] } " ] = " Pin # " . $rs -> fields [ 'pin' ] . ' -- Balance: ' . number_format ( $rs -> fields [ 'balance' ], 6 );
$rs -> MoveNext ();
}
} else {
$arr = false ;
}
$smarty -> assign ( 'pins' , $arr );
return ;
}
/** Add new pin(s) */
function add ( $VAR )
{
if ( ! empty ( $VAR [ 'bulk' ]))
{
if ( empty ( $VAR [ 'voip_prepaid_account_id' ]) || empty ( $VAR [ 'voip_prepaid_product_id' ]) ||
empty ( $VAR [ 'voip_prepaid_balance' ]) || empty ( $VAR [ 'voip_prepaid_qty' ]) || empty ( $VAR [ 'voip_prepaid_bulk' ]))
{
print ( " Failed: Please check that you have provided an account, product, balance, and quantity, and bulk reference number " );
return ;
}
else
{
$db =& DB ();
for ( $i = 0 ; $i < $VAR [ 'voip_prepaid_qty' ]; $i ++ )
{
if ( $pin = $this -> genPin ())
{
// insert the record
$fields [ " pin " ] = $pin ;
$fields [ " account_id " ] = $VAR [ 'voip_prepaid_account_id' ];
$fields [ " product_id " ] = $VAR [ 'voip_prepaid_product_id' ];
$fields [ " balance " ] = $VAR [ 'voip_prepaid_balance' ];
$fields [ 'date_expire' ] = $VAR [ 'voip_prepaid_date_expire' ];
$fields [ " bulk " ] = $VAR [ 'voip_prepaid_bulk' ];
$db -> Execute ( sqlInsert ( $db , " voip_prepaid " , $fields ));
}
}
echo " Added Batch Successfully! " ;
echo " <script>document.location='?_page=core:search&module=voip_prepaid&voip_prepaid_bulk= { $VAR [ 'voip_prepaid_bulk' ] } ';</script> " ;
}
} else {
$type = " add " ;
$this -> method [ " $type " ] = split ( " , " , $this -> method [ " $type " ]);
$db = new CORE_database ;
$db -> add ( $VAR , $this , $type );
}
}
function view ( $VAR )
{
$type = " view " ;
$this -> method [ " $type " ] = split ( " , " , $this -> method [ " $type " ]);
$db = new CORE_database ;
$db -> view ( $VAR , $this , $type );
}
function update ( $VAR )
{
$type = " update " ;
$this -> method [ " $type " ] = split ( " , " , $this -> method [ " $type " ]);
$db = new CORE_database ;
$db -> update ( $VAR , $this , $type );
}
function delete ( $VAR )
{
$db = new CORE_database ;
$db -> mass_delete ( $VAR , $this , " " );
}
function search_form ( $VAR )
{
$type = " search " ;
$this -> method [ " $type " ] = split ( " , " , $this -> method [ " $type " ]);
$db = new CORE_database ;
$db -> search_form ( $VAR , $this , $type );
}
function search ( $VAR )
{
$type = " search " ;
$this -> method [ " $type " ] = split ( " , " , $this -> method [ " $type " ]);
$db = new CORE_database ;
$db -> search ( $VAR , $this , $type );
}
function search_show ( $VAR )
{
$type = " search " ;
$this -> method [ " $type " ] = split ( " , " , $this -> method [ " $type " ]);
$db = new CORE_database ;
$db -> search_show ( $VAR , $this , $type );
}
/** Export search results */
function search_export ( $VAR )
{
# require the export class
require_once ( PATH_CORE . " export.inc.php " );
# Call the correct export function for inline browser display, download, email, or web save.
if ( $VAR [ " format " ] == " excel " )
{
$type = " export_excel " ;
$this -> method [ " $type " ] = split ( " , " , $this -> method [ " $type " ]);
$export = new CORE_export ;
$export -> search_excel ( $VAR , $this , $type );
}
else if ( $VAR [ " format " ] == " xml " )
{
$type = " export_xml " ;
$this -> method [ " $type " ] = split ( " , " , $this -> method [ " $type " ]);
$export = new CORE_export ;
$export -> search_xml ( $VAR , $this , $type );
}
else if ( $VAR [ " format " ] == " csv " )
{
$type = " export_csv " ;
$this -> method [ " $type " ] = split ( " , " , $this -> method [ " $type " ]);
$export = new CORE_export ;
$export -> search_csv ( $VAR , $this , $type );
}
else if ( $VAR [ " format " ] == " tab " )
{
$type = " export_tab " ;
$this -> method [ " $type " ] = split ( " , " , $this -> method [ " $type " ]);
$export = new CORE_export ;
$export -> search_tab ( $VAR , $this , $type );
}
}
}
2008-12-30 01:43:41 +00:00
?>