* @copyright 2009 Deon George * @link http://osb.leenooks.net * * @link http://www.agileco.com/ * @copyright 2004-2008 Agileco, LLC. * @license http://www.agileco.com/agilebill/license1-4.txt * @author Tony Landis * @package AgileBill * @subpackage Module:Currency */ /** * The main AgileBill Currency Class * * @package AgileBill * @subpackage Module:Currency */ class currency extends OSB_module { /** * Update currency rates */ public function task($VAR) { $db = &DB(); # Fetch all active currencies $currencies = array(); $rs = $db->Execute(sqlSelect($db,'currency','*',array('status'=>1))); if ($rs) { while (!$rs->EOF) { $currencies[$rs->fields['id']] = $rs->fields; $rs->MoveNext(); } $rs->Close(); } foreach ($currencies as $currFrom) { $conversions = array(); foreach ($currencies as $currTo) { # Get currency conversion if ($currFrom['three_digit'] != $currTo['three_digit']) { $ch = curl_init(sprintf('http://www.xe.net/ucc/convert.cgi?Amount=1&From=%s&To=%s',$currFrom['three_digit'],$currTo['three_digit'])); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true); curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,3); curl_setopt($ch,CURLOPT_CRLF,true); $resp = curl_exec ($ch); curl_close ($ch); $m = array(); preg_match('/[0-9.]+\s*'.$currFrom['three_digit'].'\s*=\s*([0-9.]+)\s*'.$currTo['three_digit'].'/',$resp,$m); } else { # Conversion to/from same currency is always 1. $m = array(1=>'1'); } if (sizeof($m) > 0) $conversions[$currTo['id']] = array('rate'=>$m[1],'iso'=>$currTo['three_digit']); } # Update conversions array $db->Execute(sqlUpdate($db,'currency',array('convert_array'=>serialize($conversions)),array('id'=>$currFrom['id']))); } } } ?>