PluginProbe ʕ •ᴥ•ʔ
WPML Multilingual & Multicurrency for WooCommerce / trunk
WPML Multilingual & Multicurrency for WooCommerce vtrunk
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 month ago Factory.php 1 month ago HelperByLanguage.php 1 month ago HelperByLocation.php 1 month ago Resolver.php 1 month ago ResolverForContext.php 1 month ago ResolverForDefault.php 1 month ago ResolverForModeLanguage.php 1 month ago ResolverForModeLocation.php 1 month 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