pages->groups->id );
}
function groups_get_group( $args = '' ) {
$defaults = array(
'group_id' => false,
'load_users' => false
);
$args = wp_parse_args( $args, $defaults );
extract( $args, EXTR_SKIP );
return apply_filters( 'groups_get_group', new BP_Groups_Group( $group_id, true, $load_users ) );
}
/*** Group Creation, Editing & Deletion *****************************************/
function groups_create_group( $args = '' ) {
global $bp;
extract( $args );
/**
* Possible parameters (pass as assoc array):
* 'group_id'
* 'creator_id'
* 'name'
* 'description'
* 'slug'
* 'status'
* 'enable_forum'
* 'date_created'
*/
if ( isset( $group_id ) && $group_id )
$group = new BP_Groups_Group( $group_id );
else
$group = new BP_Groups_Group;
if ( isset( $creator_id ) && $creator_id )
$group->creator_id = $creator_id;
else
$group->creator_id = $bp->loggedin_user->id;
if ( isset( $name ) )
$group->name = $name;
if ( isset( $description ) )
$group->description = $description;
if ( isset( $slug ) && groups_check_slug( $slug ) )
$group->slug = $slug;
if ( isset( $status ) ) {
if ( groups_is_valid_status( $status ) )
$group->status = $status;
}
if ( isset( $enable_forum ) )
$group->enable_forum = $enable_forum;
else if ( !$group_id && !isset( $enable_forum ) )
$group->enable_forum = 1;
if ( isset( $date_created ) )
$group->date_created = $date_created;
if ( !$group->save() )
return false;
// If this is a new group, set up the creator as the first member and admin
if ( empty( $group_id ) ) {
$member = new BP_Groups_Member;
$member->group_id = $group->id;
$member->user_id = $group->creator_id;
$member->is_admin = 1;
$member->user_title = __( 'Group Admin', 'buddypress' );
$member->is_confirmed = 1;
$member->date_modified = bp_core_current_time();
$member->save();
do_action( 'groups_create_group', $group->id, $member, $group );
} else {
do_action( 'groups_update_group', $group->id, $group );
}
do_action( 'groups_created_group', $group->id );
return $group->id;
}
function groups_edit_base_group_details( $group_id, $group_name, $group_desc, $notify_members ) {
global $bp;
if ( empty( $group_name ) || empty( $group_desc ) )
return false;
$group = new BP_Groups_Group( $group_id );
$group->name = $group_name;
$group->description = $group_desc;
if ( !$group->save() )
return false;
if ( $notify_members ) {
groups_notification_group_updated( $group->id );
}
do_action( 'groups_details_updated', $group->id );
return true;
}
function groups_edit_group_settings( $group_id, $enable_forum, $status, $invite_status = false ) {
global $bp;
$group = new BP_Groups_Group( $group_id );
$group->enable_forum = $enable_forum;
/***
* Before we potentially switch the group status, if it has been changed to public
* from private and there are outstanding membership requests, auto-accept those requests.
*/
if ( 'private' == $group->status && 'public' == $status )
groups_accept_all_pending_membership_requests( $group->id );
// Now update the status
$group->status = $status;
if ( !$group->save() )
return false;
// If forums have been enabled, and a forum does not yet exist, we need to create one.
if ( $group->enable_forum ) {
if ( bp_is_active( 'forums' ) && !groups_get_groupmeta( $group->id, 'forum_id' ) ) {
groups_new_group_forum( $group->id, $group->name, $group->description );
}
}
// Set the invite status
if ( $invite_status )
groups_update_groupmeta( $group->id, 'invite_status', $invite_status );
groups_update_groupmeta( $group->id, 'last_activity', bp_core_current_time() );
do_action( 'groups_settings_updated', $group->id );
return true;
}
/**
* Delete a group and all of its associated meta
*
* @global object $bp BuddyPress global settings
* @param int $group_id
* @since 1.0
*/
function groups_delete_group( $group_id ) {
global $bp;
// Check the user is the group admin.
if ( !$bp->is_item_admin )
return false;
// Get the group object
$group = new BP_Groups_Group( $group_id );
if ( !$group->delete() )
return false;
do_action( 'groups_before_delete_group', $group_id );
// Delete all group activity from activity streams
if ( bp_is_active( 'activity' ) )
bp_activity_delete_by_item_id( array( 'item_id' => $group_id, 'component' => $bp->groups->id ) );
// Remove all outstanding invites for this group
groups_delete_all_group_invites( $group_id );
// Remove all notifications for any user belonging to this group
bp_core_delete_all_notifications_by_type( $group_id, $bp->groups->id );
// Remove forum if component is active and current group has one
if ( bp_is_active( 'forums' ) && $forum_id = groups_get_groupmeta( $group_id, 'forum_id' ) ) {
do_action( 'bbpress_init' );
bb_delete_forum( $forum_id );
}
do_action( 'groups_delete_group', $group_id);
return true;
}
function groups_is_valid_status( $status ) {
global $bp;
return in_array( $status, (array)$bp->groups->valid_status );
}
function groups_check_slug( $slug ) {
global $bp;
if ( 'wp' == substr( $slug, 0, 2 ) )
$slug = substr( $slug, 2, strlen( $slug ) - 2 );
if ( in_array( $slug, (array)$bp->groups->forbidden_names ) )
$slug = $slug . '-' . rand();
if ( BP_Groups_Group::check_slug( $slug ) ) {
do {
$slug = $slug . '-' . rand();
}
while ( BP_Groups_Group::check_slug( $slug ) );
}
return $slug;
}
function groups_get_slug( $group_id ) {
$group = new BP_Groups_Group( $group_id );
return $group->slug;
}
/*** User Actions ***************************************************************/
function groups_leave_group( $group_id, $user_id = 0 ) {
global $bp;
if ( !$user_id )
$user_id = $bp->loggedin_user->id;
// Don't let single admins leave the group.
if ( count( groups_get_group_admins( $group_id ) ) < 2 ) {
if ( groups_is_user_admin( $user_id, $group_id ) ) {
bp_core_add_message( __( 'As the only Admin, you cannot leave the group.', 'buddypress' ), 'error' );
return false;
}
}
$membership = new BP_Groups_Member( $user_id, $group_id );
// This is exactly the same as deleting an invite, just is_confirmed = 1 NOT 0.
if ( !groups_uninvite_user( $user_id, $group_id ) )
return false;
// Modify group member count
groups_update_groupmeta( $group_id, 'total_member_count', (int) groups_get_groupmeta( $group_id, 'total_member_count') - 1 );
// Modify user's group memberhip count
bp_update_user_meta( $user_id, 'total_group_count', (int) bp_get_user_meta( $user_id, 'total_group_count', true ) - 1 );
/**
* If the user joined this group less than five minutes ago, remove the
* joined_group activity so users cannot flood the activity stream by
* joining/leaving the group in quick succession.
*/
if ( bp_is_active( 'activity' ) && gmmktime() <= strtotime( '+5 minutes', (int)strtotime( $membership->date_modified ) ) )
bp_activity_delete( array( 'component' => $bp->groups->id, 'type' => 'joined_group', 'user_id' => $user_id, 'item_id' => $group_id ) );
bp_core_add_message( __( 'You successfully left the group.', 'buddypress' ) );
do_action( 'groups_leave_group', $group_id, $user_id );
return true;
}
function groups_join_group( $group_id, $user_id = 0 ) {
global $bp;
if ( !$user_id )
$user_id = $bp->loggedin_user->id;
// Check if the user has an outstanding invite, is so delete it.
if ( groups_check_user_has_invite( $user_id, $group_id ) )
groups_delete_invite( $user_id, $group_id );
// Check if the user has an outstanding request, is so delete it.
if ( groups_check_for_membership_request( $user_id, $group_id ) )
groups_delete_membership_request( $user_id, $group_id );
// User is already a member, just return true
if ( groups_is_user_member( $user_id, $group_id ) )
return true;
$new_member = new BP_Groups_Member;
$new_member->group_id = $group_id;
$new_member->user_id = $user_id;
$new_member->inviter_id = 0;
$new_member->is_admin = 0;
$new_member->user_title = '';
$new_member->date_modified = bp_core_current_time();
$new_member->is_confirmed = 1;
if ( !$new_member->save() )
return false;
if ( !isset( $bp->groups->current_group ) || !$bp->groups->current_group || $group_id != $bp->groups->current_group->id )
$group = new BP_Groups_Group( $group_id );
else
$group = $bp->groups->current_group;
// Record this in activity streams
groups_record_activity( array(
'action' => apply_filters( 'groups_activity_joined_group', sprintf( __( '%1$s joined the group %2$s', 'buddypress'), bp_core_get_userlink( $user_id ), '' . esc_attr( bp_get_group_name( $group ) ) . '' ) ),
'type' => 'joined_group',
'item_id' => $group_id,
'user_id' => $user_id
) );
// Modify group meta
groups_update_groupmeta( $group_id, 'total_member_count', (int) groups_get_groupmeta( $group_id, 'total_member_count') + 1 );
groups_update_groupmeta( $group_id, 'last_activity', bp_core_current_time() );
do_action( 'groups_join_group', $group_id, $user_id );
return true;
}
/*** General Group Functions ****************************************************/
function groups_check_group_exists( $group_id ) {
return BP_Groups_Group::group_exists( $group_id );
}
function groups_get_group_admins( $group_id ) {
return BP_Groups_Member::get_group_administrator_ids( $group_id );
}
function groups_get_group_mods( $group_id ) {
return BP_Groups_Member::get_group_moderator_ids( $group_id );
}
function groups_get_group_members( $group_id, $limit = false, $page = false ) {
return BP_Groups_Member::get_all_for_group( $group_id, $limit, $page );
}
function groups_get_total_member_count( $group_id ) {
return BP_Groups_Group::get_total_member_count( $group_id );
}
/*** Group Fetching, Filtering & Searching *************************************/
function groups_get_groups( $args = '' ) {
global $bp;
$defaults = array(
'type' => 'active', // active, newest, alphabetical, random, popular, most-forum-topics or most-forum-posts
'user_id' => false, // Pass a user_id to limit to only groups that this user is a member of
'include' => false, // Only include these specific groups (group_ids)
'exclude' => false, // Do not include these specific groups (group_ids)
'search_terms' => false, // Limit to groups that match these search terms
'show_hidden' => false, // Show hidden groups to non-admins
'per_page' => 20, // The number of results to return per page
'page' => 1, // The page to return if limiting per page
'populate_extras' => true, // Fetch meta such as is_banned and is_member
);
$params = wp_parse_args( $args, $defaults );
extract( $params, EXTR_SKIP );
$groups = BP_Groups_Group::get( $type, $per_page, $page, $user_id, $search_terms, $include, $populate_extras, $exclude, $show_hidden );
return apply_filters_ref_array( 'groups_get_groups', array( &$groups, &$params ) );
}
function groups_get_total_group_count() {
if ( !$count = wp_cache_get( 'bp_total_group_count', 'bp' ) ) {
$count = BP_Groups_Group::get_total_group_count();
wp_cache_set( 'bp_total_group_count', $count, 'bp' );
}
return $count;
}
function groups_get_user_groups( $user_id = 0, $pag_num = 0, $pag_page = 0 ) {
global $bp;
if ( !$user_id )
$user_id = $bp->displayed_user->id;
return BP_Groups_Member::get_group_ids( $user_id, $pag_num, $pag_page );
}
function groups_total_groups_for_user( $user_id = 0 ) {
global $bp;
if ( !$user_id )
$user_id = ( $bp->displayed_user->id ) ? $bp->displayed_user->id : $bp->loggedin_user->id;
if ( !$count = wp_cache_get( 'bp_total_groups_for_user_' . $user_id, 'bp' ) ) {
$count = BP_Groups_Member::total_group_count( $user_id );
wp_cache_set( 'bp_total_groups_for_user_' . $user_id, $count, 'bp' );
}
return $count;
}
/**
* Returns the group object for the group currently being viewed
*
* @package BuddyPress
* @since 1.5
*
* @return obj The current group object
*/
function groups_get_current_group() {
global $bp;
$current_group = isset( $bp->groups->current_group ) ? $bp->groups->current_group : false;
return apply_filters( 'groups_get_current_group', $current_group );
}
/*** Group Avatars *************************************************************/
function groups_avatar_upload_dir( $group_id = 0 ) {
global $bp;
if ( !$group_id )
$group_id = $bp->groups->current_group->id;
$path = bp_core_avatar_upload_path() . '/group-avatars/' . $group_id;
$newbdir = $path;
if ( !file_exists( $path ) )
@wp_mkdir_p( $path );
$newurl = bp_core_avatar_url() . '/group-avatars/' . $group_id;
$newburl = $newurl;
$newsubdir = '/group-avatars/' . $group_id;
return apply_filters( 'groups_avatar_upload_dir', array( 'path' => $path, 'url' => $newurl, 'subdir' => $newsubdir, 'basedir' => $newbdir, 'baseurl' => $newburl, 'error' => false ) );
}
/*** Group Member Status Checks ************************************************/
function groups_is_user_admin( $user_id, $group_id ) {
return BP_Groups_Member::check_is_admin( $user_id, $group_id );
}
function groups_is_user_mod( $user_id, $group_id ) {
return BP_Groups_Member::check_is_mod( $user_id, $group_id );
}
function groups_is_user_member( $user_id, $group_id ) {
return BP_Groups_Member::check_is_member( $user_id, $group_id );
}
function groups_is_user_banned( $user_id, $group_id ) {
return BP_Groups_Member::check_is_banned( $user_id, $group_id );
}
/**
* Is the specified user the creator of the group?
*
* @param int $user_id
* @param int $group_id
* @since 1.2.6
* @uses BP_Groups_Member
*/
function groups_is_user_creator( $user_id, $group_id ) {
return BP_Groups_Member::check_is_creator( $user_id, $group_id );
}
/*** Group Activity Posting **************************************************/
function groups_post_update( $args = '' ) {
global $bp;
$defaults = array(
'content' => false,
'user_id' => $bp->loggedin_user->id,
'group_id' => 0
);
$r = wp_parse_args( $args, $defaults );
extract( $r, EXTR_SKIP );
if ( empty( $group_id ) && !empty( $bp->groups->current_group->id ) )
$group_id = $bp->groups->current_group->id;
if ( empty( $content ) || !strlen( trim( $content ) ) || empty( $user_id ) || empty( $group_id ) )
return false;
$bp->groups->current_group = new BP_Groups_Group( $group_id );
// Be sure the user is a member of the group before posting.
if ( !is_super_admin() && !groups_is_user_member( $user_id, $group_id ) )
return false;
// Record this in activity streams
$activity_action = sprintf( __( '%1$s posted an update in the group %2$s', 'buddypress'), bp_core_get_userlink( $user_id ), '' . esc_attr( $bp->groups->current_group->name ) . '' );
$activity_content = $content;
$activity_id = groups_record_activity( array(
'user_id' => $user_id,
'action' => apply_filters( 'groups_activity_new_update_action', $activity_action ),
'content' => apply_filters( 'groups_activity_new_update_content', $activity_content ),
'type' => 'activity_update',
'item_id' => $group_id
) );
groups_update_groupmeta( $group_id, 'last_activity', bp_core_current_time() );
do_action( 'bp_groups_posted_update', $content, $user_id, $group_id, $activity_id );
return $activity_id;
}
/*** Group Invitations *********************************************************/
function groups_get_invites_for_user( $user_id = 0, $limit = false, $page = false, $exclude = false ) {
global $bp;
if ( !$user_id )
$user_id = $bp->loggedin_user->id;
return BP_Groups_Member::get_invites( $user_id, $limit, $page, $exclude );
}
function groups_invite_user( $args = '' ) {
global $bp;
$defaults = array(
'user_id' => false,
'group_id' => false,
'inviter_id' => $bp->loggedin_user->id,
'date_modified' => bp_core_current_time(),
'is_confirmed' => 0
);
$args = wp_parse_args( $args, $defaults );
extract( $args, EXTR_SKIP );
if ( !$user_id || !$group_id )
return false;
if ( !groups_is_user_member( $user_id, $group_id ) && !groups_check_user_has_invite( $user_id, $group_id, 'all' ) ) {
$invite = new BP_Groups_Member;
$invite->group_id = $group_id;
$invite->user_id = $user_id;
$invite->date_modified = $date_modified;
$invite->inviter_id = $inviter_id;
$invite->is_confirmed = $is_confirmed;
if ( !$invite->save() )
return false;
do_action( 'groups_invite_user', $args );
}
return true;
}
function groups_uninvite_user( $user_id, $group_id ) {
global $bp;
if ( !BP_Groups_Member::delete( $user_id, $group_id ) )
return false;
do_action( 'groups_uninvite_user', $group_id, $user_id );
return true;
}
function groups_accept_invite( $user_id, $group_id ) {
global $bp;
if ( groups_is_user_member( $user_id, $group_id ) )
return false;
$member = new BP_Groups_Member( $user_id, $group_id );
$member->accept_invite();
if ( !$member->save() )
return false;
// Remove request to join
if ( $member->check_for_membership_request( $user_id, $group_id ) )
$member->delete_request( $user_id, $group_id );
// Modify group meta
groups_update_groupmeta( $group_id, 'total_member_count', (int) groups_get_groupmeta( $group_id, 'total_member_count') + 1 );
groups_update_groupmeta( $group_id, 'last_activity', bp_core_current_time() );
bp_core_delete_notifications_by_item_id( $user_id, $group_id, $bp->groups->id, 'group_invite' );
do_action( 'groups_accept_invite', $user_id, $group_id );
return true;
}
function groups_reject_invite( $user_id, $group_id ) {
if ( !BP_Groups_Member::delete( $user_id, $group_id ) )
return false;
do_action( 'groups_reject_invite', $user_id, $group_id );
return true;
}
function groups_delete_invite( $user_id, $group_id ) {
global $bp;
$delete = BP_Groups_Member::delete_invite( $user_id, $group_id );
if ( $delete )
bp_core_delete_notifications_by_item_id( $user_id, $group_id, $bp->groups->id, 'group_invite' );
return $delete;
}
function groups_send_invites( $user_id, $group_id ) {
global $bp;
if ( !$user_id )
$user_id = $bp->loggedin_user->id;
// Send friend invites.
$invited_users = groups_get_invites_for_group( $user_id, $group_id );
$group = new BP_Groups_Group( $group_id );
for ( $i = 0, $count = count( $invited_users ); $i < $count; ++$i ) {
$member = new BP_Groups_Member( $invited_users[$i], $group_id );
// Send the actual invite
groups_notification_group_invites( $group, $member, $user_id );
$member->invite_sent = 1;
$member->save();
}
do_action( 'groups_send_invites', $group_id, $invited_users );
}
function groups_get_invites_for_group( $user_id, $group_id ) {
return BP_Groups_Group::get_invites( $user_id, $group_id );
}
/**
* Check to see whether a user has already been invited to a group
*
* By default, the function checks for invitations that have been sent. Entering 'all' as the $type
* parameter will return unsent invitations as well (useful to make sure AJAX requests are not
* duplicated)
*
* @package BuddyPress Groups
*
* @param int $user_id Potential group member
* @param int $group_id Potential group
* @param str $type Optional. Use 'sent' to check for sent invites, 'all' to check for all
* @return bool Returns true if an invitation is found
*/
function groups_check_user_has_invite( $user_id, $group_id, $type = 'sent' ) {
return BP_Groups_Member::check_has_invite( $user_id, $group_id, $type );
}
function groups_delete_all_group_invites( $group_id ) {
return BP_Groups_Group::delete_all_invites( $group_id );
}
/*** Group Promotion & Banning *************************************************/
function groups_promote_member( $user_id, $group_id, $status ) {
global $bp;
if ( !$bp->is_item_admin )
return false;
$member = new BP_Groups_Member( $user_id, $group_id );
do_action( 'groups_premote_member', $group_id, $user_id, $status );
return $member->promote( $status );
}
function groups_demote_member( $user_id, $group_id ) {
global $bp;
$member = new BP_Groups_Member( $user_id, $group_id );
do_action( 'groups_demote_member', $group_id, $user_id );
return $member->demote();
}
function groups_ban_member( $user_id, $group_id ) {
global $bp;
if ( !$bp->is_item_admin )
return false;
$member = new BP_Groups_Member( $user_id, $group_id );
do_action( 'groups_ban_member', $group_id, $user_id );
return $member->ban();
}
function groups_unban_member( $user_id, $group_id ) {
global $bp;
if ( !$bp->is_item_admin )
return false;
$member = new BP_Groups_Member( $user_id, $group_id );
do_action( 'groups_unban_member', $group_id, $user_id );
return $member->unban();
}
/*** Group Removal *******************************************************/
function groups_remove_member( $user_id, $group_id ) {
global $bp;
if ( !$bp->is_item_admin )
return false;
$member = new BP_Groups_Member( $user_id, $group_id );
do_action( 'groups_remove_member', $group_id, $user_id );
return $member->remove();
}
/*** Group Membership ****************************************************/
function groups_send_membership_request( $requesting_user_id, $group_id ) {
global $bp;
// Prevent duplicate requests
if ( groups_check_for_membership_request( $requesting_user_id, $group_id ) )
return false;
// Check if the user is already a member or is banned
if ( groups_is_user_member( $requesting_user_id, $group_id ) || groups_is_user_banned( $requesting_user_id, $group_id ) )
return false;
$requesting_user = new BP_Groups_Member;
$requesting_user->group_id = $group_id;
$requesting_user->user_id = $requesting_user_id;
$requesting_user->inviter_id = 0;
$requesting_user->is_admin = 0;
$requesting_user->user_title = '';
$requesting_user->date_modified = bp_core_current_time();
$requesting_user->is_confirmed = 0;
$requesting_user->comments = isset( $_POST['group-request-membership-comments'] ) ? $_POST['group-request-membership-comments'] : '';
if ( $requesting_user->save() ) {
$admins = groups_get_group_admins( $group_id );
// Saved okay, now send the email notification
for ( $i = 0, $count = count( $admins ); $i < $count; ++$i )
groups_notification_new_membership_request( $requesting_user_id, $admins[$i]->user_id, $group_id, $requesting_user->id );
do_action( 'groups_membership_requested', $requesting_user_id, $admins, $group_id, $requesting_user->id );
return true;
}
return false;
}
function groups_accept_membership_request( $membership_id, $user_id = 0, $group_id = 0 ) {
global $bp;
if ( $user_id && $group_id )
$membership = new BP_Groups_Member( $user_id, $group_id );
else
$membership = new BP_Groups_Member( false, false, $membership_id );
$membership->accept_request();
if ( !$membership->save() )
return false;
// Check if the user has an outstanding invite, if so delete it.
if ( groups_check_user_has_invite( $membership->user_id, $membership->group_id ) )
groups_delete_invite( $membership->user_id, $membership->group_id );
// Modify group member count
groups_update_groupmeta( $membership->group_id, 'total_member_count', (int) groups_get_groupmeta( $membership->group_id, 'total_member_count') + 1 );
// Record this in activity streams
$group = new BP_Groups_Group( $membership->group_id );
groups_record_activity( array(
'action' => apply_filters_ref_array( 'groups_activity_membership_accepted_action', array( sprintf( __( '%1$s joined the group %2$s', 'buddypress'), bp_core_get_userlink( $membership->user_id ), '' . esc_attr( $group->name ) . '' ), $membership->user_id, &$group ) ),
'type' => 'joined_group',
'item_id' => $membership->group_id,
'user_id' => $membership->user_id
) );
// Send a notification to the user.
groups_notification_membership_request_completed( $membership->user_id, $membership->group_id, true );
do_action( 'groups_membership_accepted', $membership->user_id, $membership->group_id );
return true;
}
function groups_reject_membership_request( $membership_id, $user_id = 0, $group_id = 0 ) {
if ( !$membership = groups_delete_membership_request( $membership_id, $user_id, $group_id ) )
return false;
// Send a notification to the user.
groups_notification_membership_request_completed( $membership->user_id, $membership->group_id, false );
do_action( 'groups_membership_rejected', $membership->user_id, $membership->group_id );
return true;
}
function groups_delete_membership_request( $membership_id, $user_id = 0, $group_id = 0 ) {
if ( $user_id && $group_id )
$membership = new BP_Groups_Member( $user_id, $group_id );
else
$membership = new BP_Groups_Member( false, false, $membership_id );
if ( !BP_Groups_Member::delete( $membership->user_id, $membership->group_id ) )
return false;
return $membership;
}
function groups_check_for_membership_request( $user_id, $group_id ) {
return BP_Groups_Member::check_for_membership_request( $user_id, $group_id );
}
function groups_accept_all_pending_membership_requests( $group_id ) {
$user_ids = BP_Groups_Member::get_all_membership_request_user_ids( $group_id );
if ( !$user_ids )
return false;
foreach ( (array) $user_ids as $user_id )
groups_accept_membership_request( false, $user_id, $group_id );
do_action( 'groups_accept_all_pending_membership_requests', $group_id );
return true;
}
/*** Group Meta ****************************************************/
function groups_delete_groupmeta( $group_id, $meta_key = false, $meta_value = false ) {
global $wpdb, $bp;
if ( !is_numeric( $group_id ) )
return false;
$meta_key = preg_replace( '|[^a-z0-9_]|i', '', $meta_key );
if ( is_array( $meta_value ) || is_object( $meta_value ) )
$meta_value = serialize($meta_value);
$meta_value = trim( $meta_value );
if ( !$meta_key )
$wpdb->query( $wpdb->prepare( "DELETE FROM " . $bp->groups->table_name_groupmeta . " WHERE group_id = %d", $group_id ) );
else if ( $meta_value )
$wpdb->query( $wpdb->prepare( "DELETE FROM " . $bp->groups->table_name_groupmeta . " WHERE group_id = %d AND meta_key = %s AND meta_value = %s", $group_id, $meta_key, $meta_value ) );
else
$wpdb->query( $wpdb->prepare( "DELETE FROM " . $bp->groups->table_name_groupmeta . " WHERE group_id = %d AND meta_key = %s", $group_id, $meta_key ) );
// Delete the cached object
wp_cache_delete( 'bp_groups_groupmeta_' . $group_id . '_' . $meta_key, 'bp' );
return true;
}
function groups_get_groupmeta( $group_id, $meta_key = '') {
global $wpdb, $bp;
$group_id = (int) $group_id;
if ( !$group_id )
return false;
if ( !empty($meta_key) ) {
$meta_key = preg_replace( '|[^a-z0-9_]|i', '', $meta_key );
if ( !$metas = wp_cache_get( 'bp_groups_groupmeta_' . $group_id . '_' . $meta_key, 'bp' ) ) {
$metas = $wpdb->get_col( $wpdb->prepare("SELECT meta_value FROM " . $bp->groups->table_name_groupmeta . " WHERE group_id = %d AND meta_key = %s", $group_id, $meta_key) );
wp_cache_set( 'bp_groups_groupmeta_' . $group_id . '_' . $meta_key, $metas, 'bp' );
}
} else {
$metas = $wpdb->get_col( $wpdb->prepare("SELECT meta_value FROM " . $bp->groups->table_name_groupmeta . " WHERE group_id = %d", $group_id) );
}
if ( empty( $metas ) ) {
if ( empty( $meta_key ) )
return array();
else
return '';
}
$metas = array_map( 'maybe_unserialize', (array)$metas );
if ( 1 == count( $metas ) )
return $metas[0];
else
return $metas;
}
function groups_update_groupmeta( $group_id, $meta_key, $meta_value ) {
global $wpdb, $bp;
if ( !is_numeric( $group_id ) )
return false;
$meta_key = preg_replace( '|[^a-z0-9_]|i', '', $meta_key );
if ( is_string( $meta_value ) )
$meta_value = stripslashes( $wpdb->escape( $meta_value ) );
$meta_value = maybe_serialize( $meta_value );
if ( empty( $meta_value ) )
return groups_delete_groupmeta( $group_id, $meta_key );
$cur = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM " . $bp->groups->table_name_groupmeta . " WHERE group_id = %d AND meta_key = %s", $group_id, $meta_key ) );
if ( !$cur )
$wpdb->query( $wpdb->prepare( "INSERT INTO " . $bp->groups->table_name_groupmeta . " ( group_id, meta_key, meta_value ) VALUES ( %d, %s, %s )", $group_id, $meta_key, $meta_value ) );
else if ( $cur->meta_value != $meta_value )
$wpdb->query( $wpdb->prepare( "UPDATE " . $bp->groups->table_name_groupmeta . " SET meta_value = %s WHERE group_id = %d AND meta_key = %s", $meta_value, $group_id, $meta_key ) );
else
return false;
// Update the cached object and recache
wp_cache_set( 'bp_groups_groupmeta_' . $group_id . '_' . $meta_key, $meta_value, 'bp' );
return true;
}
/*** Group Cleanup Functions ****************************************************/
function groups_remove_data_for_user( $user_id ) {
BP_Groups_Member::delete_all_for_user( $user_id );
do_action( 'groups_remove_data_for_user', $user_id );
}
add_action( 'wpmu_delete_user', 'groups_remove_data_for_user' );
add_action( 'delete_user', 'groups_remove_data_for_user' );
add_action( 'bp_make_spam_user', 'groups_remove_data_for_user' );
?>