Skip to:
Content

BuddyPress.org

Ticket #4589: bp-groups-template.php-modified

File bp-groups-template.php-modified, 88.0 KB (added by simplyletgo, 12 years ago)

modified file in directory bp-themes/bp-default/groups/single/

Line 
1<?php
2
3/**
4 * BuddyPress Groups Template Functions
5 *
6 * @package BuddyPress
7 * @subpackage GroupsTemplate
8 */
9
10// Exit if accessed directly
11if ( !defined( 'ABSPATH' ) ) exit;
12
13/**
14 * Output the groups component slug
15 *
16 * @package BuddyPress
17 * @subpackage Groups Template
18 * @since BuddyPress (1.5)
19 *
20 * @uses bp_get_groups_slug()
21 */
22function bp_groups_slug() {
23        echo bp_get_groups_slug();
24}
25        /**
26         * Return the groups component slug
27         *
28         * @package BuddyPress
29         * @subpackage Groups Template
30         * @since BuddyPress (1.5)
31         */
32        function bp_get_groups_slug() {
33                global $bp;
34                return apply_filters( 'bp_get_groups_slug', $bp->groups->slug );
35        }
36
37/**
38 * Output the groups component root slug
39 *
40 * @package BuddyPress
41 * @subpackage Groups Template
42 * @since BuddyPress (1.5)
43 *
44 * @uses bp_get_groups_root_slug()
45 */
46function bp_groups_root_slug() {
47        echo bp_get_groups_root_slug();
48}
49        /**
50         * Return the groups component root slug
51         *
52         * @package BuddyPress
53         * @subpackage Groups Template
54         * @since BuddyPress (1.5)
55         */
56        function bp_get_groups_root_slug() {
57                global $bp;
58                return apply_filters( 'bp_get_groups_root_slug', $bp->groups->root_slug );
59        }
60
61/**
62 * Output group directory permalink
63 *
64 * @package BuddyPress
65 * @subpackage Groups Template
66 * @since BuddyPress (1.5)
67 * @uses bp_get_groups_directory_permalink()
68 */
69function bp_groups_directory_permalink() {
70        echo bp_get_groups_directory_permalink();
71}
72        /**
73         * Return group directory permalink
74         *
75         * @package BuddyPress
76         * @subpackage Groups Template
77         * @since BuddyPress (1.5)
78         * @uses apply_filters()
79         * @uses traisingslashit()
80         * @uses bp_get_root_domain()
81         * @uses bp_get_groups_root_slug()
82         * @return string
83         */
84        function bp_get_groups_directory_permalink() {
85                return apply_filters( 'bp_get_groups_directory_permalink', trailingslashit( bp_get_root_domain() . '/' . bp_get_groups_root_slug() ) );
86        }
87
88/*****************************************************************************
89 * Groups Template Class/Tags
90 **/
91
92class BP_Groups_Template {
93        var $current_group = -1;
94        var $group_count;
95        var $groups;
96        var $group;
97
98        var $in_the_loop;
99
100        var $pag_page;
101        var $pag_num;
102        var $pag_links;
103        var $total_group_count;
104
105        var $single_group = false;
106
107        var $sort_by;
108        var $order;
109
110        function __construct( $user_id, $type, $page, $per_page, $max, $slug, $search_terms, $populate_extras, $include = false, $exclude = false, $show_hidden = false, $page_arg = 'grpage' ){
111
112                $this->pag_page = isset( $_REQUEST[$page_arg] ) ? intval( $_REQUEST[$page_arg] ) : $page;
113                $this->pag_num  = isset( $_REQUEST['num'] ) ? intval( $_REQUEST['num'] ) : $per_page;
114
115                if ( bp_current_user_can( 'bp_moderate' ) || ( is_user_logged_in() && $user_id == bp_loggedin_user_id() ) )
116                        $show_hidden = true;
117
118                if ( 'invites' == $type ) {
119                        $this->groups = groups_get_invites_for_user( $user_id, $this->pag_num, $this->pag_page, $exclude );
120                } else if ( 'single-group' == $type ) {
121                        $group           = new stdClass;
122                        $group->group_id = BP_Groups_Group::get_id_from_slug( $slug );
123                        $this->groups    = array( $group );
124                } else {
125                        $this->groups = groups_get_groups( array(
126                                'type'            => $type,
127                                'per_page'        => $this->pag_num,
128                                'page'            => $this->pag_page,
129                                'user_id'         => $user_id,
130                                'search_terms'    => $search_terms,
131                                'include'         => $include,
132                                'exclude'         => $exclude,
133                                'populate_extras' => $populate_extras,
134                                'show_hidden'     => $show_hidden
135                        ) );
136                }
137
138                if ( 'invites' == $type ) {
139                        $this->total_group_count = (int) $this->groups['total'];
140                        $this->group_count       = (int) $this->groups['total'];
141                        $this->groups            = $this->groups['groups'];
142                } else if ( 'single-group' == $type ) {
143                        $this->single_group      = true;
144                        $this->total_group_count = 1;
145                        $this->group_count       = 1;
146                } else {
147                        if ( empty( $max ) || $max >= (int) $this->groups['total'] ) {
148                                $this->total_group_count = (int) $this->groups['total'];
149                        } else {
150                                $this->total_group_count = (int) $max;
151                        }
152
153                        $this->groups = $this->groups['groups'];
154
155                        if ( !empty( $max ) ) {
156                                if ( $max >= count( $this->groups ) ) {
157                                        $this->group_count = count( $this->groups );
158                                } else {
159                                        $this->group_count = (int) $max;
160                                }
161                        } else {
162                                $this->group_count = count( $this->groups );
163                        }
164                }
165
166                // Build pagination links
167                if ( (int) $this->total_group_count && (int) $this->pag_num ) {
168                        $this->pag_links = paginate_links( array(
169                                'base'      => add_query_arg( array( $page_arg => '%#%', 'num' => $this->pag_num, 's' => $search_terms, 'sortby' => $this->sort_by, 'order' => $this->order ) ),
170                                'format'    => '',
171                                'total'     => ceil( (int) $this->total_group_count / (int) $this->pag_num ),
172                                'current'   => $this->pag_page,
173                                'prev_text' => _x( '&larr;', 'Group pagination previous text', 'buddypress' ),
174                                'next_text' => _x( '&rarr;', 'Group pagination next text', 'buddypress' ),
175                                'mid_size'  => 1
176                        ) );
177                }
178        }
179
180        function has_groups() {
181                if ( $this->group_count )
182                        return true;
183
184                return false;
185        }
186
187        function next_group() {
188                $this->current_group++;
189                $this->group = $this->groups[$this->current_group];
190
191                return $this->group;
192        }
193
194        function rewind_groups() {
195                $this->current_group = -1;
196                if ( $this->group_count > 0 ) {
197                        $this->group = $this->groups[0];
198                }
199        }
200
201        function groups() {
202                if ( $this->current_group + 1 < $this->group_count ) {
203                        return true;
204                } elseif ( $this->current_group + 1 == $this->group_count ) {
205                        do_action('group_loop_end');
206                        // Do some cleaning up after the loop
207                        $this->rewind_groups();
208                }
209
210                $this->in_the_loop = false;
211                return false;
212        }
213
214        function the_group() {
215                $this->in_the_loop = true;
216                $this->group       = $this->next_group();
217
218                if ( $this->single_group )
219                        $this->group = groups_get_group( array( 'group_id' => $this->group->group_id ) );
220
221                if ( 0 == $this->current_group ) // loop has just started
222                        do_action('group_loop_start');
223        }
224}
225
226function bp_has_groups( $args = '' ) {
227        global $groups_template, $bp;
228
229        /***
230         * Set the defaults based on the current page. Any of these will be overridden
231         * if arguments are directly passed into the loop. Custom plugins should always
232         * pass their parameters directly to the loop.
233         */
234        $slug    = false;
235        $type    = 'active';
236        $user_id = 0;
237        $order   = '';
238
239        // User filtering
240        if ( bp_displayed_user_id() )
241                $user_id = bp_displayed_user_id();
242
243        // Type
244        if ( bp_is_current_action( 'my-groups' ) ) {
245                if ( 'most-popular' == $order ) {
246                        $type = 'popular';
247                } elseif ( 'alphabetically' == $order ) {
248                        $type = 'alphabetical';
249                }
250        } elseif ( bp_is_current_action( 'invites' ) ) {
251                $type = 'invites';
252        } elseif ( isset( $bp->groups->current_group->slug ) && $bp->groups->current_group->slug ) {
253                $type = 'single-group';
254                $slug = $bp->groups->current_group->slug;
255        }
256
257        $defaults = array(
258                'type'            => $type,
259                'page'            => 1,
260                'per_page'        => 20,
261                'max'             => false,
262                'show_hidden'     => false,
263
264                'page_arg'        => 'grpage', // See https://buddypress.trac.wordpress.org/ticket/3679
265
266                'user_id'         => $user_id, // Pass a user ID to limit to groups this user has joined
267                'slug'            => $slug,    // Pass a group slug to only return that group
268                'search_terms'    => '',       // Pass search terms to return only matching groups
269                'include'         => false,    // Pass comma separated list or array of group ID's to return only these groups
270                'exclude'         => false,    // Pass comma separated list or array of group ID's to exclude these groups
271
272                'populate_extras' => true      // Get extra meta - is_member, is_banned
273        );
274
275        $r = wp_parse_args( $args, $defaults );
276        extract( $r );
277
278        if ( empty( $search_terms ) ) {
279                if ( isset( $_REQUEST['group-filter-box'] ) && !empty( $_REQUEST['group-filter-box'] ) )
280                        $search_terms = $_REQUEST['group-filter-box'];
281                elseif ( isset( $_REQUEST['s'] ) && !empty( $_REQUEST['s'] ) )
282                        $search_terms = $_REQUEST['s'];
283                else
284                        $search_terms = false;
285        }
286
287        $groups_template = new BP_Groups_Template( (int) $user_id, $type, (int) $page, (int) $per_page, (int) $max, $slug, $search_terms, (bool)$populate_extras, $include, $exclude, $show_hidden, $page_arg );
288        return apply_filters( 'bp_has_groups', $groups_template->has_groups(), $groups_template );
289}
290
291function bp_groups() {
292        global $groups_template;
293        return $groups_template->groups();
294}
295
296function bp_the_group() {
297        global $groups_template;
298        return $groups_template->the_group();
299}
300
301function bp_group_is_visible( $group = false ) {
302        global $groups_template;
303
304        if ( bp_current_user_can( 'bp_moderate' ) )
305                return true;
306
307        if ( empty( $group ) )
308                $group =& $groups_template->group;
309
310        if ( 'public' == $group->status ) {
311                return true;
312        } else {
313                if ( groups_is_user_member( bp_loggedin_user_id(), $group->id ) ) {
314                        return true;
315                }
316        }
317
318        return false;
319}
320
321function bp_group_id() {
322        echo bp_get_group_id();
323}
324        function bp_get_group_id( $group = false ) {
325                global $groups_template;
326
327                if ( empty( $group ) )
328                        $group =& $groups_template->group;
329
330                return apply_filters( 'bp_get_group_id', $group->id );
331        }
332
333function bp_group_name() {
334        echo bp_get_group_name();
335}
336        function bp_get_group_name( $group = false ) {
337                global $groups_template;
338
339                if ( empty( $group ) )
340                        $group =& $groups_template->group;
341
342                return apply_filters( 'bp_get_group_name', $group->name );
343        }
344
345function bp_group_type() {
346        echo bp_get_group_type();
347}
348        function bp_get_group_type( $group = false ) {
349                global $groups_template;
350
351                if ( empty( $group ) )
352                        $group =& $groups_template->group;
353
354                if ( 'public' == $group->status ) {
355                        $type = __( "Public Group", "buddypress" );
356                } else if ( 'hidden' == $group->status ) {
357                        $type = __( "Hidden Group", "buddypress" );
358                } else if ( 'private' == $group->status ) {
359                        $type = __( "Private Group", "buddypress" );
360                } else {
361                        $type = ucwords( $group->status ) . ' ' . __( 'Group', 'buddypress' );
362                }
363
364                return apply_filters( 'bp_get_group_type', $type );
365        }
366
367function bp_group_status() {
368        echo bp_get_group_status();
369}
370        function bp_get_group_status( $group = false ) {
371                global $groups_template;
372
373                if ( empty( $group ) )
374                        $group =& $groups_template->group;
375
376                return apply_filters( 'bp_get_group_status', $group->status );
377        }
378
379function bp_group_avatar( $args = '' ) {
380        echo bp_get_group_avatar( $args );
381}
382        function bp_get_group_avatar( $args = '' ) {
383                global $bp, $groups_template;
384
385                $defaults = array(
386                        'type'   => 'full',
387                        'width'  => false,
388                        'height' => false,
389                        'class'  => 'avatar',
390                        'id'     => false,
391                        'alt'    => sprintf( __( 'Group logo of %s', 'buddypress' ), $groups_template->group->name )
392                );
393
394                $r = wp_parse_args( $args, $defaults );
395                extract( $r, EXTR_SKIP );
396
397                /* Fetch the avatar from the folder, if not provide backwards compat. */
398                if ( !$avatar = bp_core_fetch_avatar( array( 'item_id' => $groups_template->group->id, 'object' => 'group', 'type' => $type, 'avatar_dir' => 'group-avatars', 'alt' => $alt, 'css_id' => $id, 'class' => $class, 'width' => $width, 'height' => $height, 'title' => $groups_template->group->name, 'alt' => $alt ) ) )
399                        $avatar = '<img src="' . esc_attr( $groups_template->group->avatar_thumb ) . '" class="avatar" alt="' . esc_attr( $groups_template->group->name ) . '" />';
400
401                return apply_filters( 'bp_get_group_avatar', $avatar );
402        }
403
404function bp_group_avatar_thumb() {
405        echo bp_get_group_avatar_thumb();
406}
407        function bp_get_group_avatar_thumb( $group = false ) {
408                return bp_get_group_avatar( 'type=thumb' );
409        }
410
411function bp_group_avatar_mini() {
412        echo bp_get_group_avatar_mini();
413}
414        function bp_get_group_avatar_mini( $group = false ) {
415                return bp_get_group_avatar( 'type=thumb&width=30&height=30' );
416        }
417
418function bp_group_last_active() {
419        echo bp_get_group_last_active();
420}
421        function bp_get_group_last_active( $group = false ) {
422                global $groups_template;
423
424                if ( empty( $group ) )
425                        $group =& $groups_template->group;
426
427                $last_active = $group->last_activity;
428
429                if ( !$last_active )
430                        $last_active = groups_get_groupmeta( $group->id, 'last_activity' );
431
432                if ( empty( $last_active ) ) {
433                        return __( 'not yet active', 'buddypress' );
434                } else {
435                        return apply_filters( 'bp_get_group_last_active', bp_core_time_since( $last_active ) );
436                }
437        }
438
439function bp_group_permalink() {
440        echo bp_get_group_permalink();
441}
442        function bp_get_group_permalink( $group = false ) {
443                global $groups_template;
444
445                if ( empty( $group ) )
446                        $group =& $groups_template->group;
447
448                return apply_filters( 'bp_get_group_permalink', trailingslashit( bp_get_root_domain() . '/' . bp_get_groups_root_slug() . '/' . $group->slug . '/' ) );
449        }
450
451function bp_group_admin_permalink() {
452        echo bp_get_group_admin_permalink();
453}
454        function bp_get_group_admin_permalink( $group = false ) {
455                global $groups_template;
456
457                if ( empty( $group ) )
458                        $group =& $groups_template->group;
459
460                return apply_filters( 'bp_get_group_admin_permalink', trailingslashit( bp_get_group_permalink( $group ) . 'admin' ) );
461        }
462
463function bp_group_slug() {
464        echo bp_get_group_slug();
465}
466        function bp_get_group_slug( $group = false ) {
467                global $groups_template;
468
469                if ( empty( $group ) )
470                        $group =& $groups_template->group;
471
472                return apply_filters( 'bp_get_group_slug', $group->slug );
473        }
474
475function bp_group_description() {
476        echo bp_get_group_description();
477}
478        function bp_get_group_description( $group = false ) {
479                global $groups_template;
480
481                if ( empty( $group ) )
482                        $group =& $groups_template->group;
483
484                return apply_filters( 'bp_get_group_description', stripslashes($group->description) );
485        }
486
487function bp_group_description_editable() {
488        echo bp_get_group_description_editable();
489}
490        function bp_get_group_description_editable( $group = false ) {
491                global $groups_template;
492
493                if ( empty( $group ) )
494                        $group =& $groups_template->group;
495
496                return apply_filters( 'bp_get_group_description_editable', $group->description );
497        }
498
499function bp_group_description_excerpt() {
500        echo bp_get_group_description_excerpt();
501}
502        function bp_get_group_description_excerpt( $group = false ) {
503                global $groups_template;
504
505                if ( empty( $group ) )
506                        $group =& $groups_template->group;
507
508                return apply_filters( 'bp_get_group_description_excerpt', bp_create_excerpt( $group->description ) );
509        }
510
511
512function bp_group_public_status() {
513        echo bp_get_group_public_status();
514}
515        function bp_get_group_public_status( $group = false ) {
516                global $groups_template;
517
518                if ( empty( $group ) )
519                        $group =& $groups_template->group;
520
521                if ( $group->is_public ) {
522                        return __( 'Public', 'buddypress' );
523                } else {
524                        return __( 'Private', 'buddypress' );
525                }
526        }
527
528function bp_group_is_public() {
529        echo bp_get_group_is_public();
530}
531        function bp_get_group_is_public( $group = false ) {
532                global $groups_template;
533
534                if ( empty( $group ) )
535                        $group =& $groups_template->group;
536
537                return apply_filters( 'bp_get_group_is_public', $group->is_public );
538        }
539
540function bp_group_date_created() {
541        echo bp_get_group_date_created();
542}
543        function bp_get_group_date_created( $group = false ) {
544                global $groups_template;
545
546                if ( empty( $group ) )
547                        $group =& $groups_template->group;
548
549                return apply_filters( 'bp_get_group_date_created', bp_core_time_since( strtotime( $group->date_created ) ) );
550        }
551
552function bp_group_is_admin() {
553        return bp_is_item_admin();
554}
555
556function bp_group_is_mod() {
557        return bp_is_item_mod();
558}
559
560function bp_group_list_admins( $group = false ) {
561        global $groups_template;
562
563        if ( empty( $group ) )
564                $group =& $groups_template->group;
565
566        if ( !empty( $group->admins ) ) { ?>
567                <ul id="group-admins">
568                        <?php foreach( (array) $group->admins as $admin ) { ?>
569                                <li>
570                                        <a href="<?php echo bp_core_get_user_domain( $admin->user_id, $admin->user_nicename, $admin->user_login ) ?>"><?php echo bp_core_fetch_avatar( array( 'item_id' => $admin->user_id, 'email' => $admin->user_email, 'alt' => sprintf( __( 'Profile picture of %s', 'buddypress' ), bp_core_get_user_displayname( $admin->user_id ) ) ) ) ?></a>
571                                </li>
572                        <?php } ?>
573                </ul>
574        <?php } else { ?>
575                <span class="activity"><?php _e( 'No Admins', 'buddypress' ) ?></span>
576        <?php } ?>
577<?php
578}
579
580function bp_group_list_mods( $group = false ) {
581        global $groups_template;
582
583        if ( empty( $group ) )
584                $group =& $groups_template->group;
585
586        if ( !empty( $group->mods ) ) : ?>
587
588                <ul id="group-mods">
589
590                        <?php foreach( (array) $group->mods as $mod ) { ?>
591
592                                <li>
593                                        <a href="<?php echo bp_core_get_user_domain( $mod->user_id, $mod->user_nicename, $mod->user_login ) ?>"><?php echo bp_core_fetch_avatar( array( 'item_id' => $mod->user_id, 'email' => $mod->user_email, 'alt' => sprintf( __( 'Profile picture of %s', 'buddypress' ), bp_core_get_user_displayname( $mod->user_id ) ) ) ) ?></a>
594                                </li>
595
596                        <?php } ?>
597
598                </ul>
599
600<?php else : ?>
601
602                <span class="activity"><?php _e( 'No Mods', 'buddypress' ) ?></span>
603
604<?php endif;
605
606}
607
608/**
609 * Return a list of user_ids for a group's admins
610 *
611 * @package BuddyPress
612 * @since BuddyPress (1.5)
613 *
614 * @param obj $group (optional) The group being queried. Defaults to the current group in the loop
615 * @param str $format 'string' to get a comma-separated string, 'array' to get an array
616 * @return mixed $admin_ids A string or array of user_ids
617 */
618function bp_group_admin_ids( $group = false, $format = 'string' ) {
619        global $groups_template;
620
621        if ( empty( $group ) )
622                $group =& $groups_template->group;
623
624        $admin_ids = array();
625
626        if ( $group->admins ) {
627                foreach( $group->admins as $admin ) {
628                        $admin_ids[] = $admin->user_id;
629                }
630        }
631
632        if ( 'string' == $format )
633                $admin_ids = implode( ',', $admin_ids );
634
635        return apply_filters( 'bp_group_admin_ids', $admin_ids );
636}
637
638/**
639 * Return a list of user_ids for a group's moderators
640 *
641 * @package BuddyPress
642 * @since BuddyPress (1.5)
643 *
644 * @param obj $group (optional) The group being queried. Defaults to the current group in the loop
645 * @param str $format 'string' to get a comma-separated string, 'array' to get an array
646 * @return mixed $mod_ids A string or array of user_ids
647 */
648function bp_group_mod_ids( $group = false, $format = 'string' ) {
649        global $groups_template;
650
651        if ( empty( $group ) )
652                $group =& $groups_template->group;
653
654        $mod_ids = array();
655
656        if ( $group->mods ) {
657                foreach( $group->mods as $mod ) {
658                        $mod_ids[] = $mod->user_id;
659                }
660        }
661
662        if ( 'string' == $format )
663                $mod_ids = implode( ',', $mod_ids );
664
665        return apply_filters( 'bp_group_mod_ids', $mod_ids );
666}
667
668function bp_group_all_members_permalink() {
669        echo bp_get_group_all_members_permalink();
670}
671        function bp_get_group_all_members_permalink( $group = false ) {
672                global $groups_template;
673
674                if ( empty( $group ) )
675                        $group =& $groups_template->group;
676
677                return apply_filters( 'bp_get_group_all_members_permalink', bp_get_group_permalink( $group ) . 'members' );
678        }
679
680function bp_group_search_form() {
681        global $bp;
682
683        $action = bp_displayed_user_domain() . bp_get_groups_slug() . '/my-groups/search/';
684        $label = __('Filter Groups', 'buddypress');
685        $name = 'group-filter-box';
686
687?>
688        <form action="<?php echo $action ?>" id="group-search-form" method="post">
689                <label for="<?php echo $name ?>" id="<?php echo $name ?>-label"><?php echo $label ?></label>
690                <input type="search" name="<?php echo $name ?>" id="<?php echo $name ?>" value="<?php echo $value ?>"<?php echo $disabled ?> />
691
692                <?php wp_nonce_field( 'group-filter-box', '_wpnonce_group_filter' ) ?>
693        </form>
694<?php
695}
696
697function bp_group_show_no_groups_message() {
698        if ( !groups_total_groups_for_user( bp_displayed_user_id() ) )
699                return true;
700
701        return false;
702}
703
704function bp_group_is_activity_permalink() {
705
706        if ( !bp_is_single_item() || !bp_is_groups_component() || !bp_is_current_action( bp_get_activity_slug() ) )
707                return false;
708
709        return true;
710}
711
712function bp_groups_pagination_links() {
713        echo bp_get_groups_pagination_links();
714}
715        function bp_get_groups_pagination_links() {
716                global $groups_template;
717
718                return apply_filters( 'bp_get_groups_pagination_links', $groups_template->pag_links );
719        }
720
721function bp_groups_pagination_count() {
722        echo bp_get_groups_pagination_count();
723}
724        function bp_get_groups_pagination_count() {
725                global $groups_template;
726
727                $start_num = intval( ( $groups_template->pag_page - 1 ) * $groups_template->pag_num ) + 1;
728                $from_num  = bp_core_number_format( $start_num );
729                $to_num    = bp_core_number_format( ( $start_num + ( $groups_template->pag_num - 1 ) > $groups_template->total_group_count ) ? $groups_template->total_group_count : $start_num + ( $groups_template->pag_num - 1 ) );
730                $total     = bp_core_number_format( $groups_template->total_group_count );
731
732                return apply_filters( 'bp_get_groups_pagination_count', sprintf( __( 'Viewing group %1$s to %2$s (of %3$s groups)', 'buddypress' ), $from_num, $to_num, $total ) );
733        }
734
735function bp_groups_auto_join() {
736        global $bp;
737
738        return apply_filters( 'bp_groups_auto_join', (bool)$bp->groups->auto_join );
739}
740
741function bp_group_total_members( $group = false ) {
742        echo bp_get_group_total_members( $group );
743}
744        function bp_get_group_total_members( $group = false ) {
745                global $groups_template;
746
747                if ( empty( $group ) )
748                        $group =& $groups_template->group;
749
750                return apply_filters( 'bp_get_group_total_members', $group->total_member_count );
751        }
752
753function bp_group_member_count() {
754        echo bp_get_group_member_count();
755}
756        function bp_get_group_member_count() {
757                global $groups_template;
758
759                if ( 1 == (int) $groups_template->group->total_member_count )
760                        return apply_filters( 'bp_get_group_member_count', sprintf( __( '%s member', 'buddypress' ), bp_core_number_format( $groups_template->group->total_member_count ) ) );
761                else
762                        return apply_filters( 'bp_get_group_member_count', sprintf( __( '%s members', 'buddypress' ), bp_core_number_format( $groups_template->group->total_member_count ) ) );
763        }
764
765function bp_group_forum_permalink() {
766        echo bp_get_group_forum_permalink();
767}
768        function bp_get_group_forum_permalink( $group = false ) {
769                global $groups_template;
770
771                if ( empty( $group ) )
772                        $group =& $groups_template->group;
773
774                return apply_filters( 'bp_get_group_forum_permalink', bp_get_group_permalink( $group ) . 'forum' );
775        }
776
777function bp_group_forum_topic_count( $args = '' ) {
778        echo bp_get_group_forum_topic_count( $args );
779}
780        function bp_get_group_forum_topic_count( $args = '' ) {
781                global $groups_template;
782
783                $defaults = array(
784                        'showtext' => false
785                );
786
787                $r = wp_parse_args( $args, $defaults );
788                extract( $r, EXTR_SKIP );
789
790                if ( !$forum_id = groups_get_groupmeta( $groups_template->group->id, 'forum_id' ) )
791                        return false;
792
793                if ( !bp_is_active( 'forums' ) )
794                        return false;
795
796                if ( !$groups_template->group->forum_counts )
797                        $groups_template->group->forum_counts = bp_forums_get_forum_topicpost_count( (int) $forum_id );
798
799                if ( (bool) $showtext ) {
800                        if ( 1 == (int) $groups_template->group->forum_counts[0]->topics )
801                                $total_topics = sprintf( __( '%d topic', 'buddypress' ), (int) $groups_template->group->forum_counts[0]->topics );
802                        else
803                                $total_topics = sprintf( __( '%d topics', 'buddypress' ), (int) $groups_template->group->forum_counts[0]->topics );
804                } else {
805                        $total_topics = (int) $groups_template->group->forum_counts[0]->topics;
806                }
807
808                return apply_filters( 'bp_get_group_forum_topic_count', $total_topics, (bool)$showtext );
809        }
810
811function bp_group_forum_post_count( $args = '' ) {
812        echo bp_get_group_forum_post_count( $args );
813}
814        function bp_get_group_forum_post_count( $args = '' ) {
815                global $groups_template;
816
817                $defaults = array(
818                        'showtext' => false
819                );
820
821                $r = wp_parse_args( $args, $defaults );
822                extract( $r, EXTR_SKIP );
823
824                if ( !$forum_id = groups_get_groupmeta( $groups_template->group->id, 'forum_id' ) )
825                        return false;
826
827                if ( !bp_is_active( 'forums' ) )
828                        return false;
829
830                if ( !$groups_template->group->forum_counts )
831                        $groups_template->group->forum_counts = bp_forums_get_forum_topicpost_count( (int) $forum_id );
832
833                if ( (bool) $showtext ) {
834                        if ( 1 == (int) $groups_template->group->forum_counts[0]->posts )
835                                $total_posts = sprintf( __( '%d post', 'buddypress' ), (int) $groups_template->group->forum_counts[0]->posts );
836                        else
837                                $total_posts = sprintf( __( '%d posts', 'buddypress' ), (int) $groups_template->group->forum_counts[0]->posts );
838                } else {
839                        $total_posts = (int) $groups_template->group->forum_counts[0]->posts;
840                }
841
842                return apply_filters( 'bp_get_group_forum_post_count', $total_posts, (bool)$showtext );
843        }
844
845function bp_group_is_forum_enabled( $group = false ) {
846        global $groups_template;
847
848        if ( empty( $group ) )
849                $group =& $groups_template->group;
850
851        if ( bp_is_active( 'forums' ) ) {
852                if ( bp_forums_is_installed_correctly() ) {
853                        if ( $group->enable_forum )
854                                return true;
855
856                        return false;
857                } else {
858                        return false;
859                }
860        }
861
862        return false;
863}
864
865function bp_group_show_forum_setting( $group = false ) {
866        global $groups_template;
867
868        if ( empty( $group ) )
869                $group =& $groups_template->group;
870
871        if ( $group->enable_forum )
872                echo ' checked="checked"';
873}
874
875function bp_group_show_status_setting( $setting, $group = false ) {
876        global $groups_template;
877
878        if ( empty( $group ) )
879                $group =& $groups_template->group;
880
881        if ( $setting == $group->status )
882                echo ' checked="checked"';
883}
884
885/**
886 * Get the 'checked' value, if needed, for a given invite_status on the group create/admin screens
887 *
888 * @package BuddyPress
889 * @subpackage Groups Template
890 * @since BuddyPress (1.5)
891 *
892 * @param str $setting The setting you want to check against ('members', 'mods', or 'admins')
893 * @param obj $group (optional) The group whose status you want to check
894 */
895function bp_group_show_invite_status_setting( $setting, $group = false ) {
896        $group_id = isset( $group->id ) ? $group->id : false;
897
898        $invite_status = bp_group_get_invite_status( $group_id );
899
900        if ( $setting == $invite_status )
901                echo ' checked="checked"';
902}
903
904/**
905 * Get the invite status of a group
906 *
907 * 'invite_status' became part of BuddyPress in BP 1.5. In order to provide backward compatibility,
908 * groups without a status set will default to 'members', ie all members in a group can send
909 * invitations. Filter 'bp_group_invite_status_fallback' to change this fallback behavior.
910 *
911 * This function can be used either in or out of the loop.
912 *
913 * @package BuddyPress
914 * @subpackage Groups Template
915 * @since BuddyPress (1.5)
916 *
917 * @param int $group_id (optional) The id of the group whose status you want to check
918 * @return mixed Returns false when no group can be found. Otherwise returns the group invite
919 *    status, from among 'members', 'mods', and 'admins'
920 */
921function bp_group_get_invite_status( $group_id = false ) {
922        global $bp, $groups_template;
923
924        if ( !$group_id ) {
925                if ( isset( $bp->groups->current_group->id ) ) {
926                        // Default to the current group first
927                        $group_id = $bp->groups->current_group->id;
928                } else if ( isset( $groups_template->group->id ) ) {
929                        // Then see if we're in the loop
930                        $group_id = $groups_template->group->id;
931                } else {
932                        return false;
933                }
934        }
935
936        $invite_status = groups_get_groupmeta( $group_id, 'invite_status' );
937
938        // Backward compatibility. When 'invite_status' is not set, fall back to a default value
939        if ( !$invite_status ) {
940                $invite_status = apply_filters( 'bp_group_invite_status_fallback', 'members' );
941        }
942
943        return apply_filters( 'bp_group_get_invite_status', $invite_status, $group_id );
944}
945
946/**
947 * Can the logged-in user send invitations in the specified group?
948 *
949 * @package BuddyPress
950 * @subpackage Groups Template
951 * @since BuddyPress (1.5)
952 *
953 * @param int $group_id (optional) The id of the group whose status you want to check
954 * @return bool $can_send_invites
955 */
956function bp_groups_user_can_send_invites( $group_id = false ) {
957        global $bp;
958
959        $can_send_invites = false;
960        $invite_status    = false;
961
962        if ( is_user_logged_in() ) {
963                if ( bp_current_user_can( 'bp_moderate' ) ) {
964                        // Super admins can always send invitations
965                        $can_send_invites = true;
966
967                } else {
968                        // If no $group_id is provided, default to the current group id
969                        if ( !$group_id )
970                                $group_id = isset( $bp->groups->current_group->id ) ? $bp->groups->current_group->id : 0;
971
972                        // If no group has been found, bail
973                        if ( !$group_id )
974                                return false;
975
976                        $invite_status = bp_group_get_invite_status( $group_id );
977                        if ( !$invite_status )
978                                return false;
979
980                        switch ( $invite_status ) {
981                                case 'admins' :
982                                        if ( groups_is_user_admin( bp_loggedin_user_id(), $group_id ) )
983                                                $can_send_invites = true;
984                                        break;
985
986                                case 'mods' :
987                                        if ( groups_is_user_mod( bp_loggedin_user_id(), $group_id ) || groups_is_user_admin( bp_loggedin_user_id(), $group_id ) )
988                                                $can_send_invites = true;
989                                        break;
990
991                                case 'members' :
992                                        if ( groups_is_user_member( bp_loggedin_user_id(), $group_id ) )
993                                                $can_send_invites = true;
994                                        break;
995                        }
996                }
997        }
998
999        return apply_filters( 'bp_groups_user_can_send_invites', $can_send_invites, $group_id, $invite_status );
1000}
1001
1002/**
1003 * Since BuddyPress 1.0, this generated the group settings admin/member screen.
1004 * As of BuddyPress 1.5 (r4489), and because this function outputs HTML, it was moved into /bp-default/groups/single/admin.php.
1005 *
1006 * @deprecated 1.5
1007 * @deprecated No longer used.
1008 * @since 1.0
1009 * @todo Remove in 1.4
1010 */
1011function bp_group_admin_memberlist( $admin_list = false, $group = false ) {
1012        global $groups_template;
1013
1014        _deprecated_function( __FUNCTION__, '1.5', 'No longer used. See /bp-default/groups/single/admin.php' );
1015
1016        if ( empty( $group ) )
1017                $group =& $groups_template->group;
1018
1019
1020        if ( $admins = groups_get_group_admins( $group->id ) ) : ?>
1021
1022                <ul id="admins-list" class="item-list<?php if ( !empty( $admin_list ) ) : ?> single-line<?php endif; ?>">
1023
1024                <?php foreach ( (array) $admins as $admin ) { ?>
1025
1026                        <?php if ( !empty( $admin_list ) ) : ?>
1027
1028                        <li>
1029
1030                                <?php echo bp_core_fetch_avatar( array( 'item_id' => $admin->user_id, 'type' => 'thumb', 'width' => 30, 'height' => 30, 'alt' => sprintf( __( 'Profile picture of %s', 'buddypress' ), bp_core_get_user_displayname( $admin->user_id ) ) ) ) ?>
1031
1032                                <h5>
1033
1034                                        <?php echo bp_core_get_userlink( $admin->user_id ); ?>
1035
1036                                        <span class="small">
1037                                                <a class="button confirm admin-demote-to-member" href="<?php bp_group_member_demote_link($admin->user_id) ?>"><?php _e( 'Demote to Member', 'buddypress' ) ?></a>
1038                                        </span>
1039                                </h5>
1040                        </li>
1041
1042                        <?php else : ?>
1043
1044                        <li>
1045
1046                                <?php echo bp_core_fetch_avatar( array( 'item_id' => $admin->user_id, 'type' => 'thumb', 'alt' => sprintf( __( 'Profile picture of %s', 'buddypress' ), bp_core_get_user_displayname( $admin->user_id ) ) ) ) ?>
1047
1048                                <h5><?php echo bp_core_get_userlink( $admin->user_id ) ?></h5>
1049                                <span class="activity">
1050                                        <?php echo bp_core_get_last_activity( strtotime( $admin->date_modified ), __( 'joined %s', 'buddypress') ); ?>
1051                                </span>
1052
1053                                <?php if ( bp_is_active( 'friends' ) ) : ?>
1054
1055                                        <div class="action">
1056
1057                                                <?php bp_add_friend_button( $admin->user_id ); ?>
1058
1059                                        </div>
1060
1061                                <?php endif; ?>
1062
1063                        </li>
1064
1065                        <?php endif;
1066                } ?>
1067
1068                </ul>
1069
1070        <?php else : ?>
1071
1072                <div id="message" class="info">
1073                        <p><?php _e( 'This group has no administrators', 'buddypress' ); ?></p>
1074                </div>
1075
1076        <?php endif;
1077}
1078
1079function bp_group_mod_memberlist( $admin_list = false, $group = false ) {
1080        global $groups_template;
1081
1082        if ( empty( $group ) )
1083                $group =& $groups_template->group;
1084
1085        if ( $group_mods = groups_get_group_mods( $group->id ) ) { ?>
1086
1087                <ul id="mods-list" class="item-list<?php if ( $admin_list ) { ?> single-line<?php } ?>">
1088
1089                <?php foreach ( (array) $group_mods as $mod ) { ?>
1090
1091                        <?php if ( !empty( $admin_list ) ) { ?>
1092
1093                        <li>
1094
1095                                <?php echo bp_core_fetch_avatar( array( 'item_id' => $mod->user_id, 'type' => 'thumb', 'width' => 30, 'height' => 30, 'alt' => sprintf( __( 'Profile picture of %s', 'buddypress' ), bp_core_get_user_displayname( $mod->user_id ) ) ) ) ?>
1096
1097                                <h5>
1098                                        <?php echo bp_core_get_userlink( $mod->user_id ); ?>
1099
1100                                        <span class="small">
1101                                                <a href="<?php bp_group_member_promote_admin_link( array( 'user_id' => $mod->user_id ) ) ?>" class="button confirm mod-promote-to-admin" title="<?php _e( 'Promote to Admin', 'buddypress' ); ?>"><?php _e( 'Promote to Admin', 'buddypress' ); ?></a>
1102                                                <a class="button confirm mod-demote-to-member" href="<?php bp_group_member_demote_link($mod->user_id) ?>"><?php _e( 'Demote to Member', 'buddypress' ) ?></a>
1103                                        </span>
1104                                </h5>
1105                        </li>
1106
1107                        <?php } else { ?>
1108
1109                        <li>
1110
1111                                <?php echo bp_core_fetch_avatar( array( 'item_id' => $mod->user_id, 'type' => 'thumb', 'alt' => sprintf( __( 'Profile picture of %s', 'buddypress' ), bp_core_get_user_displayname( $mod->user_id ) ) ) ) ?>
1112
1113                                <h5><?php echo bp_core_get_userlink( $mod->user_id ) ?></h5>
1114
1115                                <span class="activity"><?php echo bp_core_get_last_activity( strtotime( $mod->date_modified ), __( 'joined %s', 'buddypress') ); ?></span>
1116
1117                                <?php if ( bp_is_active( 'friends' ) ) : ?>
1118
1119                                        <div class="action">
1120                                                <?php bp_add_friend_button( $mod->user_id ) ?>
1121                                        </div>
1122
1123                                <?php endif; ?>
1124
1125                        </li>
1126
1127                        <?php } ?>
1128                <?php } ?>
1129
1130                </ul>
1131
1132        <?php } else { ?>
1133
1134                <div id="message" class="info">
1135                        <p><?php _e( 'This group has no moderators', 'buddypress' ); ?></p>
1136                </div>
1137
1138        <?php }
1139}
1140
1141function bp_group_has_moderators( $group = false ) {
1142        global $groups_template;
1143
1144        if ( empty( $group ) )
1145                $group =& $groups_template->group;
1146
1147        return apply_filters( 'bp_group_has_moderators', groups_get_group_mods( $group->id ) );
1148}
1149
1150function bp_group_member_promote_mod_link( $args = '' ) {
1151        echo bp_get_group_member_promote_mod_link( $args );
1152}
1153        function bp_get_group_member_promote_mod_link( $args = '' ) {
1154                global $members_template, $groups_template;
1155
1156                $defaults = array(
1157                        'user_id' => $members_template->member->user_id,
1158                        'group'   => &$groups_template->group
1159                );
1160
1161                $r = wp_parse_args( $args, $defaults );
1162                extract( $r, EXTR_SKIP );
1163
1164                return apply_filters( 'bp_get_group_member_promote_mod_link', wp_nonce_url( bp_get_group_permalink( $group ) . 'admin/manage-members/promote/mod/' . $user_id, 'groups_promote_member' ) );
1165        }
1166
1167function bp_group_member_promote_admin_link( $args = '' ) {
1168        echo bp_get_group_member_promote_admin_link( $args );
1169}
1170        function bp_get_group_member_promote_admin_link( $args = '' ) {
1171                global $members_template, $groups_template;
1172
1173                $defaults = array(
1174                        'user_id' => !empty( $members_template->member->user_id ) ? $members_template->member->user_id : false,
1175                        'group'   => &$groups_template->group
1176                );
1177
1178                $r = wp_parse_args( $args, $defaults );
1179                extract( $r, EXTR_SKIP );
1180
1181                return apply_filters( 'bp_get_group_member_promote_admin_link', wp_nonce_url( bp_get_group_permalink( $group ) . 'admin/manage-members/promote/admin/' . $user_id, 'groups_promote_member' ) );
1182        }
1183
1184function bp_group_member_demote_link( $user_id = 0 ) {
1185        global $members_template;
1186
1187        if ( !$user_id )
1188                $user_id = $members_template->member->user_id;
1189
1190        echo bp_get_group_member_demote_link( $user_id );
1191}
1192        function bp_get_group_member_demote_link( $user_id = 0, $group = false ) {
1193                global $members_template, $groups_template;
1194
1195                if ( empty( $group ) )
1196                        $group =& $groups_template->group;
1197
1198                if ( !$user_id )
1199                        $user_id = $members_template->member->user_id;
1200
1201                return apply_filters( 'bp_get_group_member_demote_link', wp_nonce_url( bp_get_group_permalink( $group ) . 'admin/manage-members/demote/' . $user_id, 'groups_demote_member' ) );
1202        }
1203
1204function bp_group_member_ban_link( $user_id = 0 ) {
1205        global $members_template;
1206
1207        if ( !$user_id )
1208                $user_id = $members_template->member->user_id;
1209
1210        echo bp_get_group_member_ban_link( $user_id );
1211}
1212        function bp_get_group_member_ban_link( $user_id = 0, $group = false ) {
1213                global $groups_template;
1214
1215                if ( empty( $group ) )
1216                        $group =& $groups_template->group;
1217
1218                return apply_filters( 'bp_get_group_member_ban_link', wp_nonce_url( bp_get_group_permalink( $group ) . 'admin/manage-members/ban/' . $user_id, 'groups_ban_member' ) );
1219        }
1220
1221function bp_group_member_unban_link( $user_id = 0 ) {
1222        global $members_template;
1223
1224        if ( !$user_id )
1225                $user_id = $members_template->member->user_id;
1226
1227        echo bp_get_group_member_unban_link( $user_id );
1228}
1229        function bp_get_group_member_unban_link( $user_id = 0, $group = false ) {
1230                global $members_template, $groups_template;
1231
1232                if ( !$user_id )
1233                        $user_id = $members_template->member->user_id;
1234
1235                if ( empty( $group ) )
1236                        $group =& $groups_template->group;
1237
1238                return apply_filters( 'bp_get_group_member_unban_link', wp_nonce_url( bp_get_group_permalink( $group ) . 'admin/manage-members/unban/' . $user_id, 'groups_unban_member' ) );
1239        }
1240
1241
1242function bp_group_member_remove_link( $user_id = 0 ) {
1243        global $members_template;
1244
1245        if ( !$user_id )
1246                $user_id = $members_template->member->user_id;
1247
1248        echo bp_get_group_member_remove_link( $user_id );
1249}
1250        function bp_get_group_member_remove_link( $user_id = 0, $group = false ) {
1251                global $groups_template;
1252
1253                if ( empty( $group ) )
1254                        $group =& $groups_template->group;
1255
1256                return apply_filters( 'bp_get_group_member_remove_link', wp_nonce_url( bp_get_group_permalink( $group ) . 'admin/manage-members/remove/' . $user_id, 'groups_remove_member' ) );
1257        }
1258
1259function bp_group_admin_tabs( $group = false ) {
1260        global $bp, $groups_template;
1261
1262        if ( empty( $group ) )
1263                $group = ( $groups_template->group ) ? $groups_template->group : $bp->groups->current_group;
1264
1265        $current_tab = bp_get_group_current_admin_tab();
1266
1267        if ( bp_is_item_admin() || bp_is_item_mod() ) : ?>
1268
1269                <li<?php if ( 'edit-details' == $current_tab || empty( $current_tab ) ) : ?> class="current"<?php endif; ?>><a href="<?php echo trailingslashit( bp_get_group_permalink( $group ) . 'admin/edit-details' ) ?>"><?php _e( 'Details', 'buddypress' ); ?></a></li>
1270
1271        <?php endif; ?>
1272
1273        <?php if ( ! bp_is_item_admin() )
1274                        return false; ?>
1275
1276        <li<?php if ( 'group-settings' == $current_tab ) : ?> class="current"<?php endif; ?>><a href="<?php echo trailingslashit( bp_get_group_permalink( $group ) . 'admin/group-settings' ) ?>"><?php _e( 'Settings', 'buddypress' ); ?></a></li>
1277
1278        <?php if ( !(int)bp_get_option( 'bp-disable-avatar-uploads' ) ) : ?>
1279
1280                <li<?php if ( 'group-avatar'   == $current_tab ) : ?> class="current"<?php endif; ?>><a href="<?php echo trailingslashit( bp_get_group_permalink( $group ) . 'admin/group-avatar' ) ?>"><?php _e( 'Avatar', 'buddypress' ); ?></a></li>
1281
1282        <?php endif; ?>
1283
1284        <li<?php if ( 'manage-members' == $current_tab ) : ?> class="current"<?php endif; ?>><a href="<?php echo trailingslashit( bp_get_group_permalink( $group ) . 'admin/manage-members' ) ?>"><?php _e( 'Members', 'buddypress' ); ?></a></li>
1285
1286        <?php if ( $groups_template->group->status == 'private' ) : ?>
1287
1288                <li<?php if ( 'membership-requests' == $current_tab ) : ?> class="current"<?php endif; ?>><a href="<?php echo trailingslashit( bp_get_group_permalink( $group ) . 'admin/membership-requests' ) ?>"><?php _e( 'Requests', 'buddypress' ); ?></a></li>
1289
1290        <?php endif; ?>
1291
1292        <?php do_action( 'groups_admin_tabs', $current_tab, $group->slug ) ?>
1293
1294        <li<?php if ( 'delete-group' == $current_tab ) : ?> class="current"<?php endif; ?>><a href="<?php echo trailingslashit( bp_get_group_permalink( $group ) . 'admin/delete-group' ) ?>"><?php _e( 'Delete', 'buddypress' ); ?></a></li>
1295
1296<?php
1297}
1298
1299function bp_group_total_for_member() {
1300        echo bp_get_group_total_for_member();
1301}
1302        function bp_get_group_total_for_member() {
1303                return apply_filters( 'bp_get_group_total_for_member', BP_Groups_Member::total_group_count() );
1304        }
1305
1306function bp_group_form_action( $page ) {
1307        echo bp_get_group_form_action( $page );
1308}
1309        function bp_get_group_form_action( $page, $group = false ) {
1310                global $groups_template;
1311
1312                if ( empty( $group ) )
1313                        $group =& $groups_template->group;
1314
1315                return apply_filters( 'bp_group_form_action', bp_get_group_permalink( $group ) . $page );
1316        }
1317
1318function bp_group_admin_form_action( $page = false ) {
1319        echo bp_get_group_admin_form_action( $page );
1320}
1321        function bp_get_group_admin_form_action( $page = false, $group = false ) {
1322                global $groups_template;
1323
1324                if ( empty( $group ) )
1325                        $group =& $groups_template->group;
1326
1327                if ( empty( $page ) )
1328                        $page = bp_action_variable( 0 );
1329
1330                return apply_filters( 'bp_group_admin_form_action', bp_get_group_permalink( $group ) . 'admin/' . $page );
1331        }
1332
1333function bp_group_has_requested_membership( $group = false ) {
1334        global $groups_template;
1335
1336        if ( empty( $group ) )
1337                $group =& $groups_template->group;
1338
1339        if ( groups_check_for_membership_request( bp_loggedin_user_id(), $group->id ) )
1340                return true;
1341
1342        return false;
1343}
1344
1345/**
1346 * bp_group_is_member()
1347 *
1348 * Checks if current user is member of a group.
1349 *
1350 * @uses bp_current_user_can() Check if current user is super admin
1351 * @uses apply_filters Creates bp_group_is_member filter and passes $is_member
1352 * @usedby groups/activity.php, groups/single/forum/edit.php, groups/single/forum/topic.php to determine template part visibility
1353 * @global object $groups_template Current Group (usually in template loop)
1354 * @param object $group Group to check is_member
1355 * @return bool If user is member of group or not
1356 */
1357function bp_group_is_member( $group = false ) {
1358        global $groups_template;
1359
1360        // Site admins always have access
1361        if ( bp_current_user_can( 'bp_moderate' ) )
1362                return true;
1363
1364        if ( empty( $group ) )
1365                $group =& $groups_template->group;
1366
1367        return apply_filters( 'bp_group_is_member', !empty( $group->is_member ) );
1368}
1369
1370/**
1371 * Checks if a user is banned from a group.
1372 *
1373 * If this function is invoked inside the groups template loop (e.g. the group directory), then
1374 * check $groups_template->group->is_banned instead of making another SQL query.
1375 * However, if used in a single group's pages, we must use groups_is_user_banned().
1376 *
1377 * @global BP_Groups_Template $groups_template Group template loop object
1378 * @param object $group Group to check if user is banned from the group
1379 * @param int $user_id
1380 * @return bool If user is banned from the group or not
1381 * @since BuddyPress (1.5)
1382 */
1383function bp_group_is_user_banned( $group = false, $user_id = 0 ) {
1384        global $groups_template;
1385
1386        // Site admins always have access
1387        if ( bp_current_user_can( 'bp_moderate' ) )
1388                return false;
1389
1390        if ( empty( $group ) ) {
1391                $group =& $groups_template->group;
1392
1393                if ( !$user_id && isset( $group->is_banned ) )
1394                        return apply_filters( 'bp_group_is_user_banned', $group->is_banned );
1395        }
1396
1397        if ( !$user_id )
1398                $user_id = bp_loggedin_user_id();
1399
1400        return apply_filters( 'bp_group_is_user_banned', groups_is_user_banned( $user_id, $group->id ) );
1401}
1402
1403function bp_group_accept_invite_link() {
1404        echo bp_get_group_accept_invite_link();
1405}
1406        function bp_get_group_accept_invite_link( $group = false ) {
1407                global $groups_template, $bp;
1408
1409                if ( empty( $group ) )
1410                        $group =& $groups_template->group;
1411
1412                return apply_filters( 'bp_get_group_accept_invite_link', wp_nonce_url( trailingslashit( bp_loggedin_user_domain() . bp_get_groups_slug() . '/invites/accept/' . $group->id ), 'groups_accept_invite' ) );
1413        }
1414
1415function bp_group_reject_invite_link() {
1416        echo bp_get_group_reject_invite_link();
1417}
1418        function bp_get_group_reject_invite_link( $group = false ) {
1419                global $groups_template, $bp;
1420
1421                if ( empty( $group ) )
1422                        $group =& $groups_template->group;
1423
1424                return apply_filters( 'bp_get_group_reject_invite_link', wp_nonce_url( trailingslashit( bp_loggedin_user_domain() . bp_get_groups_slug() . '/invites/reject/' . $group->id ), 'groups_reject_invite' ) );
1425        }
1426
1427function bp_group_leave_confirm_link() {
1428        echo bp_get_group_leave_confirm_link();
1429}
1430        function bp_get_group_leave_confirm_link( $group = false ) {
1431                global $groups_template;
1432
1433                if ( empty( $group ) )
1434                        $group =& $groups_template->group;
1435
1436                return apply_filters( 'bp_group_leave_confirm_link', wp_nonce_url( bp_get_group_permalink( $group ) . 'leave-group/yes', 'groups_leave_group' ) );
1437        }
1438
1439function bp_group_leave_reject_link() {
1440        echo bp_get_group_leave_reject_link();
1441}
1442        function bp_get_group_leave_reject_link( $group = false ) {
1443                global $groups_template;
1444
1445                if ( empty( $group ) )
1446                        $group =& $groups_template->group;
1447
1448                return apply_filters( 'bp_get_group_leave_reject_link', bp_get_group_permalink( $group ) );
1449        }
1450
1451function bp_group_send_invite_form_action() {
1452        echo bp_get_group_send_invite_form_action();
1453}
1454        function bp_get_group_send_invite_form_action( $group = false ) {
1455                global $groups_template;
1456
1457                if ( empty( $group ) )
1458                        $group =& $groups_template->group;
1459
1460                return apply_filters( 'bp_group_send_invite_form_action', bp_get_group_permalink( $group ) . 'send-invites/send' );
1461        }
1462
1463function bp_has_friends_to_invite( $group = false ) {
1464        global $groups_template;
1465
1466        if ( !bp_is_active( 'friends' ) )
1467                return false;
1468
1469        if ( empty( $group ) )
1470                $group =& $groups_template->group;
1471
1472        if ( !friends_check_user_has_friends( bp_loggedin_user_id() ) || !friends_count_invitable_friends( bp_loggedin_user_id(), $group->id ) )
1473                return false;
1474
1475        return true;
1476}
1477
1478function bp_group_new_topic_button( $group = false ) {
1479        echo bp_get_group_new_topic_button( $group );
1480}
1481        function bp_get_group_new_topic_button( $group = false ) {
1482                global $groups_template;
1483
1484                if ( empty( $group ) )
1485                        $group =& $groups_template->group;
1486
1487                if ( !is_user_logged_in() || bp_group_is_user_banned() || !bp_is_group_forum() || bp_is_group_forum_topic() )
1488                        return false;
1489
1490                $button = bp_button( array (
1491                        'id'                => 'new_topic',
1492                        'component'         => 'groups',
1493                        'must_be_logged_in' => true,
1494                        'block_self'        => true,
1495                        'wrapper_class'     => 'group-button',
1496                        'link_href'         => '#post-new',
1497                        'link_class'        => 'group-button show-hide-new',
1498                        'link_id'           => 'new-topic-button',
1499                        'link_text'         => __( 'New Topic', 'buddypress' ),
1500                        'link_title'        => __( 'New Topic', 'buddypress' ),
1501                ) );
1502
1503                // Filter and return the HTML button
1504                return bp_get_button( apply_filters( 'bp_get_group_new_topic_button', $button ) );
1505        }
1506
1507function bp_group_join_button( $group = false ) {
1508        echo bp_get_group_join_button( $group );
1509}
1510        function bp_get_group_join_button( $group = false ) {
1511                global $groups_template;
1512
1513                if ( empty( $group ) )
1514                        $group =& $groups_template->group;
1515
1516                if ( !is_user_logged_in() || bp_group_is_user_banned( $group ) )
1517                        return false;
1518
1519                // Group creation was not completed or status is unknown
1520                if ( !$group->status )
1521                        return false;
1522
1523                // Already a member
1524                if ( $group->is_member ) {
1525
1526                        // Stop sole admins from abandoning their group
1527                        $group_admins = groups_get_group_admins( $group->id );
1528                        if ( 1 == count( $group_admins ) && $group_admins[0]->user_id == bp_loggedin_user_id() )
1529                                return false;
1530
1531                        $button = array(
1532                                'id'                => 'leave_group',
1533                                'component'         => 'groups',
1534                                'must_be_logged_in' => true,
1535                                'block_self'        => false,
1536                                'wrapper_class'     => 'group-button ' . $group->status,
1537                                'wrapper_id'        => 'groupbutton-' . $group->id,
1538                                'link_href'         => wp_nonce_url( bp_get_group_permalink( $group ) . 'leave-group', 'groups_leave_group' ),
1539                                'link_text'         => __( 'Leave Group', 'buddypress' ),
1540                                'link_title'        => __( 'Leave Group', 'buddypress' ),
1541                                'link_class'        => 'group-button leave-group',
1542                        );
1543
1544                // Not a member
1545                } else {
1546
1547                        // Show different buttons based on group status
1548                        switch ( $group->status ) {
1549                                case 'hidden' :
1550                                        return false;
1551                                        break;
1552
1553                                case 'public':
1554                                        $button = array(
1555                                                'id'                => 'join_group',
1556                                                'component'         => 'groups',
1557                                                'must_be_logged_in' => true,
1558                                                'block_self'        => false,
1559                                                'wrapper_class'     => 'group-button ' . $group->status,
1560                                                'wrapper_id'        => 'groupbutton-' . $group->id,
1561                                                'link_href'         => wp_nonce_url( bp_get_group_permalink( $group ) . 'join', 'groups_join_group' ),
1562                                                'link_text'         => __( 'Join Group', 'buddypress' ),
1563                                                'link_title'        => __( 'Join Group', 'buddypress' ),
1564                                                'link_class'        => 'group-button join-group',
1565                                        );
1566                                        break;
1567
1568                                case 'private' :
1569
1570                                        // Member has not requested membership yet
1571                                        if ( !bp_group_has_requested_membership( $group ) ) {
1572                                                $button = array(
1573                                                        'id'                => 'request_membership',
1574                                                        'component'         => 'groups',
1575                                                        'must_be_logged_in' => true,
1576                                                        'block_self'        => false,
1577                                                        'wrapper_class'     => 'group-button ' . $group->status,
1578                                                        'wrapper_id'        => 'groupbutton-' . $group->id,
1579                                                        'link_href'         => wp_nonce_url( bp_get_group_permalink( $group ) . 'request-membership', 'groups_request_membership' ),
1580                                                        'link_text'         => __( 'Request Membership', 'buddypress' ),
1581                                                        'link_title'        => __( 'Request Membership', 'buddypress' ),
1582                                                        'link_class'        => 'group-button request-membership',
1583                                                );
1584
1585                                        // Member has requested membership already
1586                                        } else {
1587                                                $button = array(
1588                                                        'id'                => 'membership_requested',
1589                                                        'component'         => 'groups',
1590                                                        'must_be_logged_in' => true,
1591                                                        'block_self'        => false,
1592                                                        'wrapper_class'     => 'group-button pending ' . $group->status,
1593                                                        'wrapper_id'        => 'groupbutton-' . $group->id,
1594                                                        'link_href'         => bp_get_group_permalink( $group ),
1595                                                        'link_text'         => __( 'Request Sent', 'buddypress' ),
1596                                                        'link_title'        => __( 'Request Sent', 'buddypress' ),
1597                                                        'link_class'        => 'group-button pending membership-requested',
1598                                                );
1599                                        }
1600
1601                                        break;
1602                        }
1603                }
1604
1605                // Filter and return the HTML button
1606                return bp_get_button( apply_filters( 'bp_get_group_join_button', $button ) );
1607        }
1608
1609/**
1610 * Prints a message if the group is not visible to the current user (it is a
1611 * hidden or private group, and the user does not have access).
1612 *
1613 * @global BP_Groups_Template $groups_template Groups template object
1614 * @param object $group Group to get status message for. Optional; defaults to current group.
1615 * @since 1.0
1616 */
1617function bp_group_status_message( $group = null ) {
1618        global $groups_template;
1619
1620        if ( ! $group )
1621                $group =& $groups_template->group;
1622
1623        if ( 'private' == $group->status ) {
1624                if ( ! bp_group_has_requested_membership() ) {
1625                        if ( is_user_logged_in() )
1626                                $message = __( 'This is a private group and you must request group membership in order to join.', 'buddypress' );
1627                        else
1628                                $message = __( 'This is a private group. To join you must be a registered site member and request group membership.', 'buddypress' );
1629
1630                } else {
1631                        $message = __( 'This is a private group. Your membership request is awaiting approval from the group administrator.', 'buddypress' );
1632                }
1633
1634        } else {
1635                $message = __( 'This is a hidden group and only invited members can join.', 'buddypress' );
1636        }
1637
1638        echo apply_filters( 'bp_group_status_message', $message, $group );
1639}
1640
1641function bp_group_hidden_fields() {
1642        if ( isset( $_REQUEST['s'] ) ) {
1643                echo '<input type="hidden" id="search_terms" value="' . esc_attr( $_REQUEST['s'] ) . '" name="search_terms" />';
1644        }
1645
1646        if ( isset( $_REQUEST['letter'] ) ) {
1647                echo '<input type="hidden" id="selected_letter" value="' . esc_attr( $_REQUEST['letter'] ) . '" name="selected_letter" />';
1648        }
1649
1650        if ( isset( $_REQUEST['groups_search'] ) ) {
1651                echo '<input type="hidden" id="search_terms" value="' . esc_attr( $_REQUEST['groups_search'] ) . '" name="search_terms" />';
1652        }
1653}
1654
1655function bp_total_group_count() {
1656        echo bp_get_total_group_count();
1657}
1658        function bp_get_total_group_count() {
1659                return apply_filters( 'bp_get_total_group_count', groups_get_total_group_count() );
1660        }
1661
1662function bp_total_group_count_for_user( $user_id = 0 ) {
1663        echo bp_get_total_group_count_for_user( $user_id );
1664}
1665        function bp_get_total_group_count_for_user( $user_id = 0 ) {
1666                return apply_filters( 'bp_get_total_group_count_for_user', groups_total_groups_for_user( $user_id ), $user_id );
1667        }
1668
1669
1670/***************************************************************************
1671 * Group Members Template Tags
1672 **/
1673
1674class BP_Groups_Group_Members_Template {
1675        var $current_member = -1;
1676        var $member_count;
1677        var $members;
1678        var $member;
1679
1680        var $in_the_loop;
1681
1682        var $pag_page;
1683        var $pag_num;
1684        var $pag_links;
1685        var $total_group_count;
1686
1687        function __construct( $group_id, $per_page, $max, $exclude_admins_mods, $exclude_banned, $exclude ) {
1688
1689                $this->pag_page = isset( $_REQUEST['mlpage'] ) ? intval( $_REQUEST['mlpage'] ) : 1;
1690                $this->pag_num  = isset( $_REQUEST['num'] ) ? intval( $_REQUEST['num'] ) : $per_page;
1691                $this->members  = BP_Groups_Member::get_all_for_group( $group_id, $this->pag_num, $this->pag_page, $exclude_admins_mods, $exclude_banned, $exclude );
1692
1693                if ( !$max || $max >= (int) $this->members['count'] )
1694                        $this->total_member_count = (int) $this->members['count'];
1695                else
1696                        $this->total_member_count = (int) $max;
1697
1698                $this->members = $this->members['members'];
1699
1700                if ( $max ) {
1701                        if ( $max >= count($this->members) )
1702                                $this->member_count = count($this->members);
1703                        else
1704                                $this->member_count = (int) $max;
1705                } else {
1706                        $this->member_count = count($this->members);
1707                }
1708
1709                $this->pag_links = paginate_links( array(
1710                        'base' => add_query_arg( 'mlpage', '%#%' ),
1711                        'format' => '',
1712                        'total' => !empty( $this->pag_num ) ? ceil( $this->total_member_count / $this->pag_num ) : $this->total_member_count,
1713                        'current' => $this->pag_page,
1714                        'prev_text' => '&larr;',
1715                        'next_text' => '&rarr;',
1716                        'mid_size' => 1
1717                ));
1718        }
1719
1720        function has_members() {
1721                if ( $this->member_count )
1722                        return true;
1723
1724                return false;
1725        }
1726
1727        function next_member() {
1728                $this->current_member++;
1729                $this->member = $this->members[$this->current_member];
1730
1731                return $this->member;
1732        }
1733
1734        function rewind_members() {
1735                $this->current_member = -1;
1736                if ( $this->member_count > 0 ) {
1737                        $this->member = $this->members[0];
1738                }
1739        }
1740
1741        function members() {
1742                if ( $this->current_member + 1 < $this->member_count ) {
1743                        return true;
1744                } elseif ( $this->current_member + 1 == $this->member_count ) {
1745                        do_action('loop_end');
1746                        // Do some cleaning up after the loop
1747                        $this->rewind_members();
1748                }
1749
1750                $this->in_the_loop = false;
1751                return false;
1752        }
1753
1754        function the_member() {
1755
1756                $this->in_the_loop = true;
1757                $this->member      = $this->next_member();
1758
1759                if ( 0 == $this->current_member ) // loop has just started
1760                        do_action('loop_start');
1761        }
1762}
1763
1764function bp_group_has_members( $args = '' ) {
1765        global $members_template;
1766
1767        $defaults = array(
1768                'group_id' => bp_get_current_group_id(),
1769                'per_page' => 20,
1770                'max' => false,
1771                'exclude' => false,
1772                'exclude_admins_mods' => 1,
1773                'exclude_banned' => 1
1774        );
1775
1776        $r = wp_parse_args( $args, $defaults );
1777        extract( $r, EXTR_SKIP );
1778
1779        $members_template = new BP_Groups_Group_Members_Template( $group_id, $per_page, $max, (int) $exclude_admins_mods, (int) $exclude_banned, $exclude );
1780        return apply_filters( 'bp_group_has_members', $members_template->has_members(), $members_template );
1781}
1782
1783function bp_group_members() {
1784        global $members_template;
1785
1786        return $members_template->members();
1787}
1788
1789function bp_group_the_member() {
1790        global $members_template;
1791
1792        return $members_template->the_member();
1793}
1794
1795function bp_group_member_avatar() {
1796        echo bp_get_group_member_avatar();
1797}
1798        function bp_get_group_member_avatar() {
1799                global $members_template;
1800
1801                return apply_filters( 'bp_get_group_member_avatar', bp_core_fetch_avatar( array( 'item_id' => $members_template->member->user_id, 'type' => 'full', 'email' => $members_template->member->user_email, 'alt' => sprintf( __( 'Profile picture of %s', 'buddypress' ), $members_template->member->display_name ) ) ) );
1802        }
1803
1804function bp_group_member_avatar_thumb() {
1805        echo bp_get_group_member_avatar_thumb();
1806}
1807        function bp_get_group_member_avatar_thumb() {
1808                global $members_template;
1809
1810                return apply_filters( 'bp_get_group_member_avatar_thumb', bp_core_fetch_avatar( array( 'item_id' => $members_template->member->user_id, 'type' => 'thumb', 'email' => $members_template->member->user_email, 'alt' => sprintf( __( 'Profile picture of %s', 'buddypress' ), $members_template->member->display_name ) ) ) );
1811        }
1812
1813function bp_group_member_avatar_mini( $width = 30, $height = 30 ) {
1814        echo bp_get_group_member_avatar_mini( $width, $height );
1815}
1816        function bp_get_group_member_avatar_mini( $width = 30, $height = 30 ) {
1817                global $members_template;
1818
1819                return apply_filters( 'bp_get_group_member_avatar_mini', bp_core_fetch_avatar( array( 'item_id' => $members_template->member->user_id, 'type' => 'thumb', 'width' => $width, 'height' => $height, 'email' => $members_template->member->user_email, 'alt' => sprintf( __( 'Profile picture of %s', 'buddypress' ), $members_template->member->display_name ) ) ) );
1820        }
1821
1822function bp_group_member_name() {
1823        echo bp_get_group_member_name();
1824}
1825        function bp_get_group_member_name() {
1826                global $members_template;
1827
1828                return apply_filters( 'bp_get_group_member_name', $members_template->member->display_name );
1829        }
1830
1831function bp_group_member_url() {
1832        echo bp_get_group_member_url();
1833}
1834        function bp_get_group_member_url() {
1835                global $members_template;
1836
1837                return apply_filters( 'bp_get_group_member_url', bp_core_get_user_domain( $members_template->member->user_id, $members_template->member->user_nicename, $members_template->member->user_login ) );
1838        }
1839
1840function bp_group_member_link() {
1841        echo bp_get_group_member_link();
1842}
1843        function bp_get_group_member_link() {
1844                global $members_template;
1845
1846                return apply_filters( 'bp_get_group_member_link', '<a href="' . bp_core_get_user_domain( $members_template->member->user_id, $members_template->member->user_nicename, $members_template->member->user_login ) . '">' . $members_template->member->display_name . '</a>' );
1847        }
1848
1849function bp_group_member_domain() {
1850        echo bp_get_group_member_domain();
1851}
1852        function bp_get_group_member_domain() {
1853                global $members_template;
1854
1855                return apply_filters( 'bp_get_group_member_domain', bp_core_get_user_domain( $members_template->member->user_id, $members_template->member->user_nicename, $members_template->member->user_login ) );
1856        }
1857
1858function bp_group_member_is_friend() {
1859        echo bp_get_group_member_is_friend();
1860}
1861        function bp_get_group_member_is_friend() {
1862                global $members_template;
1863
1864                if ( !isset( $members_template->member->is_friend ) )
1865                        $friend_status = 'not_friends';
1866                else
1867                        $friend_status = ( 0 == $members_template->member->is_friend ) ? 'pending' : 'is_friend';
1868
1869                return apply_filters( 'bp_get_group_member_is_friend', $friend_status );
1870        }
1871
1872function bp_group_member_is_banned() {
1873        echo bp_get_group_member_is_banned();
1874}
1875        function bp_get_group_member_is_banned() {
1876                global $members_template;
1877
1878                return apply_filters( 'bp_get_group_member_is_banned', $members_template->member->is_banned );
1879        }
1880
1881function bp_group_member_css_class() {
1882        global $members_template;
1883
1884        if ( $members_template->member->is_banned )
1885                echo apply_filters( 'bp_group_member_css_class', 'banned-user' );
1886}
1887
1888function bp_group_member_joined_since() {
1889        echo bp_get_group_member_joined_since();
1890}
1891        function bp_get_group_member_joined_since() {
1892                global $members_template;
1893
1894                return apply_filters( 'bp_get_group_member_joined_since', bp_core_get_last_activity( $members_template->member->date_modified, __( 'joined %s', 'buddypress') ) );
1895        }
1896
1897function bp_group_member_id() {
1898        echo bp_get_group_member_id();
1899}
1900        function bp_get_group_member_id() {
1901                global $members_template;
1902
1903                return apply_filters( 'bp_get_group_member_id', $members_template->member->user_id );
1904        }
1905
1906function bp_group_member_needs_pagination() {
1907        global $members_template;
1908
1909        if ( $members_template->total_member_count > $members_template->pag_num )
1910                return true;
1911
1912        return false;
1913}
1914
1915function bp_group_pag_id() {
1916        echo bp_get_group_pag_id();
1917}
1918        function bp_get_group_pag_id() {
1919                return apply_filters( 'bp_get_group_pag_id', 'pag' );
1920        }
1921
1922function bp_group_member_pagination() {
1923        echo bp_get_group_member_pagination();
1924        wp_nonce_field( 'bp_groups_member_list', '_member_pag_nonce' );
1925}
1926        function bp_get_group_member_pagination() {
1927                global $members_template;
1928                return apply_filters( 'bp_get_group_member_pagination', $members_template->pag_links );
1929        }
1930
1931function bp_group_member_pagination_count() {
1932        echo bp_get_group_member_pagination_count();
1933}
1934        function bp_get_group_member_pagination_count() {
1935                global $members_template;
1936
1937                $start_num = intval( ( $members_template->pag_page - 1 ) * $members_template->pag_num ) + 1;
1938                $from_num = bp_core_number_format( $start_num );
1939                $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 ) );
1940                $total = bp_core_number_format( $members_template->total_member_count );
1941
1942                return apply_filters( 'bp_get_group_member_pagination_count', sprintf( __( 'Viewing members %1$s to %2$s (of %3$s members)', 'buddypress' ), $from_num, $to_num, $total ) );
1943        }
1944
1945function bp_group_member_admin_pagination() {
1946        echo bp_get_group_member_admin_pagination();
1947        wp_nonce_field( 'bp_groups_member_admin_list', '_member_admin_pag_nonce' );
1948}
1949        function bp_get_group_member_admin_pagination() {
1950                global $members_template;
1951
1952                return $members_template->pag_links;
1953        }
1954
1955
1956/***************************************************************************
1957 * Group Creation Process Template Tags
1958 **/
1959
1960/**
1961 * Determine if the current logged in user can create groups.
1962 *
1963 * @package BuddyPress Groups
1964 * @since BuddyPress (1.5)
1965 *
1966 * @uses apply_filters() To call 'bp_user_can_create_groups'.
1967 * @uses bp_get_option() To retrieve value of 'bp_restrict_group_creation'. Defaults to 0.
1968 * @uses bp_current_user_can() To determine if current user if super admin.
1969 *
1970 * @return bool True if user can create groups. False otherwise.
1971 */
1972function bp_user_can_create_groups() {
1973        // Super admin can always create groups
1974        if ( bp_current_user_can( 'bp_moderate' ) )
1975                return true;
1976
1977        // Get group creation option, default to 0 (allowed)
1978        $restricted = (int) bp_get_option( 'bp_restrict_group_creation', 0 );
1979
1980        // Allow by default
1981        $can_create = true;
1982
1983        // Are regular users restricted?
1984        if ( $restricted )
1985                $can_create = false;
1986
1987        return apply_filters( 'bp_user_can_create_groups', $can_create, $restricted );
1988}
1989
1990function bp_group_creation_tabs() {
1991        global $bp;
1992
1993        if ( !is_array( $bp->groups->group_creation_steps ) )
1994                return false;
1995
1996        if ( !bp_get_groups_current_create_step() )
1997                $bp->groups->current_create_step = array_shift( array_keys( $bp->groups->group_creation_steps ) );
1998
1999        $counter = 1;
2000
2001        foreach ( (array) $bp->groups->group_creation_steps as $slug => $step ) {
2002                $is_enabled = bp_are_previous_group_creation_steps_complete( $slug ); ?>
2003
2004                <li<?php if ( bp_get_groups_current_create_step() == $slug ) : ?> class="current"<?php endif; ?>><?php if ( $is_enabled ) : ?><a href="<?php echo bp_get_root_domain() . '/' . bp_get_groups_root_slug() ?>/create/step/<?php echo $slug ?>/"><?php else: ?><span><?php endif; ?><?php echo $counter ?>. <?php echo $step['name'] ?><?php if ( $is_enabled ) : ?></a><?php else: ?></span><?php endif ?></li><?php
2005                $counter++;
2006        }
2007
2008        unset( $is_enabled );
2009
2010        do_action( 'groups_creation_tabs' );
2011}
2012
2013function bp_group_creation_stage_title() {
2014        global $bp;
2015
2016        echo apply_filters( 'bp_group_creation_stage_title', '<span>&mdash; ' . $bp->groups->group_creation_steps[bp_get_groups_current_create_step()]['name'] . '</span>' );
2017}
2018
2019function bp_group_creation_form_action() {
2020        echo bp_get_group_creation_form_action();
2021}
2022        function bp_get_group_creation_form_action() {
2023                global $bp;
2024
2025                if ( !bp_action_variable( 1 ) )
2026                        $bp->action_variables[1] = array_shift( array_keys( $bp->groups->group_creation_steps ) );
2027
2028                return apply_filters( 'bp_get_group_creation_form_action', trailingslashit( bp_get_root_domain() . '/' . bp_get_groups_root_slug() . '/create/step/' . bp_action_variable( 1 ) ) );
2029        }
2030
2031function bp_is_group_creation_step( $step_slug ) {
2032        global $bp;
2033
2034        /* Make sure we are in the groups component */
2035        if ( !bp_is_groups_component() || !bp_is_current_action( 'create' ) )
2036                return false;
2037
2038        /* If this the first step, we can just accept and return true */
2039        if ( !bp_action_variable( 1 ) && array_shift( array_keys( $bp->groups->group_creation_steps ) ) == $step_slug )
2040                return true;
2041
2042        /* Before allowing a user to see a group creation step we must make sure previous steps are completed */
2043        if ( !bp_is_first_group_creation_step() ) {
2044                if ( !bp_are_previous_group_creation_steps_complete( $step_slug ) )
2045                        return false;
2046        }
2047
2048        /* Check the current step against the step parameter */
2049        if ( bp_is_action_variable( $step_slug ) )
2050                return true;
2051
2052        return false;
2053}
2054
2055function bp_is_group_creation_step_complete( $step_slugs ) {
2056        global $bp;
2057
2058        if ( !isset( $bp->groups->completed_create_steps ) )
2059                return false;
2060
2061        if ( is_array( $step_slugs ) ) {
2062                $found = true;
2063
2064                foreach ( (array) $step_slugs as $step_slug ) {
2065                        if ( !in_array( $step_slug, $bp->groups->completed_create_steps ) )
2066                                $found = false;
2067                }
2068
2069                return $found;
2070        } else {
2071                return in_array( $step_slugs, $bp->groups->completed_create_steps );
2072        }
2073
2074        return true;
2075}
2076
2077function bp_are_previous_group_creation_steps_complete( $step_slug ) {
2078        global $bp;
2079
2080        /* If this is the first group creation step, return true */
2081        if ( array_shift( array_keys( $bp->groups->group_creation_steps ) ) == $step_slug )
2082                return true;
2083
2084        reset( $bp->groups->group_creation_steps );
2085        unset( $previous_steps );
2086
2087        /* Get previous steps */
2088        foreach ( (array) $bp->groups->group_creation_steps as $slug => $name ) {
2089                if ( $slug == $step_slug )
2090                        break;
2091
2092                $previous_steps[] = $slug;
2093        }
2094
2095        return bp_is_group_creation_step_complete( $previous_steps );
2096}
2097
2098function bp_new_group_id() {
2099        echo bp_get_new_group_id();
2100}
2101        function bp_get_new_group_id() {
2102                global $bp;
2103
2104                if ( isset( $bp->groups->new_group_id ) )
2105                        $new_group_id = $bp->groups->new_group_id;
2106                else
2107                        $new_group_id = 0;
2108
2109                return apply_filters( 'bp_get_new_group_id', $new_group_id );
2110        }
2111
2112function bp_new_group_name() {
2113        echo bp_get_new_group_name();
2114}
2115        function bp_get_new_group_name() {
2116                global $bp;
2117
2118                if ( isset( $bp->groups->current_group->name ) )
2119                        $name = $bp->groups->current_group->name;
2120                else
2121                        $name = '';
2122
2123                return apply_filters( 'bp_get_new_group_name', $name );
2124        }
2125
2126function bp_new_group_description() {
2127        echo bp_get_new_group_description();
2128}
2129        function bp_get_new_group_description() {
2130                global $bp;
2131
2132                if ( isset( $bp->groups->current_group->description ) )
2133                        $description = $bp->groups->current_group->description;
2134                else
2135                        $description = '';
2136
2137                return apply_filters( 'bp_get_new_group_description', $description );
2138        }
2139
2140function bp_new_group_enable_forum() {
2141        echo bp_get_new_group_enable_forum();
2142}
2143        function bp_get_new_group_enable_forum() {
2144                global $bp;
2145                return (int) apply_filters( 'bp_get_new_group_enable_forum', $bp->groups->current_group->enable_forum );
2146        }
2147
2148function bp_new_group_status() {
2149        echo bp_get_new_group_status();
2150}
2151        function bp_get_new_group_status() {
2152                global $bp;
2153                return apply_filters( 'bp_get_new_group_status', $bp->groups->current_group->status );
2154        }
2155
2156function bp_new_group_avatar( $args = '' ) {
2157        echo bp_get_new_group_avatar( $args );
2158}
2159        function bp_get_new_group_avatar( $args = '' ) {
2160                global $bp;
2161
2162                $defaults = array(
2163                        'type' => 'full',
2164                        'width' => false,
2165                        'height' => false,
2166                        'class' => 'avatar',
2167                        'id' => 'avatar-crop-preview',
2168                        'alt' => __( 'Group avatar', 'buddypress' ),
2169                        'no_grav' => false
2170                );
2171
2172                $r = wp_parse_args( $args, $defaults );
2173                extract( $r, EXTR_SKIP );
2174
2175                return apply_filters( 'bp_get_new_group_avatar', bp_core_fetch_avatar( array( 'item_id' => $bp->groups->current_group->id, 'object' => 'group', 'type' => $type, 'avatar_dir' => 'group-avatars', 'alt' => $alt, 'width' => $width, 'height' => $height, 'class' => $class, 'no_grav' => $no_grav ) ) );
2176        }
2177
2178function bp_group_creation_previous_link() {
2179        echo bp_get_group_creation_previous_link();
2180}
2181        function bp_get_group_creation_previous_link() {
2182                global $bp;
2183
2184                foreach ( (array) $bp->groups->group_creation_steps as $slug => $name ) {
2185                        if ( bp_is_action_variable( $slug ) )
2186                                break;
2187
2188                        $previous_steps[] = $slug;
2189                }
2190
2191                return apply_filters( 'bp_get_group_creation_previous_link', trailingslashit( bp_get_root_domain() ) . bp_get_groups_root_slug() . '/create/step/' . array_pop( $previous_steps ) );
2192        }
2193
2194/**
2195 * Echoes the current group creation step
2196 *
2197 * @since 1.6
2198 */
2199function bp_groups_current_create_step() {
2200        echo bp_get_groups_current_create_step();
2201}
2202        /**
2203         * Returns the current group creation step. If none is found, returns an empty string
2204         *
2205         * @since 1.6
2206         *
2207         * @uses apply_filters() Filter bp_get_groups_current_create_step to modify
2208         * @return str $current_create_step
2209         */
2210        function bp_get_groups_current_create_step() {
2211                global $bp;
2212               
2213                if ( !empty( $bp->groups->current_create_step ) ) {
2214                        $current_create_step = $bp->groups->current_create_step;
2215                } else {
2216                        $current_create_step = '';
2217                }
2218               
2219                return apply_filters( 'bp_get_groups_current_create_step', $current_create_step );
2220        }
2221
2222function bp_is_last_group_creation_step() {
2223        global $bp;
2224
2225        $last_step = array_pop( array_keys( $bp->groups->group_creation_steps ) );
2226
2227        if ( $last_step == bp_get_groups_current_create_step() )
2228                return true;
2229
2230        return false;
2231}
2232
2233function bp_is_first_group_creation_step() {
2234        global $bp;
2235
2236        $first_step = array_shift( array_keys( $bp->groups->group_creation_steps ) );
2237
2238        if ( $first_step == bp_get_groups_current_create_step() )
2239                return true;
2240
2241        return false;
2242}
2243
2244function bp_new_group_invite_friend_list() {
2245        echo bp_get_new_group_invite_friend_list();
2246}
2247        function bp_get_new_group_invite_friend_list( $args = '' ) {
2248                global $bp;
2249
2250                if ( !bp_is_active( 'friends' ) )
2251                        return false;
2252
2253                $defaults = array(
2254                        'group_id'  => false,
2255                        'separator' => 'li'
2256                );
2257
2258                $r = wp_parse_args( $args, $defaults );
2259                extract( $r, EXTR_SKIP );
2260
2261                if ( empty( $group_id ) )
2262                        $group_id = !empty( $bp->groups->new_group_id ) ? $bp->groups->new_group_id : $bp->groups->current_group->id;
2263
2264                if ( $friends = friends_get_friends_invite_list( bp_loggedin_user_id(), $group_id ) ) {
2265                        $invites = groups_get_invites_for_group( bp_loggedin_user_id(), $group_id );
2266
2267                        for ( $i = 0, $count = count( $friends ); $i < $count; ++$i ) {
2268                                $checked = '';
2269
2270                                if ( !empty( $invites ) ) {
2271                                        if ( in_array( $friends[$i]['id'], $invites ) )
2272                                                $checked = ' checked="checked"';
2273                                }
2274
2275                                $items[] = '<' . $separator . '><input' . $checked . ' type="checkbox" name="friends[]" id="f-' . $friends[$i]['id'] . '" value="' . esc_attr( $friends[$i]['id'] ) . '" /> ' . $friends[$i]['full_name'] . '</' . $separator . '>';
2276                        }
2277                }
2278
2279                if ( !empty( $items ) )
2280                        return implode( "\n", (array) $items );
2281
2282                return false;
2283        }
2284
2285function bp_directory_groups_search_form() {
2286
2287        $default_search_value = bp_get_search_default_text( 'groups' );
2288        $search_value         = !empty( $_REQUEST['s'] ) ? stripslashes( $_REQUEST['s'] ) : $default_search_value; ?>
2289
2290        <form action="" method="get" id="search-groups-form">
2291                <label><input type="text" name="s" id="groups_search" placeholder="<?php echo esc_attr( $search_value ) ?>" /></label>
2292                <input type="submit" id="groups_search_submit" name="groups_search_submit" value="<?php _e( 'Search', 'buddypress' ) ?>" />
2293        </form>
2294
2295<?php
2296}
2297
2298/**
2299 * Displays group header tabs
2300 *
2301 * @package BuddyPress
2302 * @todo Deprecate?
2303 */
2304function bp_groups_header_tabs() {
2305        global $bp;?>
2306
2307        <li<?php if ( !bp_action_variable( 0 ) || bp_is_action_variable( 'recently-active', 0 ) ) : ?> class="current"<?php endif; ?>><a href="<?php echo trailingslashit( bp_displayed_user_domain() . bp_get_groups_slug() . '/my-groups/recently-active' ) ?>"><?php _e( 'Recently Active', 'buddypress' ) ?></a></li>
2308        <li<?php if ( bp_is_action_variable( 'recently-joined', 0 ) ) : ?> class="current"<?php endif; ?>><a href="<?php echo trailingslashit( bp_displayed_user_domain() . bp_get_groups_slug() . '/my-groups/recently-joined' ) ?>"><?php _e( 'Recently Joined', 'buddypress' ) ?></a></li>
2309        <li<?php if ( bp_is_action_variable( 'most-popular', 0 ) ) : ?> class="current"<?php endif; ?>><a href="<?php echo trailingslashit( bp_displayed_user_domain() . bp_get_groups_slug() . '/my-groups/most-popular' ) ?>"><?php _e( 'Most Popular', 'buddypress' ) ?></a></li>
2310        <li<?php if ( bp_is_action_variable( 'admin-of', 0 ) ) : ?> class="current"<?php endif; ?>><a href="<?php echo trailingslashit( bp_displayed_user_domain() . bp_get_groups_slug() . '/my-groups/admin-of' ) ?>"><?php _e( 'Administrator Of', 'buddypress' ) ?></a></li>
2311        <li<?php if ( bp_is_action_variable( 'mod-of', 0 ) ) : ?> class="current"<?php endif; ?>><a href="<?php echo trailingslashit( bp_displayed_user_domain() . bp_get_groups_slug() . '/my-groups/mod-of' ) ?>"><?php _e( 'Moderator Of', 'buddypress' ) ?></a></li>
2312        <li<?php if ( bp_is_action_variable( 'alphabetically' ) ) : ?> class="current"<?php endif; ?>><a href="<?php echo trailingslashit( bp_displayed_user_domain() . bp_get_groups_slug() . '/my-groups/alphabetically' ) ?>"><?php _e( 'Alphabetically', 'buddypress' ) ?></a></li>
2313
2314<?php
2315        do_action( 'groups_header_tabs' );
2316}
2317
2318/**
2319 * Displays group filter titles
2320 *
2321 * @package BuddyPress
2322 * @todo Deprecate?
2323 */
2324function bp_groups_filter_title() {
2325        $current_filter = bp_action_variable( 0 );
2326
2327        switch ( $current_filter ) {
2328                case 'recently-active': default:
2329                        _e( 'Recently Active', 'buddypress' );
2330                        break;
2331                case 'recently-joined':
2332                        _e( 'Recently Joined', 'buddypress' );
2333                        break;
2334                case 'most-popular':
2335                        _e( 'Most Popular', 'buddypress' );
2336                        break;
2337                case 'admin-of':
2338                        _e( 'Administrator Of', 'buddypress' );
2339                        break;
2340                case 'mod-of':
2341                        _e( 'Moderator Of', 'buddypress' );
2342                        break;
2343                case 'alphabetically':
2344                        _e( 'Alphabetically', 'buddypress' );
2345                break;
2346        }
2347        do_action( 'bp_groups_filter_title' );
2348}
2349
2350function bp_is_group_admin_screen( $slug ) {
2351        if ( !bp_is_groups_component() || !bp_is_current_action( 'admin' ) )
2352                return false;
2353
2354        if ( bp_is_action_variable( $slug ) )
2355                return true;
2356
2357        return false;
2358}
2359
2360/**
2361 * Echoes the current group admin tab slug
2362 *
2363 * @since 1.6
2364 */
2365function bp_group_current_admin_tab() {
2366        echo bp_get_group_current_admin_tab();
2367}
2368        /**
2369         * Returns the current group admin tab slug
2370         *
2371         * @since 1.6
2372         *
2373         * @uses apply_filters() Filter bp_get_current_group_admin_tab to modify return value
2374         * @return str $tab The current tab's slug
2375         */
2376        function bp_get_group_current_admin_tab() {
2377                if ( bp_is_groups_component() && bp_is_current_action( 'admin' ) ) {
2378                        $tab = bp_action_variable( 0 );
2379                } else {
2380                        $tab = '';
2381                }
2382               
2383                return apply_filters( 'bp_get_current_group_admin_tab', $tab );
2384        }
2385
2386/************************************************************************************
2387 * Group Avatar Template Tags
2388 **/
2389
2390function bp_group_current_avatar() {
2391        global $bp;
2392
2393        if ( $bp->groups->current_group->avatar_full ) { ?>
2394
2395                <img src="<?php echo esc_attr( $bp->groups->current_group->avatar_full ) ?>" alt="<?php _e( 'Group Avatar', 'buddypress' ) ?>" class="avatar" />
2396
2397        <?php } else { ?>
2398
2399                <img src="<?php echo $bp->groups->image_base . '/none.gif' ?>" alt="<?php _e( 'No Group Avatar', 'buddypress' ) ?>" class="avatar" />
2400
2401        <?php }
2402}
2403
2404function bp_get_group_has_avatar() {
2405        global $bp;
2406
2407        if ( !empty( $_FILES ) || !bp_core_fetch_avatar( array( 'item_id' => $bp->groups->current_group->id, 'object' => 'group', 'no_grav' => true ) ) )
2408                return false;
2409
2410        return true;
2411}
2412
2413function bp_group_avatar_delete_link() {
2414        echo bp_get_group_avatar_delete_link();
2415}
2416        function bp_get_group_avatar_delete_link() {
2417                global $bp;
2418
2419                return apply_filters( 'bp_get_group_avatar_delete_link', wp_nonce_url( bp_get_group_permalink( $bp->groups->current_group ) . 'admin/group-avatar/delete', 'bp_group_avatar_delete' ) );
2420        }
2421
2422function bp_group_avatar_edit_form() {
2423        groups_avatar_upload();
2424}
2425
2426function bp_custom_group_boxes() {
2427        do_action( 'groups_custom_group_boxes' );
2428}
2429
2430function bp_custom_group_admin_tabs() {
2431        do_action( 'groups_custom_group_admin_tabs' );
2432}
2433
2434function bp_custom_group_fields_editable() {
2435        do_action( 'groups_custom_group_fields_editable' );
2436}
2437
2438function bp_custom_group_fields() {
2439        do_action( 'groups_custom_group_fields' );
2440}
2441
2442
2443/************************************************************************************
2444 * Membership Requests Template Tags
2445 **/
2446
2447class BP_Groups_Membership_Requests_Template {
2448        var $current_request = -1;
2449        var $request_count;
2450        var $requests;
2451        var $request;
2452
2453        var $in_the_loop;
2454
2455        var $pag_page;
2456        var $pag_num;
2457        var $pag_links;
2458        var $total_request_count;
2459
2460        function __construct( $group_id, $per_page, $max ) {
2461
2462                $this->pag_page = isset( $_REQUEST['mrpage'] ) ? intval( $_REQUEST['mrpage'] ) : 1;
2463                $this->pag_num  = isset( $_REQUEST['num'] ) ? intval( $_REQUEST['num'] ) : $per_page;
2464                $this->requests = BP_Groups_Group::get_membership_requests( $group_id, $this->pag_num, $this->pag_page );
2465
2466                if ( !$max || $max >= (int) $this->requests['total'] )
2467                        $this->total_request_count = (int) $this->requests['total'];
2468                else
2469                        $this->total_request_count = (int) $max;
2470
2471                $this->requests = $this->requests['requests'];
2472
2473                if ( $max ) {
2474                        if ( $max >= count($this->requests) )
2475                                $this->request_count = count($this->requests);
2476                        else
2477                                $this->request_count = (int) $max;
2478                } else {
2479                        $this->request_count = count($this->requests);
2480                }
2481
2482                $this->pag_links = paginate_links( array(
2483                        'base' => add_query_arg( 'mrpage', '%#%' ),
2484                        'format' => '',
2485                        'total' => ceil( $this->total_request_count / $this->pag_num ),
2486                        'current' => $this->pag_page,
2487                        'prev_text' => '&larr;',
2488                        'next_text' => '&rarr;',
2489                        'mid_size' => 1
2490                ) );
2491        }
2492
2493        function has_requests() {
2494                if ( $this->request_count )
2495                        return true;
2496
2497                return false;
2498        }
2499
2500        function next_request() {
2501                $this->current_request++;
2502                $this->request = $this->requests[$this->current_request];
2503
2504                return $this->request;
2505        }
2506
2507        function rewind_requests() {
2508                $this->current_request = -1;
2509
2510                if ( $this->request_count > 0 )
2511                        $this->request = $this->requests[0];
2512        }
2513
2514        function requests() {
2515                if ( $this->current_request + 1 < $this->request_count ) {
2516                        return true;
2517                } elseif ( $this->current_request + 1 == $this->request_count ) {
2518                        do_action('group_request_loop_end');
2519                        // Do some cleaning up after the loop
2520                        $this->rewind_requests();
2521                }
2522
2523                $this->in_the_loop = false;
2524                return false;
2525        }
2526
2527        function the_request() {
2528                $this->in_the_loop = true;
2529                $this->request     = $this->next_request();
2530
2531                if ( 0 == $this->current_request ) // loop has just started
2532                        do_action('group_request_loop_start');
2533        }
2534}
2535
2536function bp_group_has_membership_requests( $args = '' ) {
2537        global $requests_template, $groups_template;
2538
2539        $defaults = array(
2540                'group_id' => $groups_template->group->id,
2541                'per_page' => 10,
2542                'max'      => false
2543        );
2544
2545        $r = wp_parse_args( $args, $defaults );
2546        extract( $r, EXTR_SKIP );
2547
2548        $requests_template = new BP_Groups_Membership_Requests_Template( $group_id, $per_page, $max );
2549        return apply_filters( 'bp_group_has_membership_requests', $requests_template->has_requests(), $requests_template );
2550}
2551
2552function bp_group_membership_requests() {
2553        global $requests_template;
2554
2555        return $requests_template->requests();
2556}
2557
2558function bp_group_the_membership_request() {
2559        global $requests_template;
2560
2561        return $requests_template->the_request();
2562}
2563
2564function bp_group_request_user_avatar_thumb() {
2565        global $requests_template;
2566
2567        echo apply_filters( 'bp_group_request_user_avatar_thumb', bp_core_fetch_avatar( array( 'item_id' => $requests_template->request->user_id, 'type' => 'thumb', 'alt' => sprintf( __( 'Profile picture of %s', 'buddypress' ), bp_core_get_user_displayname( $requests_template->request->user_id ) ) ) ) );
2568}
2569
2570function bp_group_request_reject_link() {
2571        echo bp_get_group_request_reject_link();
2572}
2573        function bp_get_group_request_reject_link() {
2574                global $requests_template, $groups_template;
2575
2576                return apply_filters( 'bp_get_group_request_reject_link', wp_nonce_url( bp_get_group_permalink( $groups_template->group ) . 'admin/membership-requests/reject/' . $requests_template->request->id, 'groups_reject_membership_request' ) );
2577        }
2578
2579function bp_group_request_accept_link() {
2580        echo bp_get_group_request_accept_link();
2581}
2582        function bp_get_group_request_accept_link() {
2583                global $requests_template, $groups_template;
2584
2585                return apply_filters( 'bp_get_group_request_accept_link', wp_nonce_url( bp_get_group_permalink( $groups_template->group ) . 'admin/membership-requests/accept/' . $requests_template->request->id, 'groups_accept_membership_request' ) );
2586        }
2587
2588function bp_group_request_user_link() {
2589        echo bp_get_group_request_user_link();
2590}
2591        function bp_get_group_request_user_link() {
2592                global $requests_template;
2593
2594                return apply_filters( 'bp_get_group_request_user_link', bp_core_get_userlink( $requests_template->request->user_id ) );
2595        }
2596
2597function bp_group_request_time_since_requested() {
2598        global $requests_template;
2599
2600        echo apply_filters( 'bp_group_request_time_since_requested', sprintf( __( 'requested %s', 'buddypress' ), bp_core_time_since( strtotime( $requests_template->request->date_modified ) ) ) );
2601}
2602
2603function bp_group_request_comment() {
2604        global $requests_template;
2605
2606        echo apply_filters( 'bp_group_request_comment', strip_tags( stripslashes( $requests_template->request->comments ) ) );
2607}
2608
2609
2610function bp_group_request_pagination_links() {
2611        echo bp_get_group_request_pagination_links();
2612}
2613        function bp_get_group_request_pagination_links() {
2614                global $requests_template;
2615
2616                return apply_filters( 'bp_get_request_pagination_links', $requests_template->pag_links );
2617        }
2618function bp_group_request_needs_pagination() {
2619        global $requests_template;
2620
2621        if ( $requests_template->total_request_count > $requests_template->pag_num )
2622                return true;
2623
2624        return false;
2625}
2626
2627function bp_group_request_pagination_count() {
2628        echo bp_get_group_request_pagination_count();
2629}
2630        function bp_get_group_request_pagination_count() {
2631                global $requests_template;
2632
2633                $start_num = intval( ( $requests_template->pag_page - 1 ) * $requests_template->pag_num ) + 1;
2634                $from_num = bp_core_number_format( $start_num );
2635                $to_num = bp_core_number_format( ( $start_num + ( $requests_template->pag_num - 1 ) > $requests_template->total_request_count ) ? $requests_template->total_request_count : $start_num + ( $requests_template->pag_num - 1 ) );
2636                $total = bp_core_number_format( $requests_template->total_request_count );
2637
2638                return apply_filters( 'bp_get_group_request_pagination_count', sprintf( __( 'Viewing requests %1$s to %2$s (of %3$s requests)', 'buddypress' ), $from_num, $to_num, $total ) );
2639        }
2640
2641function bp_group_request_admin_pagination() {
2642        echo bp_get_group_request_admin_pagination();
2643        wp_nonce_field( 'bp_groups_request_admin_list', '_request_admin_pag_nonce' );
2644}
2645        function bp_get_group_request_admin_pagination() {
2646                global $requests_template;
2647
2648                return $requests_template->pag_links;
2649        }
2650/************************************************************************************
2651 * Invite Friends Template Tags
2652 **/
2653
2654class BP_Groups_Invite_Template {
2655        var $current_invite = -1;
2656        var $invite_count;
2657        var $invites;
2658        var $invite;
2659
2660        var $in_the_loop;
2661
2662        var $pag_page;
2663        var $pag_num;
2664        var $pag_links;
2665        var $total_invite_count;
2666
2667        function __construct( $user_id, $group_id ) {
2668                $this->invites      = groups_get_invites_for_group( $user_id, $group_id );
2669                $this->invite_count = count( $this->invites );
2670        }
2671
2672        function has_invites() {
2673                if ( $this->invite_count )
2674                        return true;
2675
2676                return false;
2677        }
2678
2679        function next_invite() {
2680                $this->current_invite++;
2681                $this->invite = $this->invites[$this->current_invite];
2682
2683                return $this->invite;
2684        }
2685
2686        function rewind_invites() {
2687                $this->current_invite = -1;
2688                if ( $this->invite_count > 0 )
2689                        $this->invite = $this->invites[0];
2690        }
2691
2692        function invites() {
2693                if ( $this->current_invite + 1 < $this->invite_count ) {
2694                        return true;
2695                } elseif ( $this->current_invite + 1 == $this->invite_count ) {
2696                        do_action('loop_end');
2697                        // Do some cleaning up after the loop
2698                        $this->rewind_invites();
2699                }
2700
2701                $this->in_the_loop = false;
2702                return false;
2703        }
2704
2705        function the_invite() {
2706                global $group_id;
2707
2708                $this->in_the_loop      = true;
2709                $user_id                = $this->next_invite();
2710                $this->invite           = new stdClass;
2711                $this->invite->user     = new BP_Core_User( $user_id );
2712                $this->invite->group_id = $group_id; // Globaled in bp_group_has_invites()
2713
2714                if ( 0 == $this->current_invite ) // loop has just started
2715                        do_action('loop_start');
2716        }
2717}
2718
2719function bp_group_has_invites( $args = '' ) {
2720        global $bp, $invites_template, $group_id;
2721
2722        $defaults = array(
2723                'group_id' => false,
2724                'user_id' => bp_loggedin_user_id()
2725        );
2726
2727        $r = wp_parse_args( $args, $defaults );
2728        extract( $r, EXTR_SKIP );
2729
2730        if ( !$group_id ) {
2731                // Backwards compatibility
2732                if ( !empty( $bp->groups->current_group ) )
2733                        $group_id = $bp->groups->current_group->id;
2734
2735                if ( !empty( $bp->groups->new_group_id ) )
2736                        $group_id = $bp->groups->new_group_id;
2737        }
2738
2739        if ( !$group_id )
2740                return false;
2741
2742        $invites_template = new BP_Groups_Invite_Template( $user_id, $group_id );
2743        return apply_filters( 'bp_group_has_invites', $invites_template->has_invites(), $invites_template );
2744}
2745
2746function bp_group_invites() {
2747        global $invites_template;
2748
2749        return $invites_template->invites();
2750}
2751
2752function bp_group_the_invite() {
2753        global $invites_template;
2754
2755        return $invites_template->the_invite();
2756}
2757
2758function bp_group_invite_item_id() {
2759        echo bp_get_group_invite_item_id();
2760}
2761        function bp_get_group_invite_item_id() {
2762                global $invites_template;
2763
2764                return apply_filters( 'bp_get_group_invite_item_id', 'uid-' . $invites_template->invite->user->id );
2765        }
2766
2767function bp_group_invite_user_avatar() {
2768        echo bp_get_group_invite_user_avatar();
2769}
2770        function bp_get_group_invite_user_avatar() {
2771                global $invites_template;
2772
2773                return apply_filters( 'bp_get_group_invite_user_avatar', $invites_template->invite->user->avatar_thumb );
2774        }
2775
2776function bp_group_invite_user_link() {
2777        echo bp_get_group_invite_user_link();
2778}
2779        function bp_get_group_invite_user_link() {
2780                global $invites_template;
2781
2782                return apply_filters( 'bp_get_group_invite_user_link', bp_core_get_userlink( $invites_template->invite->user->id ) );
2783        }
2784
2785function bp_group_invite_user_last_active() {
2786        echo bp_get_group_invite_user_last_active();
2787}
2788        function bp_get_group_invite_user_last_active() {
2789                global $invites_template;
2790
2791                return apply_filters( 'bp_get_group_invite_user_last_active', $invites_template->invite->user->last_active );
2792        }
2793
2794function bp_group_invite_user_remove_invite_url() {
2795        echo bp_get_group_invite_user_remove_invite_url();
2796}
2797        function bp_get_group_invite_user_remove_invite_url() {
2798                global $invites_template;
2799
2800                return wp_nonce_url( site_url( bp_get_groups_slug() . '/' . $invites_template->invite->group_id . '/invites/remove/' . $invites_template->invite->user->id ), 'groups_invite_uninvite_user' );
2801        }
2802
2803/***
2804 * Groups RSS Feed Template Tags
2805 */
2806
2807/**
2808 * Hook group activity feed to <head>
2809 *
2810 * @since BuddyPress (1.5)
2811 */
2812function bp_groups_activity_feed() {
2813        if ( !bp_is_active( 'groups' ) || !bp_is_active( 'activity' ) || !bp_is_group() )
2814                return; ?>
2815
2816        <link rel="alternate" type="application/rss+xml" title="<?php bloginfo( 'name' ) ?> | <?php bp_current_group_name() ?> | <?php _e( 'Group Activity RSS Feed', 'buddypress' ) ?>" href="<?php bp_group_activity_feed_link() ?>" />
2817
2818<?php
2819}
2820add_action( 'bp_head', 'bp_groups_activity_feed' );
2821
2822function bp_group_activity_feed_link() {
2823        echo bp_get_group_activity_feed_link();
2824}
2825        function bp_get_group_activity_feed_link() {
2826                global $bp;
2827
2828                return apply_filters( 'bp_get_group_activity_feed_link', bp_get_group_permalink( $bp->groups->current_group ) . 'feed/' );
2829        }
2830
2831/**
2832 * Echoes the output of bp_get_current_group_id()
2833 *
2834 * @package BuddyPress
2835 * @since BuddyPress (1.5)
2836 */
2837function bp_current_group_id() {
2838        echo bp_get_current_group_id();
2839}
2840        /**
2841         * Returns the ID of the current group
2842         *
2843         * @package BuddyPress
2844         * @since BuddyPress (1.5)
2845         * @uses apply_filters() Filter bp_get_current_group_id to modify this output
2846         *
2847         * @return int $current_group_id The id of the current group, if there is one
2848         */
2849        function bp_get_current_group_id() {
2850                $current_group = groups_get_current_group();
2851
2852                $current_group_id = isset( $current_group->id ) ? (int) $current_group->id : 0;
2853
2854                return apply_filters( 'bp_get_current_group_id', $current_group_id, $current_group );
2855        }
2856
2857/**
2858 * Echoes the output of bp_get_current_group_slug()
2859 *
2860 * @package BuddyPress
2861 * @since BuddyPress (1.5)
2862 */
2863function bp_current_group_slug() {
2864        echo bp_get_current_group_slug();
2865}
2866        /**
2867         * Returns the slug of the current group
2868         *
2869         * @package BuddyPress
2870         * @since BuddyPress (1.5)
2871         * @uses apply_filters() Filter bp_get_current_group_slug to modify this output
2872         *
2873         * @return str $current_group_slug The slug of the current group, if there is one
2874         */
2875        function bp_get_current_group_slug() {
2876                $current_group = groups_get_current_group();
2877
2878                $current_group_slug = isset( $current_group->slug ) ? $current_group->slug : '';
2879
2880                return apply_filters( 'bp_get_current_group_slug', $current_group_slug, $current_group );
2881        }
2882
2883/**
2884 * Echoes the output of bp_get_current_group_name()
2885 *
2886 * @package BuddyPress
2887 */
2888function bp_current_group_name() {
2889        echo bp_get_current_group_name();
2890}
2891        /**
2892         * Returns the name of the current group
2893         *
2894         * @package BuddyPress
2895         * @since BuddyPress (1.5)
2896         * @uses apply_filters() Filter bp_get_current_group_name to modify this output
2897         *
2898         * @return str The name of the current group, if there is one
2899         */
2900        function bp_get_current_group_name() {
2901                global $bp;
2902
2903                $name = apply_filters( 'bp_get_group_name', $bp->groups->current_group->name );
2904                return apply_filters( 'bp_get_current_group_name', $name );
2905        }
2906
2907function bp_groups_action_link( $action = '', $query_args = '', $nonce = false ) {
2908        echo bp_get_groups_action_link( $action, $query_args, $nonce );
2909}
2910        function bp_get_groups_action_link( $action = '', $query_args = '', $nonce = false ) {
2911                global $bp;
2912
2913                // Must be a group
2914                if ( empty( $bp->groups->current_group->id ) )
2915                        return;
2916
2917                // Append $action to $url if provided
2918                if ( !empty( $action ) )
2919                        $url = bp_get_group_permalink( groups_get_current_group() ) . $action;
2920                else
2921                        $url = bp_get_group_permalink( groups_get_current_group() );
2922
2923                // Add a slash at the end of our user url
2924                $url = trailingslashit( $url );
2925
2926                // Add possible query arg
2927                if ( !empty( $query_args ) && is_array( $query_args ) )
2928                        $url = add_query_arg( $query_args, $url );
2929
2930                // To nonce, or not to nonce...
2931                if ( true === $nonce )
2932                        $url = wp_nonce_url( $url );
2933                elseif ( is_string( $nonce ) )
2934                        $url = wp_nonce_url( $url, $nonce );
2935
2936                // Return the url, if there is one
2937                if ( !empty( $url ) )
2938                        return $url;
2939        }
2940?>