function etivite_bp_group_adminmod_member_before_save( $member ) { global $wpdb, $bp; //no data - no bother $data = get_option( 'etivite_bp_group_adminmod' ); if ( !$data || empty( $data ) || !$data['group']['id'] ) return; $is_member = groups_is_user_member( $member->user_id, $data['group']['id'] ); //holy infinity and beyond... remove_action( 'groups_member_before_save', 'etivite_bp_group_adminmod_member_before_save' ); //check if member is_mod/admin and add to group if not a member if ( ( $member->is_mod || $member->is_admin ) && !$is_member ) { $new_member = new BP_Groups_Member( $member->user_id, $data['group']['id'] ); $new_member->is_confirmed = 1; $new_member->inviter_id = 0; $new_member->invite_sent = 0; $new_member->is_admin = 0; $new_member->user_title = ''; $new_member->date_modified = bp_core_current_time(); $new_member->save(); groups_update_groupmeta( $data['group']['id'], 'total_member_count', (int) groups_get_groupmeta( $data['group']['id'], 'total_member_count') + 1 ); } //check if member is admin/mod of any groups. If not, remove from adminmod group - boone! $is_admin_or_mod_anywhere_else = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM {$bp->groups->table_name_members} WHERE user_id = %d AND ( is_admin = 1 OR is_mod = 1 ) AND group_id != %d", $member->user_id, $member->group_id ) ); if ( !$is_admin_or_mod_anywhere_else && !$member->is_admin && !$member->is_mod ) { $remove_member = new BP_Groups_Member( $member->user_id, $data['group']['id'] ); $remove_member->remove(); groups_update_groupmeta( $data['group']['id'], 'total_member_count', (int) groups_get_groupmeta( $data['group']['id'], 'total_member_count') - 1 ); } add_action( 'groups_member_before_save', 'etivite_bp_group_adminmod_member_before_save' ); } add_action( 'groups_member_before_save', 'etivite_bp_group_adminmod_member_before_save' );