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

119 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' => '&#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'] )
46 || 'bogo-switch-locale' != $_REQUEST['action'] ) {
47 return;
48 }
49
50 check_admin_referer( 'bogo-switch-locale' );
51
52 $locale = isset( $_REQUEST['locale'] ) ? $_REQUEST['locale'] : '';
53
54 if ( ! bogo_is_available_locale( $locale )
55 || $locale == bogo_get_user_locale() ) {
56 return;
57 }
58
59 update_user_option( get_current_user_id(), 'locale', $locale, true );
60
61 if ( ! empty( $_REQUEST['redirect_to'] ) ) {
62 wp_safe_redirect( $_REQUEST['redirect_to'] );
63 exit();
64 }
65 }
66
67 function bogo_get_user_locale( $user_id = 0 ) {
68 global $current_user;
69
70 $default_locale = bogo_get_default_locale();
71 $user_id = absint( $user_id );
72
73 if ( ! $user_id ) {
74 if ( function_exists( 'wp_get_current_user' ) && ! empty( $current_user ) ) {
75 $user_id = get_current_user_id();
76 } elseif ( ! $user_id = apply_filters( 'determine_current_user', false ) ) {
77 return $default_locale;
78 }
79 }
80
81 $locale = get_user_option( 'locale', $user_id );
82
83 if ( bogo_is_available_locale( $locale )
84 && ( 'en_US' != $locale || ! bogo_get_prop( 'enus_deactivated' ) )
85 && user_can( $user_id, 'bogo_access_locale', $locale ) ) {
86 return $locale;
87 }
88
89 if ( user_can( $user_id, 'bogo_access_locale', $default_locale ) ) {
90 return $default_locale;
91 }
92
93 $available_locales = bogo_available_locales( array(
94 'exclude_enus_if_inactive' => true ) );
95
96 foreach ( $available_locales as $locale ) {
97 if ( user_can( $user_id, 'bogo_access_locale', $locale ) ) {
98 return $locale;
99 }
100 }
101
102 return $default_locale;
103 }
104
105 function bogo_get_user_accessible_locales( $user_id ) {
106 global $wpdb;
107
108 $user_id = absint( $user_id );
109 $meta_key = $wpdb->get_blog_prefix() . 'accessible_locale';
110
111 $locales = get_user_meta( $user_id, $meta_key );
112
113 if ( bogo_get_prop( 'enus_deactivated' ) ) {
114 $locales = array_diff( $locales, array( 'en_US' ) );
115 }
116
117 return $locales;
118 }
119