PluginProbe
MainWP Dashboard: Self-hosted WordPress Management for Agencies / 6.2.2
MainWP Dashboard: Self-hosted WordPress Management for Agencies v6.2.2
6.2.3 6.2.2 6.2.1 6.2 6.1.8 6.1.7 6.1.6 6.1.5 6.1.4 6.1.3 6.1.2 6.1.1 6.1 6.0.12 6.0.11 4.6.0.1 5.0 5.0.1 5.0.2 5.0.3 5.0.3.1 5.0.3.2 5.1 5.1.1 5.2 All 156 releases
← All changes | modules/cost-tracker/classes/class-cost-tracker-utility.php +1032 -907 5.0 → 6.2.2 View file →
@@ -7,949 +7,1074 @@
7 7 */
8 8
9 9 namespace MainWP\Dashboard\Module\CostTracker;
10 10
11 +use MainWP\Dashboard\MainWP_Utility;
12 +use MainWP\Dashboard\MainWP_UI;
13 +
14 +// Exit if accessed directly.
15 +if ( ! defined( 'ABSPATH' ) ) {
16 + exit;
17 +}
18 +
11 19 /**
12 20 * Class Cost_Tracker_Utility
13 21 */
14 22 class Cost_Tracker_Utility {
15 23
16 - /**
17 - * Static variable to hold the single instance of the class.
18 - *
19 - * @static
20 - *
21 - * @var mixed Default null
22 - */
23 - public static $instance = null;
24 + /**
25 + * Static variable to hold the single instance of the class.
26 + *
27 + * @static
28 + *
29 + * @var mixed Default null
30 + */
31 + public static $instance = null;
24 32
25 - /**
26 - * Variable to hold the option name.
27 - *
28 - * @var string Default option name.
29 - */
30 - protected $option_handle = 'mainwp_module_cost_tracker_options';
33 + /**
34 + * Variable to hold the option name.
35 + *
36 + * @var string Default option name.
37 + */
38 + protected $option_handle = 'mainwp_module_cost_tracker_options';
31 39
32 - /**
33 - * Variable to hold the options.
34 - *
35 - * @var mixed Options.
36 - */
37 - protected $option;
40 + /**
41 + * Variable to hold the options.
42 + *
43 + * @var mixed Options.
44 + */
45 + protected $option;
38 46
39 - /**
40 - * Get Instance
41 - *
42 - * Creates public static instance.
43 - *
44 - * @static
45 - *
46 - * @return Cost_Tracker_Utility
47 - */
48 - public static function get_instance() {
49 - if ( null === self::$instance ) {
50 - self::$instance = new self();
51 - }
52 - return self::$instance;
53 - }
47 + /**
48 + * Get Instance
49 + *
50 + * Creates public static instance.
51 + *
52 + * @static
53 + *
54 + * @return Cost_Tracker_Utility
55 + */
56 + public static function get_instance() {
57 + if ( null === static::$instance ) {
58 + static::$instance = new self();
59 + }
60 + return static::$instance;
61 + }
54 62
55 - /**
56 - * Constructor
57 - *
58 - * Runs each time the class is called.
59 - */
60 - public function __construct() {
61 - $this->option = get_option( $this->option_handle );
62 - if ( ! is_array( $this->option ) ) {
63 - $this->option = array();
64 - }
65 - }
63 + /**
64 + * Constructor
65 + *
66 + * Runs each time the class is called.
67 + */
68 + public function __construct() {
69 + $this->option = get_option( $this->option_handle );
70 + if ( ! is_array( $this->option ) ) {
71 + $this->option = array();
72 + }
73 + }
66 74
67 - /**
68 - * Get Option
69 - *
70 - * Gets option in Databse.
71 - *
72 - * @param string $key Option key.
73 - * @param mixed $defval Default value.
74 - *
75 - * @return mixed Retruns option value.
76 - */
77 - public function get_option( $key = null, $defval = '' ) {
78 - if ( isset( $this->option[ $key ] ) ) {
79 - $values = $this->option[ $key ];
80 - if ( 'custom_product_types' === $key || 'custom_payment_methods' === $key ) {
81 - $values = ! empty( $values ) ? json_decode( $values, true ) : array();
82 - if ( ! is_array( $values ) ) {
83 - $values = array();
84 - }
85 - }
86 - return $values;
87 - }
88 - return $defval;
89 - }
75 + /**
76 + * Get Option
77 + *
78 + * Gets option in Databse.
79 + *
80 + * @param string $key Option key.
81 + * @param mixed $defval Default value.
82 + * @param bool $json_encoded Is json encoded value.
83 + *
84 + * @return mixed Retruns option value.
85 + */
86 + public function get_option( $key = null, $defval = '', $json_encoded = false ) {
87 + if ( isset( $this->option[ $key ] ) ) {
88 + $values = $this->option[ $key ];
89 + if ( $json_encoded ) {
90 + $values = ! empty( $values ) ? json_decode( $values, true ) : array();
91 + if ( ! is_array( $values ) ) {
92 + $values = array();
93 + }
94 + }
95 + return $values;
96 + }
97 + return $defval;
98 + }
90 99
91 - /**
92 - * Set Option
93 - *
94 - * Sets option in Databse.
95 - *
96 - * @param string $key Option key.
97 - * @param mixed $value Option value.
98 - *
99 - * @return mixed Update option.
100 - */
101 - public function set_option( $key, $value ) {
102 - $this->option[ $key ] = $value;
103 - return update_option( $this->option_handle, $this->option );
104 - }
100 + /**
101 + * Set Option
102 + *
103 + * Sets option in Databse.
104 + *
105 + * @param string $key Option key.
106 + * @param mixed $value Option value.
107 + *
108 + * @return mixed Update option.
109 + */
110 + public function set_option( $key, $value ) {
111 + $this->option[ $key ] = $value;
112 + return update_option( $this->option_handle, $this->option );
113 + }
105 114
106 - /**
107 - * Get All Options
108 - *
109 - * Gets options in Databse.
110 - *
111 - * @return mixed Retruns options value.
112 - */
113 - public function get_all_options() {
114 - return $this->option;
115 - }
115 + /**
116 + * Get All Options
117 + *
118 + * Gets options in Databse.
119 + *
120 + * @return mixed Retruns options value.
121 + */
122 + public function get_all_options() {
123 + return $this->option;
124 + }
116 125
117 - /**
118 - * Save All Options
119 - *
120 - * @param array $options Options.
121 - *
122 - * @return mixed Retruns value.
123 - */
124 - public function save_options( $options ) {
125 - return update_option( $this->option_handle, $options );
126 - }
126 + /**
127 + * Save All Options
128 + *
129 + * @param array $options Options.
130 + *
131 + * @return mixed Retruns value.
132 + */
133 + public function save_options( $options ) {
134 + return update_option( $this->option_handle, $options );
135 + }
127 136
128 - /**
129 - * Format the price with a currency symbol.
130 - *
131 - * @param float $price Raw price.
132 - * @param bool $ret Return or echo value.
133 - *
134 - * @return string
135 - */
136 - public static function cost_tracker_format_price( $price, $ret = false ) {
137 + /**
138 + * Method render_product_icon().
139 + *
140 + * @param string $file_name File icon.
141 + * @param bool $ret True|False To return.
142 + *
143 + * @return string
144 + */
145 + public static function render_product_icon( $file_name, $ret = false ) {
137 146
138 - $currency = self::get_instance()->get_option( 'currency' );
139 - $settings = self::get_instance()->get_option( 'currency_format' );
147 + $imgfavi = '';
140 148
141 - if ( ! is_array( $settings ) ) {
142 - $settings = array();
143 - }
144 - $default = self::default_currency_settings();
145 - $args = array_merge( $default, $settings );
149 + $favi_url = MainWP_Utility::get_saved_favicon_url( $file_name );
150 + if ( ! empty( $favi_url ) ) {
151 + $imgfavi = '<img src="' . esc_attr( $favi_url ) . '" style="width:28px;height:28px;" class="ui circular image" alt="Cost custom icon" />';
152 + }
146 153
147 - $original_price = $price;
154 + if ( $ret ) {
155 + return $imgfavi;
156 + }
157 + echo $imgfavi;//phpcs:ignore -- ok.
158 + }
148 159
149 - // Convert to float to avoid issues on PHP 8.
150 - $price = (float) $price;
160 + /**
161 + * Format the price with a currency symbol.
162 + *
163 + * @param float $price Raw price.
164 + * @param bool $ret Return or echo value.
165 + * @param array $params other params.
166 + *
167 + * @return string
168 + */
169 + public static function cost_tracker_format_price( $price, $ret = false, $params = array() ) { //phpcs:ignore -- NOSONAR - complex.
170 + if ( ! is_array( $params ) ) {
171 + $params = array();
172 + }
151 173
152 - $unformatted_price = $price;
153 - $negative = $price < 0;
174 + $get_currency_format = ! empty( $params['get_currency_format'] ) ? true : false;
175 + $get_formated_number = ! empty( $params['get_formated_number'] ) ? true : false;
176 + $get_decimals = ! empty( $params['get_decimals'] ) ? true : false;
154 177
155 - $price = $negative ? $price * -1 : $price;
156 - $price = number_format( $price, $args['decimals'], $args['decimal_separator'], $args['thousand_separator'] );
178 + $currency = static::get_instance()->get_option( 'currency' );
179 + if ( empty( $currency ) ) {
180 + $currency = 'USD';
181 + }
182 + $settings = static::get_instance()->get_option( 'currency_format' );
157 183
158 - if ( $args['decimals'] > 0 ) {
159 - // trim zezos.
160 - $price = preg_replace( '/' . preg_quote( $args['decimal_separator'], '/' ) . '0++$/', '', $price ?? '' );
161 - }
184 + if ( ! is_array( $settings ) ) {
185 + $settings = array();
186 + }
187 + $default = static::default_currency_settings();
188 + $args = array_merge( $default, $settings );
162 189
163 - $currency_pos = $args['currency_position'];
190 + // Convert to float to avoid issues on PHP 8.
191 + $price = (float) $price;
164 192
165 - $format = '%1$s%2$s';
166 - switch ( $currency_pos ) {
167 - case 'left':
168 - $format = '%1$s%2$s';
169 - break;
170 - case 'right':
171 - $format = '%2$s%1$s';
172 - break;
173 - case 'left_space':
174 - $format = '%1$s&nbsp;%2$s';
175 - break;
176 - case 'right_space':
177 - $format = '%2$s&nbsp;%1$s';
178 - break;
179 - }
193 + $negative = $price < 0;
180 194
181 - $formatted_price = ( $negative ? '-' : '' ) . sprintf( $format, '<span class="cost-tracker-currency-symbol">' . esc_html( self::get_currency_symbol( $currency ) ) . '</span>', esc_html( $price ) );
182 - $value = '<span class="cost-tracker-currency-amount"><bdi>' . $formatted_price . '</bdi></span>';
183 - if ( $ret ) {
184 - return $value;
185 - }
186 - echo $value; // phpcs:ignore -- escaped.
187 - }
195 + $price = $negative ? $price * -1 : $price;
196 + $price = number_format( $price, $args['decimals'], $args['decimal_separator'], $args['thousand_separator'] );
188 197
189 - /**
190 - * Format the group costs prices.
191 - *
192 - * @param array $group_prices Group price.
193 - *
194 - * @return string
195 - */
196 - public static function get_separated_costs_price( $group_prices ) {
198 + if ( $get_decimals ) {
199 + return $args['decimals'];
200 + }
197 201
198 - $grouped = array(
199 - 'weekly' => 'W',
200 - 'monthly' => 'M',
201 - 'quarterly' => 'Q',
202 - 'yearly' => 'Y',
203 - );
202 + if ( $get_formated_number ) {
203 + return $price;
204 + }
204 205
205 - $formated_prices = array();
206 - if ( is_array( $group_prices ) ) {
207 - foreach ( $grouped as $idx => $char ) {
208 - if ( ! empty( $group_prices[ $idx ] ) ) {
209 - $formated_prices[ $idx ] = self::cost_tracker_format_price( $group_prices[ $idx ], true ) . '/' . $char;
210 - }
211 - }
212 - }
213 - if ( ! empty( $formated_prices ) ) {
214 - return implode( '|', $formated_prices );
215 - }
216 - return self::cost_tracker_format_price( 0, true );
217 - }
206 + if ( $args['decimals'] > 0 ) {
207 + // trim zezos.
208 + $price = preg_replace( '/' . preg_quote( $args['decimal_separator'], '/' ) . '0++$/', '', $price ?? '' );
209 + }
218 210
219 - /**
220 - * Method get_currency_symbol().
221 - *
222 - * @param string $currency Currency.
223 - *
224 - * @return string Currency symbol.
225 - */
226 - public static function get_currency_symbol( $currency ) {
227 - if ( ! is_string( $currency ) ) {
228 - return '';
229 - }
230 - $all_curs = self::get_all_currency_symbols();
231 - return isset( $all_curs[ $currency ]['symbol'] ) ? $all_curs[ $currency ]['symbol'] : '';
232 - }
211 + $currency_pos = $args['currency_position'];
233 212
234 - /**
235 - * Method get_all_currency_symbols().
236 - *
237 - * @return array Currency symbols.
238 - */
239 - public static function get_all_currency_symbols() {
213 + $format = '%1$s%2$s';
214 + switch ( $currency_pos ) {
215 + case 'left':
216 + $format = '%1$s%2$s';
217 + break;
218 + case 'right':
219 + $format = '%2$s%1$s';
220 + break;
221 + case 'left_space':
222 + $format = '%1$s %2$s';
223 + break;
224 + case 'right_space':
225 + $format = '%2$s %1$s';
226 + break;
227 + default:
228 + break;
229 + }
240 230
241 - $currency_list = array(
242 - 'AFA' => array(
243 - 'name' => 'Afghan Afghani',
244 - 'symbol' => '؋',
245 - ),
246 - 'ALL' => array(
247 - 'name' => 'Albanian Lek',
248 - 'symbol' => 'Lek',
249 - ),
250 - 'DZD' => array(
251 - 'name' => 'Algerian Dinar',
252 - 'symbol' => 'دج',
253 - ),
254 - 'AOA' => array(
255 - 'name' => 'Angolan Kwanza',
256 - 'symbol' => 'Kz',
257 - ),
258 - 'ARS' => array(
259 - 'name' => 'Argentine Peso',
260 - 'symbol' => '$',
261 - ),
262 - 'AMD' => array(
263 - 'name' => 'Armenian Dram',
264 - 'symbol' => '֏',
265 - ),
266 - 'AWG' => array(
267 - 'name' => 'Aruban Florin',
268 - 'symbol' => 'ƒ',
269 - ),
270 - 'AUD' => array(
271 - 'name' => 'Australian Dollar',
272 - 'symbol' => '$',
273 - ),
274 - 'AZN' => array(
275 - 'name' => 'Azerbaijani Manat',
276 - 'symbol' => 'm',
277 - ),
278 - 'BSD' => array(
279 - 'name' => 'Bahamian Dollar',
280 - 'symbol' => 'B$',
281 - ),
282 - 'BHD' => array(
283 - 'name' => 'Bahraini Dinar',
284 - 'symbol' => '.د.ب',
285 - ),
286 - 'BDT' => array(
287 - 'name' => 'Bangladeshi Taka',
288 - 'symbol' => '৳',
289 - ),
290 - 'BBD' => array(
291 - 'name' => 'Barbadian Dollar',
292 - 'symbol' => 'Bds$',
293 - ),
294 - 'BYR' => array(
295 - 'name' => 'Belarusian Ruble',
296 - 'symbol' => 'Br',
297 - ),
298 - 'BEF' => array(
299 - 'name' => 'Belgian Franc',
300 - 'symbol' => 'fr',
301 - ),
302 - 'BZD' => array(
303 - 'name' => 'Belize Dollar',
304 - 'symbol' => '$',
305 - ),
306 - 'BMD' => array(
307 - 'name' => 'Bermudan Dollar',
308 - 'symbol' => '$',
309 - ),
310 - 'BTN' => array(
311 - 'name' => 'Bhutanese Ngultrum',
312 - 'symbol' => 'Nu.',
313 - ),
314 - 'BTC' => array(
315 - 'name' => 'Bitcoin',
316 - 'symbol' => '฿',
317 - ),
318 - 'BOB' => array(
319 - 'name' => 'Bolivian Boliviano',
320 - 'symbol' => 'Bs.',
321 - ),
322 - 'BAM' => array(
323 - 'name' => 'Bosnia-Herzegovina Convertible Mark',
324 - 'symbol' => 'KM',
325 - ),
326 - 'BWP' => array(
327 - 'name' => 'Botswanan Pula',
328 - 'symbol' => 'P',
329 - ),
330 - 'BRL' => array(
331 - 'name' => 'Brazilian Real',
332 - 'symbol' => 'R$',
333 - ),
334 - 'GBP' => array(
335 - 'name' => 'British Pound Sterling',
336 - 'symbol' => '£',
337 - ),
338 - 'BND' => array(
339 - 'name' => 'Brunei Dollar',
340 - 'symbol' => 'B$',
341 - ),
342 - 'BGN' => array(
343 - 'name' => 'Bulgarian Lev',
344 - 'symbol' => 'Лв.',
345 - ),
346 - 'BIF' => array(
347 - 'name' => 'Burundian Franc',
348 - 'symbol' => 'FBu',
349 - ),
350 - 'KHR' => array(
351 - 'name' => 'Cambodian Riel',
352 - 'symbol' => 'KHR',
353 - ),
354 - 'CAD' => array(
355 - 'name' => 'Canadian Dollar',
356 - 'symbol' => '$',
357 - ),
358 - 'CVE' => array(
359 - 'name' => 'Cape Verdean Escudo',
360 - 'symbol' => '$',
361 - ),
362 - 'KYD' => array(
363 - 'name' => 'Cayman Islands Dollar',
364 - 'symbol' => '$',
365 - ),
366 - 'XOF' => array(
367 - 'name' => 'CFA Franc BCEAO',
368 - 'symbol' => 'CFA',
369 - ),
370 - 'XAF' => array(
371 - 'name' => 'CFA Franc BEAC',
372 - 'symbol' => 'FCFA',
373 - ),
374 - 'XPF' => array(
375 - 'name' => 'CFP Franc',
376 - 'symbol' => '₣',
377 - ),
378 - 'CLP' => array(
379 - 'name' => 'Chilean Peso',
380 - 'symbol' => '$',
381 - ),
382 - 'CLF' => array(
383 - 'name' => 'Chilean Unit of Account',
384 - 'symbol' => 'CLF',
385 - ),
386 - 'CNY' => array(
387 - 'name' => 'Chinese Yuan',
388 - 'symbol' => '¥',
389 - ),
390 - 'COP' => array(
391 - 'name' => 'Colombian Peso',
392 - 'symbol' => '$',
393 - ),
394 - 'KMF' => array(
395 - 'name' => 'Comorian Franc',
396 - 'symbol' => 'CF',
397 - ),
398 - 'CDF' => array(
399 - 'name' => 'Congolese Franc',
400 - 'symbol' => 'FC',
401 - ),
402 - 'CRC' => array(
403 - 'name' => 'Costa Rican Colón',
404 - 'symbol' => '₡',
405 - ),
406 - 'HRK' => array(
407 - 'name' => 'Croatian Kuna',
408 - 'symbol' => 'kn',
409 - ),
410 - 'CUC' => array(
411 - 'name' => 'Cuban Convertible Peso',
412 - 'symbol' => '$, CUC',
413 - ),
414 - 'CZK' => array(
415 - 'name' => 'Czech Republic Koruna',
416 - 'symbol' => 'Kč',
417 - ),
418 - 'DKK' => array(
419 - 'name' => 'Danish Krone',
420 - 'symbol' => 'Kr.',
421 - ),
422 - 'DJF' => array(
423 - 'name' => 'Djiboutian Franc',
424 - 'symbol' => 'Fdj',
425 - ),
426 - 'DOP' => array(
427 - 'name' => 'Dominican Peso',
428 - 'symbol' => '$',
429 - ),
430 - 'XCD' => array(
431 - 'name' => 'East Caribbean Dollar',
432 - 'symbol' => '$',
433 - ),
434 - 'EGP' => array(
435 - 'name' => 'Egyptian Pound',
436 - 'symbol' => 'ج.م',
437 - ),
438 - 'ERN' => array(
439 - 'name' => 'Eritrean Nakfa',
440 - 'symbol' => 'Nfk',
441 - ),
442 - 'EEK' => array(
443 - 'name' => 'Estonian Kroon',
444 - 'symbol' => 'kr',
445 - ),
446 - 'ETB' => array(
447 - 'name' => 'Ethiopian Birr',
448 - 'symbol' => 'Nkf',
449 - ),
450 - 'EUR' => array(
451 - 'name' => 'Euro',
452 - 'symbol' => '€',
453 - ),
454 - 'FKP' => array(
455 - 'name' => 'Falkland Islands Pound',
456 - 'symbol' => '£',
457 - ),
458 - 'FJD' => array(
459 - 'name' => 'Fijian Dollar',
460 - 'symbol' => 'FJ$',
461 - ),
462 - 'GMD' => array(
463 - 'name' => 'Gambian Dalasi',
464 - 'symbol' => 'D',
465 - ),
466 - 'GEL' => array(
467 - 'name' => 'Georgian Lari',
468 - 'symbol' => 'ლ',
469 - ),
470 - 'DEM' => array(
471 - 'name' => 'German Mark',
472 - 'symbol' => 'DM',
473 - ),
474 - 'GHS' => array(
475 - 'name' => 'Ghanaian Cedi',
476 - 'symbol' => 'GH₵',
477 - ),
478 - 'GIP' => array(
479 - 'name' => 'Gibraltar Pound',
480 - 'symbol' => '£',
481 - ),
482 - 'GRD' => array(
483 - 'name' => 'Greek Drachma',
484 - 'symbol' => '₯, Δρχ, Δρ',
485 - ),
486 - 'GTQ' => array(
487 - 'name' => 'Guatemalan Quetzal',
488 - 'symbol' => 'Q',
489 - ),
490 - 'GNF' => array(
491 - 'name' => 'Guinean Franc',
492 - 'symbol' => 'FG',
493 - ),
494 - 'GYD' => array(
495 - 'name' => 'Guyanaese Dollar',
496 - 'symbol' => '$',
497 - ),
498 - 'HTG' => array(
499 - 'name' => 'Haitian Gourde',
500 - 'symbol' => 'G',
501 - ),
502 - 'HNL' => array(
503 - 'name' => 'Honduran Lempira',
504 - 'symbol' => 'L',
505 - ),
506 - 'HKD' => array(
507 - 'name' => 'Hong Kong Dollar',
508 - 'symbol' => '$',
509 - ),
510 - 'HUF' => array(
511 - 'name' => 'Hungarian Forint',
512 - 'symbol' => 'Ft',
513 - ),
514 - 'ISK' => array(
515 - 'name' => 'Icelandic Króna',
516 - 'symbol' => 'kr',
517 - ),
518 - 'INR' => array(
519 - 'name' => 'Indian Rupee',
520 - 'symbol' => '₹',
521 - ),
522 - 'IDR' => array(
523 - 'name' => 'Indonesian Rupiah',
524 - 'symbol' => 'Rp',
525 - ),
526 - 'IRR' => array(
527 - 'name' => 'Iranian Rial',
528 - 'symbol' => '﷼',
529 - ),
530 - 'IQD' => array(
531 - 'name' => 'Iraqi Dinar',
532 - 'symbol' => 'د.ع',
533 - ),
534 - 'ILS' => array(
535 - 'name' => 'Israeli New Sheqel',
536 - 'symbol' => '₪',
537 - ),
538 - 'ITL' => array(
539 - 'name' => 'Italian Lira',
540 - 'symbol' => 'L,£',
541 - ),
542 - 'JMD' => array(
543 - 'name' => 'Jamaican Dollar',
544 - 'symbol' => 'J$',
545 - ),
546 - 'JPY' => array(
547 - 'name' => 'Japanese Yen',
548 - 'symbol' => '¥',
549 - ),
550 - 'JOD' => array(
551 - 'name' => 'Jordanian Dinar',
552 - 'symbol' => 'ا.د',
553 - ),
554 - 'KZT' => array(
555 - 'name' => 'Kazakhstani Tenge',
556 - 'symbol' => 'лв',
557 - ),
558 - 'KES' => array(
559 - 'name' => 'Kenyan Shilling',
560 - 'symbol' => 'KSh',
561 - ),
562 - 'KWD' => array(
563 - 'name' => 'Kuwaiti Dinar',
564 - 'symbol' => 'ك.د',
565 - ),
566 - 'KGS' => array(
567 - 'name' => 'Kyrgystani Som',
568 - 'symbol' => 'лв',
569 - ),
570 - 'LAK' => array(
571 - 'name' => 'Laotian Kip',
572 - 'symbol' => '₭',
573 - ),
574 - 'LVL' => array(
575 - 'name' => 'Latvian Lats',
576 - 'symbol' => 'Ls',
577 - ),
578 - 'LBP' => array(
579 - 'name' => 'Lebanese Pound',
580 - 'symbol' => '£',
581 - ),
582 - 'LSL' => array(
583 - 'name' => 'Lesotho Loti',
584 - 'symbol' => 'L',
585 - ),
586 - 'LRD' => array(
587 - 'name' => 'Liberian Dollar',
588 - 'symbol' => '$',
589 - ),
590 - 'LYD' => array(
591 - 'name' => 'Libyan Dinar',
592 - 'symbol' => 'د.ل',
593 - ),
594 - 'LTC' => array(
595 - 'name' => 'Litecoin',
596 - 'symbol' => 'Ł',
597 - ),
598 - 'LTL' => array(
599 - 'name' => 'Lithuanian Litas',
600 - 'symbol' => 'Lt',
601 - ),
602 - 'MOP' => array(
603 - 'name' => 'Macanese Pataca',
604 - 'symbol' => '$',
605 - ),
606 - 'MKD' => array(
607 - 'name' => 'Macedonian Denar',
608 - 'symbol' => 'ден',
609 - ),
610 - 'MGA' => array(
611 - 'name' => 'Malagasy Ariary',
612 - 'symbol' => 'Ar',
613 - ),
614 - 'MWK' => array(
615 - 'name' => 'Malawian Kwacha',
616 - 'symbol' => 'MK',
617 - ),
618 - 'MYR' => array(
619 - 'name' => 'Malaysian Ringgit',
620 - 'symbol' => 'RM',
621 - ),
622 - 'MVR' => array(
623 - 'name' => 'Maldivian Rufiyaa',
624 - 'symbol' => 'Rf',
625 - ),
626 - 'MRO' => array(
627 - 'name' => 'Mauritanian Ouguiya',
628 - 'symbol' => 'MRU',
629 - ),
630 - 'MUR' => array(
631 - 'name' => 'Mauritian Rupee',
632 - 'symbol' => '₨',
633 - ),
634 - 'MXN' => array(
635 - 'name' => 'Mexican Peso',
636 - 'symbol' => '$',
637 - ),
638 - 'MDL' => array(
639 - 'name' => 'Moldovan Leu',
640 - 'symbol' => 'L',
641 - ),
642 - 'MNT' => array(
643 - 'name' => 'Mongolian Tugrik',
644 - 'symbol' => '₮',
645 - ),
646 - 'MAD' => array(
647 - 'name' => 'Moroccan Dirham',
648 - 'symbol' => 'MAD',
649 - ),
650 - 'MZM' => array(
651 - 'name' => 'Mozambican Metical',
652 - 'symbol' => 'MT',
653 - ),
654 - 'MMK' => array(
655 - 'name' => 'Myanmar Kyat',
656 - 'symbol' => 'K',
657 - ),
658 - 'NAD' => array(
659 - 'name' => 'Namibian Dollar',
660 - 'symbol' => '$',
661 - ),
662 - 'NPR' => array(
663 - 'name' => 'Nepalese Rupee',
664 - 'symbol' => '₨',
665 - ),
666 - 'ANG' => array(
667 - 'name' => 'Netherlands Antillean Guilder',
668 - 'symbol' => 'ƒ',
669 - ),
670 - 'TWD' => array(
671 - 'name' => 'New Taiwan Dollar',
672 - 'symbol' => '$',
673 - ),
674 - 'NZD' => array(
675 - 'name' => 'New Zealand Dollar',
676 - 'symbol' => '$',
677 - ),
678 - 'NIO' => array(
679 - 'name' => 'Nicaraguan Córdoba',
680 - 'symbol' => 'C$',
681 - ),
682 - 'NGN' => array(
683 - 'name' => 'Nigerian Naira',
684 - 'symbol' => '₦',
685 - ),
686 - 'KPW' => array(
687 - 'name' => 'North Korean Won',
688 - 'symbol' => '₩',
689 - ),
690 - 'NOK' => array(
691 - 'name' => 'Norwegian Krone',
692 - 'symbol' => 'kr',
693 - ),
694 - 'OMR' => array(
695 - 'name' => 'Omani Rial',
696 - 'symbol' => '.ع.ر',
697 - ),
698 - 'PKR' => array(
699 - 'name' => 'Pakistani Rupee',
700 - 'symbol' => '₨',
701 - ),
702 - 'PAB' => array(
703 - 'name' => 'Panamanian Balboa',
704 - 'symbol' => 'B/.',
705 - ),
706 - 'PGK' => array(
707 - 'name' => 'Papua New Guinean Kina',
708 - 'symbol' => 'K',
709 - ),
710 - 'PYG' => array(
711 - 'name' => 'Paraguayan Guarani',
712 - 'symbol' => '₲',
713 - ),
714 - 'PEN' => array(
715 - 'name' => 'Peruvian Nuevo Sol',
716 - 'symbol' => 'S/.',
717 - ),
718 - 'PHP' => array(
719 - 'name' => 'Philippine Peso',
720 - 'symbol' => '₱',
721 - ),
722 - 'PLN' => array(
723 - 'name' => 'Polish Zloty',
724 - 'symbol' => 'zł',
725 - ),
726 - 'QAR' => array(
727 - 'name' => 'Qatari Rial',
728 - 'symbol' => 'ق.ر',
729 - ),
730 - 'RON' => array(
731 - 'name' => 'Romanian Leu',
732 - 'symbol' => 'lei',
733 - ),
734 - 'RUB' => array(
735 - 'name' => 'Russian Ruble',
736 - 'symbol' => '₽',
737 - ),
738 - 'RWF' => array(
739 - 'name' => 'Rwandan Franc',
740 - 'symbol' => 'FRw',
741 - ),
742 - 'SVC' => array(
743 - 'name' => 'Salvadoran Colón',
744 - 'symbol' => '₡',
745 - ),
746 - 'WST' => array(
747 - 'name' => 'Samoan Tala',
748 - 'symbol' => 'SAT',
749 - ),
750 - 'STD' => array(
751 - 'name' => 'São Tomé and Príncipe Dobra',
752 - 'symbol' => 'Db',
753 - ),
754 - 'SAR' => array(
755 - 'name' => 'Saudi Riyal',
756 - 'symbol' => '﷼',
757 - ),
758 - 'RSD' => array(
759 - 'name' => 'Serbian Dinar',
760 - 'symbol' => 'din',
761 - ),
762 - 'SCR' => array(
763 - 'name' => 'Seychellois Rupee',
764 - 'symbol' => 'SRe',
765 - ),
766 - 'SLL' => array(
767 - 'name' => 'Sierra Leonean Leone',
768 - 'symbol' => 'Le',
769 - ),
770 - 'SGD' => array(
771 - 'name' => 'Singapore Dollar',
772 - 'symbol' => '$',
773 - ),
774 - 'SKK' => array(
775 - 'name' => 'Slovak Koruna',
776 - 'symbol' => 'Sk',
777 - ),
778 - 'SBD' => array(
779 - 'name' => 'Solomon Islands Dollar',
780 - 'symbol' => 'Si$',
781 - ),
782 - 'SOS' => array(
783 - 'name' => 'Somali Shilling',
784 - 'symbol' => 'Sh.so.',
785 - ),
786 - 'ZAR' => array(
787 - 'name' => 'South African Rand',
788 - 'symbol' => 'R',
789 - ),
790 - 'KRW' => array(
791 - 'name' => 'South Korean Won',
792 - 'symbol' => '₩',
793 - ),
794 - 'SSP' => array(
795 - 'name' => 'South Sudanese Pound',
796 - 'symbol' => '£',
797 - ),
798 - 'XDR' => array(
799 - 'name' => 'Special Drawing Rights',
800 - 'symbol' => 'SDR',
801 - ),
802 - 'LKR' => array(
803 - 'name' => 'Sri Lankan Rupee',
804 - 'symbol' => 'Rs',
805 - ),
806 - 'SHP' => array(
807 - 'name' => 'St. Helena Pound',
808 - 'symbol' => '£',
809 - ),
810 - 'SDG' => array(
811 - 'name' => 'Sudanese Pound',
812 - 'symbol' => '.س.ج',
813 - ),
814 - 'SRD' => array(
815 - 'name' => 'Surinamese Dollar',
816 - 'symbol' => '$',
817 - ),
818 - 'SZL' => array(
819 - 'name' => 'Swazi Lilangeni',
820 - 'symbol' => 'E',
821 - ),
822 - 'SEK' => array(
823 - 'name' => 'Swedish Krona',
824 - 'symbol' => 'kr',
825 - ),
826 - 'CHF' => array(
827 - 'name' => 'Swiss Franc',
828 - 'symbol' => 'CHf',
829 - ),
830 - 'SYP' => array(
831 - 'name' => 'Syrian Pound',
832 - 'symbol' => 'LS',
833 - ),
834 - 'TJS' => array(
835 - 'name' => 'Tajikistani Somoni',
836 - 'symbol' => 'SM',
837 - ),
838 - 'TZS' => array(
839 - 'name' => 'Tanzanian Shilling',
840 - 'symbol' => 'TSh',
841 - ),
842 - 'THB' => array(
843 - 'name' => 'Thai Baht',
844 - 'symbol' => '฿',
845 - ),
846 - 'TOP' => array(
847 - 'name' => "Tongan Pa'anga",
848 - 'symbol' => '$',
849 - ),
850 - 'TTD' => array(
851 - 'name' => 'Trinidad & Tobago Dollar',
852 - 'symbol' => '$',
853 - ),
854 - 'TND' => array(
855 - 'name' => 'Tunisian Dinar',
856 - 'symbol' => 'ت.د',
857 - ),
858 - 'TRY' => array(
859 - 'name' => 'Turkish Lira',
860 - 'symbol' => '₺',
861 - ),
862 - 'TMT' => array(
863 - 'name' => 'Turkmenistani Manat',
864 - 'symbol' => 'T',
865 - ),
866 - 'UGX' => array(
867 - 'name' => 'Ugandan Shilling',
868 - 'symbol' => 'USh',
869 - ),
870 - 'UAH' => array(
871 - 'name' => 'Ukrainian Hryvnia',
872 - 'symbol' => '₴',
873 - ),
874 - 'AED' => array(
875 - 'name' => 'United Arab Emirates Dirham',
876 - 'symbol' => 'إ.د',
877 - ),
878 - 'UYU' => array(
879 - 'name' => 'Uruguayan Peso',
880 - 'symbol' => '$',
881 - ),
882 - 'USD' => array(
883 - 'name' => 'US Dollar',
884 - 'symbol' => '$',
885 - ),
886 - 'UZS' => array(
887 - 'name' => 'Uzbekistan Som',
888 - 'symbol' => 'лв',
889 - ),
890 - 'VUV' => array(
891 - 'name' => 'Vanuatu Vatu',
892 - 'symbol' => 'VT',
893 - ),
894 - 'VEF' => array(
895 - 'name' => 'Venezuelan BolÃvar',
896 - 'symbol' => 'Bs',
897 - ),
898 - 'VND' => array(
899 - 'name' => 'Vietnamese Dong',
900 - 'symbol' => '₫',
901 - ),
902 - 'YER' => array(
903 - 'name' => 'Yemeni Rial',
904 - 'symbol' => '﷼',
905 - ),
906 - 'ZMK' => array(
907 - 'name' => 'Zambian Kwacha',
908 - 'symbol' => 'ZK',
909 - ),
910 - 'ZWL' => array(
911 - 'name' => 'Zimbabwean dollar',
912 - 'symbol' => '$',
913 - ),
914 - );
231 + if ( $get_currency_format ) {
232 + return array(
233 + 'format' => sprintf( $format, esc_html( static::get_currency_symbol( $currency ) ), '%1' ), // %1 for price holder.
234 + 'decimals' => $args['decimals'],
235 + );
236 + }
915 237
916 - return $currency_list;
917 - }
238 + $formatted_price = ( $negative ? '-' : '' ) . sprintf( $format, '<span class="cost-tracker-currency-symbol">' . esc_html( static::get_currency_symbol( $currency ) ) . '</span>', esc_html( $price ) );
239 + $value = '<span class="cost-tracker-currency-amount"><bdi>' . $formatted_price . '</bdi></span>';
918 240
919 - /**
920 - * Get default tracker settings.
921 - */
922 - public static function default_currency_settings() {
923 - return array(
924 - 'currency_position' => 'left',
925 - 'thousand_separator' => ',',
926 - 'decimal_separator' => '.',
927 - 'decimals' => 2,
928 - );
929 - }
241 + if ( $ret ) {
242 + return $value;
243 + }
244 + echo $value; // phpcs:ignore -- escaped.
245 + }
930 246
931 - /**
932 - * Validate currency settings.
933 - *
934 - * @param array $settings Settings value.
935 - */
936 - public static function validate_currency_settings( $settings ) {
937 - $default = self::default_currency_settings();
938 - $valid_settings = array();
247 + /**
248 + * Format the group costs prices.
249 + *
250 + * @param array $group_prices Group price.
251 + *
252 + * @return string
253 + */
254 + public static function get_separated_costs_price( $group_prices ) {
939 255
940 - $valid_settings['currency_position'] = isset( $settings['currency_position'] ) ? sanitize_text_field( wp_unslash( $settings['currency_position'] ) ) : 'left';
941 - if ( ! in_array( $valid_settings['currency_position'], array( 'left', 'right', 'left_space', 'right_space' ), true ) ) {
942 - $valid_settings['currency_position'] = $default['currency_position'];
943 - }
256 + $grouped = array(
257 + 'weekly' => 'W',
258 + 'monthly' => 'M',
259 + 'quarterly' => 'Q',
260 + 'yearly' => 'Y',
261 + 'lifetime' => 'L',
262 + );
944 263
945 - $valid_settings['thousand_separator'] = isset( $settings['thousand_separator'] ) ? sanitize_text_field( wp_unslash( $settings['thousand_separator'] ) ) : $default['thousand_separator'];
946 - $valid_settings['decimal_separator'] = isset( $settings['decimal_separator'] ) ? sanitize_text_field( wp_unslash( $settings['decimal_separator'] ) ) : $default['decimal_separator'];
947 - $valid_settings['decimals'] = isset( $settings['decimals'] ) ? intval( $settings['decimals'] ) : $default['decimals'];
264 + $formated_prices = array();
265 + if ( is_array( $group_prices ) ) {
266 + foreach ( $grouped as $idx => $char ) {
267 + if ( ! empty( $group_prices[ $idx ] ) ) {
268 + $formated_prices[ $idx ] = static::cost_tracker_format_price( $group_prices[ $idx ], true ) . '/' . $char;
269 + }
270 + }
271 + }
272 + if ( ! empty( $formated_prices ) ) {
273 + return implode( '|', $formated_prices );
274 + }
275 + return static::cost_tracker_format_price( 0, true );
276 + }
948 277
949 - if ( $valid_settings['decimals'] > 8 || $valid_settings['decimals'] < 0 ) {
950 - $valid_settings['decimals'] = $default['decimals'];
951 - }
278 + /**
279 + * Method get_currency_symbol().
280 + *
281 + * @param string $currency Currency.
282 + *
283 + * @return string Currency symbol.
284 + */
285 + public static function get_currency_symbol( $currency ) {
286 + if ( ! is_string( $currency ) ) {
287 + return '';
288 + }
289 + $all_curs = static::get_all_currency_symbols();
290 + return isset( $all_curs[ $currency ]['symbol'] ) ? $all_curs[ $currency ]['symbol'] : '';
291 + }
952 292
953 - return $valid_settings;
954 - }
293 + /**
294 + * Method get_all_currency_symbols().
295 + *
296 + * @return array Currency symbols.
297 + */
298 + public static function get_all_currency_symbols() { // phpcs:ignore -- NOSONAR - multi lines.
299 +
300 + return array(
301 + 'AFA' => array(
302 + 'name' => 'Afghan Afghani',
303 + 'symbol' => '؋',
304 + ),
305 + 'ALL' => array(
306 + 'name' => 'Albanian Lek',
307 + 'symbol' => 'Lek',
308 + ),
309 + 'DZD' => array(
310 + 'name' => 'Algerian Dinar',
311 + 'symbol' => 'دج',
312 + ),
313 + 'AOA' => array(
314 + 'name' => 'Angolan Kwanza',
315 + 'symbol' => 'Kz',
316 + ),
317 + 'ARS' => array(
318 + 'name' => 'Argentine Peso',
319 + 'symbol' => '$',
320 + ),
321 + 'AMD' => array(
322 + 'name' => 'Armenian Dram',
323 + 'symbol' => '֏',
324 + ),
325 + 'AWG' => array(
326 + 'name' => 'Aruban Florin',
327 + 'symbol' => 'ƒ',
328 + ),
329 + 'AUD' => array(
330 + 'name' => 'Australian Dollar',
331 + 'symbol' => '$',
332 + ),
333 + 'AZN' => array(
334 + 'name' => 'Azerbaijani Manat',
335 + 'symbol' => 'm',
336 + ),
337 + 'BSD' => array(
338 + 'name' => 'Bahamian Dollar',
339 + 'symbol' => 'B$',
340 + ),
341 + 'BHD' => array(
342 + 'name' => 'Bahraini Dinar',
343 + 'symbol' => '.د.ب',
344 + ),
345 + 'BDT' => array(
346 + 'name' => 'Bangladeshi Taka',
347 + 'symbol' => '৳',
348 + ),
349 + 'BBD' => array(
350 + 'name' => 'Barbadian Dollar',
351 + 'symbol' => 'Bds$',
352 + ),
353 + 'BYR' => array(
354 + 'name' => 'Belarusian Ruble',
355 + 'symbol' => 'Br',
356 + ),
357 + 'BEF' => array(
358 + 'name' => 'Belgian Franc',
359 + 'symbol' => 'fr',
360 + ),
361 + 'BZD' => array(
362 + 'name' => 'Belize Dollar',
363 + 'symbol' => '$',
364 + ),
365 + 'BMD' => array(
366 + 'name' => 'Bermudan Dollar',
367 + 'symbol' => '$',
368 + ),
369 + 'BTN' => array(
370 + 'name' => 'Bhutanese Ngultrum',
371 + 'symbol' => 'Nu.',
372 + ),
373 + 'BTC' => array(
374 + 'name' => 'Bitcoin',
375 + 'symbol' => '฿',
376 + ),
377 + 'BOB' => array(
378 + 'name' => 'Bolivian Boliviano',
379 + 'symbol' => 'Bs.',
380 + ),
381 + 'BAM' => array(
382 + 'name' => 'Bosnia-Herzegovina Convertible Mark',
383 + 'symbol' => 'KM',
384 + ),
385 + 'BWP' => array(
386 + 'name' => 'Botswanan Pula',
387 + 'symbol' => 'P',
388 + ),
389 + 'BRL' => array(
390 + 'name' => 'Brazilian Real',
391 + 'symbol' => 'R$',
392 + ),
393 + 'GBP' => array(
394 + 'name' => 'British Pound Sterling',
395 + 'symbol' => '£',
396 + ),
397 + 'BND' => array(
398 + 'name' => 'Brunei Dollar',
399 + 'symbol' => 'B$',
400 + ),
401 + 'BGN' => array(
402 + 'name' => 'Bulgarian Lev',
403 + 'symbol' => 'Лв.',
404 + ),
405 + 'BIF' => array(
406 + 'name' => 'Burundian Franc',
407 + 'symbol' => 'FBu',
408 + ),
409 + 'KHR' => array(
410 + 'name' => 'Cambodian Riel',
411 + 'symbol' => 'KHR',
412 + ),
413 + 'CAD' => array(
414 + 'name' => 'Canadian Dollar',
415 + 'symbol' => '$',
416 + ),
417 + 'CVE' => array(
418 + 'name' => 'Cape Verdean Escudo',
419 + 'symbol' => '$',
420 + ),
421 + 'KYD' => array(
422 + 'name' => 'Cayman Islands Dollar',
423 + 'symbol' => '$',
424 + ),
425 + 'XOF' => array(
426 + 'name' => 'CFA Franc BCEAO',
427 + 'symbol' => 'CFA',
428 + ),
429 + 'XAF' => array(
430 + 'name' => 'CFA Franc BEAC',
431 + 'symbol' => 'FCFA',
432 + ),
433 + 'XPF' => array(
434 + 'name' => 'CFP Franc',
435 + 'symbol' => '₣',
436 + ),
437 + 'CLP' => array(
438 + 'name' => 'Chilean Peso',
439 + 'symbol' => '$',
440 + ),
441 + 'CLF' => array(
442 + 'name' => 'Chilean Unit of Account',
443 + 'symbol' => 'CLF',
444 + ),
445 + 'CNY' => array(
446 + 'name' => 'Chinese Yuan',
447 + 'symbol' => '¥',
448 + ),
449 + 'COP' => array(
450 + 'name' => 'Colombian Peso',
451 + 'symbol' => '$',
452 + ),
453 + 'KMF' => array(
454 + 'name' => 'Comorian Franc',
455 + 'symbol' => 'CF',
456 + ),
457 + 'CDF' => array(
458 + 'name' => 'Congolese Franc',
459 + 'symbol' => 'FC',
460 + ),
461 + 'CRC' => array(
462 + 'name' => 'Costa Rican Colón',
463 + 'symbol' => '₡',
464 + ),
465 + 'HRK' => array(
466 + 'name' => 'Croatian Kuna',
467 + 'symbol' => 'kn',
468 + ),
469 + 'CUC' => array(
470 + 'name' => 'Cuban Convertible Peso',
471 + 'symbol' => '$, CUC',
472 + ),
473 + 'CZK' => array(
474 + 'name' => 'Czech Republic Koruna',
475 + 'symbol' => 'Kč',
476 + ),
477 + 'DKK' => array(
478 + 'name' => 'Danish Krone',
479 + 'symbol' => 'Kr.',
480 + ),
481 + 'DJF' => array(
482 + 'name' => 'Djiboutian Franc',
483 + 'symbol' => 'Fdj',
484 + ),
485 + 'DOP' => array(
486 + 'name' => 'Dominican Peso',
487 + 'symbol' => '$',
488 + ),
489 + 'XCD' => array(
490 + 'name' => 'East Caribbean Dollar',
491 + 'symbol' => '$',
492 + ),
493 + 'EGP' => array(
494 + 'name' => 'Egyptian Pound',
495 + 'symbol' => 'ج.م',
496 + ),
497 + 'ERN' => array(
498 + 'name' => 'Eritrean Nakfa',
499 + 'symbol' => 'Nfk',
500 + ),
501 + 'EEK' => array(
502 + 'name' => 'Estonian Kroon',
503 + 'symbol' => 'kr',
504 + ),
505 + 'ETB' => array(
506 + 'name' => 'Ethiopian Birr',
507 + 'symbol' => 'Nkf',
508 + ),
509 + 'EUR' => array(
510 + 'name' => 'Euro',
511 + 'symbol' => '€',
512 + ),
513 + 'FKP' => array(
514 + 'name' => 'Falkland Islands Pound',
515 + 'symbol' => '£',
516 + ),
517 + 'FJD' => array(
518 + 'name' => 'Fijian Dollar',
519 + 'symbol' => 'FJ$',
520 + ),
521 + 'GMD' => array(
522 + 'name' => 'Gambian Dalasi',
523 + 'symbol' => 'D',
524 + ),
525 + 'GEL' => array(
526 + 'name' => 'Georgian Lari',
527 + 'symbol' => 'ლ',
528 + ),
529 + 'DEM' => array(
530 + 'name' => 'German Mark',
531 + 'symbol' => 'DM',
532 + ),
533 + 'GHS' => array(
534 + 'name' => 'Ghanaian Cedi',
535 + 'symbol' => 'GH₵',
536 + ),
537 + 'GIP' => array(
538 + 'name' => 'Gibraltar Pound',
539 + 'symbol' => '£',
540 + ),
541 + 'GRD' => array(
542 + 'name' => 'Greek Drachma',
543 + 'symbol' => '₯, Δρχ, Δρ',
544 + ),
545 + 'GTQ' => array(
546 + 'name' => 'Guatemalan Quetzal',
547 + 'symbol' => 'Q',
548 + ),
549 + 'GNF' => array(
550 + 'name' => 'Guinean Franc',
551 + 'symbol' => 'FG',
552 + ),
553 + 'GYD' => array(
554 + 'name' => 'Guyanaese Dollar',
555 + 'symbol' => '$',
556 + ),
557 + 'HTG' => array(
558 + 'name' => 'Haitian Gourde',
559 + 'symbol' => 'G',
560 + ),
561 + 'HNL' => array(
562 + 'name' => 'Honduran Lempira',
563 + 'symbol' => 'L',
564 + ),
565 + 'HKD' => array(
566 + 'name' => 'Hong Kong Dollar',
567 + 'symbol' => '$',
568 + ),
569 + 'HUF' => array(
570 + 'name' => 'Hungarian Forint',
571 + 'symbol' => 'Ft',
572 + ),
573 + 'ISK' => array(
574 + 'name' => 'Icelandic Króna',
575 + 'symbol' => 'kr',
576 + ),
577 + 'INR' => array(
578 + 'name' => 'Indian Rupee',
579 + 'symbol' => '₹',
580 + ),
581 + 'IDR' => array(
582 + 'name' => 'Indonesian Rupiah',
583 + 'symbol' => 'Rp',
584 + ),
585 + 'IRR' => array(
586 + 'name' => 'Iranian Rial',
587 + 'symbol' => '﷼',
588 + ),
589 + 'IQD' => array(
590 + 'name' => 'Iraqi Dinar',
591 + 'symbol' => 'د.ع',
592 + ),
593 + 'ILS' => array(
594 + 'name' => 'Israeli New Sheqel',
595 + 'symbol' => '₪',
596 + ),
597 + 'ITL' => array(
598 + 'name' => 'Italian Lira',
599 + 'symbol' => 'L,£',
600 + ),
601 + 'JMD' => array(
602 + 'name' => 'Jamaican Dollar',
603 + 'symbol' => 'J$',
604 + ),
605 + 'JPY' => array(
606 + 'name' => 'Japanese Yen',
607 + 'symbol' => '¥',
608 + ),
609 + 'JOD' => array(
610 + 'name' => 'Jordanian Dinar',
611 + 'symbol' => 'ا.د',
612 + ),
613 + 'KZT' => array(
614 + 'name' => 'Kazakhstani Tenge',
615 + 'symbol' => 'лв',
616 + ),
617 + 'KES' => array(
618 + 'name' => 'Kenyan Shilling',
619 + 'symbol' => 'KSh',
620 + ),
621 + 'KWD' => array(
622 + 'name' => 'Kuwaiti Dinar',
623 + 'symbol' => 'ك.د',
624 + ),
625 + 'KGS' => array(
626 + 'name' => 'Kyrgystani Som',
627 + 'symbol' => 'лв',
628 + ),
629 + 'LAK' => array(
630 + 'name' => 'Laotian Kip',
631 + 'symbol' => '₭',
632 + ),
633 + 'LVL' => array(
634 + 'name' => 'Latvian Lats',
635 + 'symbol' => 'Ls',
636 + ),
637 + 'LBP' => array(
638 + 'name' => 'Lebanese Pound',
639 + 'symbol' => '£',
640 + ),
641 + 'LSL' => array(
642 + 'name' => 'Lesotho Loti',
643 + 'symbol' => 'L',
644 + ),
645 + 'LRD' => array(
646 + 'name' => 'Liberian Dollar',
647 + 'symbol' => '$',
648 + ),
649 + 'LYD' => array(
650 + 'name' => 'Libyan Dinar',
651 + 'symbol' => 'د.ل',
652 + ),
653 + 'LTC' => array(
654 + 'name' => 'Litecoin',
655 + 'symbol' => 'Ł',
656 + ),
657 + 'LTL' => array(
658 + 'name' => 'Lithuanian Litas',
659 + 'symbol' => 'Lt',
660 + ),
661 + 'MOP' => array(
662 + 'name' => 'Macanese Pataca',
663 + 'symbol' => '$',
664 + ),
665 + 'MKD' => array(
666 + 'name' => 'Macedonian Denar',
667 + 'symbol' => 'ден',
668 + ),
669 + 'MGA' => array(
670 + 'name' => 'Malagasy Ariary',
671 + 'symbol' => 'Ar',
672 + ),
673 + 'MWK' => array(
674 + 'name' => 'Malawian Kwacha',
675 + 'symbol' => 'MK',
676 + ),
677 + 'MYR' => array(
678 + 'name' => 'Malaysian Ringgit',
679 + 'symbol' => 'RM',
680 + ),
681 + 'MVR' => array(
682 + 'name' => 'Maldivian Rufiyaa',
683 + 'symbol' => 'Rf',
684 + ),
685 + 'MRO' => array(
686 + 'name' => 'Mauritanian Ouguiya',
687 + 'symbol' => 'MRU',
688 + ),
689 + 'MUR' => array(
690 + 'name' => 'Mauritian Rupee',
691 + 'symbol' => '₨',
692 + ),
693 + 'MXN' => array(
694 + 'name' => 'Mexican Peso',
695 + 'symbol' => '$',
696 + ),
697 + 'MDL' => array(
698 + 'name' => 'Moldovan Leu',
699 + 'symbol' => 'L',
700 + ),
701 + 'MNT' => array(
702 + 'name' => 'Mongolian Tugrik',
703 + 'symbol' => '₮',
704 + ),
705 + 'MAD' => array(
706 + 'name' => 'Moroccan Dirham',
707 + 'symbol' => 'MAD',
708 + ),
709 + 'MZM' => array(
710 + 'name' => 'Mozambican Metical',
711 + 'symbol' => 'MT',
712 + ),
713 + 'MMK' => array(
714 + 'name' => 'Myanmar Kyat',
715 + 'symbol' => 'K',
716 + ),
717 + 'NAD' => array(
718 + 'name' => 'Namibian Dollar',
719 + 'symbol' => '$',
720 + ),
721 + 'NPR' => array(
722 + 'name' => 'Nepalese Rupee',
723 + 'symbol' => '₨',
724 + ),
725 + 'ANG' => array(
726 + 'name' => 'Netherlands Antillean Guilder',
727 + 'symbol' => 'ƒ',
728 + ),
729 + 'TWD' => array(
730 + 'name' => 'New Taiwan Dollar',
731 + 'symbol' => '$',
732 + ),
733 + 'NZD' => array(
734 + 'name' => 'New Zealand Dollar',
735 + 'symbol' => '$',
736 + ),
737 + 'NIO' => array(
738 + 'name' => 'Nicaraguan Córdoba',
739 + 'symbol' => 'C$',
740 + ),
741 + 'NGN' => array(
742 + 'name' => 'Nigerian Naira',
743 + 'symbol' => '₦',
744 + ),
745 + 'KPW' => array(
746 + 'name' => 'North Korean Won',
747 + 'symbol' => '₩',
748 + ),
749 + 'NOK' => array(
750 + 'name' => 'Norwegian Krone',
751 + 'symbol' => 'kr',
752 + ),
753 + 'OMR' => array(
754 + 'name' => 'Omani Rial',
755 + 'symbol' => '.ع.ر',
756 + ),
757 + 'PKR' => array(
758 + 'name' => 'Pakistani Rupee',
759 + 'symbol' => '₨',
760 + ),
761 + 'PAB' => array(
762 + 'name' => 'Panamanian Balboa',
763 + 'symbol' => 'B/.',
764 + ),
765 + 'PGK' => array(
766 + 'name' => 'Papua New Guinean Kina',
767 + 'symbol' => 'K',
768 + ),
769 + 'PYG' => array(
770 + 'name' => 'Paraguayan Guarani',
771 + 'symbol' => '₲',
772 + ),
773 + 'PEN' => array(
774 + 'name' => 'Peruvian Nuevo Sol',
775 + 'symbol' => 'S/.',
776 + ),
777 + 'PHP' => array(
778 + 'name' => 'Philippine Peso',
779 + 'symbol' => '₱',
780 + ),
781 + 'PLN' => array(
782 + 'name' => 'Polish Zloty',
783 + 'symbol' => 'zł',
784 + ),
785 + 'QAR' => array(
786 + 'name' => 'Qatari Rial',
787 + 'symbol' => 'ق.ر',
788 + ),
789 + 'RON' => array(
790 + 'name' => 'Romanian Leu',
791 + 'symbol' => 'lei',
792 + ),
793 + 'RUB' => array(
794 + 'name' => 'Russian Ruble',
795 + 'symbol' => '₽',
796 + ),
797 + 'RWF' => array(
798 + 'name' => 'Rwandan Franc',
799 + 'symbol' => 'FRw',
800 + ),
801 + 'SVC' => array(
802 + 'name' => 'Salvadoran Colón',
803 + 'symbol' => '₡',
804 + ),
805 + 'WST' => array(
806 + 'name' => 'Samoan Tala',
807 + 'symbol' => 'SAT',
808 + ),
809 + 'STD' => array(
810 + 'name' => 'São Tomé and Príncipe Dobra',
811 + 'symbol' => 'Db',
812 + ),
813 + 'SAR' => array(
814 + 'name' => 'Saudi Riyal',
815 + 'symbol' => '﷼',
816 + ),
817 + 'RSD' => array(
818 + 'name' => 'Serbian Dinar',
819 + 'symbol' => 'din',
820 + ),
821 + 'SCR' => array(
822 + 'name' => 'Seychellois Rupee',
823 + 'symbol' => 'SRe',
824 + ),
825 + 'SLL' => array(
826 + 'name' => 'Sierra Leonean Leone',
827 + 'symbol' => 'Le',
828 + ),
829 + 'SGD' => array(
830 + 'name' => 'Singapore Dollar',
831 + 'symbol' => '$',
832 + ),
833 + 'SKK' => array(
834 + 'name' => 'Slovak Koruna',
835 + 'symbol' => 'Sk',
836 + ),
837 + 'SBD' => array(
838 + 'name' => 'Solomon Islands Dollar',
839 + 'symbol' => 'Si$',
840 + ),
841 + 'SOS' => array(
842 + 'name' => 'Somali Shilling',
843 + 'symbol' => 'Sh.so.',
844 + ),
845 + 'ZAR' => array(
846 + 'name' => 'South African Rand',
847 + 'symbol' => 'R',
848 + ),
849 + 'KRW' => array(
850 + 'name' => 'South Korean Won',
851 + 'symbol' => '₩',
852 + ),
853 + 'SSP' => array(
854 + 'name' => 'South Sudanese Pound',
855 + 'symbol' => '£',
856 + ),
857 + 'XDR' => array(
858 + 'name' => 'Special Drawing Rights',
859 + 'symbol' => 'SDR',
860 + ),
861 + 'LKR' => array(
862 + 'name' => 'Sri Lankan Rupee',
863 + 'symbol' => 'Rs',
864 + ),
865 + 'SHP' => array(
866 + 'name' => 'St. Helena Pound',
867 + 'symbol' => '£',
868 + ),
869 + 'SDG' => array(
870 + 'name' => 'Sudanese Pound',
871 + 'symbol' => '.س.ج',
872 + ),
873 + 'SRD' => array(
874 + 'name' => 'Surinamese Dollar',
875 + 'symbol' => '$',
876 + ),
877 + 'SZL' => array(
878 + 'name' => 'Swazi Lilangeni',
879 + 'symbol' => 'E',
880 + ),
881 + 'SEK' => array(
882 + 'name' => 'Swedish Krona',
883 + 'symbol' => 'kr',
884 + ),
885 + 'CHF' => array(
886 + 'name' => 'Swiss Franc',
887 + 'symbol' => 'CHf',
888 + ),
889 + 'SYP' => array(
890 + 'name' => 'Syrian Pound',
891 + 'symbol' => 'LS',
892 + ),
893 + 'TJS' => array(
894 + 'name' => 'Tajikistani Somoni',
895 + 'symbol' => 'SM',
896 + ),
897 + 'TZS' => array(
898 + 'name' => 'Tanzanian Shilling',
899 + 'symbol' => 'TSh',
900 + ),
901 + 'THB' => array(
902 + 'name' => 'Thai Baht',
903 + 'symbol' => '฿',
904 + ),
905 + 'TOP' => array(
906 + 'name' => "Tongan Pa'anga",
907 + 'symbol' => '$',
908 + ),
909 + 'TTD' => array(
910 + 'name' => 'Trinidad & Tobago Dollar',
911 + 'symbol' => '$',
912 + ),
913 + 'TND' => array(
914 + 'name' => 'Tunisian Dinar',
915 + 'symbol' => 'ت.د',
916 + ),
917 + 'TRY' => array(
918 + 'name' => 'Turkish Lira',
919 + 'symbol' => '₺',
920 + ),
921 + 'TMT' => array(
922 + 'name' => 'Turkmenistani Manat',
923 + 'symbol' => 'T',
924 + ),
925 + 'UGX' => array(
926 + 'name' => 'Ugandan Shilling',
927 + 'symbol' => 'USh',
928 + ),
929 + 'UAH' => array(
930 + 'name' => 'Ukrainian Hryvnia',
931 + 'symbol' => '₴',
932 + ),
933 + 'AED' => array(
934 + 'name' => 'United Arab Emirates Dirham',
935 + 'symbol' => 'إ.د',
936 + ),
937 + 'UYU' => array(
938 + 'name' => 'Uruguayan Peso',
939 + 'symbol' => '$',
940 + ),
941 + 'USD' => array(
942 + 'name' => 'US Dollar',
943 + 'symbol' => '$',
944 + ),
945 + 'UZS' => array(
946 + 'name' => 'Uzbekistan Som',
947 + 'symbol' => 'лв',
948 + ),
949 + 'VUV' => array(
950 + 'name' => 'Vanuatu Vatu',
951 + 'symbol' => 'VT',
952 + ),
953 + 'VEF' => array(
954 + 'name' => 'Venezuelan BolÃvar',
955 + 'symbol' => 'Bs',
956 + ),
957 + 'VND' => array(
958 + 'name' => 'Vietnamese Dong',
959 + 'symbol' => '₫',
960 + ),
961 + 'YER' => array(
962 + 'name' => 'Yemeni Rial',
963 + 'symbol' => '﷼',
964 + ),
965 + 'ZMK' => array(
966 + 'name' => 'Zambian Kwacha',
967 + 'symbol' => 'ZK',
968 + ),
969 + 'ZWL' => array(
970 + 'name' => 'Zimbabwean dollar',
971 + 'symbol' => '$',
972 + ),
973 + );
974 + }
975 +
976 + /**
977 + * Get default tracker settings.
978 + */
979 + public static function default_currency_settings() {
980 + return array(
981 + 'currency_position' => 'left',
982 + 'thousand_separator' => ',',
983 + 'decimal_separator' => '.',
984 + 'decimals' => 2,
985 + );
986 + }
987 +
988 + /**
989 + * Validate currency settings.
990 + *
991 + * @param array $settings Settings value.
992 + */
993 + public static function validate_currency_settings( $settings ) {
994 + $default = static::default_currency_settings();
995 + $valid_settings = array();
996 +
997 + $valid_settings['currency_position'] = isset( $settings['currency_position'] ) ? sanitize_text_field( wp_unslash( $settings['currency_position'] ) ) : 'left';
998 + if ( ! in_array( $valid_settings['currency_position'], array( 'left', 'right', 'left_space', 'right_space' ), true ) ) {
999 + $valid_settings['currency_position'] = $default['currency_position'];
1000 + }
1001 +
1002 + $valid_settings['thousand_separator'] = isset( $settings['thousand_separator'] ) ? sanitize_text_field( wp_unslash( $settings['thousand_separator'] ) ) : $default['thousand_separator'];
1003 + $valid_settings['decimal_separator'] = isset( $settings['decimal_separator'] ) ? sanitize_text_field( wp_unslash( $settings['decimal_separator'] ) ) : $default['decimal_separator'];
1004 + $valid_settings['decimals'] = isset( $settings['decimals'] ) ? intval( $settings['decimals'] ) : $default['decimals'];
1005 +
1006 + if ( $valid_settings['decimals'] > 8 || $valid_settings['decimals'] < 0 ) {
1007 + $valid_settings['decimals'] = $default['decimals'];
1008 + }
1009 +
1010 + return $valid_settings;
1011 + }
1012 +
1013 + /**
1014 + * Get payment method icon
1015 + *
1016 + * Returns FOmantic UI icon for payment selected payment method.
1017 + *
1018 + * @param string $payment_method Selected patyment method.
1019 + */
1020 + public static function get_payment_method_icon( $payment_method ) {
1021 + $icon = '<i class="money bill large icon"></i>';
1022 +
1023 + switch ( $payment_method ) {
1024 + case 'PayPal':
1025 + $icon = '<span data-tooltip="PayPal" data-inverted="" data-position="left center"><i class="paypal large icon"></i></span>';
1026 + break;
1027 + case 'Stripe':
1028 + $icon = '<span data-tooltip="Stripe" data-inverted="" data-position="left center"><i class="stripe large icon"></i></span>';
1029 + break;
1030 + case 'Apple Pay':
1031 + $icon = '<span data-tooltip="Apple Pay" data-inverted="" data-position="left center"><i class="apple pay large icon"></i></span>';
1032 + break;
1033 + case 'Amazon Pay':
1034 + $icon = '<span data-tooltip="Amazon Pay" data-inverted="" data-position="left center"><i class="amazon pay large icon"></i></span>';
1035 + break;
1036 + case 'Google Pay':
1037 + $icon = '<span data-tooltip="Google Pay" data-inverted="" data-position="left center"><i class="google pay large icon"></i></span>';
1038 + break;
1039 + case 'Credit Card':
1040 + $icon = '<span data-tooltip="Credit Card" data-inverted="" data-position="left center"><i class="credit card large icon"></i></span>';
1041 + break;
1042 + case 'Debit Card':
1043 + $icon = '<span data-tooltip="Debit Card" data-inverted="" data-position="left center"><i class="credit card outline large icon"></i></span>';
1044 + break;
1045 + case 'Cash':
1046 + $icon = '<span data-tooltip="Cash" data-inverted="" data-position="left center"><i class="money bill alternate outline large icon"></i></span>';
1047 + break;
1048 + default:
1049 + break;
1050 + }
1051 +
1052 + return $icon;
1053 + }
1054 +
1055 +
1056 + /**
1057 + * Method get_product_default_icons().
1058 + *
1059 + * @param bool $get_all Get all icons.
1060 + * @param string $def_type_icon to get default icon for types.
1061 + *
1062 + * @return string icon.
1063 + */
1064 + public static function get_product_default_icons( $get_all = true, $def_type_icon = '' ) {
1065 + unset( $get_all );
1066 + if ( 'default_custom_product_type' === $def_type_icon ) {
1067 + return 'folder open';
1068 + } elseif ( 'default_product' === $def_type_icon ) {
1069 + return 'archive';
1070 + }
1071 +
1072 + if ( ! empty( $def_type_icon ) ) {
1073 + $default_pro_type_icons = Cost_Tracker_Admin::get_default_product_types_icons();
1074 + if ( isset( $default_pro_type_icons[ $def_type_icon ] ) ) {
1075 + return $default_pro_type_icons[ $def_type_icon ];
1076 + }
1077 + }
1078 + return MainWP_UI::get_default_icons();
1079 + }
955 1080 }