Source of file CurrencyConverterWidget.php
Size: 16,162 Bytes - Last Modified: 2021-12-23T10:47:37+00:00
/var/www/docs.ssmods.com/process/src/CurrencyConverterWidget.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537 | <?php /* $page->defaultFromCurrencyCode = "NZD"; $page->Defaultto_currency_code = "EUR"; $page->DefaultAmount = "100"; */ class CurrencyConverterWidget extends Widget { private static $title = 'Currency Converter'; private static $cmsTitle = 'Currency Converter'; private static $description = 'Allows users to convert any amount FROM one TO another currency.'; private static $db = array( "DefaultFromCurrency" => "Varchar(3)", "DefaultToCurrency" => "Varchar(3)", "DefaultAmount" => "Currency" ); private static $defaults = array( "DefaultFromCurrency" => "NZD", "DefaultToCurrency" => "EUR", "DefaultAmount" => "1" ); public static function set_default_from_currency($v) { self::$defaults["DefaultFromCurrency"] = $v; } public static function set_default_to_currency($v) { self::$defaults["DefaultToCurrency"] = $v; } public static function set_default_amount($v) { self::$defaults["DefaultAmount"] = $v; } public static function add_to_array_of_currencies_to_show($arrayOfCodes) { if (is_array($arrayOfCodes)) { foreach ($arrayOfCodes as $code) { if (3 == strlen($code)) { self::$array_of_currencies_to_show[] = $code; } } } elseif (3 == strlen($arrayOfCodes)) { self::$array_of_currencies_to_show[] = $arrayOfCodes; } else { debug::show("add_to_array_of_currencies_to_show is not provided with right argument"); } } private static $array_of_currencies_to_show = array(); private static $currency_list = array( "-0-" => "-- Select Currency --", "usd"=>"us dollar", "afn"=>"afghanistan afghani", "all"=>"albanian lek", "dzd"=>"algerian dinar", "adf"=>"andorran franc", "adp"=>"andorran peseta", "aoa"=>"angolan kwanza", "aon"=>"angolan new kwanza", "ars"=>"argentine peso", "amd"=>"armenian dram", "awg"=>"aruban florin", "aud"=>"australian dollar", "ats"=>"austrian schilling", "azm"=>"azerbaijan manat", "azn"=>"azerbaijan new manat", "bsd"=>"bahamian dollar", "bhd"=>"bahraini dinar", "bdt"=>"bangladeshi taka", "bbd"=>"barbados dollar", "byr"=>"belarusian ruble", "bef"=>"belgian franc", "bzd"=>"belize dollar", "bmd"=>"bermudian dollar", "btn"=>"bhutan ngultrum", "bob"=>"bolivian boliviano", "bam"=>"bosnian mark", "bwp"=>"botswana pula", "brl"=>"brazilian real", "gbp"=>"british pound", "bnd"=>"brunei dollar", "bgn"=>"bulgarian lev", "bif"=>"burundi franc", "xof"=>"cfa franc bceao", "xaf"=>"cfa franc beac", "xpf"=>"cfp franc", "khr"=>"cambodian riel", "cad"=>"canadian dollar", "cve"=>"cape verde escudo", "kyd"=>"cayman islands dollar", "clp"=>"chilean peso", "cny"=>"chinese yuan renminbi", "cop"=>"colombian peso", "kmf"=>"comoros franc", "cdf"=>"congolese franc", "crc"=>"costa rican colon", "hrk"=>"croatian kuna", "cuc"=>"cuban convertible peso", "cup"=>"cuban peso", "cyp"=>"cyprus pound", "czk"=>"czech koruna", "dkk"=>"danish krone", "djf"=>"djibouti franc", "dop"=>"dominican r. peso", "nlg"=>"dutch guilder", "xeu"=>"ecu", "xcd"=>"east caribbean dollar", "ecs"=>"ecuador sucre", "egp"=>"egyptian pound", "svc"=>"el salvador colon", "eek"=>"estonian kroon", "etb"=>"ethiopian birr", "eur"=>"European Union euro", "fkp"=>"falkland islands pound", "fjd"=>"fiji dollar", "fim"=>"finnish markka", "frf"=>"french franc", "gmd"=>"gambian dalasi", "gel"=>"georgian lari", "dem"=>"german mark", "ghc"=>"ghanaian cedi", "ghs"=>"ghanaian new cedi", "gip"=>"gibraltar pound", "xau"=>"gold (oz.)", "grd"=>"greek drachma", "gtq"=>"guatemalan quetzal", "gnf"=>"guinea franc", "gyd"=>"guyanese dollar", "htg"=>"haitian gourde", "hnl"=>"honduran lempira", "hkd"=>"hong kong dollar", "huf"=>"hungarian forint", "isk"=>"iceland krona", "inr"=>"indian rupee", "idr"=>"indonesian rupiah", "irr"=>"iranian rial", "iqd"=>"iraqi dinar", "iep"=>"irish punt", "ils"=>"israeli new shekel", "itl"=>"italian lira", "jmd"=>"jamaican dollar", "jpy"=>"japanese yen", "jod"=>"jordanian dinar", "kzt"=>"kazakhstan tenge", "kes"=>"kenyan shilling", "kwd"=>"kuwaiti dinar", "kgs"=>"kyrgyzstanian som", "lak"=>"lao kip", "lvl"=>"latvian lats", "lbp"=>"lebanese pound", "lsl"=>"lesotho loti", "lrd"=>"liberian dollar", "lyd"=>"libyan dinar", "ltl"=>"lithuanian litas", "luf"=>"luxembourg franc", "mop"=>"macau pataca", "mkd"=>"macedonian denar", "mga"=>"malagasy ariary", "mgf"=>"malagasy franc", "mwk"=>"malawi kwacha", "myr"=>"malaysian ringgit", "mvr"=>"maldive rufiyaa", "mtl"=>"maltese lira", "mro"=>"mauritanian ouguiya", "mur"=>"mauritius rupee", "mxn"=>"mexican peso", "mdl"=>"moldovan leu", "mnt"=>"mongolian tugrik", "mad"=>"moroccan dirham", "mzm"=>"mozambique metical", "mzn"=>"mozambique new metical", "mmk"=>"myanmar kyat", "ang"=>"nl antillian guilder", "nad"=>"namibia dollar", "npr"=>"nepalese rupee", "nzd"=>"new zealand dollar", "nio"=>"nicaraguan cordoba oro", "ngn"=>"nigerian naira", "kpw"=>"north korean won", "nok"=>"norwegian kroner", "omr"=>"omani rial", "pkr"=>"pakistan rupee", "xpd"=>"palladium (oz.)", "pab"=>"panamanian balboa", "pgk"=>"papua new guinea kina", "pyg"=>"paraguay guarani", "pen"=>"peruvian nuevo sol", "php"=>"philippine peso", "xpt"=>"platinum (oz.)", "pln"=>"polish zloty", "pte"=>"portuguese escudo", "qar"=>"qatari rial", "rol"=>"romanian lei", "ron"=>"romanian new lei", "rub"=>"russian rouble", "rwf"=>"rwandan franc", "wst"=>"samoan tala", "std"=>"sao tome/principe dobra", "sar"=>"saudi riyal", "rsd"=>"serbian dinar", "scr"=>"seychelles rupee", "sll"=>"sierra leone leone", "xag"=>"silver (oz.)", "sgd"=>"singapore dollar", "skk"=>"slovak koruna", "sit"=>"slovenian tolar", "sbd"=>"solomon islands dollar", "sos"=>"somali shilling", "zar"=>"south african rand", "krw"=>"south-korean won", "esp"=>"spanish peseta", "lkr"=>"sri lanka rupee", "shp"=>"st. helena pound", "sdd"=>"sudanese dinar", "sdp"=>"sudanese old pound", "sdg"=>"sudanese pound", "srd"=>"suriname dollar", "srg"=>"suriname guilder", "szl"=>"swaziland lilangeni", "sek"=>"swedish krona", "chf"=>"swiss franc", "syp"=>"syrian pound", "twd"=>"taiwan dollar", "tjs"=>"tajikistani somoni", "tzs"=>"tanzanian shilling", "thb"=>"thai baht", "top"=>"tonga pa'anga", "ttd"=>"trinidad/tobago dollar", "tnd"=>"tunisian dinar", "try"=>"turkish lira", "trl"=>"turkish old lira", "tmm"=>"turkmenistan manat", "tmt"=>"turkmenistan new manat", "ugx"=>"uganda shilling", "uah"=>"ukraine hryvnia", "uyu"=>"uruguayan peso", "aed"=>"utd. arab emir. dirham", "uzs"=>"uzbekistan som", "vuv"=>"vanuatu vatu", "veb"=>"venezuelan bolivar", "vef"=>"venezuelan bolivar fuerte", "vnd"=>"vietnamese dong", "yer"=>"yemeni rial", "yun"=>"yugoslav dinar", "zmk"=>"zambian kwacha", "zwd"=>"zimbabwe dollar" ); private static $rates = array(); private static $from_currency_code = ''; private static $to_currency_code = ''; private static $debug = false; protected $amount = 0; // set once.... public static function set_debug_mode($trueOrFalse) { self::$debug = $trueOrFalse; } public static function get_currency_list() { if (count(self::$array_of_currencies_to_show)) { foreach (self::$array_of_currencies_to_show as $code) { $array[$code] = self::$currency_list[$code]; } } else { $array = self::$currency_list; } return $array; } public static function set_from_currency_code($v) { if (self::currency_exists($v)) { self::$from_currency_code = $v; Session::set("CurrencyConverter.from_currency_code", $v); } } public static function set_to_currency_code($v) { if (self::currency_exists($v)) { self::$to_currency_code = $v; Session::set("CurrencyConverter.to_currency_code", $v); } } public static function get_from_currency_code() { self::retrieve_defaults(); return self::$from_currency_code; } public static function get_to_currency_code() { self::retrieve_defaults(); return self::$to_currency_code; } public static function from_equals_to() { self::retrieve_defaults(); return (strtolower(self::$to_currency_code) == strtolower(self::$from_currency_code)); } public static function has_from_and_to_currencies() { self::retrieve_defaults(); if (self::$to_currency_code && self::$from_currency_code) { return true; } } public static function get_rate() { //$url = http://finance.yahoo.com/currency/convert?amt=1&from=NZD&to=USD&submit=Convert if (self::has_from_and_to_currencies() && !self::from_equals_to()) { if (isset(self::$rates[self::$from_currency_code.".".self::$to_currency_code]) && self::$rates[self::$from_currency_code.".".self::$to_currency_code] > 0) { return self::$rates[self::$from_currency_code.".".self::$to_currency_code]+0; } else { $url = 'http://download.finance.yahoo.com/d/quotes.csv?s='.self::$from_currency_code.self::$to_currency_code.'=X&f=sl1d1t1ba&e=.csv'; if (($ch = @curl_init())) { $timeout = 5; // set to zero for no timeout curl_setopt($ch, CURLOPT_URL, "$url"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); $record = curl_exec($ch); if (self::$debug) { echo "-- CURL:"; print_r($record); } curl_close($ch); } if (!$record) { $record = file_get_contents($url); //if(self::$debug) {echo "-- FILE_GET_CONTENTS:"; print_r($record);} } if ($record) { $currency_data = explode(',', $record); self::$rates[self::$from_currency_code.".".self::$to_currency_code] = $currency_data[1]; if (!isset(self::$rates[self::$from_currency_code.".".self::$to_currency_code]) || !self::$rates[self::$from_currency_code.".".self::$to_currency_code]) { self::$rates[self::$from_currency_code.".".self::$to_currency_code] = $currency_data[2]; } } else { if (self::$debug) { echo "-- could not retrieve data"; } } } } elseif (self::from_equals_to()) { self::$rates[self::$from_currency_code.".".self::$to_currency_code] = 1; return self::$rates[self::$from_currency_code.".".self::$to_currency_code]+0; } else { if (self::$debug) { echo "-- could not find from and to values!"; } } if (isset(self::$rates[self::$from_currency_code.".".self::$to_currency_code])) { return self::$rates[self::$from_currency_code.".".self::$to_currency_code]+0; } else { return 0; } } public static function get_exchanged_value($amount = 0, $digits = 2) { self::retrieve_defaults(); if (self::$debug) { echo "-- from ".self::$from_currency_code; } if (self::$debug) { echo "-- to ".self::$to_currency_code; } if (self::$debug) { echo "-- amount ".$amount; } $rate = self::get_rate(); if (self::$debug) { echo "-- rate ".$rate; } return strtoupper(self::$to_currency_code).' '.round(floatval($rate * $amount), $digits); } private static function retrieve_defaults() { if (!self::$from_currency_code) { if (self::$from_currency_code = Session::get("CurrencyConverter.from_currency_code")) { } else { self::$from_currency_code = self::$defaults["DefaultFromCurrency"]; } if (!self::$from_currency_code && self::$to_currency_code) { self::$from_currency_code = self::$to_currency_code; } } if (!self::$to_currency_code) { if (self::$to_currency_code = Session::get("CurrencyConverter.to_currency_code")) { } else { self::$to_currency_code = self::$defaults["DefaultToCurrency"]; } if (self::$from_currency_code && !self::$to_currency_code) { self::$to_currency_code = self::$from_currency_code; } } } private static function currency_exists($v) { $outcome = array_key_exists($v, self::$currency_list); if (!$outcome && self::$debug) { die("$v currency could not be found!"); } return $outcome; } //CMS ... public function getCMSFields() { return new FieldList( new TextField("defaultFromCurrencyCode", _t('CurrencyConverterWidget.defaultFromCurrencyCode', "Default From Currency Code")), new TextField("Defaultto_currency_code", _t('CurrencyConverterWidget.Defaultto_currency_code', "Default To Currency Code")), new CurrencyField("DefaultAmount", _t('CurrencyConverterWidget.DefaultAmount', "Default Amount to be Converted")) ); } //set for every transaction.... public function setAmount($amount = 0) { $this->amount = floatval($amount); Session::set("CurrencyConverter.Amount", $amount); } // get for every transaction ... public function getExchangedAmount($amount = 0) { $this->getValues(); if ($amount) { $this->amount = $amount; } $this->amount = floatval($this->amount); return self::get_exchanged_value($this->amount); } // for templates ... public function CurrencyConverter() { $this->getValues(); $convertedAmount = $this->getExchangedAmount(); $output = new ArrayList(); $output->push( new ArrayData( array( "from_currency_code" => self::$from_currency_code, "to_currency_code" => self::$to_currency_code, "amount" => $this->amount, "rate" => floatval(self::$rates[self::$from_currency_code.".".self::$to_currency_code]+0), "convertedAmount" => $convertedAmount ) ) ); return $output; } public function Currencies() { $this->getValues(); $currencies = new ArrayList; foreach (self::$currency_list as $key => $value) { $from = ($key == self::$from_currency_code); $to = ($key == self::$to_currency_code); $item = new ArrayData( array( "code" => $key, "name" => $value, "currentFrom" => $from, "currentTo" => $to ) ); $currencies->push($item); } return $currencies; } private function retrieveGetValues() { if (isset($_GET["f"])) { self::set_from_currency_code(strtolower(substr($_GET["f"], 0, 3))); } if (isset($_GET["t"])) { self::set_to_currency_code(strtolower(substr($_GET["t"], 0, 3))); } if (isset($_GET["a"])) { $this->amount = floatval($_GET["a"]); $this->setAmount($this->amount); } } } class CurrencyConverterWidget_Controller extends ContentController { public function __construct($dataRecord = null) { parent::__construct($dataRecord); } public function getRate() { $CurrencyConverterWidgetObject = new CurrencyConverterWidget(); //$CurrencyConverterWidgetObject->debug = true; echo $CurrencyConverterWidgetObject->getExchangedAmount(); } } |