]> _ Git - physioassist-wordpress.git/blob
662a342238001aa60f09deaa0aab08017f74d956
[physioassist-wordpress.git] /
1 <?php
2
3 /**
4  * Class WPML_User_Options_Menu
5  * Renders the WPML UI elements on the WordPress user profile edit screen
6  */
7 class WPML_User_Options_Menu {
8
9         /** @var WP_User $this ->current_user */
10         private $current_user;
11         private $sitepress;
12         /**
13          * @var string
14          */
15         private $user_language;
16         /**
17          * @var string
18          */
19         private $user_admin_def_lang;
20         /**
21          * @var mixed[]
22          */
23         private $lang_details;
24         /**
25          * @var string
26          */
27         private $admin_default_language;
28         /**
29          * @var string
30          */
31         private $admin_language;
32         /**
33          * @var mixed[]
34          */
35         private $all_languages;
36
37         /**
38          * WPML_User_Options_Menu constructor.
39          *
40          * @param SitePress $sitepress
41          * @param WP_User   $current_user
42          */
43         public function __construct( SitePress $sitepress, WP_User $current_user ) {
44                 $this->sitepress              = $sitepress;
45                 $this->current_user           = $current_user;
46                 $this->user_language          = $this->sitepress->get_wp_api()->get_user_meta( $this->current_user->ID, 'icl_admin_language', true );
47                 $this->user_admin_def_lang    = $this->sitepress->get_setting( 'admin_default_language' );
48                 $this->user_admin_def_lang    = $this->user_admin_def_lang === '_default_' ? $this->sitepress->get_default_language() : $this->user_admin_def_lang;
49                 $this->lang_details           = $this->sitepress->get_language_details( $this->user_admin_def_lang );
50                 $this->admin_default_language = $this->lang_details['display_name'];
51                 $this->admin_language         = $this->sitepress->get_admin_language();
52
53                 $user_language_for_all_languages = $this->user_admin_def_lang;
54                 if ( $this->user_language ) {
55                         $user_language_for_all_languages = $this->user_language;
56                 }
57                 $this->all_languages = $this->sitepress->get_languages( $user_language_for_all_languages );
58         }
59
60         /**
61          * @return string the html for the user profile edit screen element WPML
62          * adds to it
63          */
64         public function render() {
65                 $wp_api              = $this->sitepress->get_wp_api();
66                 $hide_wpml_languages = $wp_api->version_compare_naked( get_bloginfo( 'version' ), '4.7', '>=' ) ? 'style="display: none"' : '';
67                 ob_start();
68
69                 $admin_default_language_selected = $this->user_language === $this->user_admin_def_lang;
70                 ?>
71                 <tr class="user-language-wrap">
72                         <th colspan="2"><h3><a name="wpml"></a><?php esc_html_e( 'WPML language settings', 'sitepress' ); ?></h3></th>
73                 </tr>
74                 <tr class="user-language-wrap" <?php echo $hide_wpml_languages; ?>>
75                         <th><label for="icl_user_admin_language"><?php esc_html_e( 'Select your language:', 'sitepress' ); ?></label></th>
76                         <td>
77                                 <select id="icl_user_admin_language" name="icl_user_admin_language">
78                                         <option value=""<?php selected( true, $admin_default_language_selected ); ?>>
79                                                 <?php echo esc_html( sprintf( __( 'Default admin language (currently %s)', 'sitepress' ), $this->admin_default_language ) ); ?>
80                                         </option>
81                                         <?php
82                                         foreach ( array( true, false ) as $active ) {
83                                                 foreach ( (array) $this->all_languages as $lang_code => $al ) {
84                                                         if ( (bool) $al['active'] === $active ) {
85                                                                 $current_language_selected = $this->user_language === $lang_code;
86
87                                                                 $language_name = $al['display_name'];
88                                                                 if ( $this->admin_language !== $lang_code ) {
89                                                                         $language_name .= ' (' . $al['native_name'] . ')';
90                                                                 }
91                                                                 ?>
92                                                                 <option value="<?php echo esc_attr( $lang_code ); ?>"<?php selected( true, $current_language_selected ); ?>>
93                                                                         <?php echo esc_html( $language_name ); ?>
94                                                                 </option>
95                                                                 <?php
96                                                         }
97                                                 }
98                                         }
99
100                                         $use_admin_language_for_edit = $wp_api->get_user_meta( $this->current_user->ID, 'icl_admin_language_for_edit', true )
101                                         ?>
102                                 </select>
103                                 <span class="description">
104                                         <?php esc_html_e( 'this will be your admin language and will also be used for translating comments.', 'sitepress' ); ?>
105                                 </span>
106                         </td>
107                 </tr>
108                 <?php
109                 $this->get_hidden_languages_options( $use_admin_language_for_edit );
110
111                 do_action( 'wpml_user_profile_options', $this->current_user->ID );
112
113                 return ob_get_clean();
114         }
115
116         /**
117          * @param bool $use_admin_language_for_edit
118          */
119         private function get_hidden_languages_options( $use_admin_language_for_edit ) {
120
121                 /**
122                  * Filters a condition if current user can see hidden languages options in profile settings
123                  *
124                  * @params bool $show_hidden_languages_options
125                  */
126                 $show_hidden_languages_options = apply_filters(
127                         'wpml_show_hidden_languages_options',
128                         current_user_can( 'manage_options' )
129                 );
130
131                 if ( $show_hidden_languages_options ) {
132                         $hidden_languages         = $this->sitepress->get_setting( 'hidden_languages' );
133                         $display_hidden_languages = get_user_meta( $this->current_user->ID, 'icl_show_hidden_languages', true );
134                         ?>
135
136                         <tr class="user-language-wrap">
137                                 <th><?php esc_html_e( 'Editing language:', 'sitepress' ); ?></th>
138                                 <td>
139                                         <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 ); ?> />
140                                         &nbsp;<label for="icl_admin_language_for_edit"><?php esc_html_e( 'Set admin language as editing language.', 'sitepress' ); ?></label>
141                                 </td>
142                         </tr>
143
144                         <tr class="user-language-wrap">
145                                 <th><?php esc_html_e( 'Hidden languages:', 'sitepress' ); ?></th>
146                                 <td>
147                                         <p>
148                                                 <?php
149                                                 if ( ! empty( $hidden_languages ) ) {
150                                                         if ( 1 === count( $hidden_languages ) ) {
151                                                                 echo esc_html( sprintf( __( '%s is currently hidden to visitors.', 'sitepress' ), $this->all_languages[ end( $hidden_languages ) ]['display_name'] ) );
152                                                         } else {
153                                                                 $hidden_languages_array = array();
154                                                                 foreach ( (array) $hidden_languages as $l ) {
155                                                                         $hidden_languages_array[] = $this->all_languages[ $l ]['display_name'];
156                                                                 }
157                                                                 $hidden_languages = implode( ', ', $hidden_languages_array );
158                                                                 echo esc_html( sprintf( __( '%s are currently hidden to visitors.', 'sitepress' ), $hidden_languages ) );
159                                                         }
160                                                 } else {
161                                                         esc_html_e( 'All languages are currently displayed. Choose what to do when site languages are hidden.', 'sitepress' );
162                                                 }
163                                                 ?>
164                                         </p>
165                                         <p>
166                                                 <input id="icl_show_hidden_languages" name="icl_show_hidden_languages" type="checkbox" value="1" <?php checked( true, $display_hidden_languages ); ?> />
167                                                 &nbsp;<label for="icl_show_hidden_languages"><?php esc_html_e( 'Display hidden languages', 'sitepress' ); ?></label>
168                                         </p>
169                                 </td>
170                         </tr>
171                         <?php
172                 }
173         }
174 }