PluginProbe
Bogo / 2.9
Bogo v2.9
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 2.9, at includes/user.php

121 lines 3.0 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 global $current_user;
71
72 $default_locale = bogo_get_default_locale();
73 $user_id = absint( $user_id );
74
75 if ( ! $user_id ) {
76 if ( function_exists( 'wp_get_current_user' ) && ! empty( $current_user ) ) {
77 $user_id = get_current_user_id();
78 } elseif ( ! $user_id = apply_filters( 'determine_current_user', false ) ) {
79 return $default_locale;
80 }
81 }
82
83 $locale = get_user_option( 'locale', $user_id );
84
85 if ( bogo_is_available_locale( $locale )
86 && ( 'en_US' != $locale || ! bogo_get_prop( 'enus_deactivated' ) )
87 && user_can( $user_id, 'bogo_access_locale', $locale ) ) {
88 return $locale;
89 }
90
91 if ( user_can( $user_id, 'bogo_access_locale', $default_locale ) ) {
92 return $default_locale;
93 }
94
95 $available_locales = bogo_available_locales( array(
96 'exclude_enus_if_inactive' => true ) );
97
98 foreach ( $available_locales as $locale ) {
99 if ( user_can( $user_id, 'bogo_access_locale', $locale ) ) {
100 return $locale;
101 }
102 }
103
104 return $default_locale;
105 }
106
107 function bogo_get_user_accessible_locales( $user_id ) {
108 global $wpdb;
109
110 $user_id = absint( $user_id );
111 $meta_key = $wpdb->get_blog_prefix() . 'accessible_locale';
112
113 $locales = get_user_meta( $user_id, $meta_key );
114
115 if ( bogo_get_prop( 'enus_deactivated' ) ) {
116 $locales = array_diff( $locales, array( 'en_US' ) );
117 }
118
119 return $locales;
120 }
121