Skip to:
Content

BuddyPress.org

Ticket #4302: bp-members-template.php

File bp-members-template.php, 36.3 KB (added by rbahumi, 12 years ago)

This is the file after my small change

Line 
1<?php
2/**
3 * BuddyPress Member Template Tags
4 *
5 * Functions that are safe to use inside your template files and themes
6 *
7 * @package BuddyPress
8 * @subpackage Members
9 */
10
11// Exit if accessed directly
12if ( !defined( 'ABSPATH' ) ) exit;
13
14/**
15 * Output the members component slug
16 *
17 * @package BuddyPress
18 * @subpackage Members Template
19 * @since 1.5
20 *
21 * @uses bp_get_members_slug()
22 */
23function bp_members_slug() {
24        echo bp_get_members_slug();
25}
26        /**
27         * Return the members component slug
28         *
29         * @package BuddyPress
30         * @subpackage Members Template
31         * @since 1.5
32         */
33        function bp_get_members_slug() {
34                global $bp;
35                return apply_filters( 'bp_get_members_slug', $bp->members->slug );
36        }
37
38/**
39 * Output the members component root slug
40 *
41 * @package BuddyPress
42 * @subpackage Members Template
43 * @since 1.5
44 *
45 * @uses bp_get_members_root_slug()
46 */
47function bp_members_root_slug() {
48        echo bp_get_members_root_slug();
49}
50        /**
51         * Return the members component root slug
52         *
53         * @package BuddyPress
54         * @subpackage Members Template
55         * @since 1.5
56         */
57        function bp_get_members_root_slug() {
58                global $bp;
59                return apply_filters( 'bp_get_members_root_slug', $bp->members->root_slug );
60        }
61
62/**
63 * Output member directory permalink
64 *
65 * @package BuddyPress
66 * @subpackage Members Template
67 * @since 1.5
68 * @uses bp_get_members_directory_permalink()
69 */
70function bp_members_directory_permalink() {
71        echo bp_get_members_directory_permalink();
72}
73        /**
74         * Return member directory permalink
75         *
76         * @package BuddyPress
77         * @subpackage Members Template
78         * @since 1.5
79         * @uses apply_filters()
80         * @uses traisingslashit()
81         * @uses bp_get_root_domain()
82         * @uses bp_get_members_root_slug()
83         * @return string
84         */
85        function bp_get_members_directory_permalink() {
86                return apply_filters( 'bp_get_members_directory_permalink', trailingslashit( bp_get_root_domain() . '/' . bp_get_members_root_slug() ) );
87        }
88
89/**
90 * Output the sign-up slug
91 *
92 * @package BuddyPress
93 * @subpackage Members Template
94 * @since 1.5
95 *
96 * @uses bp_get_signup_slug()
97 */
98function bp_signup_slug() {
99        echo bp_get_signup_slug();
100}
101        /**
102         * Return the sign-up slug
103         *
104         * @package BuddyPress
105         * @subpackage Members Template
106         * @since 1.5
107         */
108        function bp_get_signup_slug() {
109                global $bp;
110
111                if ( !empty( $bp->pages->register->slug ) )
112                        $slug = $bp->pages->register->slug;
113                elseif ( defined( 'BP_REGISTER_SLUG' ) )
114                        $slug = BP_REGISTER_SLUG;
115                else
116                        $slug = 'register';
117
118                return apply_filters( 'bp_get_signup_slug', $slug );
119        }
120
121/**
122 * Output the activation slug
123 *
124 * @package BuddyPress
125 * @subpackage Members Template
126 * @since 1.5
127 *
128 * @uses bp_get_activate_slug()
129 */
130function bp_activate_slug() {
131        echo bp_get_activate_slug();
132}
133        /**
134         * Return the activation slug
135         *
136         * @package BuddyPress
137         * @subpackage Members Template
138         * @since 1.5
139         */
140        function bp_get_activate_slug() {
141                global $bp;
142
143                if ( !empty( $bp->pages->activate->slug ) )
144                        $slug = $bp->pages->activate->slug;
145                elseif ( defined( 'BP_ACTIVATION_SLUG' ) )
146                        $slug = BP_ACTIVATION_SLUG;
147                else
148                        $slug = 'activate';
149
150                return apply_filters( 'bp_get_activate_slug', $slug );
151        }
152
153/***
154 * Members template loop that will allow you to loop all members or friends of a member
155 * if you pass a user_id.
156 */
157
158class BP_Core_Members_Template {
159        var $current_member = -1;
160        var $member_count;
161        var $members;
162        var $member;
163
164        var $in_the_loop;
165
166        var $pag_page;
167        var $pag_num;
168        var $pag_links;
169        var $total_member_count;
170
171        function bp_core_members_template( $type, $page_number, $per_page, $max, $user_id, $search_terms, $include, $populate_extras, $exclude, $meta_key, $meta_value ) {
172                $this->__construct( $type, $page_number, $per_page, $max, $user_id, $search_terms, $include, $populate_extras, $exclude, $meta_key, $meta_value );
173        }
174
175        function __construct( $type, $page_number, $per_page, $max, $user_id, $search_terms, $include, $populate_extras, $exclude, $meta_key, $meta_value ) {
176                global $bp;
177
178                $this->pag_page  = !empty( $_REQUEST['upage'] ) ? intval( $_REQUEST['upage'] ) : (int)$page_number;
179                $this->pag_num   = !empty( $_REQUEST['num'] )   ? intval( $_REQUEST['num'] )   : (int)$per_page;
180                $this->type      = $type;
181
182                if ( isset( $_REQUEST['letter'] ) && '' != $_REQUEST['letter'] )
183                        $this->members = BP_Core_User::get_users_by_letter( $_REQUEST['letter'], $this->pag_num, $this->pag_page, $populate_extras, $exclude );
184                else if ( false !== $include )
185                        $this->members = BP_Core_User::get_specific_users( $include, $this->pag_num, $this->pag_page, $populate_extras );
186                else
187                        $this->members = bp_core_get_users( array( 'type' => $this->type, 'per_page' => $this->pag_num, 'page' => $this->pag_page, 'user_id' => $user_id, 'include' => $include, 'search_terms' => $search_terms, 'populate_extras' => $populate_extras, 'exclude' => $exclude, 'meta_key' => $meta_key, 'meta_value' => $meta_value ) );
188
189                if ( !$max || $max >= (int)$this->members['total'] )
190                        $this->total_member_count = (int)$this->members['total'];
191                else
192                        $this->total_member_count = (int)$max;
193
194                $this->members = $this->members['users'];
195
196                if ( $max ) {
197                        if ( $max >= count( $this->members ) ) {
198                                $this->member_count = count( $this->members );
199                        } else {
200                                $this->member_count = (int)$max;
201                        }
202                } else {
203                        $this->member_count = count( $this->members );
204                }
205
206                if ( (int)$this->total_member_count && (int)$this->pag_num ) {
207                        $this->pag_links = paginate_links( array(
208                                'base'      => add_query_arg( 'upage', '%#%' ),
209                                'format'    => '',
210                                'total'     => ceil( (int)$this->total_member_count / (int)$this->pag_num ),
211                                'current'   => (int) $this->pag_page,
212                                'prev_text' => _x( '&larr;', 'Member pagination previous text', 'buddypress' ),
213                                'next_text' => _x( '&rarr;', 'Member pagination next text', 'buddypress' ),
214                                'mid_size'   => 1
215                        ) );
216                }
217        }
218
219        function has_members() {
220                if ( $this->member_count )
221                        return true;
222
223                return false;
224        }
225
226        function next_member() {
227                $this->current_member++;
228                $this->member = $this->members[$this->current_member];
229
230                return $this->member;
231        }
232
233        function rewind_members() {
234                $this->current_member = -1;
235                if ( $this->member_count > 0 ) {
236                        $this->member = $this->members[0];
237                }
238        }
239
240        function members() {
241                if ( $this->current_member + 1 < $this->member_count ) {
242                        return true;
243                } elseif ( $this->current_member + 1 == $this->member_count ) {
244                        do_action('member_loop_end');
245                        // Do some cleaning up after the loop
246                        $this->rewind_members();
247                }
248
249                $this->in_the_loop = false;
250                return false;
251        }
252
253        function the_member() {
254                global $member, $bp;
255
256                $this->in_the_loop = true;
257                $this->member = $this->next_member();
258
259                if ( 0 == $this->current_member ) // loop has just started
260                        do_action('member_loop_start');
261        }
262}
263
264function bp_rewind_members() {
265        global $members_template;
266
267        return $members_template->rewind_members();
268}
269
270function bp_has_members( $args = '' ) {
271        global $bp, $members_template;
272
273        /***
274         * Set the defaults based on the current page. Any of these will be overridden
275         * if arguments are directly passed into the loop. Custom plugins should always
276         * pass their parameters directly to the loop.
277         */
278        $type         = 'active';
279        $user_id      = 0;
280        $page         = 1;
281        $search_terms = null;
282
283        // User filtering
284        if ( !empty( $bp->displayed_user->id ) )
285                $user_id = $bp->displayed_user->id;
286
287        // type: active ( default ) | random | newest | popular | online | alphabetical
288        $defaults = array(
289                'type'            => $type,
290                'page'            => $page,
291                'per_page'        => 20,
292                'max'             => false,
293
294                'include'         => false,         // Pass a user_id or a list (comma-separated or array) of user_ids to only show these users
295                'exclude'         => false,         // Pass a user_id or a list (comma-separated or array) of user_ids to exclude these users
296
297                'user_id'         => $user_id,      // Pass a user_id to only show friends of this user
298                'search_terms'    => $search_terms, // Pass search_terms to filter users by their profile data
299
300                'meta_key'        => false,             // Only return users with this usermeta
301                'meta_value'      => false,             // Only return users where the usermeta value matches. Requires meta_key
302
303                'populate_extras' => true           // Fetch usermeta? Friend count, last active etc.
304        );
305
306        $r = wp_parse_args( $args, $defaults );
307        extract( $r );
308
309        // Pass a filter if ?s= is set.
310        if ( is_null( $search_terms ) ) {
311                if ( !empty( $_REQUEST['s'] ) )
312                        $search_terms = $_REQUEST['s'];
313                else
314                        $search_terms = false;
315        }
316
317        // Set per_page to max if max is larger than per_page
318        if ( !empty( $max ) && ( $per_page > $max ) )
319                $per_page = $max;
320
321        // Make sure we return no members if we looking at friendship requests and there are none.
322        if ( empty( $include ) && bp_is_friends_component() && bp_is_current_action( 'requests' ) )
323                return false;
324
325        $members_template = new BP_Core_Members_Template( $type, $page, $per_page, $max, $user_id, $search_terms, $include, (bool)$populate_extras, $exclude, $meta_key, $meta_value );
326        return apply_filters( 'bp_has_members', $members_template->has_members(), $members_template );
327}
328
329function bp_the_member() {
330        global $members_template;
331        return $members_template->the_member();
332}
333
334function bp_members() {
335        global $members_template;
336        return $members_template->members();
337}
338
339function bp_members_pagination_count() {
340        echo bp_get_members_pagination_count();
341}
342        function bp_get_members_pagination_count() {
343                global $bp, $members_template;
344
345                if ( empty( $members_template->type ) )
346                        $members_template->type = '';
347
348                $start_num = intval( ( $members_template->pag_page - 1 ) * $members_template->pag_num ) + 1;
349                $from_num  = bp_core_number_format( $start_num );
350                $to_num    = bp_core_number_format( ( $start_num + ( $members_template->pag_num - 1 ) > $members_template->total_member_count ) ? $members_template->total_member_count : $start_num + ( $members_template->pag_num - 1 ) );
351                $total     = bp_core_number_format( $members_template->total_member_count );
352
353                if ( 'active' == $members_template->type )
354                        $pag = sprintf( __( 'Viewing member %1$s to %2$s (of %3$s active members)', 'buddypress' ), $from_num, $to_num, $total );
355                else if ( 'popular' == $members_template->type )
356                        $pag = sprintf( __( 'Viewing member %1$s to %2$s (of %3$s members with friends)', 'buddypress' ), $from_num, $to_num, $total );
357                else if ( 'online' == $members_template->type )
358                        $pag = sprintf( __( 'Viewing member %1$s to %2$s (of %3$s members online)', 'buddypress' ), $from_num, $to_num, $total );
359                else
360                        $pag = sprintf( __( 'Viewing member %1$s to %2$s (of %3$s members)', 'buddypress' ), $from_num, $to_num, $total );
361
362                return apply_filters( 'bp_members_pagination_count', $pag );
363        }
364
365function bp_members_pagination_links() {
366        echo bp_get_members_pagination_links();
367}
368        function bp_get_members_pagination_links() {
369                global $members_template;
370
371                return apply_filters( 'bp_get_members_pagination_links', $members_template->pag_links );
372        }
373
374/**
375 * bp_member_user_id()
376 *
377 * Echo id from bp_get_member_user_id()
378 *
379 * @uses bp_get_member_user_id()
380 */
381function bp_member_user_id() {
382        echo bp_get_member_user_id();
383}
384        /**
385         * bp_get_member_user_id()
386         *
387         * Get the id of the user in a members loop
388         *
389         * @global object $members_template
390         * @return string Members id
391         */
392        function bp_get_member_user_id() {
393                global $members_template;
394
395                return apply_filters( 'bp_get_member_user_id', $members_template->member->id );
396        }
397
398/**
399 * bp_member_user_nicename()
400 *
401 * Echo nicename from bp_get_member_user_nicename()
402 *
403 * @uses bp_get_member_user_nicename()
404 */
405function bp_member_user_nicename() {
406        echo bp_get_member_user_nicename();
407}
408        /**
409         * bp_get_member_user_nicename()
410         *
411         * Get the nicename of the user in a members loop
412         *
413         * @global object $members_template
414         * @return string Members nicename
415         */
416        function bp_get_member_user_nicename() {
417                global $members_template;
418                return apply_filters( 'bp_get_member_user_nicename', $members_template->member->user_nicename );
419        }
420
421/**
422 * bp_member_user_login()
423 *
424 * Echo login from bp_get_member_user_login()
425 *
426 * @uses bp_get_member_user_login()
427 */
428function bp_member_user_login() {
429        echo bp_get_member_user_login();
430}
431        /**
432         * bp_get_member_user_login()
433         *
434         * Get the login of the user in a members loop
435         *
436         * @global object $members_template
437         * @return string Members login
438         */
439        function bp_get_member_user_login() {
440                global $members_template;
441                return apply_filters( 'bp_get_member_user_login', $members_template->member->user_login );
442        }
443
444/**
445 * bp_member_user_email()
446 *
447 * Echo email address from bp_get_member_user_email()
448 *
449 * @uses bp_get_member_user_email()
450 */
451function bp_member_user_email() {
452        echo bp_get_member_user_email();
453}
454        /**
455         * bp_get_member_user_email()
456         *
457         * Get the email address of the user in a members loop
458         *
459         * @global object $members_template
460         * @return string Members email address
461         */
462        function bp_get_member_user_email() {
463                global $members_template;
464                return apply_filters( 'bp_get_member_user_email', $members_template->member->user_email );
465        }
466
467function bp_member_is_loggedin_user() {
468        global $bp, $members_template;
469        return apply_filters( 'bp_member_is_loggedin_user', $bp->loggedin_user->id == $members_template->member->id ? true : false );
470}
471
472function bp_member_avatar( $args = '' ) {
473        echo apply_filters( 'bp_member_avatar', bp_get_member_avatar( $args ) );
474}
475        function bp_get_member_avatar( $args = '' ) {
476                global $bp, $members_template;
477
478                $defaults = array(
479                        'type' => 'thumb',
480                        'width' => false,
481                        'height' => false,
482                        'class' => 'avatar',
483                        'id' => false,
484                        'alt' => __( 'Profile picture of %s', 'buddypress' )
485                );
486
487                $r = wp_parse_args( $args, $defaults );
488                extract( $r, EXTR_SKIP );
489
490                return apply_filters( 'bp_get_member_avatar', bp_core_fetch_avatar( array( 'item_id' => $members_template->member->id, 'type' => $type, 'alt' => $alt, 'css_id' => $id, 'class' => $class, 'width' => $width, 'height' => $height, 'email' => $members_template->member->user_email ) ) );
491        }
492
493function bp_member_permalink() {
494        echo bp_get_member_permalink();
495}
496        function bp_get_member_permalink() {
497                global $members_template;
498
499                return apply_filters( 'bp_get_member_permalink', bp_core_get_user_domain( $members_template->member->id, $members_template->member->user_nicename, $members_template->member->user_login ) );
500        }
501        function bp_member_link() { echo bp_get_member_permalink(); }
502        function bp_get_member_link() { return bp_get_member_permalink(); }
503
504/**
505 * Echoes bp_get_member_name()
506 *
507 * @package BuddyPress
508 */
509function bp_member_name() {
510        echo apply_filters( 'bp_member_name', bp_get_member_name() );
511}
512        /**
513         * Used inside a bp_has_members() loop, this function returns a user's full name
514         *
515         * Full name is, by default, pulled from xprofile's Full Name field. When this field is
516         * empty, we try to get an alternative name from the WP users table, in the following order
517         * of preference: display_name, user_nicename, user_login.
518         *
519         * @package BuddyPress
520         *
521         * @uses apply_filters() Filter bp_get_the_member_name() to alter the function's output
522         * @return str The user's fullname for display
523         */
524        function bp_get_member_name() {
525                global $members_template;
526
527                // Generally, this only fires when xprofile is disabled
528                if ( empty( $members_template->member->fullname ) ) {
529                        // Our order of preference for alternative fullnames
530                        $name_stack = array(
531                                'display_name',
532                                'user_nicename',
533                                'user_login'
534                        );
535
536                        foreach ( $name_stack as $source ) {
537                                if ( !empty( $members_template->member->{$source} ) ) {
538                                        // When a value is found, set it as fullname and be done
539                                        // with it
540                                        $members_template->member->fullname = $members_template->member->{$source};
541                                        break;
542                                }
543                        }
544                }
545
546                return apply_filters( 'bp_get_member_name', $members_template->member->fullname );
547        }
548        add_filter( 'bp_get_member_name', 'wp_filter_kses' );
549        add_filter( 'bp_get_member_name', 'stripslashes' );
550        add_filter( 'bp_get_member_name', 'strip_tags' );
551
552function bp_member_last_active() {
553        echo bp_get_member_last_active();
554}
555        function bp_get_member_last_active() {
556                global $members_template;
557
558                if ( isset( $members_template->member->last_activity ) )
559                        $last_activity = bp_core_get_last_activity( $members_template->member->last_activity, __( 'active %s', 'buddypress' ) );
560                else
561                        $last_activity = __( 'Never active', 'buddypress' );
562
563                return apply_filters( 'bp_member_last_active', $last_activity );
564        }
565
566function bp_member_latest_update( $args = '' ) {
567        echo bp_get_member_latest_update( $args );
568}
569        function bp_get_member_latest_update( $args = '' ) {
570                global $bp, $members_template;
571
572                $defaults = array(
573                        'length'    => 225,
574                        'view_link' => true
575                );
576
577                $r = wp_parse_args( $args, $defaults );
578                extract( $r );
579
580                if ( !bp_is_active( 'activity' ) || empty( $members_template->member->latest_update ) || !$update = maybe_unserialize( $members_template->member->latest_update ) )
581                        return false;
582
583                $update_content = apply_filters( 'bp_get_activity_latest_update_excerpt', sprintf( _x( '- &quot;%s &quot;', 'member latest update in member directory', 'buddypress' ), trim( strip_tags( bp_create_excerpt( $update['content'], $length ) ) ) ) );
584
585                // If $view_link is true and the text returned by bp_create_excerpt() is different from the original text (ie it's
586                // been truncated), add the "View" link.
587                if ( $view_link && ( $update_content != $update['content'] ) ) {
588                        $view = __( 'View', 'buddypress' );
589
590                        $update_content .= '<span class="activity-read-more"><a href="' . bp_activity_get_permalink( $update['id'] ) . '" rel="nofollow">' . $view . '</a></span>';
591                }
592
593                return apply_filters( 'bp_get_member_latest_update', $update_content );
594        }
595
596function bp_member_profile_data( $args = '' ) {
597        echo bp_get_member_profile_data( $args );
598}
599        function bp_get_member_profile_data( $args = '' ) {
600                global $bp, $members_template;
601
602                if ( !bp_is_active( 'xprofile' ) )
603                        return false;
604
605                // Declare local variables
606                $data    = false;
607                $user_id = 0;
608
609                // Guess at default $user_id
610                if ( !empty( $members_template->member->id ) )
611                        $user_id = $members_template->member->id;
612                elseif ( !empty( $bp->displayed_user->id ) )
613                        $user_id = $bp->displayed_user->id;
614
615                $defaults = array(
616                        'field'   => false,   // Field name
617                        'user_id' => $user_id
618                );
619
620                $r = wp_parse_args( $args, $defaults );
621                extract( $r, EXTR_SKIP );
622
623                // Populate the user if it hasn't been already.
624                if ( empty( $members_template->member->profile_data ) && method_exists( 'BP_XProfile_ProfileData', 'get_all_for_user' ) )
625                        $members_template->member->profile_data = BP_XProfile_ProfileData::get_all_for_user( $user_id );
626
627                // Get the field data if there is data to get
628                if ( !empty( $members_template->member->profile_data ) )
629                        $data = xprofile_format_profile_field( $members_template->member->profile_data[$field]['field_type'], $members_template->member->profile_data[$field]['field_data'] );
630
631                return apply_filters( 'bp_get_member_profile_data', $data );
632        }
633
634function bp_member_registered() {
635        echo bp_get_member_registered();
636}
637        function bp_get_member_registered() {
638                global $members_template;
639
640                $registered = esc_attr( bp_core_get_last_activity( $members_template->member->user_registered, __( 'registered %s', 'buddypress' ) ) );
641
642                return apply_filters( 'bp_member_last_active', $registered );
643        }
644
645function bp_member_random_profile_data() {
646        global $members_template;
647
648        if ( bp_is_active( 'xprofile' ) ) { ?>
649                <?php $random_data = xprofile_get_random_profile_data( $members_template->member->id, true ); ?>
650                        <strong><?php echo wp_filter_kses( $random_data[0]->name ) ?></strong>
651                        <?php echo wp_filter_kses( $random_data[0]->value ) ?>
652        <?php }
653}
654
655function bp_member_hidden_fields() {
656        if ( isset( $_REQUEST['s'] ) )
657                echo '<input type="hidden" id="search_terms" value="' . esc_attr( $_REQUEST['s'] ) . '" name="search_terms" />';
658
659        if ( isset( $_REQUEST['letter'] ) )
660                echo '<input type="hidden" id="selected_letter" value="' . esc_attr( $_REQUEST['letter'] ) . '" name="selected_letter" />';
661
662        if ( isset( $_REQUEST['members_search'] ) )
663                echo '<input type="hidden" id="search_terms" value="' . esc_attr( $_REQUEST['members_search'] ) . '" name="search_terms" />';
664}
665
666function bp_directory_members_search_form() {
667        global $bp;
668
669        $default_search_value = bp_get_search_default_text( 'members' );
670        $search_value         = !empty( $_REQUEST['s'] ) ? stripslashes( $_REQUEST['s'] ) : $default_search_value; ?>
671
672        <form action="" method="get" id="search-members-form">
673                <label><input type="text" name="s" id="members_search" value="<?php echo esc_attr( $search_value ) ?>"  onfocus="if (this.value == '<?php echo $default_search_value ?>') {this.value = '';}" onblur="if (this.value == '') {this.value = '<?php echo $default_search_value ?>';}" /></label>
674                <input type="submit" id="members_search_submit" name="members_search_submit" value="<?php _e( 'Search', 'buddypress' ) ?>" />
675        </form>
676
677<?php
678}
679
680function bp_total_site_member_count() {
681        echo bp_get_total_site_member_count();
682}
683        function bp_get_total_site_member_count() {
684                return apply_filters( 'bp_get_total_site_member_count', bp_core_number_format( bp_core_get_total_member_count() ) );
685        }
686
687/** Navigation and other misc template tags **/
688
689/**
690 * Uses the $bp->bp_nav global to render out the navigation within a BuddyPress install.
691 * Each component adds to this navigation array within its own [component_name]setup_nav() function.
692 *
693 * This navigation array is the top level navigation, so it contains items such as:
694 *      [Blog, Profile, Messages, Groups, Friends] ...
695 *
696 * The function will also analyze the current component the user is in, to determine whether
697 * or not to highlight a particular nav item.
698 *
699 * @package BuddyPress Core
700 * @todo Move to a back-compat file?
701 * @deprecated Does not seem to be called anywhere in the core
702 * @global object $bp Global BuddyPress settings object
703 */
704function bp_get_loggedin_user_nav() {
705        global $bp;
706
707        // Loop through each navigation item
708        foreach( (array) $bp->bp_nav as $nav_item ) {
709                // If the current component matches the nav item id, then add a highlight CSS class.
710                if ( !bp_is_directory() && !empty( $bp->current_component ) && $bp->active_components[$bp->current_component] == $nav_item['css_id'] ){
711                        $selected = ' class="current selected"';
712                }
713                else
714                        $selected = '';
715
716                /* If we are viewing another person (current_userid does not equal loggedin_user->id)
717                   then check to see if the two users are friends. if they are, add a highlight CSS class
718                   to the friends nav item if it exists. */
719                if ( !bp_is_my_profile() && $bp->displayed_user->id ) {
720                        $selected = '';
721
722                        if ( bp_is_active( 'friends' ) ) {
723                                if ( $nav_item['css_id'] == $bp->friends->id ) {
724                                        if ( friends_check_friendship( $bp->loggedin_user->id, $bp->displayed_user->id ) )
725                                                $selected = ' class="current selected"';
726                                }
727                        }
728                }
729
730                // echo out the final list item
731                echo apply_filters_ref_array( 'bp_get_loggedin_user_nav_' . $nav_item['css_id'], array( '<li id="li-nav-' . $nav_item['css_id'] . '" ' . $selected . '><a id="my-' . $nav_item['css_id'] . '" href="' . $nav_item['link'] . '">' . $nav_item['name'] . '</a></li>', &$nav_item ) );
732        }
733
734        // Always add a log out list item to the end of the navigation
735        $logout_link = '<li><a id="wp-logout" href="' .  wp_logout_url( bp_get_root_domain() ) . '">' . __( 'Log Out', 'buddypress' ) . '</a></li>';
736
737        echo apply_filters( 'bp_logout_nav_link', $logout_link );
738}
739
740/**
741 * Uses the $bp->bp_nav global to render out the user navigation when viewing another user other than
742 * yourself.
743 *
744 * @package BuddyPress Core
745 * @global object $bp Global BuddyPress settings object
746 */
747function bp_get_displayed_user_nav() {
748        global $bp;
749
750        foreach ( (array)$bp->bp_nav as $user_nav_item ) {
751                if ( !$user_nav_item['show_for_displayed_user'] && !bp_is_my_profile() )
752                        continue;
753
754                if ( $bp->current_component == $user_nav_item['slug'] )
755                        $selected = ' class="current selected"';
756                else
757                        $selected = '';
758
759                if ( $bp->loggedin_user->domain )
760                        $link = str_replace( $bp->loggedin_user->domain, $bp->displayed_user->domain, $user_nav_item['link'] );
761                else
762                        $link = $bp->displayed_user->domain . $user_nav_item['link'];
763
764                echo apply_filters_ref_array( 'bp_get_displayed_user_nav_' . $user_nav_item['css_id'], array( '<li id="' . $user_nav_item['css_id'] . '-personal-li" ' . $selected . '><a id="user-' . $user_nav_item['css_id'] . '" href="' . $link . '">' . $user_nav_item['name'] . '</a></li>', &$user_nav_item ) );
765        }
766}
767
768/** Avatars *******************************************************************/
769
770function bp_loggedin_user_avatar( $args = '' ) {
771        echo bp_get_loggedin_user_avatar( $args );
772}
773        function bp_get_loggedin_user_avatar( $args = '' ) {
774                global $bp;
775
776                $defaults = array(
777                        'type'   => 'thumb',
778                        'width'  => false,
779                        'height' => false,
780                        'html'   => true,
781                        'alt'    => __( 'Profile picture of %s', 'buddypress' )
782                );
783
784                $r = wp_parse_args( $args, $defaults );
785                extract( $r, EXTR_SKIP );
786
787                return apply_filters( 'bp_get_loggedin_user_avatar', bp_core_fetch_avatar( array( 'item_id' => $bp->loggedin_user->id, 'type' => $type, 'width' => $width, 'height' => $height, 'html' => $html, 'alt' => $alt ) ) );
788        }
789
790function bp_displayed_user_avatar( $args = '' ) {
791        echo bp_get_displayed_user_avatar( $args );
792}
793        function bp_get_displayed_user_avatar( $args = '' ) {
794                global $bp;
795
796                $defaults = array(
797                        'type'   => 'thumb',
798                        'width'  => false,
799                        'height' => false,
800                        'html'   => true,
801                        'alt'    => __( 'Profile picture of %s', 'buddypress' )
802                );
803
804                $r = wp_parse_args( $args, $defaults );
805                extract( $r, EXTR_SKIP );
806
807                return apply_filters( 'bp_get_displayed_user_avatar', bp_core_fetch_avatar( array( 'item_id' => $bp->displayed_user->id, 'type' => $type, 'width' => $width, 'height' => $height, 'html' => $html, 'alt' => $alt ) ) );
808        }
809
810function bp_displayed_user_email() {
811        echo bp_get_displayed_user_email();
812}
813        function bp_get_displayed_user_email() {
814                global $bp;
815
816                // If displayed user exists, return email address
817                if ( isset( $bp->displayed_user->userdata->user_email ) )
818                        $retval = $bp->displayed_user->userdata->user_email;
819                else
820                        $retval = '';
821
822                return apply_filters( 'bp_get_displayed_user_email', esc_attr( $retval ) );
823        }
824
825function bp_last_activity( $user_id = 0 ) {
826        echo apply_filters( 'bp_last_activity', bp_get_last_activity( $user_id ) );
827}
828        function bp_get_last_activity( $user_id = 0 ) {
829                global $bp;
830
831                if ( empty( $user_id ) )
832                        $user_id = $bp->displayed_user->id;
833
834                $last_activity = bp_core_get_last_activity( bp_get_user_meta( $user_id, 'last_activity', true ), __('active %s', 'buddypress') );
835
836                return apply_filters( 'bp_get_last_activity', $last_activity );
837        }
838
839function bp_user_firstname() {
840        echo bp_get_user_firstname();
841}
842        function bp_get_user_firstname( $name = false ) {
843                global $bp;
844
845                // Try to get displayed user
846                if ( empty( $name ) )
847                        $name = $bp->displayed_user->fullname;
848
849                // Fall back on logged in user
850                if ( empty( $name ) )
851                        $name = $bp->loggedin_user->fullname;
852
853                $fullname = (array)explode( ' ', $name );
854
855                return apply_filters( 'bp_get_user_firstname', $fullname[0], $fullname );
856        }
857
858function bp_loggedin_user_link() {
859        echo bp_get_loggedin_user_link();
860}
861        function bp_get_loggedin_user_link() {
862                return apply_filters( 'bp_get_loggedin_user_link', bp_loggedin_user_domain() );
863        }
864
865function bp_displayed_user_link() {
866        echo bp_get_displayed_user_link();
867}
868        function bp_get_displayed_user_link() {
869                return apply_filters( 'bp_get_displayed_user_link', bp_displayed_user_domain() );
870        }
871        function bp_user_link() { bp_displayed_user_domain(); } // Deprecated.
872
873function bp_displayed_user_id() {
874        global $bp;
875        return apply_filters( 'bp_displayed_user_id', !empty( $bp->displayed_user->id ) ? $bp->displayed_user->id : 0 );
876}
877        function bp_current_user_id() { return bp_displayed_user_id(); }
878
879function bp_loggedin_user_id() {
880        global $bp;
881        return apply_filters( 'bp_loggedin_user_id', !empty( $bp->loggedin_user->id ) ? $bp->loggedin_user->id : 0 );
882}
883
884function bp_displayed_user_domain() {
885        global $bp;
886        return apply_filters( 'bp_displayed_user_domain', isset( $bp->displayed_user->domain ) ? $bp->displayed_user->domain : '' );
887}
888
889function bp_loggedin_user_domain() {
890        global $bp;
891        return apply_filters( 'bp_loggedin_user_domain', isset( $bp->loggedin_user->domain ) ? $bp->loggedin_user->domain : '' );
892}
893
894function bp_displayed_user_fullname() {
895        echo bp_get_displayed_user_fullname();
896}
897        function bp_get_displayed_user_fullname() {
898                global $bp;
899                return apply_filters( 'bp_displayed_user_fullname', isset( $bp->displayed_user->fullname ) ? $bp->displayed_user->fullname : '' );
900        }
901        function bp_user_fullname() { echo bp_get_displayed_user_fullname(); }
902
903
904function bp_loggedin_user_fullname() {
905        echo bp_get_loggedin_user_fullname();
906}
907        function bp_get_loggedin_user_fullname() {
908                global $bp;
909                return apply_filters( 'bp_get_loggedin_user_fullname', isset( $bp->loggedin_user->fullname ) ? $bp->loggedin_user->fullname : '' );
910        }
911
912function bp_displayed_user_username() {
913        echo bp_get_displayed_user_username();
914}
915        function bp_get_displayed_user_username() {
916                global $bp;
917
918                if ( !empty( $bp->displayed_user->id ) ) {
919                        $username = bp_core_get_username( $bp->displayed_user->id, $bp->displayed_user->userdata->user_nicename, $bp->displayed_user->userdata->user_login );
920                } else {
921                        $username = '';
922                }
923
924                return apply_filters( 'bp_get_displayed_user_username', $username );
925        }
926
927function bp_loggedin_user_username() {
928        echo bp_get_loggedin_user_username();
929}
930        function bp_get_loggedin_user_username() {
931                global $bp;
932
933                if ( !empty( $bp->loggedin_user->id ) ) {
934                        $username = bp_core_get_username( $bp->loggedin_user->id, $bp->loggedin_user->userdata->user_nicename, $bp->loggedin_user->userdata->user_login );
935                } else {
936                        $username = '';
937                }
938
939                return apply_filters( 'bp_get_loggedin_user_username', $username );
940        }
941
942/** Signup Form ***************************************************************/
943
944function bp_has_custom_signup_page() {
945        if ( locate_template( array( 'register.php' ), false ) || locate_template( array( '/registration/register.php' ), false ) )
946                return true;
947
948        return false;
949}
950
951function bp_signup_page() {
952        echo bp_get_signup_page();
953}
954        function bp_get_signup_page() {
955                global $bp;
956
957                if ( bp_has_custom_signup_page() ) {
958                        $page = trailingslashit( bp_get_root_domain() . '/' . bp_get_signup_slug() );
959                } else {
960                        $page = bp_get_root_domain() . '/wp-signup.php';
961                }
962
963                return apply_filters( 'bp_get_signup_page', $page );
964        }
965
966function bp_has_custom_activation_page() {
967        if ( locate_template( array( 'activate.php' ), false ) || locate_template( array( '/registration/activate.php' ), false ) )
968                return true;
969
970        return false;
971}
972
973function bp_activation_page() {
974        echo bp_get_activation_page();
975}
976        function bp_get_activation_page() {
977                global $bp;
978
979                if ( bp_has_custom_activation_page() )
980                        $page = trailingslashit( bp_get_root_domain() . '/' . $bp->pages->activate->slug );
981                else
982                        $page = trailingslashit( bp_get_root_domain() ) . 'wp-activate.php';
983
984                return apply_filters( 'bp_get_activation_page', $page );
985        }
986
987function bp_signup_username_value() {
988        echo bp_get_signup_username_value();
989}
990        function bp_get_signup_username_value() {
991                $value = '';
992                if ( isset( $_POST['signup_username'] ) )
993                        $value = $_POST['signup_username'];
994
995                return apply_filters( 'bp_get_signup_username_value', $value );
996        }
997
998function bp_signup_email_value() {
999        echo bp_get_signup_email_value();
1000}
1001        function bp_get_signup_email_value() {
1002                $value = '';
1003                if ( isset( $_POST['signup_email'] ) )
1004                        $value = $_POST['signup_email'];
1005
1006                return apply_filters( 'bp_get_signup_email_value', $value );
1007        }
1008
1009function bp_signup_with_blog_value() {
1010        echo bp_get_signup_with_blog_value();
1011}
1012        function bp_get_signup_with_blog_value() {
1013                $value = '';
1014                if ( isset( $_POST['signup_with_blog'] ) )
1015                        $value = $_POST['signup_with_blog'];
1016
1017                return apply_filters( 'bp_get_signup_with_blog_value', $value );
1018        }
1019
1020function bp_signup_blog_url_value() {
1021        echo bp_get_signup_blog_url_value();
1022}
1023        function bp_get_signup_blog_url_value() {
1024                $value = '';
1025                if ( isset( $_POST['signup_blog_url'] ) )
1026                        $value = $_POST['signup_blog_url'];
1027
1028                return apply_filters( 'bp_get_signup_blog_url_value', $value );
1029        }
1030
1031function bp_signup_blog_title_value() {
1032        echo bp_get_signup_blog_title_value();
1033}
1034        function bp_get_signup_blog_title_value() {
1035                $value = '';
1036                if ( isset( $_POST['signup_blog_title'] ) )
1037                        $value = $_POST['signup_blog_title'];
1038
1039                return apply_filters( 'bp_get_signup_blog_title_value', $value );
1040        }
1041
1042function bp_signup_blog_privacy_value() {
1043        echo bp_get_signup_blog_privacy_value();
1044}
1045        function bp_get_signup_blog_privacy_value() {
1046                $value = '';
1047                if ( isset( $_POST['signup_blog_privacy'] ) )
1048                        $value = $_POST['signup_blog_privacy'];
1049
1050                return apply_filters( 'bp_get_signup_blog_privacy_value', $value );
1051        }
1052
1053function bp_signup_avatar_dir_value() {
1054        echo bp_get_signup_avatar_dir_value();
1055}
1056        function bp_get_signup_avatar_dir_value() {
1057                global $bp;
1058
1059                // Check if signup_avatar_dir is passed
1060                if ( !empty( $_POST['signup_avatar_dir'] ) )
1061                        $signup_avatar_dir = $_POST['signup_avatar_dir'];
1062
1063                // If not, check if global is set
1064                elseif ( !empty( $bp->signup->avatar_dir ) )
1065                        $signup_avatar_dir = $bp->signup->avatar_dir;
1066
1067                // If not, set false
1068                else
1069                        $signup_avatar_dir = false;
1070
1071                return apply_filters( 'bp_get_signup_avatar_dir_value', $bp->signup->avatar_dir );
1072        }
1073
1074function bp_current_signup_step() {
1075        echo bp_get_current_signup_step();
1076}
1077        function bp_get_current_signup_step() {
1078                global $bp;
1079
1080                return $bp->signup->step;
1081        }
1082
1083function bp_signup_avatar( $args = '' ) {
1084        echo bp_get_signup_avatar( $args );
1085}
1086        function bp_get_signup_avatar( $args = '' ) {
1087                global $bp;
1088
1089                $defaults = array(
1090                        'size' => bp_core_avatar_full_width(),
1091                        'class' => 'avatar',
1092                        'alt' => __( 'Your Avatar', 'buddypress' )
1093                );
1094
1095                $r = wp_parse_args( $args, $defaults );
1096                extract( $r, EXTR_SKIP );
1097
1098                // Avatar DIR is found
1099                if ( $signup_avatar_dir = bp_get_signup_avatar_dir_value() ) {
1100                        $gravatar_img = bp_core_fetch_avatar( array(
1101                                'item_id'    => $signup_avatar_dir,
1102                                'object'     => 'signup',
1103                                'avatar_dir' => 'avatars/signups',
1104                                'type'       => 'full',
1105                                'width'      => $size,
1106                                'height'     => $size,
1107                                'alt'        => $alt,
1108                                'class'      => $class
1109                        ) );
1110
1111                // No avatar DIR was found
1112                } else {
1113
1114                        // Set default gravatar type
1115                        if ( empty( $bp->grav_default->user ) )
1116                                $default_grav = 'wavatar';
1117                        else if ( 'mystery' == $bp->grav_default->user )
1118                                $default_grav = BP_PLUGIN_URL . '/bp-core/images/mystery-man.jpg';
1119                        else
1120                                $default_grav = $bp->grav_default->user;
1121
1122                        // Create
1123                        $gravatar_url    = apply_filters( 'bp_gravatar_url', 'http://www.gravatar.com/avatar/' );
1124                        $md5_lcase_email = md5( strtolower( bp_get_signup_email_value() ) );
1125                        $gravatar_img    = '<img src="' . $gravatar_url . $md5_lcase_email . '?d=' . $default_grav . '&amp;s=' . $size . '" width="' . $size . '" height="' . $size . '" alt="' . $alt . '" class="' . $class . '" />';
1126                }
1127
1128                return apply_filters( 'bp_get_signup_avatar', $gravatar_img, $args );
1129        }
1130
1131function bp_signup_allowed() {
1132        echo bp_get_signup_allowed();
1133}
1134        function bp_get_signup_allowed() {
1135                global $bp;
1136
1137                $signup_allowed = false;
1138
1139                if ( is_multisite() ) {
1140                        if ( in_array( $bp->site_options['registration'], array( 'all', 'user' ) ) )
1141                                $signup_allowed = true;
1142
1143                } else {
1144                        if ( get_option( 'users_can_register') )
1145                                $signup_allowed = true;
1146                }
1147
1148                return apply_filters( 'bp_get_signup_allowed', $signup_allowed );
1149        }
1150
1151/**
1152 * Hook member activity feed to <head>
1153 *
1154 * @since 1.5
1155 */
1156function bp_members_activity_feed() {
1157        if ( !bp_is_active( 'activity' ) || !bp_is_user() )
1158                return; ?>
1159
1160        <link rel="alternate" type="application/rss+xml" title="<?php bloginfo( 'name' ) ?> | <?php bp_displayed_user_fullname() ?> | <?php _e( 'Activity RSS Feed', 'buddypress' ) ?>" href="<?php bp_member_activity_feed_link() ?>" />
1161
1162<?php
1163}
1164add_action( 'bp_head', 'bp_members_activity_feed' );
1165
1166
1167function bp_members_component_link( $component, $action = '', $query_args = '', $nonce = false ) {
1168        echo bp_get_members_component_link( $component, $action, $query_args, $nonce );
1169}
1170        function bp_get_members_component_link( $component, $action = '', $query_args = '', $nonce = false ) {
1171                global $bp;
1172
1173                // Must be displayed user
1174                if ( empty( $bp->displayed_user->id ) )
1175                        return;
1176
1177                // Append $action to $url if there is no $type
1178                if ( !empty( $action ) )
1179                        $url = $bp->displayed_user->domain . $bp->{$component}->slug . '/' . $action;
1180                else
1181                        $url = $bp->displayed_user->domain . $bp->{$component}->slug;
1182
1183                // Add a slash at the end of our user url
1184                $url = trailingslashit( $url );
1185
1186                // Add possible query arg
1187                if ( !empty( $query_args ) && is_array( $query_args ) )
1188                        $url = add_query_arg( $query_args, $url );
1189
1190                // To nonce, or not to nonce...
1191                if ( true === $nonce )
1192                        $url = wp_nonce_url( $url );
1193                elseif ( is_string( $nonce ) )
1194                        $url = wp_nonce_url( $url, $nonce );
1195
1196                // Return the url, if there is one
1197                if ( !empty( $url ) )
1198                        return $url;
1199        }
1200
1201?>