class-wpml-user-options-menu.php
6.25 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
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
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
<?php
/**
* Class WPML_User_Options_Menu
* Renders the WPML UI elements on the WordPress user profile edit screen
*/
class WPML_User_Options_Menu {
/** @var WP_User */
private $current_user;
/** @var SitePress */
private $sitepress;
/**
* @var string
*/
private $user_language;
/**
* @var string
*/
private $user_admin_def_lang;
/**
* @var mixed[]
*/
private $lang_details;
/**
* @var string
*/
private $admin_default_language;
/**
* @var string
*/
private $admin_language;
/**
* @var mixed[]
*/
private $all_languages;
/**
* WPML_User_Options_Menu constructor.
*
* @param SitePress $sitepress
* @param WP_User $current_user
*/
public function __construct( SitePress $sitepress, WP_User $current_user ) {
$this->sitepress = $sitepress;
$this->current_user = $current_user;
$this->user_language = $this->sitepress->get_wp_api()->get_user_meta( $this->current_user->ID, 'icl_admin_language', true );
$this->user_admin_def_lang = $this->sitepress->get_setting( 'admin_default_language' );
$this->user_admin_def_lang = $this->user_admin_def_lang === '_default_' ? $this->sitepress->get_default_language() : $this->user_admin_def_lang;
$this->lang_details = $this->sitepress->get_language_details( $this->user_admin_def_lang );
$this->admin_default_language = $this->lang_details['display_name'];
$this->admin_language = $this->sitepress->get_admin_language();
$user_language_for_all_languages = $this->user_admin_def_lang;
if ( $this->user_language ) {
$user_language_for_all_languages = $this->user_language;
}
$this->all_languages = $this->sitepress->get_languages( $user_language_for_all_languages );
}
/**
* @return string the html for the user profile edit screen element WPML
* adds to it
*/
public function render() {
$wp_api = $this->sitepress->get_wp_api();
$hide_wpml_languages = $wp_api->version_compare_naked( get_bloginfo( 'version' ), '4.7', '>=' ) ? 'style="display: none"' : '';
ob_start();
$admin_default_language_selected = $this->user_language === $this->user_admin_def_lang;
?>
<tr class="user-language-wrap">
<th colspan="2"><h3><a name="wpml"></a><?php esc_html_e( 'WPML language settings', 'sitepress' ); ?></h3></th>
</tr>
<tr class="user-language-wrap" <?php echo $hide_wpml_languages; ?>>
<th><label for="icl_user_admin_language"><?php esc_html_e( 'Select your language:', 'sitepress' ); ?></label></th>
<td>
<select id="icl_user_admin_language" name="icl_user_admin_language">
<option value=""<?php selected( true, $admin_default_language_selected ); ?>>
<?php echo esc_html( sprintf( __( 'Default admin language (currently %s)', 'sitepress' ), $this->admin_default_language ) ); ?>
</option>
<?php
foreach ( array( true, false ) as $active ) {
foreach ( (array) $this->all_languages as $lang_code => $al ) {
if ( (bool) $al['active'] === $active ) {
$current_language_selected = $this->user_language === $lang_code;
$language_name = $al['display_name'];
if ( $this->admin_language !== $lang_code ) {
$language_name .= ' (' . $al['native_name'] . ')';
}
?>
<option value="<?php echo esc_attr( $lang_code ); ?>"<?php selected( true, $current_language_selected ); ?>>
<?php echo esc_html( $language_name ); ?>
</option>
<?php
}
}
}
$use_admin_language_for_edit = $wp_api->get_user_meta( $this->current_user->ID, 'icl_admin_language_for_edit', true )
?>
</select>
<span class="description">
<?php esc_html_e( 'this will be your admin language and will also be used for translating comments.', 'sitepress' ); ?>
</span>
</td>
</tr>
<?php
$this->get_hidden_languages_options( $use_admin_language_for_edit );
do_action( 'wpml_user_profile_options', $this->current_user->ID );
return ob_get_clean();
}
/**
* @param bool $use_admin_language_for_edit
*/
private function get_hidden_languages_options( $use_admin_language_for_edit ) {
/**
* Filters a condition if current user can see hidden languages options in profile settings
*
* @params bool $show_hidden_languages_options
*/
$show_hidden_languages_options = apply_filters(
'wpml_show_hidden_languages_options',
current_user_can( 'manage_options' )
);
if ( $show_hidden_languages_options ) {
$hidden_languages = $this->sitepress->get_setting( 'hidden_languages' );
$display_hidden_languages = get_user_meta( $this->current_user->ID, 'icl_show_hidden_languages', true );
?>
<tr class="user-language-wrap">
<th><?php esc_html_e( 'Editing language:', 'sitepress' ); ?></th>
<td>
<input type="checkbox" name="icl_admin_language_for_edit" id="icl_admin_language_for_edit" value="1" <?php checked( true, $use_admin_language_for_edit ); ?> />
<label for="icl_admin_language_for_edit"><?php esc_html_e( 'Set admin language as editing language.', 'sitepress' ); ?></label>
</td>
</tr>
<tr class="user-language-wrap">
<th><?php esc_html_e( 'Hidden languages:', 'sitepress' ); ?></th>
<td>
<p>
<?php
if ( ! empty( $hidden_languages ) ) {
if ( 1 === count( $hidden_languages ) ) {
echo esc_html( sprintf( __( '%s is currently hidden to visitors.', 'sitepress' ), $this->all_languages[ end( $hidden_languages ) ]['display_name'] ) );
} else {
$hidden_languages_array = array();
foreach ( (array) $hidden_languages as $l ) {
$hidden_languages_array[] = $this->all_languages[ $l ]['display_name'];
}
$hidden_languages = implode( ', ', $hidden_languages_array );
echo esc_html( sprintf( __( '%s are currently hidden to visitors.', 'sitepress' ), $hidden_languages ) );
}
} else {
esc_html_e( 'All languages are currently displayed. Choose what to do when site languages are hidden.', 'sitepress' );
}
?>
</p>
<p>
<input id="icl_show_hidden_languages" name="icl_show_hidden_languages" type="checkbox" value="1" <?php checked( true, $display_hidden_languages ); ?> />
<label for="icl_show_hidden_languages"><?php esc_html_e( 'Display hidden languages', 'sitepress' ); ?></label>
</p>
</td>
</tr>
<?php
}
}
}