/wp-content/plugins/gravityforms/currency.php

https://github.com/livinglab/openlab · PHP · 383 lines · 340 code · 31 blank · 12 comment · 23 complexity · 44915ba30d5e659eca69db0544de12eb MD5 · raw file

  1. <?php
  2. if ( ! class_exists( 'GFForms' ) ) {
  3. die();
  4. }
  5. if ( ! class_exists( 'RGCurrency' ) ) {
  6. class RGCurrency {
  7. private $currency;
  8. public function __construct( $currency ) {
  9. if ( is_array( $currency ) ) {
  10. $this->currency = $currency;
  11. } else {
  12. $this->currency = self::get_currency( $currency );
  13. }
  14. }
  15. public function to_number( $text ) {
  16. $text = strval( $text );
  17. if ( is_numeric( $text ) ) {
  18. return floatval( $text );
  19. }
  20. //Making sure symbol is in unicode format (i.e. &#4444;)
  21. $text = preg_replace( '/&.*?;/', '', $text );
  22. //Removing symbol from text
  23. $text = str_replace( $this->currency['symbol_right'], '', $text );
  24. $text = str_replace( $this->currency['symbol_left'], '', $text );
  25. if ( ! empty( $this->currency['symbol_old'] ) ) {
  26. $text = str_replace( $this->currency['symbol_old'], '', $text );
  27. }
  28. //Removing all non-numeric characters
  29. $array = str_split( $text );
  30. $is_negative = false;
  31. $clean_number = '';
  32. foreach ( $array as $char ) {
  33. if ( ( $char >= '0' && $char <= '9' ) || $char == $this->currency['decimal_separator'] ) {
  34. $clean_number .= $char;
  35. } elseif ( $char == '-' ) {
  36. $is_negative = true;
  37. }
  38. }
  39. $decimal_separator = $this->currency && $this->currency['decimal_separator'] ? $this->currency['decimal_separator'] : '.';
  40. //Removing thousand separators but keeping decimal point
  41. $array = str_split( $clean_number );
  42. $float_number = '';
  43. for ( $i = 0, $count = sizeof( $array ); $i < $count; $i ++ ) {
  44. $char = $array[ $i ];
  45. if ( $char >= '0' && $char <= '9' ) {
  46. $float_number .= $char;
  47. } elseif ( $char == $decimal_separator ) {
  48. $float_number .= '.';
  49. }
  50. }
  51. if ( $is_negative ) {
  52. $float_number = '-' . $float_number;
  53. }
  54. return is_numeric( $float_number ) ? floatval( $float_number ) : false;
  55. }
  56. public function to_money( $number, $do_encode = false ) {
  57. if ( ! is_numeric( $number ) ) {
  58. $number = $this->to_number( $number );
  59. }
  60. if ( $number === false ) {
  61. return '';
  62. }
  63. $negative = '';
  64. if ( strpos( strval( $number ), '-' ) !== false ) {
  65. $negative = '-';
  66. $number = floatval( substr( $number, 1 ) );
  67. }
  68. $money = number_format( $number, $this->currency['decimals'], $this->currency['decimal_separator'], $this->currency['thousand_separator'] );
  69. if ( $money == '0.00' ) {
  70. $negative = '';
  71. }
  72. $symbol_left = ! empty( $this->currency['symbol_left'] ) ? $this->currency['symbol_left'] . $this->currency['symbol_padding'] : '';
  73. $symbol_right = ! empty( $this->currency['symbol_right'] ) ? $this->currency['symbol_padding'] . $this->currency['symbol_right'] : '';
  74. if ( $do_encode ) {
  75. $symbol_left = html_entity_decode( $symbol_left );
  76. $symbol_right = html_entity_decode( $symbol_right );
  77. }
  78. return $negative . $symbol_left . $money . $symbol_right;
  79. }
  80. public static function get_currency( $code ) {
  81. $currencies = self::get_currencies();
  82. return $currencies[ $code ];
  83. }
  84. public function is_zero_decimal() {
  85. return empty( $this->currency['decimals'] );
  86. }
  87. /**
  88. * Returns an array that contains all the supported currencies and their configurations.
  89. *
  90. * @since unknown.
  91. * @since 2.5.13 add currency code to the configuration array.
  92. *
  93. * @return array
  94. */
  95. public static function get_currencies() {
  96. $currencies = array(
  97. 'USD' => array(
  98. 'name' => esc_html__( 'U.S. Dollar', 'gravityforms' ),
  99. 'symbol_left' => '$',
  100. 'symbol_right' => '',
  101. 'symbol_padding' => '',
  102. 'thousand_separator' => ',',
  103. 'decimal_separator' => '.',
  104. 'decimals' => 2,
  105. 'code' => 'USD',
  106. ),
  107. 'GBP' => array(
  108. 'name' => esc_html__( 'Pound Sterling', 'gravityforms' ),
  109. 'symbol_left' => '&#163;',
  110. 'symbol_right' => '',
  111. 'symbol_padding' => ' ',
  112. 'thousand_separator' => ',',
  113. 'decimal_separator' => '.',
  114. 'decimals' => 2,
  115. 'code' => 'GBP',
  116. ),
  117. 'EUR' => array(
  118. 'name' => esc_html__( 'Euro', 'gravityforms' ),
  119. 'symbol_left' => '',
  120. 'symbol_right' => '&#8364;',
  121. 'symbol_padding' => ' ',
  122. 'thousand_separator' => '.',
  123. 'decimal_separator' => ',',
  124. 'decimals' => 2,
  125. 'code' => 'EUR',
  126. ),
  127. 'AUD' => array(
  128. 'name' => esc_html__( 'Australian Dollar', 'gravityforms' ),
  129. 'symbol_left' => '$',
  130. 'symbol_right' => '',
  131. 'symbol_padding' => ' ',
  132. 'thousand_separator' => ',',
  133. 'decimal_separator' => '.',
  134. 'decimals' => 2,
  135. 'code' => 'AUD',
  136. ),
  137. 'BRL' => array(
  138. 'name' => esc_html__( 'Brazilian Real', 'gravityforms' ),
  139. 'symbol_left' => 'R$',
  140. 'symbol_right' => '',
  141. 'symbol_padding' => ' ',
  142. 'thousand_separator' => '.',
  143. 'decimal_separator' => ',',
  144. 'decimals' => 2,
  145. 'code' => 'BRL',
  146. ),
  147. 'CAD' => array(
  148. 'name' => esc_html__( 'Canadian Dollar', 'gravityforms' ),
  149. 'symbol_left' => '$',
  150. 'symbol_right' => 'CAD',
  151. 'symbol_padding' => ' ',
  152. 'thousand_separator' => ',',
  153. 'decimal_separator' => '.',
  154. 'decimals' => 2,
  155. 'code' => 'CAD',
  156. ),
  157. 'CZK' => array(
  158. 'name' => esc_html__( 'Czech Koruna', 'gravityforms' ),
  159. 'symbol_left' => '',
  160. 'symbol_right' => '&#75;&#269;',
  161. 'symbol_padding' => ' ',
  162. 'thousand_separator' => ' ',
  163. 'decimal_separator' => ',',
  164. 'decimals' => 2,
  165. 'code' => 'CZK',
  166. ),
  167. 'DKK' => array(
  168. 'name' => esc_html__( 'Danish Krone', 'gravityforms' ),
  169. 'symbol_left' => '',
  170. 'symbol_right' => 'kr.',
  171. 'symbol_padding' => ' ',
  172. 'thousand_separator' => '.',
  173. 'decimal_separator' => ',',
  174. 'decimals' => 2,
  175. 'code' => 'DKK',
  176. ),
  177. 'HKD' => array(
  178. 'name' => esc_html__( 'Hong Kong Dollar', 'gravityforms' ),
  179. 'symbol_left' => 'HK$',
  180. 'symbol_right' => '',
  181. 'symbol_padding' => '',
  182. 'thousand_separator' => ',',
  183. 'decimal_separator' => '.',
  184. 'decimals' => 2,
  185. 'code' => 'HKD',
  186. ),
  187. 'HUF' => array(
  188. 'name' => esc_html__( 'Hungarian Forint', 'gravityforms' ),
  189. 'symbol_left' => '',
  190. 'symbol_right' => 'Ft',
  191. 'symbol_padding' => ' ',
  192. 'thousand_separator' => '.',
  193. 'decimal_separator' => ',',
  194. 'decimals' => 2,
  195. 'code' => 'HUF',
  196. ),
  197. 'ILS' => array(
  198. 'name' => esc_html__( 'Israeli New Sheqel', 'gravityforms' ),
  199. 'symbol_left' => '&#8362;',
  200. 'symbol_right' => '',
  201. 'symbol_padding' => ' ',
  202. 'thousand_separator' => ',',
  203. 'decimal_separator' => '.',
  204. 'decimals' => 2,
  205. 'code' => 'ILS',
  206. ),
  207. 'JPY' => array(
  208. 'name' => esc_html__( 'Japanese Yen', 'gravityforms' ),
  209. 'symbol_left' => '&#165;',
  210. 'symbol_right' => '',
  211. 'symbol_padding' => ' ',
  212. 'thousand_separator' => ',',
  213. 'decimal_separator' => '',
  214. 'decimals' => 0,
  215. 'code' => 'JPY',
  216. ),
  217. 'MYR' => array(
  218. 'name' => esc_html__( 'Malaysian Ringgit', 'gravityforms' ),
  219. 'symbol_left' => '&#82;&#77;',
  220. 'symbol_right' => '',
  221. 'symbol_padding' => ' ',
  222. 'thousand_separator' => ',',
  223. 'decimal_separator' => '.',
  224. 'decimals' => 2,
  225. 'code' => 'MYR',
  226. ),
  227. 'MXN' => array(
  228. 'name' => esc_html__( 'Mexican Peso', 'gravityforms' ),
  229. 'symbol_left' => '$',
  230. 'symbol_right' => '',
  231. 'symbol_padding' => ' ',
  232. 'thousand_separator' => ',',
  233. 'decimal_separator' => '.',
  234. 'decimals' => 2,
  235. 'code' => 'MXN',
  236. ),
  237. 'NOK' => array(
  238. 'name' => esc_html__( 'Norwegian Krone', 'gravityforms' ),
  239. 'symbol_left' => 'Kr',
  240. 'symbol_right' => '',
  241. 'symbol_padding' => ' ',
  242. 'thousand_separator' => '.',
  243. 'decimal_separator' => ',',
  244. 'decimals' => 2,
  245. 'code' => 'NOK',
  246. ),
  247. 'NZD' => array(
  248. 'name' => esc_html__( 'New Zealand Dollar', 'gravityforms' ),
  249. 'symbol_left' => '$',
  250. 'symbol_right' => '',
  251. 'symbol_padding' => ' ',
  252. 'thousand_separator' => ',',
  253. 'decimal_separator' => '.',
  254. 'decimals' => 2,
  255. 'code' => 'NZD',
  256. ),
  257. 'PHP' => array(
  258. 'name' => esc_html__( 'Philippine Peso', 'gravityforms' ),
  259. 'symbol_left' => 'Php',
  260. 'symbol_right' => '',
  261. 'symbol_padding' => ' ',
  262. 'thousand_separator' => ',',
  263. 'decimal_separator' => '.',
  264. 'decimals' => 2,
  265. 'code' => 'PHP', // bun not intended.
  266. ),
  267. 'PLN' => array(
  268. 'name' => esc_html__( 'Polish Zloty', 'gravityforms' ),
  269. 'symbol_left' => '&#122;&#322;',
  270. 'symbol_right' => '',
  271. 'symbol_padding' => ' ',
  272. 'thousand_separator' => '.',
  273. 'decimal_separator' => ',',
  274. 'decimals' => 2,
  275. 'code' => 'PLN',
  276. ),
  277. 'RUB' => array(
  278. 'name' => esc_html__( 'Russian Ruble', 'gravityforms' ),
  279. 'symbol_left' => '',
  280. 'symbol_right' => 'pyб',
  281. 'symbol_padding' => ' ',
  282. 'thousand_separator' => ' ',
  283. 'decimal_separator' => '.',
  284. 'decimals' => 2,
  285. 'code' => 'RUB',
  286. ),
  287. 'SGD' => array(
  288. 'name' => esc_html__( 'Singapore Dollar', 'gravityforms' ),
  289. 'symbol_left' => '$',
  290. 'symbol_right' => '',
  291. 'symbol_padding' => ' ',
  292. 'thousand_separator' => ',',
  293. 'decimal_separator' => '.',
  294. 'decimals' => 2,
  295. 'code' => 'SGD',
  296. ),
  297. 'ZAR' => array(
  298. 'name' => esc_html__( 'South African Rand', 'gravityforms' ),
  299. 'symbol_left' => 'R',
  300. 'symbol_right' => '',
  301. 'symbol_padding' => '',
  302. 'thousand_separator' => ',',
  303. 'decimal_separator' => '.',
  304. 'decimals' => 2,
  305. 'code' => 'ZAR',
  306. ),
  307. 'SEK' => array(
  308. 'name' => esc_html__( 'Swedish Krona', 'gravityforms' ),
  309. 'symbol_left' => '',
  310. 'symbol_right' => 'Kr',
  311. 'symbol_padding' => ' ',
  312. 'thousand_separator' => ' ',
  313. 'decimal_separator' => ',',
  314. 'decimals' => 2,
  315. 'code' => 'SEK',
  316. ),
  317. 'CHF' => array(
  318. 'name' => esc_html__( 'Swiss Franc', 'gravityforms' ),
  319. 'symbol_left' => 'CHF',
  320. 'symbol_right' => '',
  321. 'symbol_padding' => ' ',
  322. 'thousand_separator' => "'",
  323. 'decimal_separator' => '.',
  324. 'decimals' => 2,
  325. 'symbol_old' => 'Fr.',
  326. 'code' => 'CHF',
  327. ),
  328. 'TWD' => array(
  329. 'name' => esc_html__( 'Taiwan New Dollar', 'gravityforms' ),
  330. 'symbol_left' => '$',
  331. 'symbol_right' => '',
  332. 'symbol_padding' => ' ',
  333. 'thousand_separator' => ',',
  334. 'decimal_separator' => '.',
  335. 'decimals' => 2,
  336. 'code' => 'TWD',
  337. ),
  338. 'THB' => array(
  339. 'name' => esc_html__( 'Thai Baht', 'gravityforms' ),
  340. 'symbol_left' => '&#3647;',
  341. 'symbol_right' => '',
  342. 'symbol_padding' => ' ',
  343. 'thousand_separator' => ',',
  344. 'decimal_separator' => '.',
  345. 'decimals' => 2,
  346. 'code' => 'THB',
  347. ),
  348. );
  349. return apply_filters( 'gform_currencies', $currencies );
  350. }
  351. }
  352. }