mirror of
https://gh.wpcy.net/https://github.com/buddypress/buddypress.git
synced 2026-06-01 05:28:27 +08:00
Also fix some logic that was causing the function to return true when the group avatar matched the default avatar (meaning that no local avatar had been uploaded). See r7769 Fixes #5380 Props imath git-svn-id: https://buddypress.svn.wordpress.org/trunk@8244 cdf35c40-ae34-48e0-9cc9-0c9da1808c22
3724 lines
113 KiB
PHP
3724 lines
113 KiB
PHP
<?php
|
|
|
|
/**
|
|
* BuddyPress Groups Template Functions
|
|
*
|
|
* @package BuddyPress
|
|
* @subpackage GroupsTemplate
|
|
*/
|
|
|
|
// Exit if accessed directly
|
|
if ( !defined( 'ABSPATH' ) ) exit;
|
|
|
|
/**
|
|
* Output the groups component slug
|
|
*
|
|
* @package BuddyPress
|
|
* @subpackage Groups Template
|
|
* @since BuddyPress (1.5)
|
|
*
|
|
* @uses bp_get_groups_slug()
|
|
*/
|
|
function bp_groups_slug() {
|
|
echo bp_get_groups_slug();
|
|
}
|
|
/**
|
|
* Return the groups component slug
|
|
*
|
|
* @package BuddyPress
|
|
* @subpackage Groups Template
|
|
* @since BuddyPress (1.5)
|
|
*/
|
|
function bp_get_groups_slug() {
|
|
return apply_filters( 'bp_get_groups_slug', buddypress()->groups->slug );
|
|
}
|
|
|
|
/**
|
|
* Output the groups component root slug
|
|
*
|
|
* @package BuddyPress
|
|
* @subpackage Groups Template
|
|
* @since BuddyPress (1.5)
|
|
*
|
|
* @uses bp_get_groups_root_slug()
|
|
*/
|
|
function bp_groups_root_slug() {
|
|
echo bp_get_groups_root_slug();
|
|
}
|
|
/**
|
|
* Return the groups component root slug
|
|
*
|
|
* @package BuddyPress
|
|
* @subpackage Groups Template
|
|
* @since BuddyPress (1.5)
|
|
*/
|
|
function bp_get_groups_root_slug() {
|
|
return apply_filters( 'bp_get_groups_root_slug', buddypress()->groups->root_slug );
|
|
}
|
|
|
|
/**
|
|
* Output group directory permalink
|
|
*
|
|
* @package BuddyPress
|
|
* @subpackage Groups Template
|
|
* @since BuddyPress (1.5)
|
|
* @uses bp_get_groups_directory_permalink()
|
|
*/
|
|
function bp_groups_directory_permalink() {
|
|
echo bp_get_groups_directory_permalink();
|
|
}
|
|
/**
|
|
* Return group directory permalink
|
|
*
|
|
* @package BuddyPress
|
|
* @subpackage Groups Template
|
|
* @since BuddyPress (1.5)
|
|
* @uses apply_filters()
|
|
* @uses traisingslashit()
|
|
* @uses bp_get_root_domain()
|
|
* @uses bp_get_groups_root_slug()
|
|
* @return string
|
|
*/
|
|
function bp_get_groups_directory_permalink() {
|
|
return apply_filters( 'bp_get_groups_directory_permalink', trailingslashit( bp_get_root_domain() . '/' . bp_get_groups_root_slug() ) );
|
|
}
|
|
|
|
/*****************************************************************************
|
|
* Groups Template Class/Tags
|
|
**/
|
|
|
|
class BP_Groups_Template {
|
|
var $current_group = -1;
|
|
var $group_count;
|
|
var $groups;
|
|
var $group;
|
|
|
|
var $in_the_loop;
|
|
|
|
var $pag_page;
|
|
var $pag_num;
|
|
var $pag_links;
|
|
var $total_group_count;
|
|
|
|
var $single_group = false;
|
|
|
|
var $sort_by;
|
|
var $order;
|
|
|
|
function __construct( $args = array() ){
|
|
|
|
// Backward compatibility with old method of passing arguments
|
|
if ( ! is_array( $args ) || func_num_args() > 1 ) {
|
|
_deprecated_argument( __METHOD__, '1.7', sprintf( __( 'Arguments passed to %1$s should be in an associative array. See the inline documentation at %2$s for more details.', 'buddypress' ), __METHOD__, __FILE__ ) );
|
|
|
|
$old_args_keys = array(
|
|
0 => 'user_id',
|
|
1 => 'type',
|
|
2 => 'page',
|
|
3 => 'per_page',
|
|
4 => 'max',
|
|
5 => 'slug',
|
|
6 => 'search_terms',
|
|
7 => 'populate_extras',
|
|
8 => 'include',
|
|
9 => 'exclude',
|
|
10 => 'show_hidden',
|
|
11 => 'page_arg',
|
|
);
|
|
|
|
$func_args = func_get_args();
|
|
$args = bp_core_parse_args_array( $old_args_keys, $func_args );
|
|
}
|
|
|
|
$defaults = array(
|
|
'type' => 'active',
|
|
'page' => 1,
|
|
'per_page' => 20,
|
|
'max' => false,
|
|
'show_hidden' => false,
|
|
'page_arg' => 'grpage',
|
|
'user_id' => 0,
|
|
'slug' => false,
|
|
'include' => false,
|
|
'exclude' => false,
|
|
'search_terms' => '',
|
|
'meta_query' => false,
|
|
'populate_extras' => true,
|
|
'update_meta_cache' => true,
|
|
);
|
|
|
|
$r = wp_parse_args( $args, $defaults );
|
|
extract( $r );
|
|
|
|
$this->pag_page = isset( $_REQUEST[$page_arg] ) ? intval( $_REQUEST[$page_arg] ) : $page;
|
|
$this->pag_num = isset( $_REQUEST['num'] ) ? intval( $_REQUEST['num'] ) : $per_page;
|
|
|
|
if ( bp_current_user_can( 'bp_moderate' ) || ( is_user_logged_in() && $user_id == bp_loggedin_user_id() ) )
|
|
$show_hidden = true;
|
|
|
|
if ( 'invites' == $type ) {
|
|
$this->groups = groups_get_invites_for_user( $user_id, $this->pag_num, $this->pag_page, $exclude );
|
|
} else if ( 'single-group' == $type ) {
|
|
$group = new stdClass;
|
|
$group->group_id = bp_get_current_group_id();
|
|
$this->groups = array( $group );
|
|
} else {
|
|
$this->groups = groups_get_groups( array(
|
|
'type' => $type,
|
|
'order' => $order,
|
|
'orderby' => $orderby,
|
|
'per_page' => $this->pag_num,
|
|
'page' => $this->pag_page,
|
|
'user_id' => $user_id,
|
|
'search_terms' => $search_terms,
|
|
'meta_query' => $meta_query,
|
|
'include' => $include,
|
|
'exclude' => $exclude,
|
|
'populate_extras' => $populate_extras,
|
|
'update_meta_cache' => $update_meta_cache,
|
|
'show_hidden' => $show_hidden
|
|
) );
|
|
}
|
|
|
|
if ( 'invites' == $type ) {
|
|
$this->total_group_count = (int) $this->groups['total'];
|
|
$this->group_count = (int) $this->groups['total'];
|
|
$this->groups = $this->groups['groups'];
|
|
} else if ( 'single-group' == $type ) {
|
|
$this->single_group = true;
|
|
$this->total_group_count = 1;
|
|
$this->group_count = 1;
|
|
} else {
|
|
if ( empty( $max ) || $max >= (int) $this->groups['total'] ) {
|
|
$this->total_group_count = (int) $this->groups['total'];
|
|
} else {
|
|
$this->total_group_count = (int) $max;
|
|
}
|
|
|
|
$this->groups = $this->groups['groups'];
|
|
|
|
if ( !empty( $max ) ) {
|
|
if ( $max >= count( $this->groups ) ) {
|
|
$this->group_count = count( $this->groups );
|
|
} else {
|
|
$this->group_count = (int) $max;
|
|
}
|
|
} else {
|
|
$this->group_count = count( $this->groups );
|
|
}
|
|
}
|
|
|
|
// Build pagination links
|
|
if ( (int) $this->total_group_count && (int) $this->pag_num ) {
|
|
$this->pag_links = paginate_links( array(
|
|
'base' => add_query_arg( array( $page_arg => '%#%', 'num' => $this->pag_num, 's' => $search_terms, 'sortby' => $this->sort_by, 'order' => $this->order ) ),
|
|
'format' => '',
|
|
'total' => ceil( (int) $this->total_group_count / (int) $this->pag_num ),
|
|
'current' => $this->pag_page,
|
|
'prev_text' => _x( '←', 'Group pagination previous text', 'buddypress' ),
|
|
'next_text' => _x( '→', 'Group pagination next text', 'buddypress' ),
|
|
'mid_size' => 1
|
|
) );
|
|
}
|
|
}
|
|
|
|
function has_groups() {
|
|
if ( $this->group_count )
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
|
|
function next_group() {
|
|
$this->current_group++;
|
|
$this->group = $this->groups[$this->current_group];
|
|
|
|
return $this->group;
|
|
}
|
|
|
|
function rewind_groups() {
|
|
$this->current_group = -1;
|
|
if ( $this->group_count > 0 ) {
|
|
$this->group = $this->groups[0];
|
|
}
|
|
}
|
|
|
|
function groups() {
|
|
if ( $this->current_group + 1 < $this->group_count ) {
|
|
return true;
|
|
} elseif ( $this->current_group + 1 == $this->group_count ) {
|
|
do_action('group_loop_end');
|
|
// Do some cleaning up after the loop
|
|
$this->rewind_groups();
|
|
}
|
|
|
|
$this->in_the_loop = false;
|
|
return false;
|
|
}
|
|
|
|
function the_group() {
|
|
$this->in_the_loop = true;
|
|
$this->group = $this->next_group();
|
|
|
|
if ( $this->single_group )
|
|
$this->group = groups_get_current_group();
|
|
|
|
if ( 0 == $this->current_group ) // loop has just started
|
|
do_action('group_loop_start');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Start the Groups Template Loop
|
|
*
|
|
* See the $defaults definition below for a description of parameters.
|
|
*
|
|
* Note that the 'type' parameter overrides 'order' and 'orderby'. See
|
|
* BP_Groups_Group::get() for more details.
|
|
*
|
|
* @param array $args
|
|
* @return bool True if there are groups to display that match the params
|
|
*/
|
|
function bp_has_groups( $args = '' ) {
|
|
global $groups_template, $bp;
|
|
|
|
/***
|
|
* Set the defaults based on the current page. Any of these will be overridden
|
|
* if arguments are directly passed into the loop. Custom plugins should always
|
|
* pass their parameters directly to the loop.
|
|
*/
|
|
$slug = false;
|
|
$type = '';
|
|
$user_id = 0;
|
|
$order = '';
|
|
|
|
// User filtering
|
|
if ( bp_displayed_user_id() )
|
|
$user_id = bp_displayed_user_id();
|
|
|
|
// Type
|
|
// @todo What is $order? At some point it was removed incompletely?
|
|
if ( bp_is_current_action( 'my-groups' ) ) {
|
|
if ( 'most-popular' == $order ) {
|
|
$type = 'popular';
|
|
} elseif ( 'alphabetically' == $order ) {
|
|
$type = 'alphabetical';
|
|
}
|
|
} elseif ( bp_is_current_action( 'invites' ) ) {
|
|
$type = 'invites';
|
|
} elseif ( isset( $bp->groups->current_group->slug ) && $bp->groups->current_group->slug ) {
|
|
$type = 'single-group';
|
|
$slug = $bp->groups->current_group->slug;
|
|
}
|
|
|
|
// Default search string
|
|
if ( ! empty( $_REQUEST['group-filter-box'] ) ) {
|
|
$search_terms = $_REQUEST['group-filter-box'];
|
|
} elseif ( isset( $_REQUEST['s'] ) && !empty( $_REQUEST['s'] ) ) {
|
|
$search_terms = $_REQUEST['s'];
|
|
} else {
|
|
$search_terms = false;
|
|
}
|
|
|
|
$defaults = array(
|
|
'type' => $type, // 'type' is an override for 'order' and 'orderby'. See docblock.
|
|
'order' => 'DESC',
|
|
'orderby' => 'last_activity',
|
|
'page' => 1,
|
|
'per_page' => 20,
|
|
'max' => false,
|
|
'show_hidden' => false,
|
|
|
|
'page_arg' => 'grpage', // See https://buddypress.trac.wordpress.org/ticket/3679
|
|
|
|
'user_id' => $user_id, // Pass a user ID to limit to groups this user has joined
|
|
'slug' => $slug, // Pass a group slug to only return that group
|
|
'search_terms' => $search_terms, // Pass search terms to return only matching groups
|
|
'meta_query' => false, // Filter by groupmeta. See WP_Meta_Query for format
|
|
'include' => false, // Pass comma separated list or array of group ID's to return only these groups
|
|
'exclude' => false, // Pass comma separated list or array of group ID's to exclude these groups
|
|
|
|
'populate_extras' => true, // Get extra meta - is_member, is_banned
|
|
'update_meta_cache' => true,
|
|
);
|
|
|
|
$r = bp_parse_args( $args, $defaults, 'has_groups' );
|
|
|
|
$groups_template = new BP_Groups_Template( array(
|
|
'type' => $r['type'],
|
|
'order' => $r['order'],
|
|
'orderby' => $r['orderby'],
|
|
'page' => (int) $r['page'],
|
|
'per_page' => (int) $r['per_page'],
|
|
'max' => (int) $r['max'],
|
|
'show_hidden' => $r['show_hidden'],
|
|
'page_arg' => $r['page_arg'],
|
|
'user_id' => (int) $r['user_id'],
|
|
'slug' => $r['slug'],
|
|
'search_terms' => $r['search_terms'],
|
|
'meta_query' => $r['meta_query'],
|
|
'include' => $r['include'],
|
|
'exclude' => $r['exclude'],
|
|
'populate_extras' => (bool) $r['populate_extras'],
|
|
'update_meta_cache' => (bool) $r['update_meta_cache'],
|
|
) );
|
|
|
|
return apply_filters( 'bp_has_groups', $groups_template->has_groups(), $groups_template, $r );
|
|
}
|
|
|
|
function bp_groups() {
|
|
global $groups_template;
|
|
return $groups_template->groups();
|
|
}
|
|
|
|
function bp_the_group() {
|
|
global $groups_template;
|
|
return $groups_template->the_group();
|
|
}
|
|
|
|
function bp_group_is_visible( $group = false ) {
|
|
global $groups_template;
|
|
|
|
if ( bp_current_user_can( 'bp_moderate' ) )
|
|
return true;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
if ( 'public' == $group->status ) {
|
|
return true;
|
|
} else {
|
|
if ( groups_is_user_member( bp_loggedin_user_id(), $group->id ) ) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
function bp_group_id( $group = false ) {
|
|
echo bp_get_group_id( $group );
|
|
}
|
|
function bp_get_group_id( $group = false ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
return apply_filters( 'bp_get_group_id', $group->id );
|
|
}
|
|
|
|
/**
|
|
* Output the row class of a group
|
|
*
|
|
* @since BuddyPress (1.7)
|
|
*/
|
|
function bp_group_class() {
|
|
echo bp_get_group_class();
|
|
}
|
|
/**
|
|
* Return the row class of a group
|
|
*
|
|
* @global BP_Groups_Template $groups_template
|
|
* @return string Row class of the group
|
|
* @since BuddyPress (1.7)
|
|
*/
|
|
function bp_get_group_class() {
|
|
global $groups_template;
|
|
|
|
$classes = array();
|
|
$pos_in_loop = (int) $groups_template->current_group;
|
|
|
|
// If we've only one group in the loop, don't both with odd and even.
|
|
if ( $groups_template->group_count > 1 )
|
|
$classes[] = ( $pos_in_loop % 2 ) ? 'even' : 'odd';
|
|
else
|
|
$classes[] = 'bp-single-group';
|
|
|
|
// Group type - public, private, hidden.
|
|
$classes[] = esc_attr( $groups_template->group->status );
|
|
|
|
// User's group status
|
|
if ( bp_is_user_active() ) {
|
|
if ( bp_group_is_admin() )
|
|
$classes[] = 'is-admin';
|
|
|
|
if ( bp_group_is_member() )
|
|
$classes[] = 'is-member';
|
|
|
|
if ( bp_group_is_mod() )
|
|
$classes[] = 'is-mod';
|
|
}
|
|
|
|
$classes = apply_filters( 'bp_get_group_class', $classes );
|
|
$classes = array_merge( $classes, array() );
|
|
$retval = 'class="' . join( ' ', $classes ) . '"';
|
|
|
|
return $retval;
|
|
}
|
|
|
|
function bp_group_name( $group = false ) {
|
|
echo bp_get_group_name( $group );
|
|
}
|
|
function bp_get_group_name( $group = false ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
return apply_filters( 'bp_get_group_name', $group->name );
|
|
}
|
|
|
|
function bp_group_type( $group = false ) {
|
|
echo bp_get_group_type( $group );
|
|
}
|
|
function bp_get_group_type( $group = false ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
if ( 'public' == $group->status ) {
|
|
$type = __( "Public Group", "buddypress" );
|
|
} else if ( 'hidden' == $group->status ) {
|
|
$type = __( "Hidden Group", "buddypress" );
|
|
} else if ( 'private' == $group->status ) {
|
|
$type = __( "Private Group", "buddypress" );
|
|
} else {
|
|
$type = ucwords( $group->status ) . ' ' . __( 'Group', 'buddypress' );
|
|
}
|
|
|
|
return apply_filters( 'bp_get_group_type', $type );
|
|
}
|
|
|
|
function bp_group_status( $group = false ) {
|
|
echo bp_get_group_status( $group );
|
|
}
|
|
function bp_get_group_status( $group = false ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
return apply_filters( 'bp_get_group_status', $group->status );
|
|
}
|
|
|
|
function bp_group_avatar( $args = '' ) {
|
|
echo bp_get_group_avatar( $args );
|
|
}
|
|
function bp_get_group_avatar( $args = '' ) {
|
|
global $bp, $groups_template;
|
|
|
|
$defaults = array(
|
|
'type' => 'full',
|
|
'width' => false,
|
|
'height' => false,
|
|
'class' => 'avatar',
|
|
'id' => false,
|
|
'alt' => sprintf( __( 'Group logo of %s', 'buddypress' ), $groups_template->group->name )
|
|
);
|
|
|
|
$r = wp_parse_args( $args, $defaults );
|
|
extract( $r, EXTR_SKIP );
|
|
|
|
/* Fetch the avatar from the folder, if not provide backwards compat. */
|
|
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 ) ) )
|
|
$avatar = '<img src="' . esc_url( $groups_template->group->avatar_thumb ) . '" class="avatar" alt="' . esc_attr( $groups_template->group->name ) . '" />';
|
|
|
|
return apply_filters( 'bp_get_group_avatar', $avatar );
|
|
}
|
|
|
|
function bp_group_avatar_thumb( $group = false ) {
|
|
echo bp_get_group_avatar_thumb( $group );
|
|
}
|
|
function bp_get_group_avatar_thumb( $group = false ) {
|
|
return bp_get_group_avatar( 'type=thumb' );
|
|
}
|
|
|
|
function bp_group_avatar_mini( $group = false ) {
|
|
echo bp_get_group_avatar_mini( $group );
|
|
}
|
|
function bp_get_group_avatar_mini( $group = false ) {
|
|
return bp_get_group_avatar( 'type=thumb&width=30&height=30' );
|
|
}
|
|
|
|
function bp_group_last_active( $group = false ) {
|
|
echo bp_get_group_last_active( $group );
|
|
}
|
|
function bp_get_group_last_active( $group = false ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
$last_active = $group->last_activity;
|
|
|
|
if ( !$last_active )
|
|
$last_active = groups_get_groupmeta( $group->id, 'last_activity' );
|
|
|
|
if ( empty( $last_active ) ) {
|
|
return __( 'not yet active', 'buddypress' );
|
|
} else {
|
|
return apply_filters( 'bp_get_group_last_active', bp_core_time_since( $last_active ) );
|
|
}
|
|
}
|
|
|
|
function bp_group_permalink( $group = false ) {
|
|
echo bp_get_group_permalink( $group );
|
|
}
|
|
function bp_get_group_permalink( $group = false ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
return apply_filters( 'bp_get_group_permalink', trailingslashit( bp_get_root_domain() . '/' . bp_get_groups_root_slug() . '/' . $group->slug . '/' ) );
|
|
}
|
|
|
|
function bp_group_admin_permalink( $group = false ) {
|
|
echo bp_get_group_admin_permalink( $group );
|
|
}
|
|
function bp_get_group_admin_permalink( $group = false ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
return apply_filters( 'bp_get_group_admin_permalink', trailingslashit( bp_get_group_permalink( $group ) . 'admin' ) );
|
|
}
|
|
|
|
function bp_group_slug( $group = false ) {
|
|
echo bp_get_group_slug( $group );
|
|
}
|
|
function bp_get_group_slug( $group = false ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
return apply_filters( 'bp_get_group_slug', $group->slug );
|
|
}
|
|
|
|
function bp_group_description( $group = false ) {
|
|
echo bp_get_group_description( $group );
|
|
}
|
|
function bp_get_group_description( $group = false ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
return apply_filters( 'bp_get_group_description', stripslashes($group->description) );
|
|
}
|
|
|
|
function bp_group_description_editable( $group = false ) {
|
|
echo bp_get_group_description_editable( $group );
|
|
}
|
|
function bp_get_group_description_editable( $group = false ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
return apply_filters( 'bp_get_group_description_editable', $group->description );
|
|
}
|
|
|
|
/**
|
|
* Output an excerpt of the group description.
|
|
*
|
|
* @param object $group Optional. The group being referenced. Defaults to the
|
|
* group currently being iterated on in the groups loop.
|
|
*/
|
|
function bp_group_description_excerpt( $group = false ) {
|
|
echo bp_get_group_description_excerpt( $group );
|
|
}
|
|
/**
|
|
* Get an excerpt of a group description.
|
|
*
|
|
* @param object $group Optional. The group being referenced. Defaults
|
|
* to the group currently being iterated on in the groups loop.
|
|
* @return string Excerpt.
|
|
*/
|
|
function bp_get_group_description_excerpt( $group = false ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) ) {
|
|
$group =& $groups_template->group;
|
|
}
|
|
|
|
return apply_filters( 'bp_get_group_description_excerpt', bp_create_excerpt( $group->description ), $group );
|
|
}
|
|
|
|
|
|
function bp_group_public_status( $group = false ) {
|
|
echo bp_get_group_public_status( $group );
|
|
}
|
|
function bp_get_group_public_status( $group = false ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
if ( $group->is_public ) {
|
|
return __( 'Public', 'buddypress' );
|
|
} else {
|
|
return __( 'Private', 'buddypress' );
|
|
}
|
|
}
|
|
|
|
function bp_group_is_public( $group = false ) {
|
|
echo bp_get_group_is_public( $group );
|
|
}
|
|
function bp_get_group_is_public( $group = false ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
return apply_filters( 'bp_get_group_is_public', $group->is_public );
|
|
}
|
|
|
|
function bp_group_date_created( $group = false ) {
|
|
echo bp_get_group_date_created( $group );
|
|
}
|
|
function bp_get_group_date_created( $group = false ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
return apply_filters( 'bp_get_group_date_created', bp_core_time_since( strtotime( $group->date_created ) ) );
|
|
}
|
|
|
|
function bp_group_creator_username( $group = false ) {
|
|
echo bp_get_group_creator_username( $group );
|
|
}
|
|
function bp_get_group_creator_username( $group = false ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
return apply_filters( 'bp_get_group_creator_username', bp_core_get_user_displayname( $group->creator_id ) );
|
|
}
|
|
|
|
function bp_group_creator_id( $group = false ) {
|
|
echo bp_get_group_creator_id( $group );
|
|
}
|
|
function bp_get_group_creator_id( $group = false ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
return apply_filters( 'bp_get_group_creator_id', $group->creator_id );
|
|
}
|
|
|
|
function bp_group_creator_permalink( $group = false ) {
|
|
echo bp_get_group_creator_permalink( $group );
|
|
}
|
|
function bp_get_group_creator_permalink( $group = false ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
return apply_filters( 'bp_get_group_creator_permalink', bp_core_get_user_domain( $group->creator_id ) );
|
|
}
|
|
|
|
function bp_is_group_creator( $group = false, $user_id = 0 ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
if ( empty( $user_id ) )
|
|
$user_id = bp_loggedin_user_id();
|
|
|
|
return (bool) ( $group->creator_id == $user_id );
|
|
}
|
|
|
|
function bp_group_creator_avatar( $group = false, $args = array() ) {
|
|
echo bp_get_group_creator_avatar( $group, $args );
|
|
}
|
|
function bp_get_group_creator_avatar( $group = false, $args = array() ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
$defaults = array(
|
|
'type' => 'full',
|
|
'width' => false,
|
|
'height' => false,
|
|
'class' => 'avatar',
|
|
'id' => false,
|
|
'alt' => sprintf( __( 'Group creator avatar of %s', 'buddypress' ), bp_core_get_user_displayname( $group->creator_id ) )
|
|
);
|
|
|
|
$r = wp_parse_args( $args, $defaults );
|
|
extract( $r, EXTR_SKIP );
|
|
|
|
$avatar = bp_core_fetch_avatar( array( 'item_id' => $group->creator_id, 'type' => $type, 'css_id' => $id, 'class' => $class, 'width' => $width, 'height' => $height, 'alt' => $alt ) );
|
|
|
|
return apply_filters( 'bp_get_group_creator_avatar', $avatar );
|
|
}
|
|
|
|
|
|
function bp_group_is_admin() {
|
|
return bp_is_item_admin();
|
|
}
|
|
|
|
function bp_group_is_mod() {
|
|
return bp_is_item_mod();
|
|
}
|
|
|
|
function bp_group_list_admins( $group = false ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) ) {
|
|
$group =& $groups_template->group;
|
|
}
|
|
|
|
// fetch group admins if 'populate_extras' flag is false
|
|
if ( empty( $group->args['populate_extras'] ) ) {
|
|
$query = new BP_Group_Member_Query( array(
|
|
'group_id' => $group->id,
|
|
'group_role' => 'admin',
|
|
'type' => 'first_joined',
|
|
) );
|
|
|
|
if ( ! empty( $query->results ) ) {
|
|
$group->admins = $query->results;
|
|
}
|
|
}
|
|
|
|
if ( ! empty( $group->admins ) ) { ?>
|
|
<ul id="group-admins">
|
|
<?php foreach( (array) $group->admins as $admin ) { ?>
|
|
<li>
|
|
<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>
|
|
</li>
|
|
<?php } ?>
|
|
</ul>
|
|
<?php } else { ?>
|
|
<span class="activity"><?php _e( 'No Admins', 'buddypress' ) ?></span>
|
|
<?php } ?>
|
|
<?php
|
|
}
|
|
|
|
function bp_group_list_mods( $group = false ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) ) {
|
|
$group =& $groups_template->group;
|
|
}
|
|
|
|
// fetch group mods if 'populate_extras' flag is false
|
|
if ( empty( $group->args['populate_extras'] ) ) {
|
|
$query = new BP_Group_Member_Query( array(
|
|
'group_id' => $group->id,
|
|
'group_role' => 'mod',
|
|
'type' => 'first_joined',
|
|
) );
|
|
|
|
if ( ! empty( $query->results ) ) {
|
|
$group->mods = $query->results;
|
|
}
|
|
}
|
|
|
|
if ( ! empty( $group->mods ) ) : ?>
|
|
|
|
<ul id="group-mods">
|
|
|
|
<?php foreach( (array) $group->mods as $mod ) { ?>
|
|
|
|
<li>
|
|
<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>
|
|
</li>
|
|
|
|
<?php } ?>
|
|
|
|
</ul>
|
|
|
|
<?php else : ?>
|
|
|
|
<span class="activity"><?php _e( 'No Mods', 'buddypress' ) ?></span>
|
|
|
|
<?php endif;
|
|
|
|
}
|
|
|
|
/**
|
|
* Return a list of user_ids for a group's admins
|
|
*
|
|
* @package BuddyPress
|
|
* @since BuddyPress (1.5)
|
|
*
|
|
* @param BP_Groups_Group $group (optional) The group being queried. Defaults to the current group in the loop
|
|
* @param string $format 'string' to get a comma-separated string, 'array' to get an array
|
|
* @return mixed $admin_ids A string or array of user_ids
|
|
*/
|
|
function bp_group_admin_ids( $group = false, $format = 'string' ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
$admin_ids = array();
|
|
|
|
if ( $group->admins ) {
|
|
foreach( $group->admins as $admin ) {
|
|
$admin_ids[] = $admin->user_id;
|
|
}
|
|
}
|
|
|
|
if ( 'string' == $format )
|
|
$admin_ids = implode( ',', $admin_ids );
|
|
|
|
return apply_filters( 'bp_group_admin_ids', $admin_ids );
|
|
}
|
|
|
|
/**
|
|
* Return a list of user_ids for a group's moderators
|
|
*
|
|
* @package BuddyPress
|
|
* @since BuddyPress (1.5)
|
|
*
|
|
* @param BP_Groups_Group $group (optional) The group being queried. Defaults to the current group in the loop
|
|
* @param string $format 'string' to get a comma-separated string, 'array' to get an array
|
|
* @return mixed $mod_ids A string or array of user_ids
|
|
*/
|
|
function bp_group_mod_ids( $group = false, $format = 'string' ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
$mod_ids = array();
|
|
|
|
if ( $group->mods ) {
|
|
foreach( $group->mods as $mod ) {
|
|
$mod_ids[] = $mod->user_id;
|
|
}
|
|
}
|
|
|
|
if ( 'string' == $format )
|
|
$mod_ids = implode( ',', $mod_ids );
|
|
|
|
return apply_filters( 'bp_group_mod_ids', $mod_ids );
|
|
}
|
|
|
|
function bp_group_all_members_permalink() {
|
|
echo bp_get_group_all_members_permalink();
|
|
}
|
|
function bp_get_group_all_members_permalink( $group = false ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
return apply_filters( 'bp_get_group_all_members_permalink', bp_get_group_permalink( $group ) . 'members' );
|
|
}
|
|
|
|
function bp_group_search_form() {
|
|
global $bp;
|
|
|
|
$action = bp_displayed_user_domain() . bp_get_groups_slug() . '/my-groups/search/';
|
|
$label = __('Filter Groups', 'buddypress');
|
|
$name = 'group-filter-box';
|
|
|
|
$search_form_html = '<form action="' . $action . '" id="group-search-form" method="post">
|
|
<label for="'. $name .'" id="'. $name .'-label">'. $label .'</label>
|
|
<input type="search" name="'. $name . '" id="'. $name .'" value="'. $value .'"'. $disabled .' />
|
|
|
|
'. wp_nonce_field( 'group-filter-box', '_wpnonce_group_filter', true, false ) .'
|
|
</form>';
|
|
|
|
echo apply_filters( 'bp_group_search_form', $search_form_html );
|
|
}
|
|
|
|
function bp_group_show_no_groups_message() {
|
|
if ( !groups_total_groups_for_user( bp_displayed_user_id() ) )
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
|
|
function bp_group_is_activity_permalink() {
|
|
|
|
if ( !bp_is_single_item() || !bp_is_groups_component() || !bp_is_current_action( bp_get_activity_slug() ) )
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
function bp_groups_pagination_links() {
|
|
echo bp_get_groups_pagination_links();
|
|
}
|
|
function bp_get_groups_pagination_links() {
|
|
global $groups_template;
|
|
|
|
return apply_filters( 'bp_get_groups_pagination_links', $groups_template->pag_links );
|
|
}
|
|
|
|
function bp_groups_pagination_count() {
|
|
echo bp_get_groups_pagination_count();
|
|
}
|
|
function bp_get_groups_pagination_count() {
|
|
global $groups_template;
|
|
|
|
$start_num = intval( ( $groups_template->pag_page - 1 ) * $groups_template->pag_num ) + 1;
|
|
$from_num = bp_core_number_format( $start_num );
|
|
$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 ) );
|
|
$total = bp_core_number_format( $groups_template->total_group_count );
|
|
|
|
return apply_filters( 'bp_get_groups_pagination_count', sprintf( _n( 'Viewing group %1$s to %2$s (of %3$s group)', 'Viewing group %1$s to %2$s (of %3$s groups)', $total, 'buddypress' ), $from_num, $to_num, $total ), $from_num, $to_num, $total );
|
|
}
|
|
|
|
function bp_groups_auto_join() {
|
|
global $bp;
|
|
|
|
return apply_filters( 'bp_groups_auto_join', (bool)$bp->groups->auto_join );
|
|
}
|
|
|
|
function bp_group_total_members( $group = false ) {
|
|
echo bp_get_group_total_members( $group );
|
|
}
|
|
function bp_get_group_total_members( $group = false ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
return apply_filters( 'bp_get_group_total_members', $group->total_member_count );
|
|
}
|
|
|
|
function bp_group_member_count() {
|
|
echo bp_get_group_member_count();
|
|
}
|
|
function bp_get_group_member_count() {
|
|
global $groups_template;
|
|
|
|
if ( 1 == (int) $groups_template->group->total_member_count )
|
|
return apply_filters( 'bp_get_group_member_count', sprintf( __( '%s member', 'buddypress' ), bp_core_number_format( $groups_template->group->total_member_count ) ) );
|
|
else
|
|
return apply_filters( 'bp_get_group_member_count', sprintf( __( '%s members', 'buddypress' ), bp_core_number_format( $groups_template->group->total_member_count ) ) );
|
|
}
|
|
|
|
function bp_group_forum_permalink() {
|
|
echo bp_get_group_forum_permalink();
|
|
}
|
|
function bp_get_group_forum_permalink( $group = false ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
return apply_filters( 'bp_get_group_forum_permalink', bp_get_group_permalink( $group ) . 'forum' );
|
|
}
|
|
|
|
function bp_group_forum_topic_count( $args = '' ) {
|
|
echo bp_get_group_forum_topic_count( $args );
|
|
}
|
|
function bp_get_group_forum_topic_count( $args = '' ) {
|
|
global $groups_template;
|
|
|
|
$defaults = array(
|
|
'showtext' => false
|
|
);
|
|
|
|
$r = wp_parse_args( $args, $defaults );
|
|
extract( $r, EXTR_SKIP );
|
|
|
|
if ( !$forum_id = groups_get_groupmeta( $groups_template->group->id, 'forum_id' ) )
|
|
return false;
|
|
|
|
if ( !bp_is_active( 'forums' ) )
|
|
return false;
|
|
|
|
if ( !$groups_template->group->forum_counts )
|
|
$groups_template->group->forum_counts = bp_forums_get_forum_topicpost_count( (int) $forum_id );
|
|
|
|
if ( (bool) $showtext ) {
|
|
if ( 1 == (int) $groups_template->group->forum_counts[0]->topics )
|
|
$total_topics = sprintf( __( '%d topic', 'buddypress' ), (int) $groups_template->group->forum_counts[0]->topics );
|
|
else
|
|
$total_topics = sprintf( __( '%d topics', 'buddypress' ), (int) $groups_template->group->forum_counts[0]->topics );
|
|
} else {
|
|
$total_topics = (int) $groups_template->group->forum_counts[0]->topics;
|
|
}
|
|
|
|
return apply_filters( 'bp_get_group_forum_topic_count', $total_topics, (bool)$showtext );
|
|
}
|
|
|
|
function bp_group_forum_post_count( $args = '' ) {
|
|
echo bp_get_group_forum_post_count( $args );
|
|
}
|
|
function bp_get_group_forum_post_count( $args = '' ) {
|
|
global $groups_template;
|
|
|
|
$defaults = array(
|
|
'showtext' => false
|
|
);
|
|
|
|
$r = wp_parse_args( $args, $defaults );
|
|
extract( $r, EXTR_SKIP );
|
|
|
|
if ( !$forum_id = groups_get_groupmeta( $groups_template->group->id, 'forum_id' ) )
|
|
return false;
|
|
|
|
if ( !bp_is_active( 'forums' ) )
|
|
return false;
|
|
|
|
if ( !$groups_template->group->forum_counts )
|
|
$groups_template->group->forum_counts = bp_forums_get_forum_topicpost_count( (int) $forum_id );
|
|
|
|
if ( (bool) $showtext ) {
|
|
if ( 1 == (int) $groups_template->group->forum_counts[0]->posts )
|
|
$total_posts = sprintf( __( '%d post', 'buddypress' ), (int) $groups_template->group->forum_counts[0]->posts );
|
|
else
|
|
$total_posts = sprintf( __( '%d posts', 'buddypress' ), (int) $groups_template->group->forum_counts[0]->posts );
|
|
} else {
|
|
$total_posts = (int) $groups_template->group->forum_counts[0]->posts;
|
|
}
|
|
|
|
return apply_filters( 'bp_get_group_forum_post_count', $total_posts, (bool)$showtext );
|
|
}
|
|
|
|
function bp_group_is_forum_enabled( $group = false ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
if ( ! empty( $group->enable_forum ) )
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
|
|
function bp_group_show_forum_setting( $group = false ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
if ( $group->enable_forum )
|
|
echo ' checked="checked"';
|
|
}
|
|
|
|
function bp_group_show_status_setting( $setting, $group = false ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
if ( $setting == $group->status )
|
|
echo ' checked="checked"';
|
|
}
|
|
|
|
/**
|
|
* Get the 'checked' value, if needed, for a given invite_status on the group create/admin screens
|
|
*
|
|
* @package BuddyPress
|
|
* @subpackage Groups Template
|
|
* @since BuddyPress (1.5)
|
|
*
|
|
* @param string $setting The setting you want to check against ('members', 'mods', or 'admins')
|
|
* @param BP_Groups_Group $group (optional) The group whose status you want to check
|
|
*/
|
|
function bp_group_show_invite_status_setting( $setting, $group = false ) {
|
|
$group_id = isset( $group->id ) ? $group->id : false;
|
|
|
|
$invite_status = bp_group_get_invite_status( $group_id );
|
|
|
|
if ( $setting == $invite_status )
|
|
echo ' checked="checked"';
|
|
}
|
|
|
|
/**
|
|
* Get the invite status of a group
|
|
*
|
|
* 'invite_status' became part of BuddyPress in BP 1.5. In order to provide backward compatibility,
|
|
* groups without a status set will default to 'members', ie all members in a group can send
|
|
* invitations. Filter 'bp_group_invite_status_fallback' to change this fallback behavior.
|
|
*
|
|
* This function can be used either in or out of the loop.
|
|
*
|
|
* @package BuddyPress
|
|
* @subpackage Groups Template
|
|
* @since BuddyPress (1.5)
|
|
*
|
|
* @param int $group_id (optional) The id of the group whose status you want to check
|
|
* @return mixed Returns false when no group can be found. Otherwise returns the group invite
|
|
* status, from among 'members', 'mods', and 'admins'
|
|
*/
|
|
function bp_group_get_invite_status( $group_id = false ) {
|
|
global $bp, $groups_template;
|
|
|
|
if ( !$group_id ) {
|
|
if ( isset( $bp->groups->current_group->id ) ) {
|
|
// Default to the current group first
|
|
$group_id = $bp->groups->current_group->id;
|
|
} else if ( isset( $groups_template->group->id ) ) {
|
|
// Then see if we're in the loop
|
|
$group_id = $groups_template->group->id;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
$invite_status = groups_get_groupmeta( $group_id, 'invite_status' );
|
|
|
|
// Backward compatibility. When 'invite_status' is not set, fall back to a default value
|
|
if ( !$invite_status ) {
|
|
$invite_status = apply_filters( 'bp_group_invite_status_fallback', 'members' );
|
|
}
|
|
|
|
return apply_filters( 'bp_group_get_invite_status', $invite_status, $group_id );
|
|
}
|
|
|
|
/**
|
|
* Can the logged-in user send invitations in the specified group?
|
|
*
|
|
* @package BuddyPress
|
|
* @subpackage Groups Template
|
|
* @since BuddyPress (1.5)
|
|
*
|
|
* @param int $group_id (optional) The id of the group whose status you want to check
|
|
* @return bool $can_send_invites
|
|
*/
|
|
function bp_groups_user_can_send_invites( $group_id = false ) {
|
|
global $bp;
|
|
|
|
$can_send_invites = false;
|
|
$invite_status = false;
|
|
|
|
if ( is_user_logged_in() ) {
|
|
if ( bp_current_user_can( 'bp_moderate' ) ) {
|
|
// Super admins can always send invitations
|
|
$can_send_invites = true;
|
|
|
|
} else {
|
|
// If no $group_id is provided, default to the current group id
|
|
if ( !$group_id )
|
|
$group_id = isset( $bp->groups->current_group->id ) ? $bp->groups->current_group->id : 0;
|
|
|
|
// If no group has been found, bail
|
|
if ( !$group_id )
|
|
return false;
|
|
|
|
$invite_status = bp_group_get_invite_status( $group_id );
|
|
if ( !$invite_status )
|
|
return false;
|
|
|
|
switch ( $invite_status ) {
|
|
case 'admins' :
|
|
if ( groups_is_user_admin( bp_loggedin_user_id(), $group_id ) )
|
|
$can_send_invites = true;
|
|
break;
|
|
|
|
case 'mods' :
|
|
if ( groups_is_user_mod( bp_loggedin_user_id(), $group_id ) || groups_is_user_admin( bp_loggedin_user_id(), $group_id ) )
|
|
$can_send_invites = true;
|
|
break;
|
|
|
|
case 'members' :
|
|
if ( groups_is_user_member( bp_loggedin_user_id(), $group_id ) )
|
|
$can_send_invites = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
return apply_filters( 'bp_groups_user_can_send_invites', $can_send_invites, $group_id, $invite_status );
|
|
}
|
|
|
|
/**
|
|
* Since BuddyPress 1.0, this generated the group settings admin/member screen.
|
|
* As of BuddyPress 1.5 (r4489), and because this function outputs HTML, it was moved into /bp-default/groups/single/admin.php.
|
|
*
|
|
* @deprecated 1.5
|
|
* @deprecated No longer used.
|
|
* @since BuddyPress (1.0)
|
|
* @todo Remove in 1.4
|
|
*/
|
|
function bp_group_admin_memberlist( $admin_list = false, $group = false ) {
|
|
global $groups_template;
|
|
|
|
_deprecated_function( __FUNCTION__, '1.5', 'No longer used. See /bp-default/groups/single/admin.php' );
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
|
|
if ( $admins = groups_get_group_admins( $group->id ) ) : ?>
|
|
|
|
<ul id="admins-list" class="item-list<?php if ( !empty( $admin_list ) ) : ?> single-line<?php endif; ?>">
|
|
|
|
<?php foreach ( (array) $admins as $admin ) { ?>
|
|
|
|
<?php if ( !empty( $admin_list ) ) : ?>
|
|
|
|
<li>
|
|
|
|
<?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 ) ) ) ) ?>
|
|
|
|
<h5>
|
|
|
|
<?php echo bp_core_get_userlink( $admin->user_id ); ?>
|
|
|
|
<span class="small">
|
|
<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>
|
|
</span>
|
|
</h5>
|
|
</li>
|
|
|
|
<?php else : ?>
|
|
|
|
<li>
|
|
|
|
<?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 ) ) ) ) ?>
|
|
|
|
<h5><?php echo bp_core_get_userlink( $admin->user_id ) ?></h5>
|
|
<span class="activity">
|
|
<?php echo bp_core_get_last_activity( strtotime( $admin->date_modified ), __( 'joined %s', 'buddypress') ); ?>
|
|
</span>
|
|
|
|
<?php if ( bp_is_active( 'friends' ) ) : ?>
|
|
|
|
<div class="action">
|
|
|
|
<?php bp_add_friend_button( $admin->user_id ); ?>
|
|
|
|
</div>
|
|
|
|
<?php endif; ?>
|
|
|
|
</li>
|
|
|
|
<?php endif;
|
|
} ?>
|
|
|
|
</ul>
|
|
|
|
<?php else : ?>
|
|
|
|
<div id="message" class="info">
|
|
<p><?php _e( 'This group has no administrators', 'buddypress' ); ?></p>
|
|
</div>
|
|
|
|
<?php endif;
|
|
}
|
|
|
|
function bp_group_mod_memberlist( $admin_list = false, $group = false ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
if ( $group_mods = groups_get_group_mods( $group->id ) ) { ?>
|
|
|
|
<ul id="mods-list" class="item-list<?php if ( $admin_list ) { ?> single-line<?php } ?>">
|
|
|
|
<?php foreach ( (array) $group_mods as $mod ) { ?>
|
|
|
|
<?php if ( !empty( $admin_list ) ) { ?>
|
|
|
|
<li>
|
|
|
|
<?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 ) ) ) ) ?>
|
|
|
|
<h5>
|
|
<?php echo bp_core_get_userlink( $mod->user_id ); ?>
|
|
|
|
<span class="small">
|
|
<a href="<?php bp_group_member_promote_admin_link( array( 'user_id' => $mod->user_id ) ) ?>" class="button confirm mod-promote-to-admin" title="<?php esc_attr_e( 'Promote to Admin', 'buddypress' ); ?>"><?php _e( 'Promote to Admin', 'buddypress' ); ?></a>
|
|
<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>
|
|
</span>
|
|
</h5>
|
|
</li>
|
|
|
|
<?php } else { ?>
|
|
|
|
<li>
|
|
|
|
<?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 ) ) ) ) ?>
|
|
|
|
<h5><?php echo bp_core_get_userlink( $mod->user_id ) ?></h5>
|
|
|
|
<span class="activity"><?php echo bp_core_get_last_activity( strtotime( $mod->date_modified ), __( 'joined %s', 'buddypress') ); ?></span>
|
|
|
|
<?php if ( bp_is_active( 'friends' ) ) : ?>
|
|
|
|
<div class="action">
|
|
<?php bp_add_friend_button( $mod->user_id ) ?>
|
|
</div>
|
|
|
|
<?php endif; ?>
|
|
|
|
</li>
|
|
|
|
<?php } ?>
|
|
<?php } ?>
|
|
|
|
</ul>
|
|
|
|
<?php } else { ?>
|
|
|
|
<div id="message" class="info">
|
|
<p><?php _e( 'This group has no moderators', 'buddypress' ); ?></p>
|
|
</div>
|
|
|
|
<?php }
|
|
}
|
|
|
|
function bp_group_has_moderators( $group = false ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
return apply_filters( 'bp_group_has_moderators', groups_get_group_mods( $group->id ) );
|
|
}
|
|
|
|
function bp_group_member_promote_mod_link( $args = '' ) {
|
|
echo bp_get_group_member_promote_mod_link( $args );
|
|
}
|
|
function bp_get_group_member_promote_mod_link( $args = '' ) {
|
|
global $members_template, $groups_template;
|
|
|
|
$defaults = array(
|
|
'user_id' => $members_template->member->user_id,
|
|
'group' => &$groups_template->group
|
|
);
|
|
|
|
$r = wp_parse_args( $args, $defaults );
|
|
extract( $r, EXTR_SKIP );
|
|
|
|
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' ) );
|
|
}
|
|
|
|
function bp_group_member_promote_admin_link( $args = '' ) {
|
|
echo bp_get_group_member_promote_admin_link( $args );
|
|
}
|
|
function bp_get_group_member_promote_admin_link( $args = '' ) {
|
|
global $members_template, $groups_template;
|
|
|
|
$defaults = array(
|
|
'user_id' => !empty( $members_template->member->user_id ) ? $members_template->member->user_id : false,
|
|
'group' => &$groups_template->group
|
|
);
|
|
|
|
$r = wp_parse_args( $args, $defaults );
|
|
extract( $r, EXTR_SKIP );
|
|
|
|
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' ) );
|
|
}
|
|
|
|
function bp_group_member_demote_link( $user_id = 0 ) {
|
|
global $members_template;
|
|
|
|
if ( !$user_id )
|
|
$user_id = $members_template->member->user_id;
|
|
|
|
echo bp_get_group_member_demote_link( $user_id );
|
|
}
|
|
function bp_get_group_member_demote_link( $user_id = 0, $group = false ) {
|
|
global $members_template, $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
if ( !$user_id )
|
|
$user_id = $members_template->member->user_id;
|
|
|
|
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' ) );
|
|
}
|
|
|
|
function bp_group_member_ban_link( $user_id = 0 ) {
|
|
global $members_template;
|
|
|
|
if ( !$user_id )
|
|
$user_id = $members_template->member->user_id;
|
|
|
|
echo bp_get_group_member_ban_link( $user_id );
|
|
}
|
|
function bp_get_group_member_ban_link( $user_id = 0, $group = false ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
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' ) );
|
|
}
|
|
|
|
function bp_group_member_unban_link( $user_id = 0 ) {
|
|
global $members_template;
|
|
|
|
if ( !$user_id )
|
|
$user_id = $members_template->member->user_id;
|
|
|
|
echo bp_get_group_member_unban_link( $user_id );
|
|
}
|
|
function bp_get_group_member_unban_link( $user_id = 0, $group = false ) {
|
|
global $members_template, $groups_template;
|
|
|
|
if ( !$user_id )
|
|
$user_id = $members_template->member->user_id;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
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' ) );
|
|
}
|
|
|
|
|
|
function bp_group_member_remove_link( $user_id = 0 ) {
|
|
global $members_template;
|
|
|
|
if ( !$user_id )
|
|
$user_id = $members_template->member->user_id;
|
|
|
|
echo bp_get_group_member_remove_link( $user_id );
|
|
}
|
|
function bp_get_group_member_remove_link( $user_id = 0, $group = false ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
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' ) );
|
|
}
|
|
|
|
function bp_group_admin_tabs( $group = false ) {
|
|
global $bp, $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group = ( $groups_template->group ) ? $groups_template->group : $bp->groups->current_group;
|
|
|
|
$current_tab = bp_get_group_current_admin_tab();
|
|
|
|
if ( bp_is_item_admin() ) : ?>
|
|
|
|
<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>
|
|
|
|
<?php endif; ?>
|
|
|
|
<?php if ( ! bp_is_item_admin() )
|
|
return false; ?>
|
|
|
|
<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>
|
|
|
|
<?php if ( !(int)bp_get_option( 'bp-disable-avatar-uploads' ) ) : ?>
|
|
|
|
<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>
|
|
|
|
<?php endif; ?>
|
|
|
|
<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>
|
|
|
|
<?php if ( $groups_template->group->status == 'private' ) : ?>
|
|
|
|
<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>
|
|
|
|
<?php endif; ?>
|
|
|
|
<?php do_action( 'groups_admin_tabs', $current_tab, $group->slug ) ?>
|
|
|
|
<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>
|
|
|
|
<?php
|
|
}
|
|
|
|
function bp_group_total_for_member() {
|
|
echo bp_get_group_total_for_member();
|
|
}
|
|
function bp_get_group_total_for_member() {
|
|
return apply_filters( 'bp_get_group_total_for_member', BP_Groups_Member::total_group_count() );
|
|
}
|
|
|
|
function bp_group_form_action( $page ) {
|
|
echo bp_get_group_form_action( $page );
|
|
}
|
|
function bp_get_group_form_action( $page, $group = false ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
return apply_filters( 'bp_group_form_action', bp_get_group_permalink( $group ) . $page );
|
|
}
|
|
|
|
function bp_group_admin_form_action( $page = false ) {
|
|
echo bp_get_group_admin_form_action( $page );
|
|
}
|
|
function bp_get_group_admin_form_action( $page = false, $group = false ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
if ( empty( $page ) )
|
|
$page = bp_action_variable( 0 );
|
|
|
|
return apply_filters( 'bp_group_admin_form_action', bp_get_group_permalink( $group ) . 'admin/' . $page );
|
|
}
|
|
|
|
function bp_group_has_requested_membership( $group = false ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
if ( groups_check_for_membership_request( bp_loggedin_user_id(), $group->id ) )
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* bp_group_is_member()
|
|
*
|
|
* Checks if current user is member of a group.
|
|
*
|
|
* @uses bp_current_user_can() Check if current user is super admin
|
|
* @uses apply_filters Creates bp_group_is_member filter and passes $is_member
|
|
* @usedby groups/activity.php, groups/single/forum/edit.php, groups/single/forum/topic.php to determine template part visibility
|
|
* @global object $groups_template Current Group (usually in template loop)
|
|
* @param object $group Group to check is_member
|
|
* @return bool If user is member of group or not
|
|
*/
|
|
function bp_group_is_member( $group = false ) {
|
|
global $groups_template;
|
|
|
|
// Site admins always have access
|
|
if ( bp_current_user_can( 'bp_moderate' ) )
|
|
return true;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
return apply_filters( 'bp_group_is_member', !empty( $group->is_member ) );
|
|
}
|
|
|
|
/**
|
|
* Checks if a user is banned from a group.
|
|
*
|
|
* If this function is invoked inside the groups template loop (e.g. the group directory), then
|
|
* check $groups_template->group->is_banned instead of making another SQL query.
|
|
* However, if used in a single group's pages, we must use groups_is_user_banned().
|
|
*
|
|
* @global BP_Groups_Template $groups_template Group template loop object
|
|
* @param object $group Group to check if user is banned from the group
|
|
* @param int $user_id
|
|
* @return bool If user is banned from the group or not
|
|
* @since BuddyPress (1.5)
|
|
*/
|
|
function bp_group_is_user_banned( $group = false, $user_id = 0 ) {
|
|
global $groups_template;
|
|
|
|
// Site admins always have access
|
|
if ( bp_current_user_can( 'bp_moderate' ) )
|
|
return false;
|
|
|
|
if ( empty( $group ) ) {
|
|
$group =& $groups_template->group;
|
|
|
|
if ( !$user_id && isset( $group->is_banned ) )
|
|
return apply_filters( 'bp_group_is_user_banned', $group->is_banned );
|
|
}
|
|
|
|
if ( !$user_id )
|
|
$user_id = bp_loggedin_user_id();
|
|
|
|
return apply_filters( 'bp_group_is_user_banned', groups_is_user_banned( $user_id, $group->id ) );
|
|
}
|
|
|
|
function bp_group_accept_invite_link() {
|
|
echo bp_get_group_accept_invite_link();
|
|
}
|
|
function bp_get_group_accept_invite_link( $group = false ) {
|
|
global $groups_template, $bp;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
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' ) );
|
|
}
|
|
|
|
function bp_group_reject_invite_link() {
|
|
echo bp_get_group_reject_invite_link();
|
|
}
|
|
function bp_get_group_reject_invite_link( $group = false ) {
|
|
global $groups_template, $bp;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
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' ) );
|
|
}
|
|
|
|
function bp_group_leave_confirm_link() {
|
|
echo bp_get_group_leave_confirm_link();
|
|
}
|
|
function bp_get_group_leave_confirm_link( $group = false ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
return apply_filters( 'bp_group_leave_confirm_link', wp_nonce_url( bp_get_group_permalink( $group ) . 'leave-group/yes', 'groups_leave_group' ) );
|
|
}
|
|
|
|
function bp_group_leave_reject_link() {
|
|
echo bp_get_group_leave_reject_link();
|
|
}
|
|
function bp_get_group_leave_reject_link( $group = false ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
return apply_filters( 'bp_get_group_leave_reject_link', bp_get_group_permalink( $group ) );
|
|
}
|
|
|
|
function bp_group_send_invite_form_action() {
|
|
echo bp_get_group_send_invite_form_action();
|
|
}
|
|
function bp_get_group_send_invite_form_action( $group = false ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
return apply_filters( 'bp_group_send_invite_form_action', bp_get_group_permalink( $group ) . 'send-invites/send' );
|
|
}
|
|
|
|
function bp_has_friends_to_invite( $group = false ) {
|
|
global $groups_template;
|
|
|
|
if ( !bp_is_active( 'friends' ) )
|
|
return false;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
if ( !friends_check_user_has_friends( bp_loggedin_user_id() ) || !friends_count_invitable_friends( bp_loggedin_user_id(), $group->id ) )
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Outputs a 'New Topic' button for a group.
|
|
*
|
|
* @since BuddyPress (1.2.7)
|
|
*
|
|
* @param BP_Groups_Group|bool $group The BP Groups_Group object if passed, boolean false if not passed.
|
|
* @uses bp_get_group_new_topic_button() Returns the 'New Topic' button
|
|
*/
|
|
function bp_group_new_topic_button( $group = false ) {
|
|
echo bp_get_group_new_topic_button( $group );
|
|
}
|
|
/**
|
|
* Returns a 'New Topic' button for a group.
|
|
*
|
|
* @since BuddyPress (1.2.7)
|
|
*
|
|
* @param BP_Groups_Group|bool $group The BP Groups_Group object if passed, boolean false if not passed.
|
|
* @uses is_user_logged_in() Is there a user logged in?
|
|
* @uses bp_group_is_user_banned() Is the current user banned from the current group?
|
|
* @uses bp_is_group_forum() Are we on a group forum page?
|
|
* @uses bp_is_group_forum_topic() Are we on a group topic page?
|
|
* @uses bp_get_button() Renders a button
|
|
* @return string HTML code for the button
|
|
*/
|
|
function bp_get_group_new_topic_button( $group = false ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
if ( !is_user_logged_in() || bp_group_is_user_banned() || !bp_is_group_forum() || bp_is_group_forum_topic() )
|
|
return false;
|
|
|
|
$button = array(
|
|
'id' => 'new_topic',
|
|
'component' => 'groups',
|
|
'must_be_logged_in' => true,
|
|
'block_self' => true,
|
|
'wrapper_class' => 'group-button',
|
|
'link_href' => '#post-new',
|
|
'link_class' => 'group-button show-hide-new',
|
|
'link_id' => 'new-topic-button',
|
|
'link_text' => __( 'New Topic', 'buddypress' ),
|
|
'link_title' => __( 'New Topic', 'buddypress' ),
|
|
);
|
|
|
|
// Filter and return the HTML button
|
|
return bp_get_button( apply_filters( 'bp_get_group_new_topic_button', $button ) );
|
|
}
|
|
|
|
function bp_group_join_button( $group = false ) {
|
|
echo bp_get_group_join_button( $group );
|
|
}
|
|
function bp_get_group_join_button( $group = false ) {
|
|
global $groups_template;
|
|
|
|
if ( empty( $group ) )
|
|
$group =& $groups_template->group;
|
|
|
|
if ( !is_user_logged_in() || bp_group_is_user_banned( $group ) )
|
|
return false;
|
|
|
|
// Group creation was not completed or status is unknown
|
|
if ( !$group->status )
|
|
return false;
|
|
|
|
// Already a member
|
|
if ( isset( $group->is_member ) && $group->is_member ) {
|
|
|
|
// Stop sole admins from abandoning their group
|
|
$group_admins = groups_get_group_admins( $group->id );
|
|
if ( 1 == count( $group_admins ) && $group_admins[0]->user_id == bp_loggedin_user_id() )
|
|
return false;
|
|
|
|
$button = array(
|
|
'id' => 'leave_group',
|
|
'component' => 'groups',
|
|
'must_be_logged_in' => true,
|
|
'block_self' => false,
|
|
'wrapper_class' => 'group-button ' . $group->status,
|
|
'wrapper_id' => 'groupbutton-' . $group->id,
|
|
'link_href' => wp_nonce_url( bp_get_group_permalink( $group ) . 'leave-group', 'groups_leave_group' ),
|
|
'link_text' => __( 'Leave Group', 'buddypress' ),
|
|
'link_title' => __( 'Leave Group', 'buddypress' ),
|
|
'link_class' => 'group-button leave-group',
|
|
);
|
|
|
|
// Not a member
|
|
} else {
|
|
|
|
// Show different buttons based on group status
|
|
switch ( $group->status ) {
|
|
case 'hidden' :
|
|
return false;
|
|
break;
|
|
|
|
case 'public':
|
|
$button = array(
|
|
'id' => 'join_group',
|
|
'component' => 'groups',
|
|
'must_be_logged_in' => true,
|
|
'block_self' => false,
|
|
'wrapper_class' => 'group-button ' . $group->status,
|
|
'wrapper_id' => 'groupbutton-' . $group->id,
|
|
'link_href' => wp_nonce_url( bp_get_group_permalink( $group ) . 'join', 'groups_join_group' ),
|
|
'link_text' => __( 'Join Group', 'buddypress' ),
|
|
'link_title' => __( 'Join Group', 'buddypress' ),
|
|
'link_class' => 'group-button join-group',
|
|
);
|
|
break;
|
|
|
|
case 'private' :
|
|
|
|
// Member has outstanding invitation -
|
|
// show an "Accept Invitation" button
|
|
if ( $group->is_invited ) {
|
|
$button = array(
|
|
'id' => 'accept_invite',
|
|
'component' => 'groups',
|
|
'must_be_logged_in' => true,
|
|
'block_self' => false,
|
|
'wrapper_class' => 'group-button ' . $group->status,
|
|
'wrapper_id' => 'groupbutton-' . $group->id,
|
|
'link_href' => add_query_arg( 'redirect_to', bp_get_group_permalink( $group ), bp_get_group_accept_invite_link( $group ) ),
|
|
'link_text' => __( 'Accept Invitation', 'buddypress' ),
|
|
'link_title' => __( 'Accept Invitation', 'buddypress' ),
|
|
'link_class' => 'group-button accept-invite',
|
|
);
|
|
|
|
// Member has requested membership but request is pending -
|
|
// show a "Request Sent" button
|
|
} elseif ( $group->is_pending ) {
|
|
$button = array(
|
|
'id' => 'membership_requested',
|
|
'component' => 'groups',
|
|
'must_be_logged_in' => true,
|
|
'block_self' => false,
|
|
'wrapper_class' => 'group-button pending ' . $group->status,
|
|
'wrapper_id' => 'groupbutton-' . $group->id,
|
|
'link_href' => bp_get_group_permalink( $group ),
|
|
'link_text' => __( 'Request Sent', 'buddypress' ),
|
|
'link_title' => __( 'Request Sent', 'buddypress' ),
|
|
'link_class' => 'group-button pending membership-requested',
|
|
);
|
|
|
|
// Member has not requested membership yet -
|
|
// show a "Request Membership" button
|
|
} else {
|
|
$button = array(
|
|
'id' => 'request_membership',
|
|
'component' => 'groups',
|
|
'must_be_logged_in' => true,
|
|
'block_self' => false,
|
|
'wrapper_class' => 'group-button ' . $group->status,
|
|
'wrapper_id' => 'groupbutton-' . $group->id,
|
|
'link_href' => wp_nonce_url( bp_get_group_permalink( $group ) . 'request-membership', 'groups_request_membership' ),
|
|
'link_text' => __( 'Request Membership', 'buddypress' ),
|
|
'link_title' => __( 'Request Membership', 'buddypress' ),
|
|
'link_class' => 'group-button request-membership',
|
|
);
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
// Filter and return the HTML button
|
|
return bp_get_button( apply_filters( 'bp_get_group_join_button', $button ) );
|
|
}
|
|
|
|
/**
|
|
* Output the Create a Group button.
|
|
*
|
|
* @since BuddyPress (2.0.0)
|
|
*/
|
|
function bp_group_create_button() {
|
|
echo bp_get_group_create_button();
|
|
}
|
|
/**
|
|
* Get the Create a Group button.
|
|
*
|
|
* @since BuddyPress (2.0.0)
|
|
*
|
|
* @return string
|
|
*/
|
|
function bp_get_group_create_button() {
|
|
if ( ! is_user_logged_in() ) {
|
|
return false;
|
|
}
|
|
|
|
if ( ! bp_user_can_create_groups() ) {
|
|
return false;
|
|
}
|
|
|
|
$button_args = array(
|
|
'id' => 'create_group',
|
|
'component' => 'groups',
|
|
'link_text' => __( 'Create a Group', 'buddypress' ),
|
|
'link_title' => __( 'Create a Group', 'buddypress' ),
|
|
'link_class' => 'button group-create bp-title-button',
|
|
'link_href' => trailingslashit( bp_get_root_domain() ) . trailingslashit( bp_get_groups_root_slug() ) . trailingslashit( 'create' ),
|
|
'wrapper' => false,
|
|
);
|
|
|
|
return bp_get_button( apply_filters( 'bp_get_group_create_button', $button_args ) );
|
|
}
|
|
|
|
/**
|
|
* Prints a message if the group is not visible to the current user (it is a
|
|
* hidden or private group, and the user does not have access).
|
|
*
|
|
* @global BP_Groups_Template $groups_template Groups template object
|
|
* @param object $group Group to get status message for. Optional; defaults to current group.
|
|
* @since BuddyPress (1.0)
|
|
*/
|
|
function bp_group_status_message( $group = null ) {
|
|
global $groups_template;
|
|
|
|
if ( ! $group )
|
|
$group =& $groups_template->group;
|
|
|
|
if ( 'private' == $group->status ) {
|
|
if ( ! bp_group_has_requested_membership() ) {
|
|
if ( is_user_logged_in() )
|
|
$message = __( 'This is a private group and you must request group membership in order to join.', 'buddypress' );
|
|
else
|
|
$message = __( 'This is a private group. To join you must be a registered site member and request group membership.', 'buddypress' );
|
|
|
|
} else {
|
|
$message = __( 'This is a private group. Your membership request is awaiting approval from the group administrator.', 'buddypress' );
|
|
}
|
|
|
|
} else {
|
|
$message = __( 'This is a hidden group and only invited members can join.', 'buddypress' );
|
|
}
|
|
|
|
echo apply_filters( 'bp_group_status_message', $message, $group );
|
|
}
|
|
|
|
function bp_group_hidden_fields() {
|
|
if ( isset( $_REQUEST['s'] ) ) {
|
|
echo '<input type="hidden" id="search_terms" value="' . esc_attr( $_REQUEST['s'] ) . '" name="search_terms" />';
|
|
}
|
|
|
|
if ( isset( $_REQUEST['letter'] ) ) {
|
|
echo '<input type="hidden" id="selected_letter" value="' . esc_attr( $_REQUEST['letter'] ) . '" name="selected_letter" />';
|
|
}
|
|
|
|
if ( isset( $_REQUEST['groups_search'] ) ) {
|
|
echo '<input type="hidden" id="search_terms" value="' . esc_attr( $_REQUEST['groups_search'] ) . '" name="search_terms" />';
|
|
}
|
|
}
|
|
|
|
function bp_total_group_count() {
|
|
echo bp_get_total_group_count();
|
|
}
|
|
function bp_get_total_group_count() {
|
|
return apply_filters( 'bp_get_total_group_count', groups_get_total_group_count() );
|
|
}
|
|
|
|
function bp_total_group_count_for_user( $user_id = 0 ) {
|
|
echo bp_get_total_group_count_for_user( $user_id );
|
|
}
|
|
function bp_get_total_group_count_for_user( $user_id = 0 ) {
|
|
return apply_filters( 'bp_get_total_group_count_for_user', groups_total_groups_for_user( $user_id ), $user_id );
|
|
}
|
|
add_filter( 'bp_get_total_group_count_for_user', 'bp_core_number_format' );
|
|
|
|
|
|
/***************************************************************************
|
|
* Group Members Template Tags
|
|
**/
|
|
|
|
class BP_Groups_Group_Members_Template {
|
|
var $current_member = -1;
|
|
var $member_count;
|
|
var $members;
|
|
var $member;
|
|
|
|
var $in_the_loop;
|
|
|
|
var $pag_page;
|
|
var $pag_num;
|
|
var $pag_links;
|
|
var $total_group_count;
|
|
|
|
/**
|
|
* Constructor.
|
|
*
|
|
* @param array $args {
|
|
* An array of optional arguments.
|
|
* @type int $group_id ID of the group whose members are being
|
|
* queried. Default: current group ID.
|
|
* @type int $page Page of results to be queried. Default: 1.
|
|
* @type int $per_page Number of items to return per page of
|
|
* results. Default: 20.
|
|
* @type int $max Optional. Max number of items to return.
|
|
* @type array $exclude Optional. Array of user IDs to exclude.
|
|
* @type bool|int True (or 1) to exclude admins and mods from
|
|
* results. Default: 1.
|
|
* @type bool|int True (or 1) to exclude banned users from results.
|
|
* Default: 1.
|
|
* @type array $group_role Optional. Array of group roles to include.
|
|
* @type string $search_terms Optional. Search terms to match.
|
|
* }
|
|
*/
|
|
function __construct( $args = array() ) {
|
|
|
|
// Backward compatibility with old method of passing arguments
|
|
if ( ! is_array( $args ) || func_num_args() > 1 ) {
|
|
_deprecated_argument( __METHOD__, '2.0.0', sprintf( __( 'Arguments passed to %1$s should be in an associative array. See the inline documentation at %2$s for more details.', 'buddypress' ), __METHOD__, __FILE__ ) );
|
|
|
|
$old_args_keys = array(
|
|
0 => 'group_id',
|
|
1 => 'per_page',
|
|
2 => 'max',
|
|
3 => 'exclude_admins_mods',
|
|
4 => 'exclude_banned',
|
|
5 => 'exclude',
|
|
6 => 'group_role',
|
|
);
|
|
|
|
$func_args = func_get_args();
|
|
$args = bp_core_parse_args_array( $old_args_keys, $func_args );
|
|
}
|
|
|
|
$r = wp_parse_args( $args, array(
|
|
'group_id' => bp_get_current_group_id(),
|
|
'page' => 1,
|
|
'per_page' => 20,
|
|
'max' => false,
|
|
'exclude' => false,
|
|
'exclude_admins_mods' => 1,
|
|
'exclude_banned' => 1,
|
|
'group_role' => false,
|
|
'search_terms' => false,
|
|
'type' => 'last_joined',
|
|
) );
|
|
|
|
// @todo No
|
|
extract( $r );
|
|
|
|
$this->pag_page = isset( $_REQUEST['mlpage'] ) ? intval( $_REQUEST['mlpage'] ) : $r['page'];
|
|
$this->pag_num = isset( $_REQUEST['num'] ) ? intval( $_REQUEST['num'] ) : $per_page;
|
|
|
|
/**
|
|
* Check the current group is the same as the supplied group ID.
|
|
* It can differ when using {@link bp_group_has_members()} outside the Groups screens.
|
|
*/
|
|
$current_group = groups_get_current_group();
|
|
if ( ! $current_group || $current_group && $current_group->id !== bp_get_current_group_id() ) {
|
|
$current_group = groups_get_group( array( 'group_id' => $r['group_id'] ) );
|
|
}
|
|
|
|
// Assemble the base URL for pagination
|
|
$base_url = trailingslashit( bp_get_group_permalink( $current_group ) . bp_current_action() );
|
|
if ( bp_action_variable() ) {
|
|
$base_url = trailingslashit( $base_url . bp_action_variable() );
|
|
}
|
|
|
|
$members_args = $r;
|
|
|
|
$members_args['page'] = $this->pag_page;
|
|
$members_args['per_page'] = $this->pag_num;
|
|
|
|
$this->members = groups_get_group_members( $members_args );
|
|
|
|
if ( !$max || $max >= (int) $this->members['count'] )
|
|
$this->total_member_count = (int) $this->members['count'];
|
|
else
|
|
$this->total_member_count = (int) $max;
|
|
|
|
$this->members = $this->members['members'];
|
|
|
|
if ( $max ) {
|
|
if ( $max >= count($this->members) )
|
|
$this->member_count = count($this->members);
|
|
else
|
|
$this->member_count = (int) $max;
|
|
} else {
|
|
$this->member_count = count($this->members);
|
|
}
|
|
|
|
$this->pag_links = paginate_links( array(
|
|
'base' => add_query_arg( array( 'mlpage' => '%#%' ), $base_url ),
|
|
'format' => '',
|
|
'total' => !empty( $this->pag_num ) ? ceil( $this->total_member_count / $this->pag_num ) : $this->total_member_count,
|
|
'current' => $this->pag_page,
|
|
'prev_text' => '←',
|
|
'next_text' => '→',
|
|
'mid_size' => 1
|
|
));
|
|
}
|
|
|
|
function has_members() {
|
|
if ( $this->member_count )
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
|
|
function next_member() {
|
|
$this->current_member++;
|
|
$this->member = $this->members[$this->current_member];
|
|
|
|
return $this->member;
|
|
}
|
|
|
|
function rewind_members() {
|
|
$this->current_member = -1;
|
|
if ( $this->member_count > 0 ) {
|
|
$this->member = $this->members[0];
|
|
}
|
|
}
|
|
|
|
function members() {
|
|
if ( $this->current_member + 1 < $this->member_count ) {
|
|
return true;
|
|
} elseif ( $this->current_member + 1 == $this->member_count ) {
|
|
do_action('loop_end');
|
|
// Do some cleaning up after the loop
|
|
$this->rewind_members();
|
|
}
|
|
|
|
$this->in_the_loop = false;
|
|
return false;
|
|
}
|
|
|
|
function the_member() {
|
|
|
|
$this->in_the_loop = true;
|
|
$this->member = $this->next_member();
|
|
|
|
if ( 0 == $this->current_member ) // loop has just started
|
|
do_action('loop_start');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Initialize a group member query loop.
|
|
*
|
|
* @param array $args {
|
|
* An array of optional arguments.
|
|
* @type int $group_id ID of the group whose members are being queried.
|
|
* Default: current group ID.
|
|
* @type int $page Page of results to be queried. Default: 1.
|
|
* @type int $per_page Number of items to return per page of results.
|
|
* Default: 20.
|
|
* @type int $max Optional. Max number of items to return.
|
|
* @type array $exclude Optional. Array of user IDs to exclude.
|
|
* @type bool|int True (or 1) to exclude admins and mods from results.
|
|
* Default: 1.
|
|
* @type bool|int True (or 1) to exclude banned users from results.
|
|
* Default: 1.
|
|
* @type array $group_role Optional. Array of group roles to include.
|
|
* @type string $type Optional. Sort order of results. 'last_joined',
|
|
* 'first_joined', or any of the $type params available in
|
|
* {@link BP_User_Query}. Default: 'last_joined'.
|
|
* @type string $search_terms Optional. Search terms to match.
|
|
* }
|
|
*/
|
|
function bp_group_has_members( $args = '' ) {
|
|
global $members_template;
|
|
|
|
$exclude_admins_mods = 1;
|
|
|
|
if ( bp_is_group_members() ) {
|
|
$exclude_admins_mods = 0;
|
|
}
|
|
|
|
$r = wp_parse_args( $args, array(
|
|
'group_id' => bp_get_current_group_id(),
|
|
'page' => 1,
|
|
'per_page' => 20,
|
|
'max' => false,
|
|
'exclude' => false,
|
|
'exclude_admins_mods' => $exclude_admins_mods,
|
|
'exclude_banned' => 1,
|
|
'group_role' => false,
|
|
'search_terms' => false,
|
|
'type' => 'last_joined',
|
|
) );
|
|
|
|
if ( empty( $r['search_terms'] ) && ! empty( $_REQUEST['s'] ) )
|
|
$r['search_terms'] = $_REQUEST['s'];
|
|
|
|
$members_template = new BP_Groups_Group_Members_Template( $r );
|
|
return apply_filters( 'bp_group_has_members', $members_template->has_members(), $members_template );
|
|
}
|
|
|
|
function bp_group_members() {
|
|
global $members_template;
|
|
|
|
return $members_template->members();
|
|
}
|
|
|
|
function bp_group_the_member() {
|
|
global $members_template;
|
|
|
|
return $members_template->the_member();
|
|
}
|
|
|
|
function bp_group_member_avatar() {
|
|
echo bp_get_group_member_avatar();
|
|
}
|
|
function bp_get_group_member_avatar() {
|
|
global $members_template;
|
|
|
|
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 ) ) ) );
|
|
}
|
|
|
|
function bp_group_member_avatar_thumb() {
|
|
echo bp_get_group_member_avatar_thumb();
|
|
}
|
|
function bp_get_group_member_avatar_thumb() {
|
|
global $members_template;
|
|
|
|
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 ) ) ) );
|
|
}
|
|
|
|
function bp_group_member_avatar_mini( $width = 30, $height = 30 ) {
|
|
echo bp_get_group_member_avatar_mini( $width, $height );
|
|
}
|
|
function bp_get_group_member_avatar_mini( $width = 30, $height = 30 ) {
|
|
global $members_template;
|
|
|
|
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 ) ) ) );
|
|
}
|
|
|
|
function bp_group_member_name() {
|
|
echo bp_get_group_member_name();
|
|
}
|
|
function bp_get_group_member_name() {
|
|
global $members_template;
|
|
|
|
return apply_filters( 'bp_get_group_member_name', $members_template->member->display_name );
|
|
}
|
|
|
|
function bp_group_member_url() {
|
|
echo bp_get_group_member_url();
|
|
}
|
|
function bp_get_group_member_url() {
|
|
global $members_template;
|
|
|
|
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 ) );
|
|
}
|
|
|
|
function bp_group_member_link() {
|
|
echo bp_get_group_member_link();
|
|
}
|
|
function bp_get_group_member_link() {
|
|
global $members_template;
|
|
|
|
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>' );
|
|
}
|
|
|
|
function bp_group_member_domain() {
|
|
echo bp_get_group_member_domain();
|
|
}
|
|
function bp_get_group_member_domain() {
|
|
global $members_template;
|
|
|
|
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 ) );
|
|
}
|
|
|
|
function bp_group_member_is_friend() {
|
|
echo bp_get_group_member_is_friend();
|
|
}
|
|
function bp_get_group_member_is_friend() {
|
|
global $members_template;
|
|
|
|
if ( !isset( $members_template->member->is_friend ) )
|
|
$friend_status = 'not_friends';
|
|
else
|
|
$friend_status = ( 0 == $members_template->member->is_friend ) ? 'pending' : 'is_friend';
|
|
|
|
return apply_filters( 'bp_get_group_member_is_friend', $friend_status );
|
|
}
|
|
|
|
function bp_group_member_is_banned() {
|
|
echo bp_get_group_member_is_banned();
|
|
}
|
|
function bp_get_group_member_is_banned() {
|
|
global $members_template;
|
|
|
|
return apply_filters( 'bp_get_group_member_is_banned', $members_template->member->is_banned );
|
|
}
|
|
|
|
function bp_group_member_css_class() {
|
|
global $members_template;
|
|
|
|
if ( $members_template->member->is_banned )
|
|
echo apply_filters( 'bp_group_member_css_class', 'banned-user' );
|
|
}
|
|
|
|
function bp_group_member_joined_since() {
|
|
echo bp_get_group_member_joined_since();
|
|
}
|
|
function bp_get_group_member_joined_since() {
|
|
global $members_template;
|
|
|
|
return apply_filters( 'bp_get_group_member_joined_since', bp_core_get_last_activity( $members_template->member->date_modified, __( 'joined %s', 'buddypress') ) );
|
|
}
|
|
|
|
function bp_group_member_id() {
|
|
echo bp_get_group_member_id();
|
|
}
|
|
function bp_get_group_member_id() {
|
|
global $members_template;
|
|
|
|
return apply_filters( 'bp_get_group_member_id', $members_template->member->user_id );
|
|
}
|
|
|
|
function bp_group_member_needs_pagination() {
|
|
global $members_template;
|
|
|
|
if ( $members_template->total_member_count > $members_template->pag_num )
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
|
|
function bp_group_pag_id() {
|
|
echo bp_get_group_pag_id();
|
|
}
|
|
function bp_get_group_pag_id() {
|
|
return apply_filters( 'bp_get_group_pag_id', 'pag' );
|
|
}
|
|
|
|
function bp_group_member_pagination() {
|
|
echo bp_get_group_member_pagination();
|
|
wp_nonce_field( 'bp_groups_member_list', '_member_pag_nonce' );
|
|
}
|
|
function bp_get_group_member_pagination() {
|
|
global $members_template;
|
|
return apply_filters( 'bp_get_group_member_pagination', $members_template->pag_links );
|
|
}
|
|
|
|
function bp_group_member_pagination_count() {
|
|
echo bp_get_group_member_pagination_count();
|
|
}
|
|
function bp_get_group_member_pagination_count() {
|
|
global $members_template;
|
|
|
|
$start_num = intval( ( $members_template->pag_page - 1 ) * $members_template->pag_num ) + 1;
|
|
$from_num = bp_core_number_format( $start_num );
|
|
$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 ) );
|
|
$total = bp_core_number_format( $members_template->total_member_count );
|
|
|
|
return apply_filters( 'bp_get_group_member_pagination_count', sprintf( _n( 'Viewing member %1$s to %2$s (of %3$s member)', 'Viewing members %1$s to %2$s (of %3$s members)', $total, 'buddypress' ), $from_num, $to_num, $total ), $from_num, $to_num, $total );
|
|
}
|
|
|
|
function bp_group_member_admin_pagination() {
|
|
echo bp_get_group_member_admin_pagination();
|
|
wp_nonce_field( 'bp_groups_member_admin_list', '_member_admin_pag_nonce' );
|
|
}
|
|
function bp_get_group_member_admin_pagination() {
|
|
global $members_template;
|
|
|
|
return $members_template->pag_links;
|
|
}
|
|
|
|
/**
|
|
* Output the Group members template
|
|
*
|
|
* @since BuddyPress (?)
|
|
*
|
|
* @return string html output
|
|
*/
|
|
function bp_groups_members_template_part() {
|
|
?>
|
|
<div class="item-list-tabs" id="subnav" role="navigation">
|
|
<ul>
|
|
<li class="groups-members-search" role="search">
|
|
<?php bp_directory_members_search_form(); ?>
|
|
</li>
|
|
|
|
<?php bp_groups_members_filter(); ?>
|
|
<?php do_action( 'bp_members_directory_member_sub_types' ); ?>
|
|
|
|
</ul>
|
|
</div>
|
|
|
|
<div id="members-group-list" class="group_members dir-list">
|
|
|
|
<?php bp_get_template_part( 'groups/single/members' ); ?>
|
|
|
|
</div>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Output the Group members filters
|
|
*
|
|
* @since BuddyPress (?)
|
|
*
|
|
* @return string html output
|
|
*/
|
|
function bp_groups_members_filter() {
|
|
?>
|
|
<li id="group_members-order-select" class="last filter">
|
|
<label for="group_members-order-by"><?php _e( 'Order By:', 'buddypress' ); ?></label>
|
|
<select id="group_members-order-by">
|
|
<option value="last_joined"><?php _e( 'Newest', 'buddypress' ); ?></option>
|
|
<option value="first_joined"><?php _e( 'Oldest', 'buddypress' ); ?></option>
|
|
<option value="alphabetical"><?php _e( 'Alphabetical', 'buddypress' ); ?></option>
|
|
|
|
<?php do_action( 'bp_groups_members_order_options' ); ?>
|
|
|
|
</select>
|
|
</li>
|
|
<?php
|
|
}
|
|
|
|
/***************************************************************************
|
|
* Group Creation Process Template Tags
|
|
**/
|
|
|
|
/**
|
|
* Determine if the current logged in user can create groups.
|
|
*
|
|
* @package BuddyPress Groups
|
|
* @since BuddyPress (1.5)
|
|
*
|
|
* @uses apply_filters() To call 'bp_user_can_create_groups'.
|
|
* @uses bp_get_option() To retrieve value of 'bp_restrict_group_creation'. Defaults to 0.
|
|
* @uses bp_current_user_can() To determine if current user if super admin.
|
|
*
|
|
* @return bool True if user can create groups. False otherwise.
|
|
*/
|
|
function bp_user_can_create_groups() {
|
|
// Super admin can always create groups
|
|
if ( bp_current_user_can( 'bp_moderate' ) )
|
|
return true;
|
|
|
|
// Get group creation option, default to 0 (allowed)
|
|
$restricted = (int) bp_get_option( 'bp_restrict_group_creation', 0 );
|
|
|
|
// Allow by default
|
|
$can_create = true;
|
|
|
|
// Are regular users restricted?
|
|
if ( $restricted )
|
|
$can_create = false;
|
|
|
|
return apply_filters( 'bp_user_can_create_groups', $can_create, $restricted );
|
|
}
|
|
|
|
function bp_group_creation_tabs() {
|
|
global $bp;
|
|
|
|
if ( !is_array( $bp->groups->group_creation_steps ) )
|
|
return false;
|
|
|
|
if ( !bp_get_groups_current_create_step() ) {
|
|
$keys = array_keys( $bp->groups->group_creation_steps );
|
|
$bp->groups->current_create_step = array_shift( $keys );
|
|
}
|
|
|
|
$counter = 1;
|
|
|
|
foreach ( (array) $bp->groups->group_creation_steps as $slug => $step ) {
|
|
$is_enabled = bp_are_previous_group_creation_steps_complete( $slug ); ?>
|
|
|
|
<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
|
|
$counter++;
|
|
}
|
|
|
|
unset( $is_enabled );
|
|
|
|
do_action( 'groups_creation_tabs' );
|
|
}
|
|
|
|
function bp_group_creation_stage_title() {
|
|
global $bp;
|
|
|
|
echo apply_filters( 'bp_group_creation_stage_title', '<span>— ' . $bp->groups->group_creation_steps[bp_get_groups_current_create_step()]['name'] . '</span>' );
|
|
}
|
|
|
|
function bp_group_creation_form_action() {
|
|
echo bp_get_group_creation_form_action();
|
|
}
|
|
function bp_get_group_creation_form_action() {
|
|
global $bp;
|
|
|
|
if ( !bp_action_variable( 1 ) ) {
|
|
$keys = array_keys( $bp->groups->group_creation_steps );
|
|
$bp->action_variables[1] = array_shift( $keys );
|
|
}
|
|
|
|
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 ) ) );
|
|
}
|
|
|
|
function bp_is_group_creation_step( $step_slug ) {
|
|
global $bp;
|
|
|
|
/* Make sure we are in the groups component */
|
|
if ( !bp_is_groups_component() || !bp_is_current_action( 'create' ) )
|
|
return false;
|
|
|
|
/* If this the first step, we can just accept and return true */
|
|
$keys = array_keys( $bp->groups->group_creation_steps );
|
|
if ( !bp_action_variable( 1 ) && array_shift( $keys ) == $step_slug )
|
|
return true;
|
|
|
|
/* Before allowing a user to see a group creation step we must make sure previous steps are completed */
|
|
if ( !bp_is_first_group_creation_step() ) {
|
|
if ( !bp_are_previous_group_creation_steps_complete( $step_slug ) )
|
|
return false;
|
|
}
|
|
|
|
/* Check the current step against the step parameter */
|
|
if ( bp_is_action_variable( $step_slug ) )
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
|
|
function bp_is_group_creation_step_complete( $step_slugs ) {
|
|
global $bp;
|
|
|
|
if ( !isset( $bp->groups->completed_create_steps ) )
|
|
return false;
|
|
|
|
if ( is_array( $step_slugs ) ) {
|
|
$found = true;
|
|
|
|
foreach ( (array) $step_slugs as $step_slug ) {
|
|
if ( !in_array( $step_slug, $bp->groups->completed_create_steps ) )
|
|
$found = false;
|
|
}
|
|
|
|
return $found;
|
|
} else {
|
|
return in_array( $step_slugs, $bp->groups->completed_create_steps );
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
function bp_are_previous_group_creation_steps_complete( $step_slug ) {
|
|
global $bp;
|
|
|
|
/* If this is the first group creation step, return true */
|
|
$keys = array_keys( $bp->groups->group_creation_steps );
|
|
if ( array_shift( $keys ) == $step_slug )
|
|
return true;
|
|
|
|
reset( $bp->groups->group_creation_steps );
|
|
unset( $previous_steps );
|
|
|
|
/* Get previous steps */
|
|
foreach ( (array) $bp->groups->group_creation_steps as $slug => $name ) {
|
|
if ( $slug == $step_slug )
|
|
break;
|
|
|
|
$previous_steps[] = $slug;
|
|
}
|
|
|
|
return bp_is_group_creation_step_complete( $previous_steps );
|
|
}
|
|
|
|
function bp_new_group_id() {
|
|
echo bp_get_new_group_id();
|
|
}
|
|
function bp_get_new_group_id() {
|
|
global $bp;
|
|
|
|
if ( isset( $bp->groups->new_group_id ) )
|
|
$new_group_id = $bp->groups->new_group_id;
|
|
else
|
|
$new_group_id = 0;
|
|
|
|
return apply_filters( 'bp_get_new_group_id', $new_group_id );
|
|
}
|
|
|
|
function bp_new_group_name() {
|
|
echo bp_get_new_group_name();
|
|
}
|
|
function bp_get_new_group_name() {
|
|
global $bp;
|
|
|
|
if ( isset( $bp->groups->current_group->name ) )
|
|
$name = $bp->groups->current_group->name;
|
|
else
|
|
$name = '';
|
|
|
|
return apply_filters( 'bp_get_new_group_name', $name );
|
|
}
|
|
|
|
function bp_new_group_description() {
|
|
echo bp_get_new_group_description();
|
|
}
|
|
function bp_get_new_group_description() {
|
|
global $bp;
|
|
|
|
if ( isset( $bp->groups->current_group->description ) )
|
|
$description = $bp->groups->current_group->description;
|
|
else
|
|
$description = '';
|
|
|
|
return apply_filters( 'bp_get_new_group_description', $description );
|
|
}
|
|
|
|
function bp_new_group_enable_forum() {
|
|
echo bp_get_new_group_enable_forum();
|
|
}
|
|
function bp_get_new_group_enable_forum() {
|
|
global $bp;
|
|
return (int) apply_filters( 'bp_get_new_group_enable_forum', $bp->groups->current_group->enable_forum );
|
|
}
|
|
|
|
function bp_new_group_status() {
|
|
echo bp_get_new_group_status();
|
|
}
|
|
function bp_get_new_group_status() {
|
|
global $bp;
|
|
return apply_filters( 'bp_get_new_group_status', $bp->groups->current_group->status );
|
|
}
|
|
|
|
function bp_new_group_avatar( $args = '' ) {
|
|
echo bp_get_new_group_avatar( $args );
|
|
}
|
|
function bp_get_new_group_avatar( $args = '' ) {
|
|
global $bp;
|
|
|
|
$defaults = array(
|
|
'type' => 'full',
|
|
'width' => false,
|
|
'height' => false,
|
|
'class' => 'avatar',
|
|
'id' => 'avatar-crop-preview',
|
|
'alt' => __( 'Group avatar', 'buddypress' ),
|
|
'no_grav' => false
|
|
);
|
|
|
|
$r = wp_parse_args( $args, $defaults );
|
|
extract( $r, EXTR_SKIP );
|
|
|
|
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 ) ) );
|
|
}
|
|
|
|
function bp_group_creation_previous_link() {
|
|
echo bp_get_group_creation_previous_link();
|
|
}
|
|
function bp_get_group_creation_previous_link() {
|
|
global $bp;
|
|
|
|
foreach ( (array) $bp->groups->group_creation_steps as $slug => $name ) {
|
|
if ( bp_is_action_variable( $slug ) )
|
|
break;
|
|
|
|
$previous_steps[] = $slug;
|
|
}
|
|
|
|
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 ) );
|
|
}
|
|
|
|
/**
|
|
* Echoes the current group creation step
|
|
*
|
|
* @since BuddyPress (1.6)
|
|
*/
|
|
function bp_groups_current_create_step() {
|
|
echo bp_get_groups_current_create_step();
|
|
}
|
|
/**
|
|
* Returns the current group creation step. If none is found, returns an empty string
|
|
*
|
|
* @since BuddyPress (1.6)
|
|
*
|
|
* @uses apply_filters() Filter bp_get_groups_current_create_step to modify
|
|
* @return string $current_create_step
|
|
*/
|
|
function bp_get_groups_current_create_step() {
|
|
global $bp;
|
|
|
|
if ( !empty( $bp->groups->current_create_step ) ) {
|
|
$current_create_step = $bp->groups->current_create_step;
|
|
} else {
|
|
$current_create_step = '';
|
|
}
|
|
|
|
return apply_filters( 'bp_get_groups_current_create_step', $current_create_step );
|
|
}
|
|
|
|
function bp_is_last_group_creation_step() {
|
|
global $bp;
|
|
|
|
$keys = array_keys( $bp->groups->group_creation_steps );
|
|
$last_step = array_pop( $keys );
|
|
|
|
if ( $last_step == bp_get_groups_current_create_step() )
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
|
|
function bp_is_first_group_creation_step() {
|
|
global $bp;
|
|
|
|
$keys = array_keys( $bp->groups->group_creation_steps );
|
|
$first_step = array_shift( $keys );
|
|
|
|
if ( $first_step == bp_get_groups_current_create_step() )
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
|
|
function bp_new_group_invite_friend_list() {
|
|
echo bp_get_new_group_invite_friend_list();
|
|
}
|
|
function bp_get_new_group_invite_friend_list( $args = '' ) {
|
|
global $bp;
|
|
|
|
if ( !bp_is_active( 'friends' ) )
|
|
return false;
|
|
|
|
$defaults = array(
|
|
'group_id' => false,
|
|
'separator' => 'li'
|
|
);
|
|
|
|
$r = wp_parse_args( $args, $defaults );
|
|
extract( $r, EXTR_SKIP );
|
|
|
|
if ( empty( $group_id ) )
|
|
$group_id = !empty( $bp->groups->new_group_id ) ? $bp->groups->new_group_id : $bp->groups->current_group->id;
|
|
|
|
if ( $friends = friends_get_friends_invite_list( bp_loggedin_user_id(), $group_id ) ) {
|
|
$invites = groups_get_invites_for_group( bp_loggedin_user_id(), $group_id );
|
|
|
|
for ( $i = 0, $count = count( $friends ); $i < $count; ++$i ) {
|
|
$checked = '';
|
|
|
|
if ( !empty( $invites ) ) {
|
|
if ( in_array( $friends[$i]['id'], $invites ) )
|
|
$checked = ' checked="checked"';
|
|
}
|
|
|
|
$items[] = '<' . $separator . '><input' . $checked . ' type="checkbox" name="friends[]" id="f-' . $friends[$i]['id'] . '" value="' . esc_attr( $friends[$i]['id'] ) . '" /> ' . $friends[$i]['full_name'] . '</' . $separator . '>';
|
|
}
|
|
}
|
|
|
|
if ( !empty( $items ) )
|
|
return implode( "\n", (array) $items );
|
|
|
|
return false;
|
|
}
|
|
|
|
function bp_directory_groups_search_form() {
|
|
|
|
$default_search_value = bp_get_search_default_text( 'groups' );
|
|
$search_value = !empty( $_REQUEST['s'] ) ? stripslashes( $_REQUEST['s'] ) : $default_search_value;
|
|
|
|
$search_form_html = '<form action="" method="get" id="search-groups-form">
|
|
<label><input type="text" name="s" id="groups_search" placeholder="'. esc_attr( $search_value ) .'" /></label>
|
|
<input type="submit" id="groups_search_submit" name="groups_search_submit" value="'. __( 'Search', 'buddypress' ) .'" />
|
|
</form>';
|
|
|
|
echo apply_filters( 'bp_directory_groups_search_form', $search_form_html );
|
|
|
|
}
|
|
|
|
/**
|
|
* Displays group header tabs
|
|
*
|
|
* @package BuddyPress
|
|
* @todo Deprecate?
|
|
*/
|
|
function bp_groups_header_tabs() {
|
|
global $bp;?>
|
|
|
|
<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>
|
|
<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>
|
|
<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>
|
|
<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>
|
|
<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>
|
|
<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>
|
|
|
|
<?php
|
|
do_action( 'groups_header_tabs' );
|
|
}
|
|
|
|
/**
|
|
* Displays group filter titles
|
|
*
|
|
* @package BuddyPress
|
|
* @todo Deprecate?
|
|
*/
|
|
function bp_groups_filter_title() {
|
|
$current_filter = bp_action_variable( 0 );
|
|
|
|
switch ( $current_filter ) {
|
|
case 'recently-active': default:
|
|
_e( 'Recently Active', 'buddypress' );
|
|
break;
|
|
case 'recently-joined':
|
|
_e( 'Recently Joined', 'buddypress' );
|
|
break;
|
|
case 'most-popular':
|
|
_e( 'Most Popular', 'buddypress' );
|
|
break;
|
|
case 'admin-of':
|
|
_e( 'Administrator Of', 'buddypress' );
|
|
break;
|
|
case 'mod-of':
|
|
_e( 'Moderator Of', 'buddypress' );
|
|
break;
|
|
case 'alphabetically':
|
|
_e( 'Alphabetically', 'buddypress' );
|
|
break;
|
|
}
|
|
do_action( 'bp_groups_filter_title' );
|
|
}
|
|
|
|
function bp_is_group_admin_screen( $slug ) {
|
|
if ( !bp_is_groups_component() || !bp_is_current_action( 'admin' ) )
|
|
return false;
|
|
|
|
if ( bp_is_action_variable( $slug ) )
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Echoes the current group admin tab slug
|
|
*
|
|
* @since BuddyPress (1.6)
|
|
*/
|
|
function bp_group_current_admin_tab() {
|
|
echo bp_get_group_current_admin_tab();
|
|
}
|
|
/**
|
|
* Returns the current group admin tab slug
|
|
*
|
|
* @since BuddyPress (1.6)
|
|
*
|
|
* @uses apply_filters() Filter bp_get_current_group_admin_tab to modify return value
|
|
* @return string $tab The current tab's slug
|
|
*/
|
|
function bp_get_group_current_admin_tab() {
|
|
if ( bp_is_groups_component() && bp_is_current_action( 'admin' ) ) {
|
|
$tab = bp_action_variable( 0 );
|
|
} else {
|
|
$tab = '';
|
|
}
|
|
|
|
return apply_filters( 'bp_get_current_group_admin_tab', $tab );
|
|
}
|
|
|
|
/************************************************************************************
|
|
* Group Avatar Template Tags
|
|
**/
|
|
|
|
/**
|
|
* Outputs the current group avatar
|
|
*
|
|
* @since BuddyPress (1.0)
|
|
* @param string $type thumb or full ?
|
|
* @uses bp_get_group_current_avatar() to get the avatar of the current group
|
|
*/
|
|
function bp_group_current_avatar( $type = 'thumb' ) {
|
|
echo bp_get_group_current_avatar( $type );
|
|
}
|
|
/**
|
|
* Returns the current group avatar
|
|
*
|
|
* @since BuddyPress (2.0.0)
|
|
*
|
|
* @param string $type thumb or full ?
|
|
* @return string $tab The current tab's slug.
|
|
*/
|
|
function bp_get_group_current_avatar( $type = 'thumb' ) {
|
|
|
|
$group_avatar = bp_core_fetch_avatar( array(
|
|
'item_id' => bp_get_current_group_id(),
|
|
'object' => 'group',
|
|
'type' => $type,
|
|
'avatar_dir' => 'group-avatars',
|
|
'alt' => __( 'Group avatar', 'buddypress' ),
|
|
'class' => 'avatar'
|
|
) );
|
|
|
|
return apply_filters( 'bp_get_group_current_avatar', $group_avatar );
|
|
}
|
|
|
|
function bp_get_group_has_avatar( $group_id = false ) {
|
|
global $bp;
|
|
|
|
if ( false === $group_id ) {
|
|
$group_id = bp_get_current_group_id();
|
|
}
|
|
|
|
// Todo - this looks like an overgeneral check
|
|
if ( ! empty( $_FILES ) ) {
|
|
return false;
|
|
}
|
|
|
|
$group_avatar = bp_core_fetch_avatar( array(
|
|
'item_id' => $group_id,
|
|
'object' => 'group',
|
|
'no_grav' => true,
|
|
'html' => false,
|
|
) );
|
|
|
|
if ( bp_core_avatar_default( 'local' ) === $group_avatar ) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
function bp_group_avatar_delete_link() {
|
|
echo bp_get_group_avatar_delete_link();
|
|
}
|
|
function bp_get_group_avatar_delete_link() {
|
|
global $bp;
|
|
|
|
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' ) );
|
|
}
|
|
|
|
function bp_group_avatar_edit_form() {
|
|
groups_avatar_upload();
|
|
}
|
|
|
|
function bp_custom_group_boxes() {
|
|
do_action( 'groups_custom_group_boxes' );
|
|
}
|
|
|
|
function bp_custom_group_admin_tabs() {
|
|
do_action( 'groups_custom_group_admin_tabs' );
|
|
}
|
|
|
|
function bp_custom_group_fields_editable() {
|
|
do_action( 'groups_custom_group_fields_editable' );
|
|
}
|
|
|
|
function bp_custom_group_fields() {
|
|
do_action( 'groups_custom_group_fields' );
|
|
}
|
|
|
|
|
|
/************************************************************************************
|
|
* Membership Requests Template Tags
|
|
**/
|
|
|
|
class BP_Groups_Membership_Requests_Template {
|
|
var $current_request = -1;
|
|
var $request_count;
|
|
var $requests;
|
|
var $request;
|
|
|
|
var $in_the_loop;
|
|
|
|
var $pag_page;
|
|
var $pag_num;
|
|
var $pag_links;
|
|
var $total_request_count;
|
|
|
|
/**
|
|
* Constructor method.
|
|
*
|
|
* @param array $args {
|
|
* @type int $group_id ID of the group whose membership requests
|
|
* are being queried. Default: current group id.
|
|
* @type int $per_page Number of records to return per page of
|
|
* results. Default: 10.
|
|
* @type int $page Page of results to show. Default: 1.
|
|
* @type int $max Max items to return. Default: false (show all)
|
|
* }
|
|
*/
|
|
function __construct( $args = array() ) {
|
|
|
|
// Backward compatibility with old method of passing arguments
|
|
if ( ! is_array( $args ) || func_num_args() > 1 ) {
|
|
_deprecated_argument( __METHOD__, '2.0.0', sprintf( __( 'Arguments passed to %1$s should be in an associative array. See the inline documentation at %2$s for more details.', 'buddypress' ), __METHOD__, __FILE__ ) );
|
|
|
|
$old_args_keys = array(
|
|
0 => 'group_id',
|
|
1 => 'per_page',
|
|
2 => 'max',
|
|
);
|
|
|
|
$func_args = func_get_args();
|
|
$args = bp_core_parse_args_array( $old_args_keys, $func_args );
|
|
}
|
|
|
|
$r = wp_parse_args( $args, array(
|
|
'group_id' => bp_get_current_group_id(),
|
|
'per_page' => 10,
|
|
'page' => 1,
|
|
'max' => false,
|
|
'type' => 'first_joined',
|
|
) );
|
|
|
|
$this->pag_page = isset( $_REQUEST['mrpage'] ) ? intval( $_REQUEST['mrpage'] ) : $r['page'];
|
|
$this->pag_num = isset( $_REQUEST['num'] ) ? intval( $_REQUEST['num'] ) : $r['per_page'];
|
|
|
|
$mquery = new BP_Group_Member_Query( array(
|
|
'group_id' => $r['group_id'],
|
|
'type' => $r['type'],
|
|
'per_page' => $this->pag_num,
|
|
'page' => $this->pag_page,
|
|
|
|
// These filters ensure we only get pending requests
|
|
'is_confirmed' => false,
|
|
'inviter_id' => 0,
|
|
) );
|
|
|
|
$this->requests = array_values( $mquery->results );
|
|
$this->request_count = count( $this->requests );
|
|
|
|
// Compatibility with legacy format of request data objects
|
|
foreach ( $this->requests as $rk => $rv ) {
|
|
// For legacy reasons, the 'id' property of each
|
|
// request must match the membership id, not the ID of
|
|
// the user (as it's returned by BP_Group_Member_Query)
|
|
$this->requests[ $rk ]->user_id = $rv->ID;
|
|
$this->requests[ $rk ]->id = $rv->membership_id;
|
|
|
|
// Miscellaneous values
|
|
$this->requests[ $rk ]->group_id = $r['group_id'];
|
|
}
|
|
|
|
if ( !$r['max'] || $r['max'] >= (int) $mquery->total_users )
|
|
$this->total_request_count = (int) $mquery->total_users;
|
|
else
|
|
$this->total_request_count = (int) $r['max'];
|
|
|
|
if ( $r['max'] ) {
|
|
if ( $r['max'] >= count($this->requests) )
|
|
$this->request_count = count($this->requests);
|
|
else
|
|
$this->request_count = (int) $r['max'];
|
|
} else {
|
|
$this->request_count = count($this->requests);
|
|
}
|
|
|
|
$this->pag_links = paginate_links( array(
|
|
'base' => add_query_arg( 'mrpage', '%#%' ),
|
|
'format' => '',
|
|
'total' => ceil( $this->total_request_count / $this->pag_num ),
|
|
'current' => $this->pag_page,
|
|
'prev_text' => '←',
|
|
'next_text' => '→',
|
|
'mid_size' => 1
|
|
) );
|
|
}
|
|
|
|
function has_requests() {
|
|
if ( $this->request_count )
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
|
|
function next_request() {
|
|
$this->current_request++;
|
|
$this->request = $this->requests[$this->current_request];
|
|
|
|
return $this->request;
|
|
}
|
|
|
|
function rewind_requests() {
|
|
$this->current_request = -1;
|
|
|
|
if ( $this->request_count > 0 )
|
|
$this->request = $this->requests[0];
|
|
}
|
|
|
|
function requests() {
|
|
if ( $this->current_request + 1 < $this->request_count ) {
|
|
return true;
|
|
} elseif ( $this->current_request + 1 == $this->request_count ) {
|
|
do_action('group_request_loop_end');
|
|
// Do some cleaning up after the loop
|
|
$this->rewind_requests();
|
|
}
|
|
|
|
$this->in_the_loop = false;
|
|
return false;
|
|
}
|
|
|
|
function the_request() {
|
|
$this->in_the_loop = true;
|
|
$this->request = $this->next_request();
|
|
|
|
if ( 0 == $this->current_request ) // loop has just started
|
|
do_action('group_request_loop_start');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Initialize a group membership request template loop.
|
|
*
|
|
* @param array $args {
|
|
* @type int $group_id ID of the group. Defaults to current group.
|
|
* @type int $per_page Number of records to return per page. Default: 10.
|
|
* @type int $page Page of results to return. Default: 1.
|
|
* @type int $max Max number of items to return. Default: false.
|
|
* }
|
|
* @return bool True if there are requests, otherwise false.
|
|
*/
|
|
function bp_group_has_membership_requests( $args = '' ) {
|
|
global $requests_template;
|
|
|
|
$defaults = array(
|
|
'group_id' => bp_get_current_group_id(),
|
|
'per_page' => 10,
|
|
'page' => 1,
|
|
'max' => false
|
|
);
|
|
|
|
$r = wp_parse_args( $args, $defaults );
|
|
|
|
$requests_template = new BP_Groups_Membership_Requests_Template( $r );
|
|
return apply_filters( 'bp_group_has_membership_requests', $requests_template->has_requests(), $requests_template );
|
|
}
|
|
|
|
function bp_group_membership_requests() {
|
|
global $requests_template;
|
|
|
|
return $requests_template->requests();
|
|
}
|
|
|
|
function bp_group_the_membership_request() {
|
|
global $requests_template;
|
|
|
|
return $requests_template->the_request();
|
|
}
|
|
|
|
function bp_group_request_user_avatar_thumb() {
|
|
global $requests_template;
|
|
|
|
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 ) ) ) ) );
|
|
}
|
|
|
|
function bp_group_request_reject_link() {
|
|
echo bp_get_group_request_reject_link();
|
|
}
|
|
function bp_get_group_request_reject_link() {
|
|
global $requests_template;
|
|
|
|
return apply_filters( 'bp_get_group_request_reject_link', wp_nonce_url( bp_get_group_permalink( groups_get_current_group() ) . 'admin/membership-requests/reject/' . $requests_template->request->membership_id, 'groups_reject_membership_request' ) );
|
|
}
|
|
|
|
function bp_group_request_accept_link() {
|
|
echo bp_get_group_request_accept_link();
|
|
}
|
|
function bp_get_group_request_accept_link() {
|
|
global $requests_template;
|
|
|
|
return apply_filters( 'bp_get_group_request_accept_link', wp_nonce_url( bp_get_group_permalink( groups_get_current_group() ) . 'admin/membership-requests/accept/' . $requests_template->request->membership_id, 'groups_accept_membership_request' ) );
|
|
}
|
|
|
|
function bp_group_request_user_link() {
|
|
echo bp_get_group_request_user_link();
|
|
}
|
|
function bp_get_group_request_user_link() {
|
|
global $requests_template;
|
|
|
|
return apply_filters( 'bp_get_group_request_user_link', bp_core_get_userlink( $requests_template->request->user_id ) );
|
|
}
|
|
|
|
function bp_group_request_time_since_requested() {
|
|
global $requests_template;
|
|
|
|
echo apply_filters( 'bp_group_request_time_since_requested', sprintf( __( 'requested %s', 'buddypress' ), bp_core_time_since( strtotime( $requests_template->request->date_modified ) ) ) );
|
|
}
|
|
|
|
function bp_group_request_comment() {
|
|
global $requests_template;
|
|
|
|
echo apply_filters( 'bp_group_request_comment', strip_tags( stripslashes( $requests_template->request->comments ) ) );
|
|
}
|
|
|
|
/**
|
|
* Output pagination links for group membership requests.
|
|
*
|
|
* @since BuddyPress (2.0.0)
|
|
*/
|
|
function bp_group_requests_pagination_links() {
|
|
echo bp_get_group_requests_pagination_links();
|
|
}
|
|
/**
|
|
* Get pagination links for group membership requests.
|
|
*
|
|
* @since BuddyPress (2.0.0)
|
|
*
|
|
* @return string
|
|
*/
|
|
function bp_get_group_requests_pagination_links() {
|
|
global $requests_template;
|
|
return apply_filters( 'bp_get_group_requests_pagination_links', $requests_template->pag_links );
|
|
}
|
|
|
|
/**
|
|
* Output pagination count text for group membership requests.
|
|
*
|
|
* @since BuddyPress (2.0.0)
|
|
*/
|
|
function bp_group_requests_pagination_count() {
|
|
echo bp_get_group_requests_pagination_count();
|
|
}
|
|
/**
|
|
* Get pagination count text for group membership requests.
|
|
*
|
|
* @since BuddyPress (2.0.0)
|
|
*
|
|
* @return string
|
|
*/
|
|
function bp_get_group_requests_pagination_count() {
|
|
global $requests_template;
|
|
|
|
$start_num = intval( ( $requests_template->pag_page - 1 ) * $requests_template->pag_num ) + 1;
|
|
$from_num = bp_core_number_format( $start_num );
|
|
$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 ) );
|
|
$total = bp_core_number_format( $requests_template->total_request_count );
|
|
|
|
return apply_filters( 'bp_get_group_requests_pagination_count', sprintf( _n( 'Viewing requests %1$s to %2$s (of %3$s request)', 'Viewing request %1$s to %2$s (of %3$s requests)', $total, 'buddypress' ), $from_num, $to_num, $total ), $from_num, $to_num, $total );
|
|
}
|
|
|
|
/************************************************************************************
|
|
* Invite Friends Template Tags
|
|
**/
|
|
|
|
class BP_Groups_Invite_Template {
|
|
var $current_invite = -1;
|
|
var $invite_count;
|
|
var $invites;
|
|
var $invite;
|
|
|
|
var $in_the_loop;
|
|
|
|
var $pag_page;
|
|
var $pag_num;
|
|
var $pag_links;
|
|
var $total_invite_count;
|
|
|
|
public function __construct( $args = array() ) {
|
|
|
|
// Backward compatibility with old method of passing arguments
|
|
if ( ! is_array( $args ) || func_num_args() > 1 ) {
|
|
_deprecated_argument( __METHOD__, '2.0.0', sprintf( __( 'Arguments passed to %1$s should be in an associative array. See the inline documentation at %2$s for more details.', 'buddypress' ), __METHOD__, __FILE__ ) );
|
|
|
|
$old_args_keys = array(
|
|
0 => 'user_id',
|
|
1 => 'group_id',
|
|
);
|
|
|
|
$func_args = func_get_args();
|
|
$args = bp_core_parse_args_array( $old_args_keys, $func_args );
|
|
}
|
|
|
|
$r = wp_parse_args( $args, array(
|
|
'user_id' => bp_loggedin_user_id(),
|
|
'group_id' => bp_get_current_group_id(),
|
|
'page' => 1,
|
|
'per_page' => 10,
|
|
) );
|
|
|
|
$this->pag_num = intval( $r['per_page'] );
|
|
$this->pag_page = isset( $_REQUEST['invitepage'] ) ? intval( $_REQUEST['invitepage'] ) : $r['page'];
|
|
|
|
$iquery = new BP_Group_Member_Query( array(
|
|
'group_id' => $r['group_id'],
|
|
'type' => 'first_joined',
|
|
'per_page' => $this->pag_num,
|
|
'page' => $this->pag_page,
|
|
|
|
// These filters ensure we get only pending invites
|
|
'is_confirmed' => false,
|
|
'inviter_id' => $r['user_id'],
|
|
) );
|
|
$this->invite_data = $iquery->results;
|
|
|
|
$this->total_invite_count = $iquery->total_users;
|
|
$this->invites = array_values( wp_list_pluck( $this->invite_data, 'ID' ) );
|
|
$this->invite_count = count( $this->invites );
|
|
|
|
// If per_page is set to 0 (show all results), don't generate
|
|
// pag_links
|
|
if ( ! empty( $this->pag_num ) ) {
|
|
$this->pag_links = paginate_links( array(
|
|
'base' => add_query_arg( 'invitepage', '%#%' ),
|
|
'format' => '',
|
|
'total' => ceil( $this->total_invite_count / $this->pag_num ),
|
|
'current' => $this->pag_page,
|
|
'prev_text' => '←',
|
|
'next_text' => '→',
|
|
'mid_size' => 1,
|
|
) );
|
|
} else {
|
|
$this->pag_links = '';
|
|
}
|
|
}
|
|
|
|
function has_invites() {
|
|
if ( $this->invite_count )
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
|
|
function next_invite() {
|
|
$this->current_invite++;
|
|
$this->invite = $this->invites[$this->current_invite];
|
|
|
|
return $this->invite;
|
|
}
|
|
|
|
function rewind_invites() {
|
|
$this->current_invite = -1;
|
|
if ( $this->invite_count > 0 )
|
|
$this->invite = $this->invites[0];
|
|
}
|
|
|
|
function invites() {
|
|
if ( $this->current_invite + 1 < $this->invite_count ) {
|
|
return true;
|
|
} elseif ( $this->current_invite + 1 == $this->invite_count ) {
|
|
do_action('loop_end');
|
|
// Do some cleaning up after the loop
|
|
$this->rewind_invites();
|
|
}
|
|
|
|
$this->in_the_loop = false;
|
|
return false;
|
|
}
|
|
|
|
function the_invite() {
|
|
global $group_id;
|
|
$this->in_the_loop = true;
|
|
$user_id = $this->next_invite();
|
|
|
|
$this->invite = new stdClass;
|
|
$this->invite->user = $this->invite_data[ $user_id ];
|
|
|
|
// This method previously populated the user object with
|
|
// BP_Core_User. We manually configure BP_Core_User data for
|
|
// backward compatibility.
|
|
if ( bp_is_active( 'xprofile' ) ) {
|
|
$this->invite->user->profile_data = BP_XProfile_ProfileData::get_all_for_user( $user_id );
|
|
}
|
|
|
|
$this->invite->user->avatar = bp_core_fetch_avatar( array( 'item_id' => $user_id, 'type' => 'full', 'alt' => sprintf( __( 'Avatar of %s', 'buddypress' ), $this->invite->user->fullname ) ) );
|
|
$this->invite->user->avatar_thumb = bp_core_fetch_avatar( array( 'item_id' => $user_id, 'type' => 'thumb', 'alt' => sprintf( __( 'Avatar of %s', 'buddypress' ), $this->invite->user->fullname ) ) );
|
|
$this->invite->user->avatar_mini = bp_core_fetch_avatar( array( 'item_id' => $user_id, 'type' => 'thumb', 'alt' => sprintf( __( 'Avatar of %s', 'buddypress' ), $this->invite->user->fullname ), 'width' => 30, 'height' => 30 ) );
|
|
$this->invite->user->email = $this->invite->user->user_email;
|
|
$this->invite->user->user_url = bp_core_get_user_domain( $user_id, $this->invite->user->user_nicename, $this->invite->user->user_login );
|
|
$this->invite->user->user_link = "<a href='{$this->invite->user->user_url}' title='{$this->invite->user->fullname}'>{$this->invite->user->fullname}</a>";
|
|
$this->invite->user->last_active = bp_core_get_last_activity( $this->invite->user->last_activity, __( 'active %s', 'buddypress' ) );
|
|
|
|
if ( bp_is_active( 'groups' ) ) {
|
|
$total_groups = BP_Groups_Member::total_group_count( $user_id );
|
|
$this->invite->user->total_groups = sprintf( _n( '%d group', '%d groups', $total_groups, 'buddypress' ), $total_groups );
|
|
}
|
|
|
|
if ( bp_is_active( 'friends' ) ) {
|
|
$this->invite->user->total_friends = BP_Friends_Friendship::total_friend_count( $user_id );
|
|
}
|
|
|
|
if ( bp_is_active( 'friends' ) ) {
|
|
$this->invite->user->total_friends = BP_Friends_Friendship::total_friend_count( $user_id );
|
|
}
|
|
|
|
$this->invite->user->total_blogs = null;
|
|
|
|
$this->invite->group_id = $group_id; // Globaled in bp_group_has_invites()
|
|
|
|
if ( 0 == $this->current_invite ) // loop has just started
|
|
do_action('loop_start');
|
|
}
|
|
}
|
|
|
|
function bp_group_has_invites( $args = '' ) {
|
|
global $invites_template, $group_id;
|
|
|
|
$r = wp_parse_args( $args, array(
|
|
'group_id' => false,
|
|
'user_id' => bp_loggedin_user_id(),
|
|
'per_page' => false,
|
|
'page' => 1,
|
|
) );
|
|
|
|
if ( empty( $r['group_id'] ) ) {
|
|
if ( ! empty( buddypress()->groups->current_group ) ) {
|
|
$r['group_id'] = bp_get_current_group_id();
|
|
} else if ( ! empty( buddypress()->groups->new_group_id ) ) {
|
|
$r['group_id'] = buddypress()->groups->new_group_id;
|
|
}
|
|
}
|
|
|
|
// Set the global (for use in BP_Groups_Invite_Template::the_invite())
|
|
if ( empty( $group_id ) ) {
|
|
$group_id = $r['group_id'];
|
|
}
|
|
|
|
if ( ! $group_id ) {
|
|
return false;
|
|
}
|
|
|
|
$invites_template = new BP_Groups_Invite_Template( $r );
|
|
return apply_filters( 'bp_group_has_invites', $invites_template->has_invites(), $invites_template );
|
|
}
|
|
|
|
function bp_group_invites() {
|
|
global $invites_template;
|
|
|
|
return $invites_template->invites();
|
|
}
|
|
|
|
function bp_group_the_invite() {
|
|
global $invites_template;
|
|
|
|
return $invites_template->the_invite();
|
|
}
|
|
|
|
function bp_group_invite_item_id() {
|
|
echo bp_get_group_invite_item_id();
|
|
}
|
|
function bp_get_group_invite_item_id() {
|
|
global $invites_template;
|
|
|
|
return apply_filters( 'bp_get_group_invite_item_id', 'uid-' . $invites_template->invite->user->id );
|
|
}
|
|
|
|
function bp_group_invite_user_avatar() {
|
|
echo bp_get_group_invite_user_avatar();
|
|
}
|
|
function bp_get_group_invite_user_avatar() {
|
|
global $invites_template;
|
|
|
|
return apply_filters( 'bp_get_group_invite_user_avatar', $invites_template->invite->user->avatar_thumb );
|
|
}
|
|
|
|
function bp_group_invite_user_link() {
|
|
echo bp_get_group_invite_user_link();
|
|
}
|
|
function bp_get_group_invite_user_link() {
|
|
global $invites_template;
|
|
|
|
return apply_filters( 'bp_get_group_invite_user_link', bp_core_get_userlink( $invites_template->invite->user->id ) );
|
|
}
|
|
|
|
function bp_group_invite_user_last_active() {
|
|
echo bp_get_group_invite_user_last_active();
|
|
}
|
|
function bp_get_group_invite_user_last_active() {
|
|
global $invites_template;
|
|
|
|
return apply_filters( 'bp_get_group_invite_user_last_active', $invites_template->invite->user->last_active );
|
|
}
|
|
|
|
function bp_group_invite_user_remove_invite_url() {
|
|
echo bp_get_group_invite_user_remove_invite_url();
|
|
}
|
|
function bp_get_group_invite_user_remove_invite_url() {
|
|
global $invites_template;
|
|
|
|
$user_id = intval( $invites_template->invite->user->id );
|
|
|
|
if ( bp_is_current_action( 'create' ) ) {
|
|
$uninvite_url = bp_get_root_domain() . '/' . bp_get_groups_root_slug() . '/create/step/group-invites/?user_id=' . $user_id;
|
|
} else {
|
|
$uninvite_url = bp_get_group_permalink( groups_get_current_group() ) . 'send-invites/remove/' . $user_id;
|
|
}
|
|
|
|
return wp_nonce_url( $uninvite_url, 'groups_invite_uninvite_user' );
|
|
}
|
|
|
|
/**
|
|
* Output pagination links for group invitations.
|
|
*
|
|
* @since BuddyPress (2.0.0)
|
|
*/
|
|
function bp_group_invite_pagination_links() {
|
|
echo bp_get_group_invite_pagination_links();
|
|
}
|
|
/**
|
|
* Get pagination links for group invitations.
|
|
*
|
|
* @since BuddyPress (2.0.0)
|
|
*
|
|
* @return string
|
|
*/
|
|
function bp_get_group_invite_pagination_links() {
|
|
global $invites_template;
|
|
return apply_filters( 'bp_get_group_invite_pagination_links', $invites_template->pag_links );
|
|
}
|
|
|
|
/**
|
|
* Output pagination count text for group invitations.
|
|
*
|
|
* @since BuddyPress (2.0.0)
|
|
*/
|
|
function bp_group_invite_pagination_count() {
|
|
echo bp_get_group_invite_pagination_count();
|
|
}
|
|
/**
|
|
* Get pagination count text for group invitations.
|
|
*
|
|
* @since BuddyPress (2.0.0)
|
|
*
|
|
* @return string
|
|
*/
|
|
function bp_get_group_invite_pagination_count() {
|
|
global $invites_template;
|
|
|
|
$start_num = intval( ( $invites_template->pag_page - 1 ) * $invites_template->pag_num ) + 1;
|
|
$from_num = bp_core_number_format( $start_num );
|
|
$to_num = bp_core_number_format( ( $start_num + ( $invites_template->pag_num - 1 ) > $invites_template->total_invite_count ) ? $invites_template->total_invite_count : $start_num + ( $invites_template->pag_num - 1 ) );
|
|
$total = bp_core_number_format( $invites_template->total_invite_count );
|
|
|
|
return apply_filters( 'bp_get_groups_pagination_count', sprintf( _n( 'Viewing invitation %1$s to %2$s (of %3$s invitation)', 'Viewing invitation %1$s to %2$s (of %3$s invitations)', $total, 'buddypress' ), $from_num, $to_num, $total ), $from_num, $to_num, $total );
|
|
}
|
|
|
|
/***
|
|
* Groups RSS Feed Template Tags
|
|
*/
|
|
|
|
/**
|
|
* Hook group activity feed to <head>
|
|
*
|
|
* @since BuddyPress (1.5)
|
|
*/
|
|
function bp_groups_activity_feed() {
|
|
if ( !bp_is_active( 'groups' ) || !bp_is_active( 'activity' ) || !bp_is_group() )
|
|
return; ?>
|
|
|
|
<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() ?>" />
|
|
|
|
<?php
|
|
}
|
|
add_action( 'bp_head', 'bp_groups_activity_feed' );
|
|
|
|
function bp_group_activity_feed_link() {
|
|
echo bp_get_group_activity_feed_link();
|
|
}
|
|
function bp_get_group_activity_feed_link() {
|
|
global $bp;
|
|
|
|
return apply_filters( 'bp_get_group_activity_feed_link', bp_get_group_permalink( $bp->groups->current_group ) . 'feed/' );
|
|
}
|
|
|
|
/**
|
|
* Echoes the output of bp_get_current_group_id()
|
|
*
|
|
* @package BuddyPress
|
|
* @since BuddyPress (1.5)
|
|
*/
|
|
function bp_current_group_id() {
|
|
echo bp_get_current_group_id();
|
|
}
|
|
/**
|
|
* Returns the ID of the current group
|
|
*
|
|
* @package BuddyPress
|
|
* @since BuddyPress (1.5)
|
|
* @uses apply_filters() Filter bp_get_current_group_id to modify this output
|
|
*
|
|
* @return int $current_group_id The id of the current group, if there is one
|
|
*/
|
|
function bp_get_current_group_id() {
|
|
$current_group = groups_get_current_group();
|
|
|
|
$current_group_id = isset( $current_group->id ) ? (int) $current_group->id : 0;
|
|
|
|
return apply_filters( 'bp_get_current_group_id', $current_group_id, $current_group );
|
|
}
|
|
|
|
/**
|
|
* Echoes the output of bp_get_current_group_slug()
|
|
*
|
|
* @package BuddyPress
|
|
* @since BuddyPress (1.5)
|
|
*/
|
|
function bp_current_group_slug() {
|
|
echo bp_get_current_group_slug();
|
|
}
|
|
/**
|
|
* Returns the slug of the current group
|
|
*
|
|
* @package BuddyPress
|
|
* @since BuddyPress (1.5)
|
|
* @uses apply_filters() Filter bp_get_current_group_slug to modify this output
|
|
*
|
|
* @return string $current_group_slug The slug of the current group, if there is one
|
|
*/
|
|
function bp_get_current_group_slug() {
|
|
$current_group = groups_get_current_group();
|
|
|
|
$current_group_slug = isset( $current_group->slug ) ? $current_group->slug : '';
|
|
|
|
return apply_filters( 'bp_get_current_group_slug', $current_group_slug, $current_group );
|
|
}
|
|
|
|
/**
|
|
* Echoes the output of bp_get_current_group_name()
|
|
*
|
|
* @package BuddyPress
|
|
*/
|
|
function bp_current_group_name() {
|
|
echo bp_get_current_group_name();
|
|
}
|
|
/**
|
|
* Returns the name of the current group
|
|
*
|
|
* @package BuddyPress
|
|
* @since BuddyPress (1.5)
|
|
* @uses apply_filters() Filter bp_get_current_group_name to modify this output
|
|
*
|
|
* @return string The name of the current group, if there is one
|
|
*/
|
|
function bp_get_current_group_name() {
|
|
global $bp;
|
|
|
|
$name = apply_filters( 'bp_get_group_name', $bp->groups->current_group->name );
|
|
return apply_filters( 'bp_get_current_group_name', $name );
|
|
}
|
|
|
|
function bp_groups_action_link( $action = '', $query_args = '', $nonce = false ) {
|
|
echo bp_get_groups_action_link( $action, $query_args, $nonce );
|
|
}
|
|
function bp_get_groups_action_link( $action = '', $query_args = '', $nonce = false ) {
|
|
global $bp;
|
|
|
|
// Must be a group
|
|
if ( empty( $bp->groups->current_group->id ) )
|
|
return;
|
|
|
|
// Append $action to $url if provided
|
|
if ( !empty( $action ) )
|
|
$url = bp_get_group_permalink( groups_get_current_group() ) . $action;
|
|
else
|
|
$url = bp_get_group_permalink( groups_get_current_group() );
|
|
|
|
// Add a slash at the end of our user url
|
|
$url = trailingslashit( $url );
|
|
|
|
// Add possible query arg
|
|
if ( !empty( $query_args ) && is_array( $query_args ) )
|
|
$url = add_query_arg( $query_args, $url );
|
|
|
|
// To nonce, or not to nonce...
|
|
if ( true === $nonce )
|
|
$url = wp_nonce_url( $url );
|
|
elseif ( is_string( $nonce ) )
|
|
$url = wp_nonce_url( $url, $nonce );
|
|
|
|
// Return the url, if there is one
|
|
if ( !empty( $url ) )
|
|
return $url;
|
|
}
|
|
|
|
/** Stats **********************************************************************/
|
|
|
|
/**
|
|
* Display the number of groups in user's profile.
|
|
*
|
|
* @since BuddyPress (2.0.0)
|
|
*
|
|
* @param array $args before|after|user_id
|
|
* @uses bp_groups_get_profile_stats() to get the stats
|
|
*/
|
|
function bp_groups_profile_stats( $args = '' ) {
|
|
echo bp_groups_get_profile_stats( $args );
|
|
}
|
|
add_action( 'bp_members_admin_user_stats', 'bp_groups_profile_stats', 8, 1 );
|
|
|
|
/**
|
|
* Return the number of groups in user's profile.
|
|
*
|
|
* @since BuddyPress (2.0.0)
|
|
*
|
|
* @param array $args before|after|user_id
|
|
* @return string HTML for stats output.
|
|
*/
|
|
function bp_groups_get_profile_stats( $args = '' ) {
|
|
|
|
// Parse the args
|
|
$r = bp_parse_args( $args, array(
|
|
'before' => '<li class="bp-groups-profile-stats">',
|
|
'after' => '</li>',
|
|
'user_id' => bp_displayed_user_id(),
|
|
'groups' => 0,
|
|
'output' => ''
|
|
), 'groups_get_profile_stats' );
|
|
|
|
// Allow completely overloaded output
|
|
if ( empty( $r['output'] ) ) {
|
|
|
|
// Only proceed if a user ID was passed
|
|
if ( ! empty( $r['user_id'] ) ) {
|
|
|
|
// Get the user groups
|
|
if ( empty( $r['groups'] ) ) {
|
|
$r['groups'] = absint( bp_get_total_group_count_for_user( $r['user_id'] ) );
|
|
}
|
|
|
|
// If groups exist, show some formatted output
|
|
$r['output'] = $r['before'] . sprintf( _n( '%s group', '%s groups', $r['groups'], 'buddypress' ), '<strong>' . $r['groups'] . '</strong>' ) . $r['after'];
|
|
}
|
|
}
|
|
|
|
// Filter and return
|
|
return apply_filters( 'bp_groups_get_profile_stats', $r['output'], $r );
|
|
}
|