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

115 lines 2.9 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' => '&#10004; ' . $current_language ) );
19
20 $available_languages = bogo_available_languages( array(
21 'exclude' => array( $current_locale ),
22 'exclude_enus_if_inactive' => true,
23 'current_user_can_access' => true ) );
24
25 foreach ( $available_languages as $locale => $lang ) {
26 $url = admin_url( 'profile.php?action=bogo-switch-locale&locale=' . $locale );
27
28 $url = add_query_arg(
29 array( 'redirect_to' => urlencode( $_SERVER['REQUEST_URI'] ) ),
30 $url );
31
32 $url = wp_nonce_url( $url, 'bogo-switch-locale' );
33
34 $wp_admin_bar->add_menu( array(
35 'parent' => 'bogo-user-locale',
36 'id' => 'bogo-user-locale-' . $locale,
37 'title' => $lang,
38 'href' => $url ) );
39 }
40 }
41
42 add_action( 'admin_init', 'bogo_switch_user_locale' );
43
44 function bogo_switch_user_locale() {
45 if ( empty( $_REQUEST['action'] ) || 'bogo-switch-locale' != $_REQUEST['action'] )
46 return;
47
48 check_admin_referer( 'bogo-switch-locale' );
49
50 $locale = isset( $_REQUEST['locale'] ) ? $_REQUEST['locale'] : '';
51
52 if ( ! bogo_is_available_locale( $locale ) || $locale == bogo_get_user_locale() )
53 return;
54
55 update_user_option( get_current_user_id(), 'locale', $locale, true );
56
57 if ( ! empty( $_REQUEST['redirect_to'] ) ) {
58 wp_safe_redirect( $_REQUEST['redirect_to'] );
59 exit();
60 }
61 }
62
63 function bogo_get_user_locale( $user_id = 0 ) {
64 global $current_user;
65
66 $default_locale = bogo_get_default_locale();
67 $user_id = absint( $user_id );
68
69 if ( ! $user_id ) {
70 if ( function_exists( 'wp_get_current_user' ) && ! empty( $current_user ) ) {
71 $user_id = get_current_user_id();
72 } elseif ( ! $user_id = apply_filters( 'determine_current_user', false ) ) {
73 return $default_locale;
74 }
75 }
76
77 $locale = get_user_option( 'locale', $user_id );
78
79 if ( bogo_is_available_locale( $locale )
80 && ( 'en_US' != $locale || ! bogo_get_prop( 'enus_deactivated' ) )
81 && user_can( $user_id, 'bogo_access_locale', $locale ) ) {
82 return $locale;
83 }
84
85 if ( user_can( $user_id, 'bogo_access_locale', $default_locale ) ) {
86 return $default_locale;
87 }
88
89 $available_locales = bogo_available_locales( array(
90 'exclude_enus_if_inactive' => true ) );
91
92 foreach ( $available_locales as $locale ) {
93 if ( user_can( $user_id, 'bogo_access_locale', $locale ) ) {
94 return $locale;
95 }
96 }
97
98 return $default_locale;
99 }
100
101 function bogo_get_user_accessible_locales( $user_id ) {
102 global $wpdb;
103
104 $user_id = absint( $user_id );
105 $meta_key = $wpdb->get_blog_prefix() . 'accessible_locale';
106
107 $locales = get_user_meta( $user_id, $meta_key );
108
109 if ( bogo_get_prop( 'enus_deactivated' ) ) {
110 $locales = array_diff( $locales, array( 'en_US' ) );
111 }
112
113 return $locales;
114 }
115