. */ require_once dirname(__FILE__) . "/IRundaily.php"; require_once dirname(__FILE__) . "/../include/functions.php"; require_once dirname(__FILE__) . "/../include/deadline.php"; class CurrenciesRundaily implements IRundaily { private $messages; public function __construct() { $this->messages = array(); } public function run() { $rates = $this->downloadRates(); if( count($rates) > 1 ) { $this->processRates($rates); }else { $this->addMessage("Failed fetching currencies from EC website."); } } public function isEnabled() { global $setup; return $setup['EventDatePartTypeFix']!="" && is_before_ex("EventDatePartTypeFix"); } public function getTitle() { return "Update currencies"; } public function getMessages() { return $this->messages; } private function addMessage($message) { $this->messages[] = $message; } private function downloadRates() { $rates = array(); $fp = urlopen("ec.europa.eu", "/budg/inforeuro/api/monthly-rates/csv?year=" . date("Y") . "&month=" . date("n") . "&pointSeparator=true&lang=EN", "HTTP/1.0"); if( $fp != null ) { while( !feof($fp) ) { $buf = fgets($fp, 1024); $cols = explode(";", $buf); if( count($cols) >= 5 && strlen($cols[2]) == 2 ) { $rates[$cols[2]] = str_replace(",", ".", $cols[5]); } } $rates['EU'] = 1; }else { $this->addMessage("Failed downloading currencies from ec.europa.eu"); } return $rates; } private function processRates($rates) { $queryBuilder = new QueryBuilder($GLOBALS['DB'], "currencies"); $queryBuilder->addField(array("id", "iso_2", "rate")); if( $GLOBALS['DB']->select($queryBuilder->toQuery()) > 0 ) { while( $currency = $GLOBALS['DB']->fetchAssoc() ) { if( array_key_exists($currency['iso_2'], $rates) ) { $rate = number_format(1 / $rates[$currency['iso_2']], 10); if( $rate != $currency['rate'] ) { if( $GLOBALS['DB']->update("currencies", $currency['id'], array("rate" => $rate)) ) { $this->addMessage("Updated currency " . $currency['iso_2'] . " to " . $rate); }else { $this->addMessage("Failed updating currency " . $currency['iso_2'] . " to " . $rate); } } } } }else { $this->addMessage("Failed fetching current currencies from database"); } } } ?>