1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
<?php // phpcs:ignoreFile
namespace AutomateWoo;
/** * Multi-lingual helper class * @class Language */ class Language {
/** * @return bool */ static function is_multilingual() { return Integrations::is_wpml(); }
/** * @return string */ static function get_default() { if ( Integrations::is_wpml() ) { return wpml_get_default_language(); }
return ''; }
/** * Returns empty string if multi-lingual is not enabled * @return string */ static function get_current() { if ( Integrations::is_wpml() ) { return wpml_get_current_language(); }
return ''; }
/** * Set language back to original */ static function set_original() { if ( Integrations::is_wpml() ) { Language::set_current( ICL_LANGUAGE_CODE ); } }
/** * @param $language */ static function set_current( $language ) {
if ( ! Language::is_multilingual() || ! $language ) { return; }
if ( $language == Language::get_current() ) { return; // no change required }
if ( Integrations::is_wpml() ) { global $sitepress; $sitepress->switch_lang( $language, false ); } }
/** * Make language choice for guests and users persist */ static function make_language_persistent() {
if ( is_admin() || ! Language::is_multilingual() ) { return; }
$current_lang = Language::get_current();
if ( is_user_logged_in() ) { $user_lang = get_user_meta( get_current_user_id(), '_aw_persistent_language', true );
if ( $user_lang != $current_lang ) { self::set_user_language( get_current_user_id(), $current_lang ); } } else { // Save language for guest if they have been stored $guest = Session_Tracker::get_current_guest();
if ( $guest ) { if ( $guest->get_language() != $current_lang ) { $guest->set_language( $current_lang ); $guest->save(); } } } }
/** * @param $user Order_Guest|\WP_User * @return string|false */ static function get_user_language( $user ) {
if ( ! Language::is_multilingual() ) return false;
if ( $user instanceof \WP_User ) { if ( $persisted = get_user_meta( $user->ID, '_aw_persistent_language', true ) ) { return Clean::string( $persisted ); } }
// guest orders, fetch the language from their order if ( is_a( $user, 'AutomateWoo\Order_Guest' ) && $user->order ) { if ( $order_lang = $user->order->get_meta( 'wpml_language' ) ) { return Clean::string( $order_lang ); } }
return wpml_get_default_language(); }
/** * @param $user_id * @param $language */ static function set_user_language( $user_id, $language ) { update_user_meta( $user_id, '_aw_persistent_language', $language ); }
/** * @param Guest $guest * @return string */ static function get_guest_language( $guest ) {
if ( ! Language::is_multilingual() ) { return ''; }
if ( $guest && $guest->get_language() ) { return $guest->get_language(); } return wpml_get_default_language(); }
}
|