PluginProbe ʕ •ᴥ•ʔ
WPML Multilingual & Multicurrency for WooCommerce / 5.5.7
WPML Multilingual & Multicurrency for WooCommerce v5.5.7
5.5.7 5.3.8 5.3.9 5.4.3 5.4.4 5.4.5 5.5.1 5.5.1.1 5.5.2.2 5.5.2.3 5.5.3 5.5.3.1 5.5.4 5.5.5 5.5.6 trunk 0.9 1.0 1.1 1.2 1.3 1.4 1.5 2.0 2.2 2.3 2.3.1 2.3.2 3.0 3.0.1 3.1 3.2 3.2.1 3.2.2 3.3 3.3.1 3.3.2 3.3.3 3.3.4 3.4 3.4.1 3.4.2 3.4.3 3.5 3.5.1 3.5.2 3.5.3 3.5.4 3.5.5 3.6 3.6.1 3.6.10 3.6.11 3.6.2 3.6.3 3.6.4 3.6.5 3.6.5.1 3.6.6 3.6.7 3.6.8 3.6.9 3.7 3.7.1 3.7.10 3.7.11 3.7.12 3.7.13 3.7.14 3.7.15 3.7.16 3.7.2 3.7.3 3.7.4 3.7.5 3.7.6 3.7.7 3.7.8 3.7.9 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.8.6 3.9.0 3.9.1 3.9.1.1 3.9.2 3.9.3 3.9.4 3.9.5 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.10.0 4.10.1 4.10.2 4.10.3 4.10.4 4.11.2 4.11.3.2 4.11.5 4.11.6 4.12.1 4.12.4 4.12.5 4.12.6 4.2.0 4.2.0.1 4.2.1 4.2.1.1 4.2.10 4.2.2 4.2.3 4.2.4 4.2.5 4.2.6 4.2.7 4.2.7.1 4.2.8 4.2.8.1 4.2.9 4.3.0 4.3.1 4.3.2 4.3.2.1 4.3.3 4.3.4 4.3.5 4.3.6 4.3.7 4.4.0 4.4.1 4.4.2 4.4.2.1 4.5.0 4.6.0 4.6.1 4.6.2 4.6.2.1 4.6.3 4.6.5 4.6.6 4.6.7 4.7.0 4.7.1 4.7.2 4.7.3 4.7.4 4.7.5 4.7.6 4.7.7 4.7.8 4.7.9 4.8.0 4.9.0 4.9.1 5.0.1 5.0.2 5.1.1 5.1.2 5.1.3 5.2.0 5.2.1 5.3.2 5.3.3.1 5.3.4 5.3.5 5.3.6 5.3.7
woocommerce-multilingual / classes / Multicurrency / Settings.php
woocommerce-multilingual / classes / Multicurrency Last commit date
Analytics 1 week ago CurrencySwitcher 1 week ago Resolver 1 week ago Shipping 1 week ago Transient 1 week ago UI 1 week ago WpQueryMcPrice 1 week ago Settings.php 1 week ago
Settings.php
121 lines
1 <?php
2
3 namespace WCML\MultiCurrency;
4
5 use WPML\FP\Fns;
6 use WPML\FP\Lst;
7 use WPML\FP\Obj;
8 use WPML\FP\Relation;
9 use function WCML\functions\getSetting;
10 use function WCML\functions\isStandAlone;
11 use function WCML\functions\updateSetting;
12
13 class Settings {
14
15 const MODE_BY_LANGUAGE = 'by_language';
16 const MODE_BY_LOCATION = 'by_location';
17
18 public static function getMode() {
19 $persistedMode = getSetting( 'currency_mode' );
20
21 if ( self::MODE_BY_LANGUAGE === $persistedMode && isStandAlone() ) {
22 return self::MODE_BY_LOCATION;
23 }
24
25 return $persistedMode;
26 }
27
28 public static function isModeByLanguage() {
29 return self::getMode() === self::MODE_BY_LANGUAGE;
30 }
31
32 public static function isModeByLocation() {
33 return self::getMode() === self::MODE_BY_LOCATION;
34 }
35
36 public static function setMode( $mode ) {
37 updateSetting( 'currency_mode', $mode );
38 }
39
40 public static function isDisplayOnlyCustomPrices() {
41 return (bool) getSetting( 'display_custom_prices' );
42 }
43
44 public static function isActiveCurrency( $code ) {
45 return Lst::includes( $code, self::getActiveCurrencyCodes() );
46 }
47
48 public static function getActiveCurrencyCodes() {
49 return Obj::keys( self::getCurrenciesOptions() );
50 }
51
52 public static function getCurrenciesOptions() {
53 return (array) getSetting( 'currency_options' );
54 }
55
56 public static function getCurrenciesOption( $keyOrPath, $default = null ) {
57 return Obj::pathOr( $default, (array) $keyOrPath, self::getCurrenciesOptions() );
58 }
59
60 public static function isValidCurrencyByCountry( $currency, $clientCountry ) {
61 $currencySettings = self::getCurrenciesOption( $currency );
62
63 $isLocationMode = Relation::propEq( 'location_mode', Fns::__, $currencySettings );
64
65 $containsCountry = Lst::includes( Fns::__, (array) Obj::prop( 'countries', $currencySettings ) );
66
67 if ( $isLocationMode( 'all' ) ) {
68 return true;
69 } elseif ( $isLocationMode( 'include' ) && $containsCountry( $clientCountry ) ) {
70 return true;
71 } elseif ( $isLocationMode( 'exclude' ) && ! $containsCountry( $clientCountry ) ) {
72 return true;
73 }
74
75 return false;
76 }
77
78 public static function getFirstAvailableCurrencyByCountry( $country ) {
79 $isValidCurrency = function( $currency ) use ( $country ) {
80 return self::isValidCurrencyByCountry( $currency, $country );
81 };
82
83 return wpml_collect( self::getActiveCurrencyCodes() )->first( $isValidCurrency );
84 }
85
86 public static function getDefaultCurrencies() {
87 return (array) getSetting( 'default_currencies' );
88 }
89
90 public static function getOrderedCurrencyCodes() {
91 return (array) getSetting( 'currencies_order' ) ?: self::getActiveCurrencyCodes();
92 }
93
94 public static function isDefaultCurrencyByLocationForLang( $lang ) {
95 return 'location' === self::getDefaultCurrencyForLang( $lang );
96 }
97
98 public static function getDefaultCurrencyForLang( $lang ) {
99 return (string) Obj::propOr( '', $lang, self::getDefaultCurrencies() );
100 }
101
102 public static function isValidCurrencyForLang( $currency, $lang ) {
103 return (bool) self::getCurrenciesOption( [ $currency, 'languages', $lang ] );
104 }
105
106 public static function getFirstAvailableCurrencyForLang( $lang ) {
107 return (string) wpml_collect( self::getCurrenciesOptions() )
108 ->filter( Obj::path( [ 'languages', $lang ] ) )
109 ->keys()
110 ->first();
111 }
112
113 public static function isAutomaticRateEnabled() {
114 return (bool) Obj::prop( 'automatic', self::getAutomaticRateSettings() );
115 }
116
117 private static function getAutomaticRateSettings() {
118 return Obj::propOr( [], 'exchange_rates', getSetting( 'multi_currency', [] ) );
119 }
120 }
121