Skip to:
Content

BuddyPress.org

Ticket #3018: bp-core-adminbar.php

File bp-core-adminbar.php, 10.0 KB (added by c3mdigital, 13 years ago)

Patch

Line 
1<?php
2
3function bp_core_admin_bar() {
4        global $bp, $wpdb, $current_blog;
5
6        if ( defined( 'BP_DISABLE_ADMIN_BAR' ) )
7                return false;
8
9        if ( (int)get_site_option( 'hide-loggedout-adminbar' ) && !is_user_logged_in() )
10                return false;
11
12        $bp->doing_admin_bar = true;
13
14        echo '<div id="wp-admin-bar"><div class="padder">';
15
16        // **** Do bp-adminbar-logo Actions ********
17        do_action( 'bp_adminbar_logo' );
18
19        echo '<ul class="main-nav">';
20
21        // **** Do bp-adminbar-menus Actions ********
22        do_action( 'bp_adminbar_menus' );
23
24        echo '</ul>';
25        echo "</div></div><!-- #wp-admin-bar -->\n\n";
26
27        $bp->doing_admin_bar = false;
28}
29
30// **** Default BuddyPress admin bar logo ********
31function bp_adminbar_logo() {
32        global $bp;
33
34        echo '<a href="' . $bp->root_domain . '" id="admin-bar-logo">' . get_blog_option( BP_ROOT_BLOG, 'blogname') . '</a>';
35}
36
37// **** "Log In" and "Sign Up" links (Visible when not logged in) ********
38function bp_adminbar_login_menu() {
39        global $bp;
40
41        if ( is_user_logged_in() )
42                return false;
43
44        echo '<li class="bp-login no-arrow"><a href="' . $bp->root_domain . '/wp-login.php?redirect_to=' . urlencode( $bp->root_domain ) . '">' . __( 'Log In', 'buddypress' ) . '</a></li>';
45
46        // Show "Sign Up" link if user registrations are allowed
47        if ( bp_get_signup_allowed() )
48                echo '<li class="bp-signup no-arrow"><a href="' . bp_get_signup_page(false) . '">' . __( 'Sign Up', 'buddypress' ) . '</a></li>';
49}
50
51
52// **** "My Account" Menu ******
53function bp_adminbar_account_menu() {
54        global $bp;
55
56        if ( !$bp->bp_nav || !is_user_logged_in() )
57                return false;
58
59        echo '<li id="bp-adminbar-account-menu"><a href="' . bp_loggedin_user_domain() . '">';
60
61        echo __( 'My Account', 'buddypress' ) . '</a>';
62        echo '<ul>';
63
64        /* Loop through each navigation item */
65        $counter = 0;
66        foreach( (array)$bp->bp_nav as $nav_item ) {
67                $alt = ( 0 == $counter % 2 ) ? ' class="alt"' : '';
68
69                echo '<li' . $alt . '>';
70                echo '<a id="bp-admin-' . $nav_item['css_id'] . '" href="' . $nav_item['link'] . '">' . $nav_item['name'] . '</a>';
71
72                if ( isset( $bp->bp_options_nav[$nav_item['slug']] ) && is_array( $bp->bp_options_nav[$nav_item['slug']] ) ) {
73                        echo '<ul>';
74                        $sub_counter = 0;
75
76                        foreach( (array)$bp->bp_options_nav[$nav_item['slug']] as $subnav_item ) {
77                                $link = $subnav_item['link'];
78                                $name = $subnav_item['name'];
79
80                                if ( isset( $bp->displayed_user->domain ) )
81                                        $link = str_replace( $bp->displayed_user->domain, $bp->loggedin_user->domain, $subnav_item['link'] );
82
83                                if ( isset( $bp->displayed_user->userdata->user_login ) )
84                                        $name = str_replace( $bp->displayed_user->userdata->user_login, $bp->loggedin_user->userdata->user_login, $subnav_item['name'] );
85
86                                $alt = ( 0 == $sub_counter % 2 ) ? ' class="alt"' : '';
87                                echo '<li' . $alt . '><a id="bp-admin-' . $subnav_item['css_id'] . '" href="' . $link . '">' . $name . '</a></li>';
88                                $sub_counter++;
89                        }
90                        echo '</ul>';
91                }
92
93                echo '</li>';
94
95                $counter++;
96        }
97
98        $alt = ( 0 == $counter % 2 ) ? ' class="alt"' : '';
99
100        echo '<li' . $alt . '><a id="bp-admin-logout" class="logout" href="' . wp_logout_url( site_url() ) . '">' . __( 'Log Out', 'buddypress' ) . '</a></li>';
101        echo '</ul>';
102        echo '</li>';
103}
104
105// *** "My Blogs" Menu ********
106function bp_adminbar_blogs_menu() {
107        global $bp;
108
109        if ( !is_user_logged_in() || !bp_is_active( 'blogs' ) )
110                return false;
111
112        if ( !is_multisite() )
113                return false;
114
115        if ( !$blogs = wp_cache_get( 'bp_blogs_of_user_' . $bp->loggedin_user->id . '_inc_hidden', 'bp' ) ) {
116                $blogs = bp_blogs_get_blogs_for_user( $bp->loggedin_user->id, true );
117                wp_cache_set( 'bp_blogs_of_user_' . $bp->loggedin_user->id . '_inc_hidden', $blogs, 'bp' );
118        }
119
120        echo '<li id="bp-adminbar-blogs-menu"><a href="' . $bp->loggedin_user->domain . $bp->blogs->slug . '/">';
121
122        _e( 'My Blogs', 'buddypress' );
123
124        echo '</a>';
125        echo '<ul>';
126
127        $counter = 0;
128        if ( is_array( $blogs['blogs'] ) && (int)$blogs['count'] ) {
129                foreach ( (array)$blogs['blogs'] as $blog ) {
130                        $alt = ( 0 == $counter % 2 ) ? ' class="alt"' : '';
131                        $site_url = esc_attr( $blog->siteurl );
132
133                        echo '<li' . $alt . '>';
134                        echo '<a href="' . $site_url . '">' . esc_html( $blog->name ) . '</a>';
135                        echo '<ul>';
136                        echo '<li class="alt"><a href="' . $site_url . 'wp-admin/">' . __( 'Dashboard', 'buddypress' ) . '</a></li>';
137                        echo '<li><a href="' . $site_url . 'wp-admin/post-new.php">' . __( 'New Post', 'buddypress' ) . '</a></li>';
138                        echo '<li class="alt"><a href="' . $site_url . 'wp-admin/edit.php">' . __( 'Manage Posts', 'buddypress' ) . '</a></li>';
139                        echo '<li><a href="' . $site_url . 'wp-admin/edit-comments.php">' . __( 'Manage Comments', 'buddypress' ) . '</a></li>';
140                        echo '</ul>';
141
142                        do_action( 'bp_adminbar_blog_items', $blog );
143
144                        echo '</li>';
145                        $counter++;
146                }
147        }
148
149        $alt = ( 0 == $counter % 2 ) ? ' class="alt"' : '';
150
151        if ( bp_blog_signup_enabled() ) {
152                echo '<li' . $alt . '>';
153                echo '<a href="' . $bp->root_domain . '/' . $bp->blogs->slug . '/create/">' . __( 'Create a Blog!', 'buddypress' ) . '</a>';
154                echo '</li>';
155        }
156
157        echo '</ul>';
158        echo '</li>';
159}
160
161function bp_adminbar_thisblog_menu() {
162        if ( current_user_can( 'edit_posts' ) ) {
163                echo '<li id="bp-adminbar-thisblog-menu"><a href="' . admin_url() . '">';
164
165                _e( 'Dashboard', 'buddypress' );
166
167                echo '</a>';
168                echo '<ul>';
169
170                echo '<li class="alt"><a href="' . admin_url() . 'post-new.php">' . __( 'New Post', 'buddypress' ) . '</a></li>';
171                echo '<li><a href="' . admin_url() . 'edit.php">' . __( 'Manage Posts', 'buddypress' ) . '</a></li>';
172                echo '<li class="alt"><a href="' . admin_url() . 'edit-comments.php">' . __( 'Manage Comments', 'buddypress' ) . '</a></li>';
173
174                do_action( 'bp_adminbar_thisblog_items' );
175
176                echo '</ul>';
177                echo '</li>';
178        }
179}
180
181// **** "Notifications" Menu *********
182function bp_adminbar_notifications_menu() {
183        global $bp;
184
185        if ( !is_user_logged_in() )
186                return false;
187
188        echo '<li id="bp-adminbar-notifications-menu"><a href="' . $bp->loggedin_user->domain . '">';
189        _e( 'Notifications', 'buddypress' );
190
191        if ( $notifications = bp_core_get_notifications_for_user( $bp->loggedin_user->id ) ) { ?>
192                <span><?php echo count( $notifications ) ?></span>
193        <?php
194        }
195
196        echo '</a>';
197        echo '<ul>';
198
199        if ( $notifications ) {
200                $counter = 0;
201                for ( $i = 0; $i < count($notifications); $i++ ) {
202                        $alt = ( 0 == $counter % 2 ) ? ' class="alt"' : ''; ?>
203
204                        <li<?php echo $alt ?>><?php echo $notifications[$i] ?></li>
205
206                        <?php $counter++;
207                }
208        } else { ?>
209
210                <li><a href="<?php echo $bp->loggedin_user->domain ?>"><?php _e( 'No new notifications.', 'buddypress' ); ?></a></li>
211
212        <?php
213        }
214
215        echo '</ul>';
216        echo '</li>';
217}
218
219// **** "Blog Authors" Menu (visible when not logged in) ********
220function bp_adminbar_authors_menu() {
221        global $bp, $current_blog, $wpdb;
222
223        // Only for multisite
224        if ( !is_multisite() )
225                return false;
226
227        // Hide on root blog
228        if ( $current_blog->blog_id == BP_ROOT_BLOG || !bp_is_active( 'blogs' ) )
229                return false;
230               
231        $blog_prefix = $wpdb->get_blog_prefix( $current_blog->blog_id );
232        $authors     = $wpdb->get_results( "SELECT user_id, user_login, user_nicename, display_name, user_email, meta_value as caps FROM $wpdb->users u, $wpdb->usermeta um WHERE u.ID = um.user_id AND meta_key = '{$blog_prefix}capabilities' ORDER BY um.user_id" );
233
234        if ( !empty( $authors ) ) {
235                // This is a blog, render a menu with links to all authors
236                echo '<li id="bp-adminbar-authors-menu"><a href="/">';
237                _e('Blog Authors', 'buddypress');
238                echo '</a>';
239
240                echo '<ul class="author-list">';
241                foreach( (array)$authors as $author ) {
242                        $caps = maybe_unserialize( $author->caps );
243                        if ( isset( $caps['subscriber'] ) || isset( $caps['contributor'] ) ) continue;
244
245                        echo '<li>';
246                        echo '<a href="' . bp_core_get_user_domain( $author->user_id, $author->user_nicename, $author->user_login ) . '">';
247                        echo bp_core_fetch_avatar( array( 'item_id' => $author->user_id, 'email' => $author->user_email, 'width' => 15, 'height' => 15 ) ) ;
248                        echo ' ' . $author->display_name . '</a>';
249                        echo '<div class="admin-bar-clear"></div>';
250                        echo '</li>';
251                }
252                echo '</ul>';
253                echo '</li>';
254        }
255}
256
257// **** "Random" Menu (visible when not logged in) ********
258function bp_adminbar_random_menu() {
259        global $bp; ?>
260
261        <li class="align-right" id="bp-adminbar-visitrandom-menu">
262                <a href="#"><?php _e( 'Visit', 'buddypress' ) ?></a>
263                <ul class="random-list">
264                        <li><a href="<?php echo $bp->root_domain . '/' . BP_MEMBERS_SLUG . '/?random-member' ?>"><?php _e( 'Random Member', 'buddypress' ) ?></a></li>
265
266                        <?php if ( bp_is_active( 'groups' ) ) : ?>
267
268                                <li class="alt"><a href="<?php echo $bp->root_domain . '/' . $bp->groups->slug . '/?random-group' ?>"><?php _e( 'Random Group', 'buddypress' ) ?></a></li>
269
270                        <?php endif; ?>
271
272                        <?php if ( bp_is_active( 'blogs' ) && is_multisite() ) : ?>
273
274                                <li><a href="<?php echo $bp->root_domain . '/' . $bp->blogs->slug . '/?random-blog' ?>"><?php _e( 'Random Blog', 'buddypress' ) ?></a></li>
275
276                        <?php endif; ?>
277
278                        <?php do_action( 'bp_adminbar_random_menu' ) ?>
279
280                </ul>
281        </li>
282
283        <?php
284}
285
286function bp_core_load_admin_bar() {
287        global $wp_version;
288       
289        if ( defined( 'BP_USE_WP_ADMIN_BAR' ) && BP_USE_WP_ADMIN_BAR && $wp_version >= 3.1 ) {
290                // TODO: Add BP support to WP admin bar
291                return;
292        } elseif ( !defined( 'BP_DISABLE_ADMIN_BAR' ) || !BP_DISABLE_ADMIN_BAR ) {
293                // Keep the WP admin bar from loading
294
295                // Check if the function show_admin_bar exists before calling it
296                if (function_exists('show_admin_bar')) {
297                show_admin_bar( false );
298                }
299                // Actions used to build the BP admin bar
300                add_action( 'bp_adminbar_logo',  'bp_adminbar_logo' );
301                add_action( 'bp_adminbar_menus', 'bp_adminbar_login_menu',         2   );
302                add_action( 'bp_adminbar_menus', 'bp_adminbar_account_menu',       4   );
303                add_action( 'bp_adminbar_menus', 'bp_adminbar_blogs_menu',         6   );
304                add_action( 'bp_adminbar_menus', 'bp_adminbar_thisblog_menu',      6   );
305                add_action( 'bp_adminbar_menus', 'bp_adminbar_notifications_menu', 8   );
306                add_action( 'bp_adminbar_menus', 'bp_adminbar_authors_menu',       12  );
307                add_action( 'bp_adminbar_menus', 'bp_adminbar_random_menu',        100 );
308               
309                // Actions used to append BP admin bar to footer
310                add_action( 'wp_footer',    'bp_core_admin_bar', 8 );
311                add_action( 'admin_footer', 'bp_core_admin_bar'    );   
312        }
313}
314
315?>