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 / urls / class-wcml-xdomain-data.php
woocommerce-multilingual / classes / urls Last commit date
class-wcml-xdomain-data.php 3 weeks ago
class-wcml-xdomain-data.php
79 lines
1 <?php
2
3 class WCML_xDomain_Data implements \IWPML_Backend_Action, \IWPML_Frontend_Action, \IWPML_DIC_Action {
4
5 private $cookie_handler;
6
7 public function __construct( WPML_Cookie $cookie_handler ) {
8 $this->cookie_handler = $cookie_handler;
9 }
10
11 public function add_hooks() {
12 add_filter( 'wpml_cross_domain_language_data', [ $this, 'pass_data_to_domain' ] );
13 add_action( 'before_woocommerce_init', [ $this, 'check_request' ] );
14 }
15
16 public function pass_data_to_domain( $data ) {
17
18 $wcml_session_id = md5( microtime() . uniqid( (string) mt_rand(), true ) );
19 $data['wcsid'] = $wcml_session_id;
20 $session_data = [];
21
22 if ( isset( $_COOKIE[ 'wp_woocommerce_session_' . COOKIEHASH ] ) ) {
23 $session_data['session'] = $_COOKIE[ 'wp_woocommerce_session_' . COOKIEHASH ];
24 }
25
26 if ( isset( $_COOKIE['woocommerce_cart_hash'] ) ) {
27 $session_data['hash'] = $_COOKIE['woocommerce_cart_hash'];
28 $session_data['items'] = $_COOKIE['woocommerce_items_in_cart'];
29 }
30
31 if ( ! empty( $session_data ) ) {
32 update_option( 'wcml_session_data_' . $wcml_session_id, $session_data );
33 }
34
35 return $data;
36 }
37
38 public function check_request() {
39
40 if ( has_filter( 'wpml_get_cross_domain_language_data' ) ) {
41 $xdomain_data = apply_filters( 'wpml_get_cross_domain_language_data', [] );
42 } elseif ( isset( $_GET['xdomain_data'] ) ) {
43 $xdomain_data = json_decode( base64_decode( $_GET['xdomain_data'] ), true );
44 }
45
46 if ( isset( $xdomain_data['wcsid'] ) ) {
47 $this->set_session_data( $xdomain_data['wcsid'] );
48 }
49
50 }
51
52 private function set_session_data( $wcml_session_id ) {
53
54 $data = maybe_unserialize( get_option( 'wcml_session_data_' . $wcml_session_id ) );
55
56 if ( ! empty( $data ) ) {
57
58 $session_expiration = time() + (int) apply_filters( 'wc_session_expiration', 60 * 60 * 48 );
59 $secure = apply_filters( 'wc_session_use_secure_cookie', false );
60
61 if ( isset( $data['session'] ) ) {
62 $this->cookie_handler->set_cookie( 'wp_woocommerce_session_' . COOKIEHASH, $data['session'], $session_expiration, COOKIEPATH, COOKIE_DOMAIN, $secure );
63 $_COOKIE[ 'wp_woocommerce_session_' . COOKIEHASH ] = $data['session'];
64 }
65
66 if ( isset( $data['hash'] ) ) {
67 $this->cookie_handler->set_cookie( 'woocommerce_cart_hash', $data['hash'], $session_expiration, COOKIEPATH, COOKIE_DOMAIN, $secure );
68 $this->cookie_handler->set_cookie( 'woocommerce_items_in_cart', $data['items'], $session_expiration, COOKIEPATH, COOKIE_DOMAIN, $secure );
69 $_COOKIE['woocommerce_cart_hash'] = $data['hash'];
70 $_COOKIE['woocommerce_items_in_cart'] = $data['items'];
71 }
72 }
73
74 delete_option( 'wcml_session_data_' . $wcml_session_id );
75
76 }
77
78 }
79