PluginProbe
Bogo / 3.0
Bogo v3.0
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
bogo / includes / user.php

user.php in Bogo 3.0, at includes/user.php

109 lines 2.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /* Admin Bar */
4
5 add_action( 'admin_bar_menu', 'bogo_admin_bar_menu' );
6
7 function bogo_admin_bar_menu( $wp_admin_bar ) {
8 $current_locale = bogo_get_user_locale();
9 $current_language = bogo_get_language( $current_locale );
10
11 if ( ! $current_language ) {
12 $current_language = $current_locale;
13 }
14
15 $wp_admin_bar->add_menu( array(
16 'parent' => 'top-secondary',
17 'id' => 'bogo-user-locale',
18 'title' => sprintf(
19 '<span class="ab-icon"></span><span class="ab-label">%s</span>',
20 esc_html( $current_language ) ) ) );
21
22 $available_languages = bogo_available_languages( array(
23 'exclude' => array( $current_locale ),
24 'exclude_enus_if_inactive' => true,
25 'current_user_can_access' => true ) );
26
27 foreach ( $available_languages as $locale => $lang ) {
28 $url = admin_url( 'profile.php?action=bogo-switch-locale&locale=' . $locale );
29
30 $url = add_query_arg(
31 array( 'redirect_to' => urlencode( $_SERVER['REQUEST_URI'] ) ),
32 $url );
33
34 $url = wp_nonce_url( $url, 'bogo-switch-locale' );
35
36 $wp_admin_bar->add_menu( array(
37 'parent' => 'bogo-user-locale',
38 'id' => 'bogo-user-locale-' . $locale,
39 'title' => $lang,
40 'href' => $url ) );
41 }
42 }
43
44 add_action( 'admin_init', 'bogo_switch_user_locale' );
45
46 function bogo_switch_user_locale() {
47 if ( empty( $_REQUEST['action'] )
48 || 'bogo-switch-locale' != $_REQUEST['action'] ) {
49 return;
50 }
51
52 check_admin_referer( 'bogo-switch-locale' );
53
54 $locale = isset( $_REQUEST['locale'] ) ? $_REQUEST['locale'] : '';
55
56 if ( ! bogo_is_available_locale( $locale )
57 || $locale == bogo_get_user_locale() ) {
58 return;
59 }
60
61 update_user_option( get_current_user_id(), 'locale', $locale, true );
62
63 if ( ! empty( $_REQUEST['redirect_to'] ) ) {
64 wp_safe_redirect( $_REQUEST['redirect_to'] );
65 exit();
66 }
67 }
68
69 function bogo_get_user_locale( $user_id = 0 ) {
70 $default_locale = bogo_get_default_locale();
71
72 if ( ! $user_id = absint( $user_id ) ) {
73 if ( function_exists( 'wp_get_current_user' ) ) {
74 $current_user = wp_get_current_user();
75
76 if ( ! empty( $current_user->locale ) ) {
77 return $current_user->locale;
78 }
79 }
80
81 if ( ! $user_id = get_current_user_id() ) {
82 return $default_locale;
83 }
84 }
85
86 $locale = get_user_option( 'locale', $user_id );
87
88 if ( bogo_is_available_locale( $locale ) ) {
89 return $locale;
90 }
91
92 return $default_locale;
93 }
94
95 function bogo_get_user_accessible_locales( $user_id ) {
96 global $wpdb;
97
98 $user_id = absint( $user_id );
99 $meta_key = $wpdb->get_blog_prefix() . 'accessible_locale';
100
101 $locales = get_user_meta( $user_id, $meta_key );
102
103 if ( bogo_is_enus_deactivated() ) {
104 $locales = array_diff( $locales, array( 'en_US' ) );
105 }
106
107 return $locales;
108 }
109