class-wpml-user-language-switcher.php
2.15 KB
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
<?php
/**
* @package wpml-core
* @subpackage wpml-user-language
*/
class WPML_User_Language_Switcher {
/**
* @var WPML_Language_Code
*/
private $WPML_Language_Code;
/**
* WPML_User_Language_Switcher constructor.
*
* @param WPML_Language_Code $WPML_Language_Code
*/
public function __construct( &$WPML_Language_Code ) {
$this->WPML_Language_Code = &$WPML_Language_Code;
}
/**
* @param string $email
*
* @return false|mixed|string|null
*/
private function to_be_selected( $email ) {
$language = $this->WPML_Language_Code->get_from_user_meta( $email );
if ( ! $language ) {
$language = isset( $_POST['language'] ) ? $_POST['language'] : null;
}
return $language;
}
/**
* @param string $email
* @param string $language
*
* @return bool|int
*/
public function save_language_user_meta( $email, $language ) {
$user = get_user_by( 'email', $email );
$updated = false;
if ( $user && isset( $user->ID ) ) {
$language = $this->WPML_Language_Code->sanitize( $language );
$updated = update_user_meta( $user->ID, 'icl_admin_language', $language );
}
return $updated;
}
/**
* @param string $language
*
* @return false|string|null
*/
public function sanitize( $language ) {
return $this->WPML_Language_Code->sanitize( $language );
}
/**
* @param string $email
*
* @return array[]
*/
public function get_model( $email ) {
$active_languages = apply_filters( 'wpml_active_languages', null, null );
$to_be_selected = $this->to_be_selected( $email );
$options = array();
$options[] = array(
'label' => __( 'Choose language:', 'sitepress' ),
'value' => 0,
'selected' => false,
);
foreach ( $active_languages as $code => $lang ) {
$selected = ( $to_be_selected === $code );
if ( array_key_exists( 'translated_name', $lang ) ) {
$name = $lang['translated_name'];
} elseif ( array_key_exists( 'native_name', $lang ) ) {
$name = $lang['native_name'];
} else {
$name = $lang['display_name'];
}
$options[] = array(
'label' => $name,
'value' => $code,
'selected' => $selected,
);
}
return array(
'options' => $options,
);
}
}