Skip to:
Content

BuddyPress.org

Ticket #6095: buddypress-2.1.1-customstatus.patch

File buddypress-2.1.1-customstatus.patch, 57.9 KB (added by tandreatta, 5 years ago)

New version of the patch - complete custom status management (listing/content visibility, membership moderation)

  • buddypress/bp-groups/bp-groups-actions.php

    diff --exclude=.svn -ur plugins.orig/buddypress/bp-groups/bp-groups-actions.php plugins/buddypress/bp-groups/bp-groups-actions.php
    old new  
    2828        $user_has_access = $current_group->user_has_access;
    2929        $no_access_args  = array();
    3030
    31         if ( ! $user_has_access && 'hidden' !== $current_group->status ) {
     31        if ( ! $user_has_access && !groups_hidden_group($current_group->status) ) {
    3232                // Always allow access to home and request-membership
    3333                if ( bp_is_current_action( 'home' ) || bp_is_current_action( 'request-membership' ) ) {
    3434                        $user_has_access = true;
     
    7979        // Hidden groups should return a 404 for non-members.
    8080        // Unset the current group so that you're not redirected
    8181        // to the default group tab
    82         if ( 'hidden' == $current_group->status ) {
     82        if ( groups_hidden_group($current_group->status) ) {
    8383                buddypress()->groups->current_group = 0;
    8484                buddypress()->is_single_item        = false;
    8585                bp_do_404();
     
    162162
    163163                        $new_group_id = isset( $bp->groups->new_group_id ) ? $bp->groups->new_group_id : 0;
    164164
    165                         if ( !$bp->groups->new_group_id = groups_create_group( array( 'group_id' => $new_group_id, 'name' => $_POST['group-name'], 'description' => $_POST['group-desc'], 'slug' => groups_check_slug( sanitize_title( esc_attr( $_POST['group-name'] ) ) ), 'date_created' => bp_core_current_time(), 'status' => 'public' ) ) ) {
     165                        if ( !$bp->groups->new_group_id = groups_create_group( array( 'group_id' => $new_group_id, 'name' => $_POST['group-name'], 'description' => $_POST['group-desc'], 'slug' => groups_check_slug( sanitize_title( esc_attr( $_POST['group-name'] ) ) ), 'date_created' => bp_core_current_time(), 'status' => groups_default_creation_status() ) ) ) {
    166166                                bp_core_add_message( __( 'There was an error saving group details, please try again.', 'buddypress' ), 'error' );
    167167                                bp_core_redirect( bp_get_root_domain() . '/' . bp_get_groups_root_slug() . '/create/step/' . bp_get_groups_current_create_step() . '/' );
    168168                        }
    169169                }
    170170
    171171                if ( 'group-settings' == bp_get_groups_current_create_step() ) {
    172                         $group_status = 'public';
    173172                        $group_enable_forum = 1;
    174173
    175174                        if ( !isset($_POST['group-show-forum']) ) {
     
    181180                                }
    182181                        }
    183182
    184                         if ( 'private' == $_POST['group-status'] )
    185                                 $group_status = 'private';
    186                         else if ( 'hidden' == $_POST['group-status'] )
    187                                 $group_status = 'hidden';
     183                        if ( groups_is_valid_status( $_POST['group-status'] ) )
     184                                $group_status = $_POST['group-status'];
     185                        else
     186                                $group_status = groups_default_creation_status();
    188187
    189188                        if ( !$bp->groups->new_group_id = groups_create_group( array( 'group_id' => $bp->groups->new_group_id, 'status' => $group_status, 'enable_forum' => $group_enable_forum ) ) ) {
    190189                                bp_core_add_message( __( 'There was an error saving group details, please try again.', 'buddypress' ), 'error' );
     
    333332        if ( !groups_is_user_member( bp_loggedin_user_id(), $bp->groups->current_group->id ) && !groups_is_user_banned( bp_loggedin_user_id(), $bp->groups->current_group->id ) ) {
    334333
    335334                // User wants to join a group that is not public
    336                 if ( $bp->groups->current_group->status != 'public' ) {
     335                if ( groups_private_group($bp->groups->current_group->status) ) {
    337336                        if ( !groups_check_user_has_invite( bp_loggedin_user_id(), $bp->groups->current_group->id ) ) {
    338337                                bp_core_add_message( __( 'There was an error joining the group.', 'buddypress' ), 'error' );
    339338                                bp_core_redirect( bp_get_group_permalink( $bp->groups->current_group ) );
     
    391390
    392391                $redirect = bp_get_group_permalink( groups_get_current_group() );
    393392
    394                 if( 'hidden' == $bp->groups->current_group->status ) {
     393                if ( groups_hidden_group($bp->groups->current_group->status) ) {
    395394                        $redirect = trailingslashit( bp_loggedin_user_domain() . bp_get_groups_slug() );
    396395                }
    397396
  • buddypress/bp-groups/bp-groups-adminbar.php

    diff --exclude=.svn -ur plugins.orig/buddypress/bp-groups/bp-groups-adminbar.php plugins/buddypress/bp-groups/bp-groups-adminbar.php
    old new  
    8888        ) );
    8989
    9090        // Group Admin > Membership Requests
    91         if ( bp_get_group_status( $bp->groups->current_group ) == 'private' ) {
     91        if ( groups_membership_request_moderated( $bp->groups->current_group->status ) ) {
    9292                $wp_admin_bar->add_menu( array(
    9393                        'parent' => $bp->group_admin_menu_id,
    9494                        'id'     => 'membership-requests',
  • buddypress/bp-groups/bp-groups-admin.php

    diff --exclude=.svn -ur plugins.orig/buddypress/bp-groups/bp-groups-admin.php plugins/buddypress/bp-groups/bp-groups-admin.php
    old new  
    679679 * @param object $item Information about the current group.
    680680 */
    681681function bp_groups_admin_edit_metabox_settings( $item ) {
     682        global $bp;
    682683
    683684        $invite_status = groups_get_groupmeta( $item->id, 'invite_status' ); ?>
    684685
     
    693694                        <legend><?php _e( 'Privacy', 'buddypress' ); ?></legend>
    694695
    695696                        <ul>
    696                                 <li><input type="radio" name="group-status" id="bp-group-status-public" value="public" <?php checked( $item->status, 'public' ) ?> /><label for="bp-group-status-public"><?php _e( 'Public', 'buddypress' ) ?></label></li>
    697                                 <li><input type="radio" name="group-status" id="bp-group-status-private" value="private" <?php checked( $item->status, 'private' ) ?> /><label for="bp-group-status-private"><?php _e( 'Private', 'buddypress' ) ?></label></li>
    698                                 <li><input type="radio" name="group-status" id="bp-group-status-hidden" value="hidden" <?php checked( $item->status, 'hidden' ) ?> /><label for="bp-group-status-hidden"><?php _e( 'Hidden', 'buddypress' ) ?></label></li>
     697<?php
     698        if ( is_super_admin() ) {
     699                foreach ( $bp->groups->valid_status as $status ) { ?>
     700                        <li><input type="radio" name="group-status" id="bp-group-status-<?php echo sanitize_html_class( $status, 'x' ); ?>" value="<?php echo esc_attr( $status ); ?>" <?php checked( $item->status, $status ) ?> /><label for="bp-group-status-<?php echo sanitize_html_class( $status, 'x' ); ?>"><?php _e( ucfirst( $status ), 'buddypress' ) ?></label></li>
     701<?php
     702                }
     703        } elseif ( !groups_is_valid_creation_status( $item->status )) { ?>
     704                        <li><input type="radio" name="group-status" id="bp-group-status-<?php echo sanitize_html_class( $item->status, 'x' ); ?>" value="<?php echo esc_attr( $item->status ); ?>" checked="checked" /><label for="bp-group-status-<?php echo sanitize_html_class( $status, 'x' ); ?>"><?php _e( ucfirst( $status ), 'buddypress' ) ?></label></li>
     705<?php
     706        } else {
     707                foreach ( $bp->groups->valid_creation_status as $status ) { ?>
     708                        <li><input type="radio" name="group-status" id="bp-group-status-<?php echo sanitize_html_class( $status, 'x' ); ?>" value="<?php echo esc_attr( $status ); ?>" <?php checked( $item->status, $status ) ?> /><label for="bp-group-status-<?php echo sanitize_html_class( $status, 'x' ); ?>"><?php _e( ucfirst( $status ), 'buddypress' ) ?></label></li>
     709<?php
     710                }
     711        }
     712?>
    699713                        </ul>
    700714                </fieldset>
    701715        </div>
     
    11241138                        $include_id = (int) $_REQUEST['gid'];
    11251139
    11261140                // Set the current view
    1127                 if ( isset( $_GET['group_status'] ) && in_array( $_GET['group_status'], array( 'public', 'private', 'hidden' ) ) ) {
     1141                if ( isset( $_GET['group_status'] ) && groups_is_valid_status( $_GET['group_status'] ) ) {
    11281142                        $this->view = $_GET['group_status'];
    11291143                }
    11301144
     
    12721286                        <li class="public"><a href="<?php echo esc_attr( esc_url( add_query_arg( 'group_status', 'public', $url_base ) ) ); ?>" class="<?php if ( 'public' == $this->view ) echo 'current'; ?>"><?php printf( _n( 'Public <span class="count">(%s)</span>', 'Public <span class="count">(%s)</span>', $this->group_counts['public'], 'buddypress' ), number_format_i18n( $this->group_counts['public'] ) ); ?></a> |</li>
    12731287                        <li class="private"><a href="<?php echo esc_attr( esc_url( add_query_arg( 'group_status', 'private', $url_base ) ) ); ?>" class="<?php if ( 'private' == $this->view ) echo 'current'; ?>"><?php printf( _n( 'Private <span class="count">(%s)</span>', 'Private <span class="count">(%s)</span>', $this->group_counts['private'], 'buddypress' ), number_format_i18n( $this->group_counts['private'] ) ); ?></a> |</li>
    12741288                        <li class="hidden"><a href="<?php echo esc_attr( esc_url( add_query_arg( 'group_status', 'hidden', $url_base ) ) ); ?>" class="<?php if ( 'hidden' == $this->view ) echo 'current'; ?>"><?php printf( _n( 'Hidden <span class="count">(%s)</span>', 'Hidden <span class="count">(%s)</span>', $this->group_counts['hidden'], 'buddypress' ), number_format_i18n( $this->group_counts['hidden'] ) ); ?></a></li>
     1289<?php
     1290                global $bp;
     1291
     1292                foreach ($bp->groups->valid_status as $status) {
     1293                    if ($status != 'public' && $status != 'private' && $status != 'hidden') { ?>
     1294                        <li class="<?php echo $status ?>"><a href="<?php echo esc_attr( esc_url( add_query_arg( 'group_status', $status, $url_base ) ) ); ?>" class="<?php if ( $status == $this->view ) echo 'current'; ?>"><?php printf( _n( ucfirst($status).' <span class="count">(%s)</span>', ucfirst($status).' <span class="count">(%s)</span>', $this->group_counts[$status], 'buddypress' ), number_format_i18n( $this->group_counts[$status] ) ); ?></a></li>
     1295<?php
     1296                    }
     1297                }
     1298?>
    12751299
    12761300                        <?php do_action( 'bp_groups_list_table_get_views', $url_base, $this->view ); ?>
    12771301                </ul>
     
    14471471         */
    14481472        public function column_status( $item = array() ) {
    14491473                $status      = $item['status'];
    1450                 $status_desc = '';
    1451 
    1452                 // @todo This should be abstracted out somewhere for the whole
    1453                 // Groups component
    1454                 switch ( $status ) {
    1455                         case 'public' :
    1456                                 $status_desc = __( 'Public', 'buddypress' );
    1457                                 break;
    1458                         case 'private' :
    1459                                 $status_desc = __( 'Private', 'buddypress' );
    1460                                 break;
    1461                         case 'hidden' :
    1462                                 $status_desc = __( 'Hidden', 'buddypress' );
    1463                                 break;
    1464                 }
    1465 
     1474                $status_desc = __( ucfirst($status), 'buddypress' );
    14661475                echo apply_filters_ref_array( 'bp_groups_admin_get_group_status', array( $status_desc, $item ) );
    14671476        }
    14681477
  • buddypress/bp-groups/bp-groups-buddybar.php

    diff --exclude=.svn -ur plugins.orig/buddypress/bp-groups/bp-groups-buddybar.php plugins/buddypress/bp-groups/bp-groups-buddybar.php
    old new  
    4949
    5050                        <li><a href="<?php bp_groups_action_link( 'admin/manage-members' ); ?>"><?php _e( 'Manage Members', 'buddypress' ); ?></a></li>
    5151
    52                         <?php if ( $bp->groups->current_group->status == 'private' ) : ?>
     52                        <?php if ( groups_membership_request_moderated( $bp->groups->current_group->status ) ) : ?>
    5353
    5454                                <li><a href="<?php bp_groups_action_link( 'admin/membership-requests' ); ?>"><?php _e( 'Membership Requests', 'buddypress' ); ?></a></li>
    5555
  • buddypress/bp-groups/bp-groups-classes.php

    diff --exclude=.svn -ur plugins.orig/buddypress/bp-groups/bp-groups-classes.php plugins/buddypress/bp-groups/bp-groups-classes.php
    old new  
    238238                        $this->is_pending = BP_Groups_Member::check_for_membership_request( $user_id, $this->id );
    239239
    240240                        // If this is a private or hidden group, does the current user have access?
    241                         if ( ( 'private' === $this->status ) || ( 'hidden' === $this->status ) ) {
     241                        if ( groups_private_group( $this->status ) ) {
    242242
    243243                                // Assume user does not have access to hidden/private groups
    244244                                $this->user_has_access = false;
     
    505505                        $order_sql = "ORDER BY {$sort_by} {$order}";
    506506                }
    507507
    508                 if ( !bp_current_user_can( 'bp_moderate' ) )
    509                         $hidden_sql = "AND status != 'hidden'";
     508                if ( !bp_current_user_can( 'bp_moderate' ) ) {
     509                        $hidden_sql = "AND status NOT IN ('".join("','", esc_sql($bp->groups->hidden_status)). "')";
     510                }
    510511
    511512                $paged_groups = $wpdb->get_results( $wpdb->prepare( "SELECT id as group_id FROM {$bp->groups->table_name} WHERE ( name LIKE %s OR description LIKE %s ) {$hidden_sql} {$order_sql} {$pag_sql}", $search_terms_like, $search_terms_like ) );
    512513                $total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(id) FROM {$bp->groups->table_name} WHERE ( name LIKE %s OR description LIKE %s ) {$hidden_sql}", $search_terms_like, $search_terms_like ) );
     
    706707                $sql['where'] = " g.id = gm1.group_id AND g.id = gm2.group_id AND gm2.meta_key = 'last_activity' AND gm1.meta_key = 'total_member_count'";
    707708
    708709                if ( empty( $r['show_hidden'] ) ) {
    709                         $sql['hidden'] = " AND g.status != 'hidden'";
     710                        $sql['hidden'] = " AND g.status NOT IN ('".join("','", esc_sql($bp->groups->hidden_status)). "')";
    710711                }
    711712
    712713                if ( ! empty( $r['search_terms'] ) ) {
     
    788789                }
    789790
    790791                if ( ! empty( $sql['hidden'] ) ) {
    791                         $total_sql['where'][] = "g.status != 'hidden'";
     792                        $total_sql['where'][] = "g.status NOT IN ('".join("','", esc_sql($bp->groups->hidden_status)). "')";
    792793                }
    793794
    794795                if ( ! empty( $sql['search'] ) ) {
     
    10231024                }
    10241025
    10251026                if ( !is_user_logged_in() || ( !bp_current_user_can( 'bp_moderate' ) && ( $user_id != bp_loggedin_user_id() ) ) )
    1026                         $hidden_sql = " AND g.status != 'hidden'";
     1027                        $hidden_sql = " AND g.status NOT IN ('".join("','", esc_sql($bp->groups->hidden_status)). "')";
    10271028
    10281029                if ( !empty( $search_terms ) ) {
    10291030                        $search_terms_like = '%' . bp_esc_like( $search_terms ) . '%';
     
    10871088                }
    10881089
    10891090                if ( !is_user_logged_in() || ( !bp_current_user_can( 'bp_moderate' ) && ( $user_id != bp_loggedin_user_id() ) ) )
    1090                         $hidden_sql = " AND g.status != 'hidden'";
     1091                        $hidden_sql = " AND g.status NOT IN ('".join("','", esc_sql($bp->groups->hidden_status)). "')";
    10911092
    10921093                if ( !empty( $search_terms ) ) {
    10931094                        $search_terms_like = '%' . bp_esc_like( $search_terms ) . '%';
     
    11591160                }
    11601161
    11611162                if ( !bp_current_user_can( 'bp_moderate' ) )
    1162                         $hidden_sql = " AND status != 'hidden'";
     1163                        $hidden_sql = " AND g.status NOT IN ('".join("','", esc_sql($bp->groups->hidden_status)). "')";
    11631164
    11641165                $letter_like = bp_esc_like( $letter ) . '%';
    11651166
     
    12141215                        $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) );
    12151216
    12161217                if ( !is_user_logged_in() || ( !bp_current_user_can( 'bp_moderate' ) && ( $user_id != bp_loggedin_user_id() ) ) )
    1217                         $hidden_sql = "AND g.status != 'hidden'";
     1218                        $hidden_sql = "AND g.status NOT IN ('".join("','", esc_sql($bp->groups->hidden_status)). "')";
    12181219
    12191220                if ( !empty( $search_terms ) ) {
    12201221                        $search_terms_like = '%' . bp_esc_like( $search_terms ) . '%';
     
    13561357
    13571358                $hidden_sql = '';
    13581359                if ( !bp_current_user_can( 'bp_moderate' ) )
    1359                         $hidden_sql = "WHERE status != 'hidden'";
     1360                        $hidden_sql = "WHERE status NOT IN ('".join("','", esc_sql($bp->groups->hidden_status)). "')";
    13601361
    13611362                return $wpdb->get_var( "SELECT COUNT(id) FROM {$bp->groups->table_name} {$hidden_sql}" );
    13621363        }
     
    14081409        public static function get_global_topic_count( $status = 'public', $search_terms = false ) {
    14091410                global $bbdb, $wpdb, $bp;
    14101411
    1411                 switch ( $status ) {
    1412                         case 'all' :
    1413                                 $status_sql = '';
    1414                                 break;
    1415 
    1416                         case 'hidden' :
    1417                                 $status_sql = "AND g.status = 'hidden'";
    1418                                 break;
    1419 
    1420                         case 'private' :
    1421                                 $status_sql = "AND g.status = 'private'";
    1422                                 break;
    1423 
    1424                         case 'public' :
    1425                         default :
    1426                                 $status_sql = "AND g.status = 'public'";
    1427                                 break;
    1428                 }
     1412                if ( $status == 'all' )
     1413                        $status_sql = '';
     1414                else
     1415                        $status_sql = "AND g.status = '".esc_sql($status)."'";
    14291416
    14301417                $sql = array();
    14311418
     
    14571444                $ids = array();
    14581445
    14591446                $ids['all']     = $wpdb->get_col( "SELECT id FROM {$bp->groups->table_name}" );
    1460                 $ids['public']  = $wpdb->get_col( "SELECT id FROM {$bp->groups->table_name} WHERE status = 'public'" );
    1461                 $ids['private'] = $wpdb->get_col( "SELECT id FROM {$bp->groups->table_name} WHERE status = 'private'" );
    1462                 $ids['hidden']  = $wpdb->get_col( "SELECT id FROM {$bp->groups->table_name} WHERE status = 'hidden'" );
     1447                foreach ($bp->valid_status as $status) {
     1448                  $ids[$status]  = $wpdb->get_col( "SELECT id FROM {$bp->groups->table_name} WHERE status = '".esc_sql($status)."'" );
     1449                }
    14631450
    14641451                return $ids;
    14651452        }
     
    22302217
    22312218                // If the user is logged in and viewing their own groups, we can show hidden and private groups
    22322219                if ( $user_id != bp_loggedin_user_id() ) {
    2233                         $group_sql = $wpdb->prepare( "SELECT DISTINCT m.group_id FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE g.status != 'hidden' AND m.user_id = %d AND m.is_confirmed = 1 AND m.is_banned = 0{$pag_sql}", $user_id );
    2234                         $total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(DISTINCT m.group_id) FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE g.status != 'hidden' AND m.user_id = %d AND m.is_confirmed = 1 AND m.is_banned = 0", $user_id ) );
     2220                        $group_sql = $wpdb->prepare( "SELECT DISTINCT m.group_id FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE g.status NOT IN ('".join("','", esc_sql($bp->groups->hidden_status))."') AND m.user_id = %d AND m.is_confirmed = 1 AND m.is_banned = 0{$pag_sql}", $user_id );
     2221                        $total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(DISTINCT m.group_id) FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE g.status NOT IN ('".join("','", esc_sql($bp->groups->hidden_status))."' AND m.user_id = %d AND m.is_confirmed = 1 AND m.is_banned = 0", $user_id ) );
    22352222                } else {
    22362223                        $group_sql = $wpdb->prepare( "SELECT DISTINCT group_id FROM {$bp->groups->table_name_members} WHERE user_id = %d AND is_confirmed = 1 AND is_banned = 0{$pag_sql}", $user_id );
    22372224                        $total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(DISTINCT group_id) FROM {$bp->groups->table_name_members} WHERE user_id = %d AND is_confirmed = 1 AND is_banned = 0", $user_id ) );
     
    22732260                }
    22742261
    22752262                if ( $user_id != bp_loggedin_user_id() )
    2276                         $hidden_sql = " AND g.status != 'hidden'";
     2263                        $hidden_sql = " AND g.status NOT IN ('".join("','", esc_sql($bp->groups->hidden_status))."')";
    22772264
    22782265                $paged_groups = $wpdb->get_results( "SELECT g.*, gm1.meta_value as total_member_count, gm2.meta_value as last_activity FROM {$bp->groups->table_name_groupmeta} gm1, {$bp->groups->table_name_groupmeta} gm2, {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE g.id = m.group_id AND g.id = gm1.group_id AND g.id = gm2.group_id AND gm2.meta_key = 'last_activity' AND gm1.meta_key = 'total_member_count'{$hidden_sql}{$filter_sql} AND {$user_id_sql} AND m.is_confirmed = 1 AND m.is_banned = 0 ORDER BY m.date_modified DESC {$pag_sql}" );
    22792266                $total_groups = $wpdb->get_var( "SELECT COUNT(DISTINCT m.group_id) FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id{$hidden_sql}{$filter_sql} AND {$user_id_sql} AND m.is_banned = 0 AND m.is_confirmed = 1 ORDER BY m.date_modified DESC" );
     
    23122299                }
    23132300
    23142301                if ( $user_id != bp_loggedin_user_id() )
    2315                         $hidden_sql = " AND g.status != 'hidden'";
     2302                        $hidden_sql = " AND g.status NOT IN ('".join("','", esc_sql($bp->groups->hidden_status))."')";
    23162303
    23172304                $paged_groups = $wpdb->get_results( "SELECT g.*, gm1.meta_value as total_member_count, gm2.meta_value as last_activity FROM {$bp->groups->table_name_groupmeta} gm1, {$bp->groups->table_name_groupmeta} gm2, {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE g.id = m.group_id AND g.id = gm1.group_id AND g.id = gm2.group_id AND gm2.meta_key = 'last_activity' AND gm1.meta_key = 'total_member_count'{$hidden_sql}{$filter_sql} AND {$user_id_sql} AND m.is_confirmed = 1 AND m.is_banned = 0 AND m.is_admin = 1 ORDER BY m.date_modified ASC {$pag_sql}" );
    23182305                $total_groups = $wpdb->get_var( "SELECT COUNT(DISTINCT m.group_id) FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id{$hidden_sql}{$filter_sql} AND {$user_id_sql} AND m.is_confirmed = 1 AND m.is_banned = 0 AND m.is_admin = 1 ORDER BY date_modified ASC" );
     
    23512338                }
    23522339
    23532340                if ( $user_id != bp_loggedin_user_id() )
    2354                         $hidden_sql = " AND g.status != 'hidden'";
     2341                        $hidden_sql = " AND g.status NOT IN ('".join("','", esc_sql($bp->groups->hidden_status))."')";
    23552342
    23562343                $paged_groups = $wpdb->get_results( "SELECT g.*, gm1.meta_value as total_member_count, gm2.meta_value as last_activity FROM {$bp->groups->table_name_groupmeta} gm1, {$bp->groups->table_name_groupmeta} gm2, {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE g.id = m.group_id AND g.id = gm1.group_id AND g.id = gm2.group_id AND gm2.meta_key = 'last_activity' AND gm1.meta_key = 'total_member_count'{$hidden_sql}{$filter_sql} AND {$user_id_sql} AND m.is_confirmed = 1 AND m.is_banned = 0 AND m.is_mod = 1 ORDER BY m.date_modified ASC {$pag_sql}" );
    23572344                $total_groups = $wpdb->get_var( "SELECT COUNT(DISTINCT m.group_id) FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id{$hidden_sql}{$filter_sql} AND {$user_id_sql} AND m.is_confirmed = 1 AND m.is_banned = 0 AND m.is_mod = 1 ORDER BY date_modified ASC" );
     
    23722359                        $user_id = bp_displayed_user_id();
    23732360
    23742361                if ( $user_id != bp_loggedin_user_id() && !bp_current_user_can( 'bp_moderate' ) ) {
    2375                         return $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(DISTINCT m.group_id) FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id AND g.status != 'hidden' AND m.user_id = %d AND m.is_confirmed = 1 AND m.is_banned = 0", $user_id ) );
     2362                        return $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(DISTINCT m.group_id) FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id AND g.status NOT IN ('".join("','", esc_sql($bp->groups->hidden_status))."') AND m.user_id = %d AND m.is_confirmed = 1 AND m.is_banned = 0", $user_id ) );
    23762363                } else {
    23772364                        return $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(DISTINCT m.group_id) FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id AND m.user_id = %d AND m.is_confirmed = 1 AND m.is_banned = 0", $user_id ) );
    23782365                }
     
    26062593                if ( bp_is_my_profile() ) {
    26072594                        return $wpdb->get_col( $wpdb->prepare( "SELECT DISTINCT group_id FROM {$bp->groups->table_name_members} WHERE user_id = %d AND is_confirmed = 1 AND is_banned = 0 ORDER BY rand() LIMIT %d", $user_id, $total_groups ) );
    26082595                } else {
    2609                         return $wpdb->get_col( $wpdb->prepare( "SELECT DISTINCT m.group_id FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id AND g.status != 'hidden' AND m.user_id = %d AND m.is_confirmed = 1 AND m.is_banned = 0 ORDER BY rand() LIMIT %d", $user_id, $total_groups ) );
     2596                        return $wpdb->get_col( $wpdb->prepare( "SELECT DISTINCT m.group_id FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id AND g.status NOT IN ('".hoin("','", esc_sql($bp->groups->hidden_status))."') AND m.user_id = %d AND m.is_confirmed = 1 AND m.is_banned = 0 ORDER BY rand() LIMIT %d", $user_id, $total_groups ) );
    26102597                }
    26112598        }
    26122599
  • buddypress/bp-groups/bp-groups-functions.php

    diff --exclude=.svn -ur plugins.orig/buddypress/bp-groups/bp-groups-functions.php plugins/buddypress/bp-groups/bp-groups-functions.php
    old new  
    221221        $group->enable_forum = $enable_forum;
    222222
    223223        /***
    224          * Before we potentially switch the group status, if it has been changed to public
    225          * from private and there are outstanding membership requests, auto-accept those requests.
     224         * Before we potentially switch the group status, if it has been changed to a status
     225         * who not requires membership requests, auto-accept pending requests.
    226226         */
    227         if ( 'private' == $group->status && 'public' == $status )
     227        if ( !groups_membership_request_moderated( $status ) )
    228228                groups_accept_all_pending_membership_requests( $group->id );
    229229
    230230        // Now update the status
     
    291291}
    292292
    293293/**
     294 * Check if this group status (eg 'private') allows membership requests.
     295 *
     296 * @param string $status Status to check.
     297 * @return bool True if status requires join moderation, otherwise false.
     298 */
     299function groups_membership_request_allowed( $status ) {
     300        global $bp;
     301
     302        return in_array( $status, $bp->groups->membership_request_allowed_status );
     303}
     304
     305/**
     306 * Check if membership request to this group status (eg 'private') is moderated.
     307 *
     308 * @param string $status Status to check.
     309 * @return bool True if status allows joining, otherwise false.
     310 */
     311function groups_membership_request_moderated( $status ) {
     312        global $bp;
     313
     314        return in_array( $status, $bp->groups->membership_request_moderated_status );
     315}
     316
     317/**
     318 * Check a group status (eg 'private') against the whitelist of creation statuses.
     319 *
     320 * @param string $status Status to check.
     321 * @return bool True if status is allowed, otherwise false.
     322 */
     323function groups_is_valid_creation_status( $status ) {
     324        global $bp;
     325
     326        return in_array( $status, (array) $bp->groups->valid_creation_status );
     327}
     328
     329/**
     330 * Returns the default group status (eg 'public').
     331 *
     332 * @return string First valid creation status
     333 */
     334function groups_default_creation_status() {
     335        global $bp;
     336
     337        return apply_filters( 'groups_default_creation_status',
     338                reset($bp->groups->valid_creation_status));
     339}
     340
     341
     342/**
     343 * Display membership request description for group status.
     344 *
     345 * @param string $status Status to check.
     346 */
     347function group_membership_request_description( $status ) {
     348   if ( groups_membership_request_moderated( $status ) )
     349     _e( 'Only users who request membership and are accepted can join the group.', 'buddypress' );
     350   elseif ( groups_membership_request_allowed( $status ) )
     351     _e( 'Any site member can join this group.', 'buddypress' );
     352   else
     353     _e( 'Only users who are invited can join the group.', 'buddypress' );
     354}
     355
     356/**
     357 * Check if this group status (eg 'private') make contents private.
     358 *
     359 * @param string $status Status to check.
     360 * @return bool True if status allows joining, otherwise false.
     361 */
     362function groups_private_group( $status ) {
     363        global $bp;
     364
     365        return in_array( $status, $bp->groups->private_status );
     366}
     367
     368/**
     369 * Check if this group status (eg 'hidden') make group hidden to non-members.
     370 *
     371 * @param string $status Status to check.
     372 * @return bool True if status allows joining, otherwise false.
     373 */
     374function groups_hidden_group( $status ) {
     375        global $bp;
     376
     377        return in_array( $status, $bp->groups->hidden_status );
     378}
     379
     380
     381/**
    294382 * Provide a unique, sanitized version of a group slug.
    295383 *
    296384 * @param string $slug Group slug to check.
  • buddypress/bp-groups/bp-groups-loader.php

    diff --exclude=.svn -ur plugins.orig/buddypress/bp-groups/bp-groups-loader.php plugins/buddypress/bp-groups/bp-groups-loader.php
    old new  
    8080        public $valid_status;
    8181
    8282        /**
     83         * Allowed group statuses (for non-super-admins) (Public, Private, Hidden).
     84         *
     85         * @since BuddyPress (1.5.0)
     86         * @access public
     87         * @var array
     88         */
     89        public $valid_creation_status;
     90
     91        /**
     92         * Group statuses who allows membership request (Public, Private).
     93         *
     94         * @since BuddyPress (2.1.0)
     95         * @access public
     96         * @var array
     97         */
     98        public $membeship_request_allowed_status;
     99
     100        /**
     101         * Group statuses who requires membership request moderation (Private).
     102         *
     103         * @since BuddyPress (2.1.0)
     104         * @access public
     105         * @var array
     106         */
     107        public $membeship_request_moderated_status;
     108
     109        /**
     110         * Group statuses hidden to non-members in lists
     111         *
     112         * @since BuddyPress (2.1.0)
     113         * @access public
     114         * @var array
     115         */
     116        public $hidden_status;
     117
     118        /**
     119         * Group statuses whose contents are hidden to non-members
     120         *
     121         * @since BuddyPress (2.1.0)
     122         * @access public
     123         * @var array
     124         */
     125        public $private_status;
     126
     127
     128        /**
    83129         * Start the groups component creation process.
    84130         *
    85131         * @since BuddyPress (1.5.0)
     
    213259                                $this->current_group->is_user_member = false;
    214260
    215261                        // Should this group be visible to the logged in user?
    216                         if ( 'public' == $this->current_group->status || $this->current_group->is_user_member )
    217                                 $this->current_group->is_visible = true;
    218                         else
    219                                 $this->current_group->is_visible = false;
     262                        $this->current_group->is_visible = ( $this->current_group->is_user_member ||
     263                                !groups_hidden_group( $this->current_group->status ) );
    220264
    221265                        // If this is a private or hidden group, does the user have access?
    222                         if ( 'private' == $this->current_group->status || 'hidden' == $this->current_group->status ) {
     266                        if ( groups_private_group($this->current_group->status) ) {
    223267                                if ( $this->current_group->is_user_member && is_user_logged_in() || bp_current_user_can( 'bp_moderate' ) )
    224268                                        $this->current_group->user_has_access = true;
    225269                                else
     
    292336                        'hidden'
    293337                ) );
    294338
     339                $this->valid_creation_status = apply_filters( 'groups_valid_creation_status', array(
     340                        'public',
     341                        'private',
     342                        'hidden'
     343                ) );
     344
     345
     346                $this->membership_request_allowed_status = apply_filters( 'groups_membership_request_allowed', array(
     347                        'public',
     348                        'private'
     349                ) );
     350
     351                $this->membership_request_moderated_status = apply_filters( 'groups_membership_request_moderated', array(
     352                        'private'
     353                ) );
     354
     355                $this->hidden_status = apply_filters( 'groups_hidden_status', array(
     356                        'hidden'
     357                ) );
     358
     359                $this->private_status = apply_filters( 'groups_private_status', array(
     360                        'private',
     361                        'hidden'
     362                ) );
     363
     364
    295365                // Auto join group when non group member performs group activity
    296366                $this->auto_join = defined( 'BP_DISABLE_AUTO_GROUP_JOIN' ) && BP_DISABLE_AUTO_GROUP_JOIN ? false : true;
    297367        }
     
    440510                        if ( is_user_logged_in() &&
    441511                                 ! $this->current_group->is_user_member &&
    442512                                 ! groups_check_for_membership_request( bp_loggedin_user_id(), $this->current_group->id ) &&
    443                                  $this->current_group->status == 'private' &&
     513                                 groups_membership_request_allowed( $this->current_group->status ) &&
     514                                 groups_membership_request_moderated( $this->current_group->status ) &&
    444515                                 ! groups_check_user_has_invite( bp_loggedin_user_id(), $this->current_group->id )
    445516                                ) {
    446517
  • buddypress/bp-groups/bp-groups-screens.php

    diff --exclude=.svn -ur plugins.orig/buddypress/bp-groups/bp-groups-screens.php plugins/buddypress/bp-groups/bp-groups-screens.php
    old new  
    150150                        check_admin_referer( 'bp_forums_new_reply' );
    151151
    152152                        // Auto join this user if they are not yet a member of this group
    153                         if ( bp_groups_auto_join() && !bp_current_user_can( 'bp_moderate' ) && 'public' == $bp->groups->current_group->status && !groups_is_user_member( bp_loggedin_user_id(), $bp->groups->current_group->id ) ) {
     153                        if ( bp_groups_auto_join() &&
     154                             !bp_current_user_can( 'bp_moderate' ) &&
     155                             groups_membership_request_allowed($bp->groups->current_group->status) &&
     156                             !groups_membership_request_moderated($bp->groups->current_group->status) &&
     157                             !groups_is_user_member( bp_loggedin_user_id(), $bp->groups->current_group->id ) ) {
    154158                                groups_join_group( $bp->groups->current_group->id, bp_loggedin_user_id() );
    155159                        }
    156160
     
    372376                        if ( $user_is_banned ) {
    373377                                $error_message = __( "You have been banned from this group.", 'buddypress' );
    374378
    375                         } elseif ( bp_groups_auto_join() && !bp_current_user_can( 'bp_moderate' ) && 'public' == $bp->groups->current_group->status && !groups_is_user_member( bp_loggedin_user_id(), $bp->groups->current_group->id ) ) {
     379                        } elseif ( bp_groups_auto_join() &&
     380                                   !bp_current_user_can( 'bp_moderate' ) &&
     381                                   groups_membership_request_allowed($bp->groups->current_group->status) &&
     382                                   !groups_membership_request_moderated($bp->groups->current_group->status) &&
     383                                   !groups_is_user_member( bp_loggedin_user_id(), $bp->groups->current_group->id ) ) {
    376384                                // Auto join this user if they are not yet a member of this group
    377385                                groups_join_group( $bp->groups->current_group->id, bp_loggedin_user_id() );
    378386                        }
     
    516524
    517525        $bp = buddypress();
    518526
    519         if ( 'private' != $bp->groups->current_group->status )
     527        if ( !groups_membership_request_moderated( $bp->groups->current_group->status ) )
    520528                return false;
    521529
    522530        // If the user is already invited, accept invitation
     
    866874                return false;
    867875        }
    868876
    869         if ( ! bp_is_item_admin() || ( 'public' == $bp->groups->current_group->status ) ) {
     877        if ( !bp_is_item_admin() ||
     878             !groups_membership_request_moderated( $bp->groups->current_group->status )) {
    870879                return false;
    871880        }
    872881
  • buddypress/bp-groups/bp-groups-template.php

    diff --exclude=.svn -ur plugins.orig/buddypress/bp-groups/bp-groups-template.php plugins/buddypress/bp-groups/bp-groups-template.php
    old new  
    711711                } else if ( 'private' == $group->status ) {
    712712                        $type = __( "Private Group", "buddypress" );
    713713                } else {
    714                         $type = ucwords( $group->status ) . ' ' . __( 'Group', 'buddypress' );
     714                        $type = sprintf ( __( '%s Group', 'buddypress' ), ucwords( $group->status ) );
    715715                }
    716716
    717717                return apply_filters( 'bp_get_group_type', $type );
     
    20832083
    20842084        <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>
    20852085
    2086         <?php if ( $groups_template->group->status == 'private' ) : ?>
     2086        <?php if ( groups_membership_request_moderated( $groups_template->group->status ) ) : ?>
    20872087
    20882088                <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>
    20892089
     
    24042404                } else {
    24052405
    24062406                        // Show different buttons based on group status
    2407                         switch ( $group->status ) {
    2408                                 case 'hidden' :
    2409                                         return false;
    2410                                         break;
    2411 
    2412                                 case 'public':
    2413                                         $button = array(
    2414                                                 'id'                => 'join_group',
    2415                                                 'component'         => 'groups',
    2416                                                 'must_be_logged_in' => true,
    2417                                                 'block_self'        => false,
    2418                                                 'wrapper_class'     => 'group-button ' . $group->status,
    2419                                                 'wrapper_id'        => 'groupbutton-' . $group->id,
    2420                                                 'link_href'         => wp_nonce_url( bp_get_group_permalink( $group ) . 'join', 'groups_join_group' ),
    2421                                                 'link_text'         => __( 'Join Group', 'buddypress' ),
    2422                                                 'link_title'        => __( 'Join Group', 'buddypress' ),
    2423                                                 'link_class'        => 'group-button join-group',
    2424                                         );
    2425                                         break;
    2426 
    2427                                 case 'private' :
     2407                        if ( !groups_membership_request_allowed($group->status) ) {
     2408                                return false;
     2409                        }
    24282410
    2429                                         // Member has outstanding invitation -
    2430                                         // show an "Accept Invitation" button
    2431                                         if ( $group->is_invited ) {
    2432                                                 $button = array(
    2433                                                         'id'                => 'accept_invite',
    2434                                                         'component'         => 'groups',
    2435                                                         'must_be_logged_in' => true,
    2436                                                         'block_self'        => false,
    2437                                                         'wrapper_class'     => 'group-button ' . $group->status,
    2438                                                         'wrapper_id'        => 'groupbutton-' . $group->id,
    2439                                                         'link_href'         => add_query_arg( 'redirect_to', bp_get_group_permalink( $group ), bp_get_group_accept_invite_link( $group ) ),
    2440                                                         'link_text'         => __( 'Accept Invitation', 'buddypress' ),
    2441                                                         'link_title'        => __( 'Accept Invitation', 'buddypress' ),
    2442                                                         'link_class'        => 'group-button accept-invite',
    2443                                                 );
    2444 
    2445                                         // Member has requested membership but request is pending -
    2446                                         // show a "Request Sent" button
    2447                                         } elseif ( $group->is_pending ) {
    2448                                                 $button = array(
    2449                                                         'id'                => 'membership_requested',
    2450                                                         'component'         => 'groups',
    2451                                                         'must_be_logged_in' => true,
    2452                                                         'block_self'        => false,
    2453                                                         'wrapper_class'     => 'group-button pending ' . $group->status,
    2454                                                         'wrapper_id'        => 'groupbutton-' . $group->id,
    2455                                                         'link_href'         => bp_get_group_permalink( $group ),
    2456                                                         'link_text'         => __( 'Request Sent', 'buddypress' ),
    2457                                                         'link_title'        => __( 'Request Sent', 'buddypress' ),
    2458                                                         'link_class'        => 'group-button pending membership-requested',
    2459                                                 );
    2460 
    2461                                         // Member has not requested membership yet -
    2462                                         // show a "Request Membership" button
    2463                                         } else {
    2464                                                 $button = array(
    2465                                                         'id'                => 'request_membership',
    2466                                                         'component'         => 'groups',
    2467                                                         'must_be_logged_in' => true,
    2468                                                         'block_self'        => false,
    2469                                                         'wrapper_class'     => 'group-button ' . $group->status,
    2470                                                         'wrapper_id'        => 'groupbutton-' . $group->id,
    2471                                                         'link_href'         => wp_nonce_url( bp_get_group_permalink( $group ) . 'request-membership', 'groups_request_membership' ),
    2472                                                         'link_text'         => __( 'Request Membership', 'buddypress' ),
    2473                                                         'link_title'        => __( 'Request Membership', 'buddypress' ),
    2474                                                         'link_class'        => 'group-button request-membership',
    2475                                                 );
    2476                                         }
     2411                        if ( !groups_membership_request_moderated($group->status) ) {
     2412                                $button = array(
     2413                                        'id'                => 'join_group',
     2414                                        'component'         => 'groups',
     2415                                        'must_be_logged_in' => true,
     2416                                        'block_self'        => false,
     2417                                        'wrapper_class'     => 'group-button ' . $group->status,
     2418                                        'wrapper_id'        => 'groupbutton-' . $group->id,
     2419                                        'link_href'         => wp_nonce_url( bp_get_group_permalink( $group ) . 'join', 'groups_join_group' ),
     2420                                        'link_text'         => __( 'Join Group', 'buddypress' ),
     2421                                        'link_title'        => __( 'Join Group', 'buddypress' ),
     2422                                        'link_class'        => 'group-button join-group',
     2423                                );
     2424                        } elseif ( $group->is_invited ) {
     2425                                // Member has outstanding invitation -
     2426                                // show an "Accept Invitation" button
     2427                                $button = array(
     2428                                        'id'                => 'accept_invite',
     2429                                        'component'         => 'groups',
     2430                                        'must_be_logged_in' => true,
     2431                                        'block_self'        => false,
     2432                                        'wrapper_class'     => 'group-button ' . $group->status,
     2433                                        'wrapper_id'        => 'groupbutton-' . $group->id,
     2434                                        'link_href'         => add_query_arg( 'redirect_to', bp_get_group_permalink( $group ), bp_get_group_accept_invite_link( $group ) ),
     2435                                        'link_text'         => __( 'Accept Invitation', 'buddypress' ),
     2436                                        'link_title'        => __( 'Accept Invitation', 'buddypress' ),
     2437                                        'link_class'        => 'group-button accept-invite',
     2438                                );
     2439
     2440                        } elseif ( $group->is_pending ) {
     2441                                // Member has requested membership but request is pending -
     2442                                // show a "Request Sent" button
     2443                                $button = array(
     2444                                        'id'                => 'membership_requested',
     2445                                        'component'         => 'groups',
     2446                                        'must_be_logged_in' => true,
     2447                                        'block_self'        => false,
     2448                                        'wrapper_class'     => 'group-button pending ' . $group->status,
     2449                                        'wrapper_id'        => 'groupbutton-' . $group->id,
     2450                                        'link_href'         => bp_get_group_permalink( $group ),
     2451                                        'link_text'         => __( 'Request Sent', 'buddypress' ),
     2452                                        'link_title'        => __( 'Request Sent', 'buddypress' ),
     2453                                        'link_class'        => 'group-button pending membership-requested',
     2454                                );
    24772455
    2478                                         break;
     2456                        } else {
     2457                                // Member has not requested membership yet -
     2458                                // show a "Request Membership" button
     2459                                $button = array(
     2460                                        'id'                => 'request_membership',
     2461                                        'component'         => 'groups',
     2462                                        'must_be_logged_in' => true,
     2463                                        'block_self'        => false,
     2464                                        'wrapper_class'     => 'group-button ' . $group->status,
     2465                                        'wrapper_id'        => 'groupbutton-' . $group->id,
     2466                                        'link_href'         => wp_nonce_url( bp_get_group_permalink( $group ) . 'request-membership', 'groups_request_membership' ),
     2467                                        'link_text'         => __( 'Request Membership', 'buddypress' ),
     2468                                        'link_title'        => __( 'Request Membership', 'buddypress' ),
     2469                                        'link_class'        => 'group-button request-membership',
     2470                                );
    24792471                        }
    24802472                }
    24812473
     
    25342526        if ( ! $group )
    25352527                $group =& $groups_template->group;
    25362528
    2537         if ( 'private' == $group->status ) {
     2529        if ( groups_membership_request_moderated( $group->status ) ) {
    25382530                if ( ! bp_group_has_requested_membership() ) {
    25392531                        if ( is_user_logged_in() && bp_group_is_invited() ) {
    25402532                                $message = __( 'You must accept your pending invitation before you can access this private group.', 'buddypress' );
  • buddypress/bp-templates/bp-legacy/buddypress/groups/create.php

    diff --exclude=.svn -ur plugins.orig/buddypress/bp-templates/bp-legacy/buddypress/groups/create.php plugins/buddypress/bp-templates/bp-legacy/buddypress/groups/create.php
    old new  
    5151                                <h4><?php _e( 'Privacy Options', 'buddypress' ); ?></h4>
    5252
    5353                                <div class="radio">
    54                                         <label><input type="radio" name="group-status" value="public"<?php if ( 'public' == bp_get_new_group_status() || !bp_get_new_group_status() ) { ?> checked="checked"<?php } ?> /> <strong><?php _e( 'This is a public group', 'buddypress' ); ?></strong></label>
     54<?php if ( is_super_admin() || groups_is_valid_creation_status( 'public' ) ) : ?>
     55                                        <label>
     56                                                <input type="radio" name="group-status" value="public"<?php if ( 'public' == bp_get_new_group_status() || !bp_get_new_group_status() ) { ?> checked="checked"<?php } ?> /> <strong><?php _e( 'This is a public group', 'buddypress' ); ?></strong></label>
    5557                                        <ul>
    56                                                 <li><?php _e( 'Any site member can join this group.', 'buddypress' ); ?></li>
     58                                                <li><?php group_membership_request_description( 'public' ); ?></li>
    5759                                                <li><?php _e( 'This group will be listed in the groups directory and in search results.', 'buddypress' ); ?></li>
    5860                                                <li><?php _e( 'Group content and activity will be visible to any site member.', 'buddypress' ); ?></li>
    5961                                        </ul>
     62<?php endif; ?>
    6063
    61 
     64<?php if ( is_super_admin() || groups_is_valid_creation_status( 'private' ) ) : ?>
    6265                                        <label>
    6366                                                <input type="radio" name="group-status" value="private"<?php if ( 'private' == bp_get_new_group_status() ) { ?> checked="checked"<?php } ?> />
    6467                                                <strong><?php _e( 'This is a private group', 'buddypress' ); ?></strong>
    6568                                        </label>
    6669                                        <ul>
    67                                                 <li><?php _e( 'Only users who request membership and are accepted can join the group.', 'buddypress' ); ?></li>
     70                                                <li><?php group_membership_request_description( 'private' ); ?></li>
    6871                                                <li><?php _e( 'This group will be listed in the groups directory and in search results.', 'buddypress' ); ?></li>
    6972                                                <li><?php _e( 'Group content and activity will only be visible to members of the group.', 'buddypress' ); ?></li>
    7073                                        </ul>
     74<?php endif; ?>
     75
    7176
     77<?php if ( is_super_admin() || groups_is_valid_creation_status( 'hidden' ) ) : ?>
    7278
    7379                                        <label>
    7480                                                <input type="radio" name="group-status" value="hidden"<?php if ( 'hidden' == bp_get_new_group_status() ) { ?> checked="checked"<?php } ?> />
    7581                                                <strong><?php _e('This is a hidden group', 'buddypress' ); ?></strong>
    7682                                        </label>
    7783                                        <ul>
    78                                                 <li><?php _e( 'Only users who are invited can join the group.', 'buddypress' ); ?></li>
     84                                                <li><?php group_membership_request_description( 'hidden' ); ?></li>
    7985                                                <li><?php _e( 'This group will not be listed in the groups directory or search results.', 'buddypress' ); ?></li>
    8086                                                <li><?php _e( 'Group content and activity will only be visible to members of the group.', 'buddypress' ); ?></li>
    8187                                        </ul>
     88<?php endif; ?>
    8289
    8390                                </div>
    8491
  • buddypress/bp-templates/bp-legacy/buddypress/groups/single/admin.php

    diff --exclude=.svn -ur plugins.orig/buddypress/bp-templates/bp-legacy/buddypress/groups/single/admin.php plugins/buddypress/bp-templates/bp-legacy/buddypress/groups/single/admin.php
    old new  
    5555
    5656        <h4><?php _e( 'Privacy Options', 'buddypress' ); ?></h4>
    5757
     58<?php
     59
     60$current_group_status = bp_get_group_status();
     61if (!is_super_admin() && !groups_is_valid_creation_status( $current_group_status ) ) : ?>
     62        <div class="radio">
     63                <label>
     64                        <input type="hidden" name="group-status" value="<?php
     65                                echo esc_attr($current_group_status);
     66                        ?>" />
     67                        <strong>
     68        <?php
     69                printf( __( 'This is a %s group', 'buddypress' ), $current_group_status );
     70        ?>
     71                        </strong>
     72                </label>
     73                <ul>
     74                </ul>
     75<?php else : ?>
    5876        <div class="radio">
     77        <?php if (is_super_admin() || groups_is_valid_creation_status( 'public' ) ) : ?>
    5978                <label>
    6079                        <input type="radio" name="group-status" value="public"<?php bp_group_show_status_setting( 'public' ); ?> />
    6180                        <strong><?php _e( 'This is a public group', 'buddypress' ); ?></strong>
    6281                        <ul>
    63                                 <li><?php _e( 'Any site member can join this group.', 'buddypress' ); ?></li>
     82                                <li><?php group_membership_request_description( 'public' ); ?></li>
    6483                                <li><?php _e( 'This group will be listed in the groups directory and in search results.', 'buddypress' ); ?></li>
    6584                                <li><?php _e( 'Group content and activity will be visible to any site member.', 'buddypress' ); ?></li>
    6685                        </ul>
    6786                </label>
     87        <?php endif; ?>
    6888
     89        <?php if (is_super_admin() || groups_is_valid_creation_status( 'private' ) ) : ?>
    6990                <label>
    7091                        <input type="radio" name="group-status" value="private"<?php bp_group_show_status_setting( 'private' ); ?> />
    7192                        <strong><?php _e( 'This is a private group', 'buddypress' ); ?></strong>
    7293                        <ul>
    73                                 <li><?php _e( 'Only users who request membership and are accepted can join the group.', 'buddypress' ); ?></li>
     94                                <li><?php group_membership_request_description( 'public' ); ?></li>
    7495                                <li><?php _e( 'This group will be listed in the groups directory and in search results.', 'buddypress' ); ?></li>
    7596                                <li><?php _e( 'Group content and activity will only be visible to members of the group.', 'buddypress' ); ?></li>
    7697                        </ul>
    7798                </label>
     99        <?php endif; ?>
    78100
     101        <?php if (is_super_admin() || groups_is_valid_creation_status( 'hidden' ) ) : ?>
    79102                <label>
    80103                        <input type="radio" name="group-status" value="hidden"<?php bp_group_show_status_setting( 'hidden' ); ?> />
    81104                        <strong><?php _e( 'This is a hidden group', 'buddypress' ); ?></strong>
    82105                        <ul>
    83                                 <li><?php _e( 'Only users who are invited can join the group.', 'buddypress' ); ?></li>
     106                                <li><?php group_membership_request_description( 'public' ); ?></li>
    84107                                <li><?php _e( 'This group will not be listed in the groups directory or search results.', 'buddypress' ); ?></li>
    85108                                <li><?php _e( 'Group content and activity will only be visible to members of the group.', 'buddypress' ); ?></li>
    86109                        </ul>
    87110                </label>
     111
     112        <?php endif; ?>
     113
     114<?php endif; ?>
     115
    88116        </div>
    89117
    90118        <hr />
  • buddypress/bp-templates/bp-legacy/buddypress-functions.php

    diff --exclude=.svn -ur plugins.orig/buddypress/bp-templates/bp-legacy/buddypress-functions.php plugins/buddypress/bp-templates/bp-legacy/buddypress-functions.php
    old new  
    11881188                return;
    11891189
    11901190        if ( ! groups_is_user_member( bp_loggedin_user_id(), $group->id ) ) {
    1191                 if ( 'public' == $group->status ) {
     1191            if ( groups_membership_request_allowed($group->status) ) {
     1192                if ( !groups_membership_request_moderated($group->status) ) {
    11921193                        check_ajax_referer( 'groups_join_group' );
    11931194
    11941195                        if ( ! groups_join_group( $group->id ) ) {
     
    11971198                                echo '<a id="group-' . esc_attr( $group->id ) . '" class="leave-group" rel="leave" title="' . __( 'Leave Group', 'buddypress' ) . '" href="' . wp_nonce_url( bp_get_group_permalink( $group ) . 'leave-group', 'groups_leave_group' ) . '">' . __( 'Leave Group', 'buddypress' ) . '</a>';
    11981199                        }
    11991200
    1200                 } elseif ( 'private' == $group->status ) {
    1201 
     1201                } else {
    12021202                        // If the user has already been invited, then this is
    12031203                        // an Accept Invitation button
    12041204                        if ( groups_check_user_has_invite( bp_loggedin_user_id(), $group->id ) ) {
     
    12091209                                } else {
    12101210                                        echo '<a id="group-' . esc_attr( $group->id ) . '" class="leave-group" rel="leave" title="' . __( 'Leave Group', 'buddypress' ) . '" href="' . wp_nonce_url( bp_get_group_permalink( $group ) . 'leave-group', 'groups_leave_group' ) . '">' . __( 'Leave Group', 'buddypress' ) . '</a>';
    12111211                                }
    1212 
    12131212                        // Otherwise, it's a Request Membership button
    12141213                        } else {
    12151214                                check_ajax_referer( 'groups_request_membership' );
     
    12171216                                if ( ! groups_send_membership_request( bp_loggedin_user_id(), $group->id ) ) {
    12181217                                        _e( 'Error requesting membership', 'buddypress' );
    12191218                                } else {
    1220                                         echo '<a id="group-' . esc_attr( $group->id ) . '" class="membership-requested" rel="membership-requested" title="' . __( 'Membership Requested', 'buddypress' ) . '" href="' . bp_get_group_permalink( $group ) . '">' . __( 'Membership Requested', 'buddypress' ) . '</a>';
     1219                                        echo '<a id="group-' . esc_attr( $group->id ) . '" class="membership-requested disabled" rel="membership-requested" title="' . __( 'Membership Requested', 'buddypress' ) . '" href="' . bp_get_group_permalink( $group ) . '" onClick="return false;">' . __( 'Membership Requested', 'buddypress' ) . '</a>';
    12211220                                }
    12221221                        }
    12231222                }
    1224 
     1223            }
    12251224        } else {
    12261225                check_ajax_referer( 'groups_leave_group' );
    12271226
    12281227                if ( ! groups_leave_group( $group->id ) ) {
     1228
    12291229                        _e( 'Error leaving group', 'buddypress' );
    1230                 } elseif ( 'public' == $group->status ) {
     1230                } elseif ( !groups_membership_request_moderated($group->status) ) {
    12311231                        echo '<a id="group-' . esc_attr( $group->id ) . '" class="join-group" rel="join" title="' . __( 'Join Group', 'buddypress' ) . '" href="' . wp_nonce_url( bp_get_group_permalink( $group ) . 'join', 'groups_join_group' ) . '">' . __( 'Join Group', 'buddypress' ) . '</a>';
    1232                 } elseif ( 'private' == $group->status ) {
     1232
     1233                } elseif ( groups_membership_request_allowed($group->status) ) {
     1234
    12331235                        echo '<a id="group-' . esc_attr( $group->id ) . '" class="request-membership" rel="join" title="' . __( 'Request Membership', 'buddypress' ) . '" href="' . wp_nonce_url( bp_get_group_permalink( $group ) . 'request-membership', 'groups_send_membership_request' ) . '">' . __( 'Request Membership', 'buddypress' ) . '</a>';
    12341236                }
    12351237        }
  • buddypress/bp-themes/bp-default/groups/create.php

    diff --exclude=.svn -ur plugins.orig/buddypress/bp-themes/bp-default/groups/create.php plugins/buddypress/bp-themes/bp-default/groups/create.php
    old new  
    5858                                        <h4><?php _e( 'Privacy Options', 'buddypress' ); ?></h4>
    5959
    6060                                        <div class="radio">
    61                                                 <label><input type="radio" name="group-status" value="public"<?php if ( 'public' == bp_get_new_group_status() || !bp_get_new_group_status() ) { ?> checked="checked"<?php } ?> />
    62                                                         <strong><?php _e( 'This is a public group', 'buddypress' ); ?></strong>
    63                                                         <ul>
    64                                                                 <li><?php _e( 'Any site member can join this group.', 'buddypress' ); ?></li>
    65                                                                 <li><?php _e( 'This group will be listed in the groups directory and in search results.', 'buddypress' ); ?></li>
    66                                                                 <li><?php _e( 'Group content and activity will be visible to any site member.', 'buddypress' ); ?></li>
    67                                                         </ul>
    68                                                 </label>
    69 
    70                                                 <label><input type="radio" name="group-status" value="private"<?php if ( 'private' == bp_get_new_group_status() ) { ?> checked="checked"<?php } ?> />
    71                                                         <strong><?php _e( 'This is a private group', 'buddypress' ); ?></strong>
    72                                                         <ul>
    73                                                                 <li><?php _e( 'Only users who request membership and are accepted can join the group.', 'buddypress' ); ?></li>
    74                                                                 <li><?php _e( 'This group will be listed in the groups directory and in search results.', 'buddypress' ); ?></li>
    75                                                                 <li><?php _e( 'Group content and activity will only be visible to members of the group.', 'buddypress' ); ?></li>
    76                                                         </ul>
    77                                                 </label>
     61<?php
     62        global $bp;
    7863
    79                                                 <label><input type="radio" name="group-status" value="hidden"<?php if ( 'hidden' == bp_get_new_group_status() ) { ?> checked="checked"<?php } ?> />
    80                                                         <strong><?php _e('This is a hidden group', 'buddypress'); ?></strong>
     64        $new_group_status = bp_get_new_group_status();
     65        if ( !$new_group_status )
     66                $new_group_status = groups_default_creation_status();
     67
     68        foreach ( $bp->groups->valid_status as $group_status ) {
     69                if ( is_super_admin() || groups_is_valid_creation_status( $group_status ) ) { ?>
     70                                                <label><input type="radio" name="group-status" value="<?php echo esc_attr($group_status) ?>"<?php if ( $group_status == $new_group_status ) { ?> checked="checked"<?php } ?> />
     71                                                        <strong><?php printf(__( 'This is a %s group', 'buddypress' ), $group_status); ?></strong>
    8172                                                        <ul>
    82                                                                 <li><?php _e( 'Only users who are invited can join the group.', 'buddypress' ); ?></li>
    83                                                                 <li><?php _e( 'This group will not be listed in the groups directory or search results.', 'buddypress' ); ?></li>
    84                                                                 <li><?php _e( 'Group content and activity will only be visible to members of the group.', 'buddypress' ); ?></li>
     73                                                                <li><?php group_membership_request_description( 'public' ); ?></li>
     74                                                                <li><?php group_listing_visibility_description( 'public' ); ?></li>
     75                                                                <li><?php group_content_visibility_description( 'public' ); ?></li>
    8576                                                        </ul>
    8677                                                </label>
     78<?php
     79                }
     80        }
     81?>
    8782                                        </div>
    8883
    8984                                        <h4><?php _e( 'Group Invitations', 'buddypress' ); ?></h4>
  • buddypress/bp-themes/bp-default/_inc/ajax.php

    diff --exclude=.svn -ur plugins.orig/buddypress/bp-themes/bp-default/groups/single/admin.php plugins/buddypress/bp-themes/bp-default/groups/single/admin.php
    old new  
    735735                return;
    736736
    737737        if ( ! groups_is_user_member( bp_loggedin_user_id(), $group->id ) ) {
    738                 if ( 'public' == $group->status ) {
     738            if ( groups_membership_request_allowed( $group->status ) ) {
     739                if ( ! groups_membership_request_moderated( $group->status ) ) {
    739740                        check_ajax_referer( 'groups_join_group' );
    740741
    741742                        if ( ! groups_join_group( $group->id ) ) {
     
    744745                                echo '<a id="group-' . esc_attr( $group->id ) . '" class="leave-group" rel="leave" title="' . __( 'Leave Group', 'buddypress' ) . '" href="' . wp_nonce_url( bp_get_group_permalink( $group ) . 'leave-group', 'groups_leave_group' ) . '">' . __( 'Leave Group', 'buddypress' ) . '</a>';
    745746                        }
    746747
    747                 } elseif ( 'private' == $group->status ) {
     748                } else {
    748749
    749750                        // If the user has already been invited, then this is
    750751                        // an Accept Invitation button
     
    768769                                }
    769770                        }
    770771                }
    771 
     772            }
    772773        } else {
    773774                check_ajax_referer( 'groups_leave_group' );
    774775
    775776                if ( ! groups_leave_group( $group->id ) ) {
    776777                        _e( 'Error leaving group', 'buddypress' );
    777                 } elseif ( 'public' == $group->status ) {
    778                         echo '<a id="group-' . esc_attr( $group->id ) . '" class="join-group" rel="join" title="' . __( 'Join Group', 'buddypress' ) . '" href="' . wp_nonce_url( bp_get_group_permalink( $group ) . 'join', 'groups_join_group' ) . '">' . __( 'Join Group', 'buddypress' ) . '</a>';
    779                 } elseif ( 'private' == $group->status ) {
     778                } elseif ( groups_membership_request_moderated( $group->status ) ) {
    780779                        echo '<a id="group-' . esc_attr( $group->id ) . '" class="request-membership" rel="join" title="' . __( 'Request Membership', 'buddypress' ) . '" href="' . wp_nonce_url( bp_get_group_permalink( $group ) . 'request-membership', 'groups_send_membership_request' ) . '">' . __( 'Request Membership', 'buddypress' ) . '</a>';
     780                } elseif ( groups_membership_request_allowed( $group->status ) ) {
     781                        echo '<a id="group-' . esc_attr( $group->id ) . '" class="join-group" rel="join" title="' . __( 'Join Group', 'buddypress' ) . '" href="' . wp_nonce_url( bp_get_group_permalink( $group ) . 'join', 'groups_join_group' ) . '">' . __( 'Join Group', 'buddypress' ) . '</a>';
    781782                }
    782783        }
    783784
  • buddypress/bp-themes/bp-default/_inc/ajax.php

    old new  
    735735                return;
    736736
    737737        if ( ! groups_is_user_member( bp_loggedin_user_id(), $group->id ) ) {
    738                 if ( 'public' == $group->status ) {
     738            if ( groups_membership_request_allowed( $group->status ) ) {
     739                if ( ! groups_membership_request_moderated( $group->status ) ) {
    739740                        check_ajax_referer( 'groups_join_group' );
    740741
    741742                        if ( ! groups_join_group( $group->id ) ) {
     
    744745                                echo '<a id="group-' . esc_attr( $group->id ) . '" class="leave-group" rel="leave" title="' . __( 'Leave Group', 'buddypress' ) . '" href="' . wp_nonce_url( bp_get_group_permalink( $group ) . 'leave-group', 'groups_leave_group' ) . '">' . __( 'Leave Group', 'buddypress' ) . '</a>';
    745746                        }
    746747
    747                 } elseif ( 'private' == $group->status ) {
     748                } else {
    748749
    749750                        // If the user has already been invited, then this is
    750751                        // an Accept Invitation button
     
    768769                                }
    769770                        }
    770771                }
    771 
     772            }
    772773        } else {
    773774                check_ajax_referer( 'groups_leave_group' );
    774775
    775776                if ( ! groups_leave_group( $group->id ) ) {
    776777                        _e( 'Error leaving group', 'buddypress' );
    777                 } elseif ( 'public' == $group->status ) {
    778                         echo '<a id="group-' . esc_attr( $group->id ) . '" class="join-group" rel="join" title="' . __( 'Join Group', 'buddypress' ) . '" href="' . wp_nonce_url( bp_get_group_permalink( $group ) . 'join', 'groups_join_group' ) . '">' . __( 'Join Group', 'buddypress' ) . '</a>';
    779                 } elseif ( 'private' == $group->status ) {
     778                } elseif ( groups_membership_request_moderated( $group->status ) ) {
    780779                        echo '<a id="group-' . esc_attr( $group->id ) . '" class="request-membership" rel="join" title="' . __( 'Request Membership', 'buddypress' ) . '" href="' . wp_nonce_url( bp_get_group_permalink( $group ) . 'request-membership', 'groups_send_membership_request' ) . '">' . __( 'Request Membership', 'buddypress' ) . '</a>';
     780                } elseif ( groups_membership_request_allowed( $group->status ) ) {
     781                        echo '<a id="group-' . esc_attr( $group->id ) . '" class="join-group" rel="join" title="' . __( 'Join Group', 'buddypress' ) . '" href="' . wp_nonce_url( bp_get_group_permalink( $group ) . 'join', 'groups_join_group' ) . '">' . __( 'Join Group', 'buddypress' ) . '</a>';
    781782                }
    782783        }
    783784