PluginProbe
Bogo / 2.4
Bogo v2.4
3.9.3 trunk 1.0 1.1 2.0 2.0.1 2.1 2.1.1 2.1.2 2.1.3 2.2 2.3 2.4 2.4.1 2.4.2 2.4.3 2.5 2.6 2.6.1 2.7 2.8 2.8.1 2.9 3.0 3.0.1 All 52 releases
← All changes | includes/user.php +34 -118 trunk2.4 View file →
@@ -1,58 +1,32 @@
1 1 <?php
2 2
3 -/* Toolbar (Admin Bar) */
3 +/* Admin Bar */
4 4
5 -add_action( 'admin_bar_menu', 'bogo_admin_bar_init', 0, 1 );
5 +add_action( 'admin_bar_menu', 'bogo_admin_bar_menu' );
6 6
7 -function bogo_admin_bar_init( $wp_admin_bar ) {
8 - switch_to_locale( bogo_get_user_locale() );
9 -}
10 -
11 -
12 -add_action( 'wp_after_admin_bar_render', 'bogo_after_admin_bar_render', 10, 0 );
13 -
14 -function bogo_after_admin_bar_render() {
15 - if ( is_locale_switched() ) {
16 - restore_current_locale();
17 - }
18 -}
19 -
20 -
21 -add_action( 'admin_bar_menu', 'bogo_admin_bar_menu', 10, 1 );
22 -
23 7 function bogo_admin_bar_menu( $wp_admin_bar ) {
24 8 $current_locale = bogo_get_user_locale();
9 + $current_language = bogo_get_language( $current_locale );
25 10
26 - $available_languages = bogo_available_languages( array(
27 - 'current_user_can_access' => true,
28 - ) );
29 -
30 - if ( isset( $available_languages[$current_locale] ) ) {
31 - $current_language = $available_languages[$current_locale];
32 - unset( $available_languages[$current_locale] );
33 - } else {
11 + if ( ! $current_language )
34 12 $current_language = $current_locale;
35 - }
36 13
37 14 $wp_admin_bar->add_menu( array(
38 15 'parent' => 'top-secondary',
39 16 'id' => 'bogo-user-locale',
40 - 'title' => sprintf(
41 - '<span class="ab-icon"></span><span class="ab-label">%s</span>',
42 - esc_html( $current_language )
43 - ),
44 - ) );
17 + 'title' => '&#10004; ' . $current_language ) );
45 18
19 + $available_languages = bogo_available_languages( array(
20 + 'exclude' => array( $current_locale ),
21 + 'current_user_can_access' => true ) );
22 +
46 23 foreach ( $available_languages as $locale => $lang ) {
24 + $url = admin_url( 'profile.php?action=bogo-switch-locale&locale=' . $locale );
25 +
47 26 $url = add_query_arg(
48 - array(
49 - 'action' => 'bogo-switch-locale',
50 - 'locale' => $locale,
51 - 'redirect_to' => urlencode( $_SERVER['REQUEST_URI'] ),
52 - ),
53 - admin_url( 'profile.php' )
54 - );
27 + array( 'redirect_to' => urlencode( $_SERVER['REQUEST_URI'] ) ),
28 + $url );
55 29
56 30 $url = wp_nonce_url( $url, 'bogo-switch-locale' );
57 31
58 32 $wp_admin_bar->add_menu( array(
@@ -58,34 +32,24 @@
58 32 $wp_admin_bar->add_menu( array(
59 33 'parent' => 'bogo-user-locale',
60 34 'id' => 'bogo-user-locale-' . $locale,
61 35 'title' => $lang,
62 - 'href' => $url,
63 - ) );
36 + 'href' => $url ) );
64 37 }
65 38 }
66 39
40 +add_action( 'admin_init', 'bogo_switch_user_locale' );
67 41
68 -add_action( 'admin_init', 'bogo_switch_user_locale', 10, 0 );
69 -
70 42 function bogo_switch_user_locale() {
71 - if (
72 - empty( $_REQUEST['action'] ) or
73 - 'bogo-switch-locale' !== $_REQUEST['action']
74 - ) {
43 + if ( empty( $_REQUEST['action'] ) || 'bogo-switch-locale' != $_REQUEST['action'] )
75 44 return;
76 - }
77 45
78 46 check_admin_referer( 'bogo-switch-locale' );
79 47
80 - $locale = $_REQUEST['locale'] ?? '';
48 + $locale = isset( $_REQUEST['locale'] ) ? $_REQUEST['locale'] : '';
81 49
82 - if (
83 - ! bogo_is_available_locale( $locale ) or
84 - $locale === bogo_get_user_locale()
85 - ) {
50 + if ( ! bogo_is_available_locale( $locale ) || $locale == bogo_get_user_locale() )
86 51 return;
87 - }
88 52
89 53 update_user_option( get_current_user_id(), 'locale', $locale, true );
90 54
91 55 if ( ! empty( $_REQUEST['redirect_to'] ) ) {
@@ -93,88 +57,40 @@
93 57 exit();
94 58 }
95 59 }
96 60
97 -
98 61 function bogo_get_user_locale( $user_id = 0 ) {
99 - $default_locale = bogo_get_default_locale();
100 -
101 62 if ( ! $user_id = absint( $user_id ) ) {
102 - if ( function_exists( 'wp_get_current_user' ) ) {
103 - $current_user = wp_get_current_user();
63 + $user_id = get_current_user_id();
64 + }
104 65
105 - if ( ! empty( $current_user->locale ) ) {
106 - return $current_user->locale;
107 - }
108 - }
66 + $locale = get_user_option( 'locale', $user_id );
109 67
110 - if ( ! $user_id = get_current_user_id() ) {
111 - return $default_locale;
112 - }
68 + if ( user_can( $user_id, 'bogo_access_locale', $locale ) ) {
69 + return $locale;
113 70 }
114 71
115 - $locale = get_user_option( 'locale', $user_id );
72 + $default_locale = bogo_get_default_locale();
116 73
117 - if ( bogo_is_available_locale( $locale ) ) {
118 - return $locale;
74 + if ( user_can( $user_id, 'bogo_access_locale', $default_locale ) ) {
75 + return $default_locale;
119 76 }
120 77
78 + foreach ( (array) bogo_available_locales() as $locale ) {
79 + if ( user_can( $user_id, 'bogo_access_locale', $locale ) ) {
80 + return $locale;
81 + }
82 + }
83 +
121 84 return $default_locale;
122 85 }
123 86
124 -
125 87 function bogo_get_user_accessible_locales( $user_id ) {
126 88 global $wpdb;
127 89
128 90 $user_id = absint( $user_id );
129 -
130 - if ( user_can( $user_id, 'bogo_access_all_locales' ) ) {
131 - $locales = bogo_available_locales();
132 -
133 - return $locales;
134 - }
135 -
136 91 $meta_key = $wpdb->get_blog_prefix() . 'accessible_locale';
137 92
138 - $locales = (array) get_user_meta( $user_id, $meta_key );
139 -
140 - if ( bogo_is_enus_deactivated() ) {
141 - $locales = array_diff( $locales, array( 'en_US' ) );
142 - }
143 -
144 - $locales = bogo_filter_locales( $locales );
145 -
146 - if ( empty( $locales ) ) {
147 - $locales = array( bogo_get_default_locale() );
148 - }
149 -
150 - return $locales;
93 + return get_user_meta( $user_id, $meta_key );
151 94 }
152 95
153 -
154 -add_filter( 'insert_user_meta', 'bogo_user_meta_filter', 10, 3 );
155 -
156 -function bogo_user_meta_filter( $meta, $user, $update ) {
157 - if ( user_can( $user, 'bogo_access_all_locales' ) ) {
158 - return $meta;
159 - }
160 -
161 - $locale = $meta['locale'];
162 -
163 - if ( empty( $locale ) ) {
164 - $locale = bogo_get_default_locale();
165 - }
166 -
167 - $accessible_locales = bogo_filter_locales(
168 - bogo_get_user_accessible_locales( $user->ID )
169 - );
170 -
171 - if ( empty( $accessible_locales ) ) {
172 - $locale = '';
173 - } elseif ( ! in_array( $locale, $accessible_locales, true ) ) {
174 - $locale = $accessible_locales[0];
175 - }
176 -
177 - $meta['locale'] = $locale;
178 -
179 - return $meta;
180 -}
96 +?>