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 / Resolver / ResolverForContext.php
woocommerce-multilingual / classes / Multicurrency / Resolver Last commit date
ComposedResolver.php 1 week ago Factory.php 1 week ago HelperByLanguage.php 1 week ago HelperByLocation.php 1 week ago Resolver.php 1 week ago ResolverForContext.php 1 week ago ResolverForDefault.php 1 week ago ResolverForModeLanguage.php 1 week ago ResolverForModeLocation.php 1 week ago
ResolverForContext.php
127 lines
1 <?php
2
3 namespace WCML\MultiCurrency\Resolver;
4
5 use WCML\COT\Helper as COTHelper;
6 use WCML\MultiCurrency\Settings;
7 use WCML\Orders\Helper as OrdersHelper;
8 use WPML\FP\Logic;
9 use WPML\FP\Obj;
10 use WPML\FP\Relation;
11
12 class ResolverForContext implements Resolver {
13
14 private $getOriginalProductLanguage;
15
16 public function __construct( callable $getOriginalProductLanguage ) {
17 $this->getOriginalProductLanguage = $getOriginalProductLanguage;
18 }
19
20 public function getClientCurrency() {
21 $getOnWoocommerceQuickEdit = function() {
22 if ( ! empty( $_REQUEST['woocommerce_quick_edit'] ) ) {
23 return wcml_get_woocommerce_currency_option();
24 }
25
26 return null;
27 };
28
29 $getIfMissingCustomPrice = function() {
30 if ( Settings::isDisplayOnlyCustomPrices() && is_product() ) {
31 $product = wc_get_product();
32 $originalProductLanguage = call_user_func( $this->getOriginalProductLanguage, $product->get_id() );
33
34 $isMissingCustomPrice = function( $productOrVariationId ) use ( $originalProductLanguage ) {
35 return ! get_post_meta(
36 apply_filters( 'wpml_object_id', $productOrVariationId, get_post_type( $productOrVariationId ), true, $originalProductLanguage ),
37 '_wcml_custom_prices_status',
38 true
39 );
40 };
41
42 if ( $product->get_type() === 'variable' ) {
43 foreach ( $product->get_children() as $child ) {
44 if ( $isMissingCustomPrice( $child ) ) {
45 return wcml_get_woocommerce_currency_option();
46 }
47 }
48 } elseif ( $isMissingCustomPrice( $product->get_id() ) ) {
49 return wcml_get_woocommerce_currency_option();
50 }
51 }
52
53 return null;
54 };
55
56 $getOnPayForOrder = function() {
57 if ( isset( $_GET['pay_for_order'], $_GET['key'] ) && $_GET['pay_for_order'] ) {
58 $cacheGroup = 'wcml_client_currency';
59 $cacheKey = 'order' . sanitize_text_field( $_GET['key'] );
60 $orderCurrency = wp_cache_get( $cacheKey, $cacheGroup );
61
62 if ( $orderCurrency ) {
63 return $orderCurrency;
64 } else {
65 $orderId = wc_get_order_id_by_order_key( wc_clean( wp_unslash( $_GET['key'] ) ) );
66 if ( $orderId ) {
67 $clientCurrency = OrdersHelper::getCurrency( $orderId, true );
68 wp_cache_set( $cacheKey, $clientCurrency, $cacheGroup );
69 return $clientCurrency;
70 }
71 }
72 }
73
74 return null;
75 };
76
77 $getOnSearchProductsFromOrderCurrencyCookie = function() {
78 if ( Relation::propEq( 'action', 'woocommerce_json_search_products_and_variations', $_GET ) ) {
79 return Obj::prop( '_wcml_order_currency', $_COOKIE );
80 }
81
82 return null;
83 };
84
85 $getFromHttpRefererShopOrderCurrency = function() {
86
87 $refererUrl = Obj::prop( 'HTTP_REFERER', $_SERVER );
88
89 if ( $refererUrl ) {
90 $query = parse_url( $refererUrl, PHP_URL_QUERY );
91
92 if ( $query ) {
93 parse_str( $query, $queryArgs );
94
95 if ( COTHelper::isUsageEnabled() ) {
96 $id = (int) Obj::prop( 'id', $queryArgs );
97 if ( $id && COTHelper::isOrder( $id ) ) {
98 return OrdersHelper::getCurrency( $id, true );
99 }
100 } else {
101 $postId = (int) Obj::prop( 'post', $queryArgs );
102 if ( $postId && get_post_type( $postId ) === 'shop_order' ) {
103 return OrdersHelper::getCurrency( $postId, true );
104 }
105 }
106
107 }
108 }
109
110 return null;
111 };
112
113 $resolve = Logic::firstSatisfying(
114 Logic::isTruthy(),
115 [
116 $getOnWoocommerceQuickEdit,
117 $getIfMissingCustomPrice,
118 $getOnPayForOrder,
119 $getOnSearchProductsFromOrderCurrencyCookie,
120 $getFromHttpRefererShopOrderCurrency,
121 ]
122 );
123
124 return $resolve( null );
125 }
126 }
127