Skip to:
Content

Ticket #7218: 7218.groups-autoload.patch

File 7218.groups-autoload.patch, 145.6 KB (added by r-a-y, 7 months ago)

Groups screen class autoloader

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

     
    3939                return; 
    4040        } 
    4141 
    42         $current_group   = groups_get_current_group(); 
    43         $user_has_access = $current_group->user_has_access; 
    44         $no_access_args  = array(); 
    45  
    46         if ( ! $user_has_access && 'hidden' !== $current_group->status ) { 
    47                 // Always allow access to home and request-membership. 
    48                 if ( bp_is_current_action( 'home' ) || bp_is_current_action( 'request-membership' ) ) { 
    49                         $user_has_access = true; 
    50  
    51                 // User doesn't have access, so set up redirect args. 
    52                 } elseif ( is_user_logged_in() ) { 
    53                         $no_access_args = array( 
    54                                 'message'  => __( 'You do not have access to this group.', 'buddypress' ), 
    55                                 'root'     => bp_get_group_permalink( $current_group ) . 'home/', 
    56                                 'redirect' => false 
    57                         ); 
    58                 } 
    59         } 
    60  
    61         // Protect the admin tab from non-admins. 
    62         if ( bp_is_current_action( 'admin' ) && ! bp_is_item_admin() ) { 
    63                 $user_has_access = false; 
    64                 $no_access_args  = array( 
    65                         'message'  => __( 'You are not an admin of this group.', 'buddypress' ), 
    66                         'root'     => bp_get_group_permalink( $current_group ), 
    67                         'redirect' => false 
    68                 ); 
    69         } 
    70  
    71         /** 
    72          * Allow plugins to filter whether the current user has access to this group content. 
    73          * 
    74          * Note that if a plugin sets $user_has_access to false, it may also 
    75          * want to change the $no_access_args, to avoid problems such as 
    76          * logged-in users being redirected to wp-login.php. 
    77          * 
    78          * @since 2.1.0 
    79          * 
    80          * @param bool  $user_has_access True if the user has access to the 
    81          *                               content, otherwise false. 
    82          * @param array $no_access_args  Arguments to be passed to bp_core_no_access() in case 
    83          *                               of no access. Note that this value is passed by reference, 
    84          *                               so it can be modified by the filter callback. 
    85          */ 
    86         $user_has_access = apply_filters_ref_array( 'bp_group_user_has_access', array( $user_has_access, &$no_access_args ) ); 
    87  
    88         // If user has access, we return rather than redirect. 
    89         if ( $user_has_access ) { 
    90                 return; 
    91         } 
    92  
    93         // Hidden groups should return a 404 for non-members. 
    94         // Unset the current group so that you're not redirected 
    95         // to the default group tab. 
    96         if ( 'hidden' == $current_group->status ) { 
    97                 buddypress()->groups->current_group = 0; 
    98                 buddypress()->is_single_item        = false; 
    99                 bp_do_404(); 
    100                 return; 
    101         } else { 
    102                 bp_core_no_access( $no_access_args ); 
    103         } 
    104  
     42        new BP_Groups_Action_Group_Access_Protection; 
    10543} 
    10644add_action( 'bp_actions', 'bp_groups_group_access_protection' ); 
    10745 
     
    11351 * @return bool 
    11452 */ 
    11553function groups_action_create_group() { 
    116  
    11754        // If we're not at domain.org/groups/create/ then return false. 
    118         if ( !bp_is_groups_component() || !bp_is_current_action( 'create' ) ) 
    119                 return false; 
    120  
    121         if ( !is_user_logged_in() ) 
    122                 return false; 
    123  
    124         if ( !bp_user_can_create_groups() ) { 
    125                 bp_core_add_message( __( 'Sorry, you are not allowed to create groups.', 'buddypress' ), 'error' ); 
    126                 bp_core_redirect( bp_get_groups_directory_permalink() ); 
    127         } 
    128  
    129         $bp = buddypress(); 
    130  
    131         // Make sure creation steps are in the right order. 
    132         groups_action_sort_creation_steps(); 
    133  
    134         // If no current step is set, reset everything so we can start a fresh group creation. 
    135         $bp->groups->current_create_step = bp_action_variable( 1 ); 
    136         if ( !bp_get_groups_current_create_step() ) { 
    137                 unset( $bp->groups->current_create_step ); 
    138                 unset( $bp->groups->completed_create_steps ); 
    139  
    140                 setcookie( 'bp_new_group_id', false, time() - 1000, COOKIEPATH, COOKIE_DOMAIN, is_ssl() ); 
    141                 setcookie( 'bp_completed_create_steps', false, time() - 1000, COOKIEPATH, COOKIE_DOMAIN, is_ssl() ); 
    142  
    143                 $reset_steps = true; 
    144                 $keys        = array_keys( $bp->groups->group_creation_steps ); 
    145                 bp_core_redirect( trailingslashit( bp_get_groups_directory_permalink() . 'create/step/' . array_shift( $keys ) ) ); 
    146         } 
    147  
    148         // If this is a creation step that is not recognized, just redirect them back to the first screen. 
    149         if ( bp_get_groups_current_create_step() && empty( $bp->groups->group_creation_steps[bp_get_groups_current_create_step()] ) ) { 
    150                 bp_core_add_message( __('There was an error saving group details. Please try again.', 'buddypress'), 'error' ); 
    151                 bp_core_redirect( trailingslashit( bp_get_groups_directory_permalink() . 'create' ) ); 
    152         } 
    153  
    154         // Fetch the currently completed steps variable. 
    155         if ( isset( $_COOKIE['bp_completed_create_steps'] ) && !isset( $reset_steps ) ) 
    156                 $bp->groups->completed_create_steps = json_decode( base64_decode( stripslashes( $_COOKIE['bp_completed_create_steps'] ) ) ); 
    157  
    158         // Set the ID of the new group, if it has already been created in a previous step. 
    159         if ( bp_get_new_group_id() ) { 
    160                 $bp->groups->current_group = groups_get_group( $bp->groups->new_group_id ); 
    161  
    162                 // Only allow the group creator to continue to edit the new group. 
    163                 if ( ! bp_is_group_creator( $bp->groups->current_group, bp_loggedin_user_id() ) ) { 
    164                         bp_core_add_message( __( 'Only the group creator may continue editing this group.', 'buddypress' ), 'error' ); 
    165                         bp_core_redirect( trailingslashit( bp_get_groups_directory_permalink() . 'create' ) ); 
    166                 } 
    167         } 
    168  
    169         // If the save, upload or skip button is hit, lets calculate what we need to save. 
    170         if ( isset( $_POST['save'] ) ) { 
    171  
    172                 // Check the nonce. 
    173                 check_admin_referer( 'groups_create_save_' . bp_get_groups_current_create_step() ); 
    174  
    175                 if ( 'group-details' == bp_get_groups_current_create_step() ) { 
    176                         if ( empty( $_POST['group-name'] ) || empty( $_POST['group-desc'] ) || !strlen( trim( $_POST['group-name'] ) ) || !strlen( trim( $_POST['group-desc'] ) ) ) { 
    177                                 bp_core_add_message( __( 'Please fill in all of the required fields', 'buddypress' ), 'error' ); 
    178                                 bp_core_redirect( trailingslashit( bp_get_groups_directory_permalink() . 'create/step/' . bp_get_groups_current_create_step() ) ); 
    179                         } 
    180  
    181                         $new_group_id = isset( $bp->groups->new_group_id ) ? $bp->groups->new_group_id : 0; 
    182  
    183                         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' ) ) ) { 
    184                                 bp_core_add_message( __( 'There was an error saving group details. Please try again.', 'buddypress' ), 'error' ); 
    185                                 bp_core_redirect( trailingslashit( bp_get_groups_directory_permalink() . 'create/step/' . bp_get_groups_current_create_step() ) ); 
    186                         } 
    187                 } 
    188  
    189                 if ( 'group-settings' == bp_get_groups_current_create_step() ) { 
    190                         $group_status = 'public'; 
    191                         $group_enable_forum = 1; 
    192  
    193                         if ( !isset($_POST['group-show-forum']) ) { 
    194                                 $group_enable_forum = 0; 
    195                         } else { 
    196                                 // Create the forum if enable_forum = 1. 
    197                                 if ( bp_is_active( 'forums' ) && !groups_get_groupmeta( $bp->groups->new_group_id, 'forum_id' ) ) { 
    198                                         groups_new_group_forum(); 
    199                                 } 
    200                         } 
    201  
    202                         if ( 'private' == $_POST['group-status'] ) 
    203                                 $group_status = 'private'; 
    204                         elseif ( 'hidden' == $_POST['group-status'] ) 
    205                                 $group_status = 'hidden'; 
    206  
    207                         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 ) ) ) { 
    208                                 bp_core_add_message( __( 'There was an error saving group details. Please try again.', 'buddypress' ), 'error' ); 
    209                                 bp_core_redirect( trailingslashit( bp_get_groups_directory_permalink() . 'create/step/' . bp_get_groups_current_create_step() ) ); 
    210                         } 
    211  
    212                         // Save group types. 
    213                         if ( ! empty( $_POST['group-types'] ) ) { 
    214                                 bp_groups_set_group_type( $bp->groups->new_group_id, $_POST['group-types'] ); 
    215                         } 
    216  
    217                         /** 
    218                          * Filters the allowed invite statuses. 
    219                          * 
    220                          * @since 1.5.0 
    221                          * 
    222                          * @param array $value Array of statuses allowed. 
    223                          *                     Possible values are 'members, 
    224                          *                     'mods', and 'admins'. 
    225                          */ 
    226                         $allowed_invite_status = apply_filters( 'groups_allowed_invite_status', array( 'members', 'mods', 'admins' ) ); 
    227                         $invite_status         = !empty( $_POST['group-invite-status'] ) && in_array( $_POST['group-invite-status'], (array) $allowed_invite_status ) ? $_POST['group-invite-status'] : 'members'; 
    228  
    229                         groups_update_groupmeta( $bp->groups->new_group_id, 'invite_status', $invite_status ); 
    230                 } 
    231  
    232                 if ( 'group-invites' === bp_get_groups_current_create_step() ) { 
    233                         if ( ! empty( $_POST['friends'] ) ) { 
    234                                 foreach ( (array) $_POST['friends'] as $friend ) { 
    235                                         groups_invite_user( array( 
    236                                                 'user_id'  => (int) $friend, 
    237                                                 'group_id' => $bp->groups->new_group_id, 
    238                                         ) ); 
    239                                 } 
    240                         } 
    241  
    242                         groups_send_invites( bp_loggedin_user_id(), $bp->groups->new_group_id ); 
    243                 } 
    244  
    245                 /** 
    246                  * Fires before finalization of group creation and cookies are set. 
    247                  * 
    248                  * This hook is a variable hook dependent on the current step 
    249                  * in the creation process. 
    250                  * 
    251                  * @since 1.1.0 
    252                  */ 
    253                 do_action( 'groups_create_group_step_save_' . bp_get_groups_current_create_step() ); 
    254  
    255                 /** 
    256                  * Fires after the group creation step is completed. 
    257                  * 
    258                  * Mostly for clearing cache on a generic action name. 
    259                  * 
    260                  * @since 1.1.0 
    261                  */ 
    262                 do_action( 'groups_create_group_step_complete' ); 
    263  
    264                 /** 
    265                  * Once we have successfully saved the details for this step of the creation process 
    266                  * we need to add the current step to the array of completed steps, then update the cookies 
    267                  * holding the information 
    268                  */ 
    269                 $completed_create_steps = isset( $bp->groups->completed_create_steps ) ? $bp->groups->completed_create_steps : array(); 
    270                 if ( !in_array( bp_get_groups_current_create_step(), $completed_create_steps ) ) 
    271                         $bp->groups->completed_create_steps[] = bp_get_groups_current_create_step(); 
    272  
    273                 // Reset cookie info. 
    274                 setcookie( 'bp_new_group_id', $bp->groups->new_group_id, time()+60*60*24, COOKIEPATH, COOKIE_DOMAIN, is_ssl() ); 
    275                 setcookie( 'bp_completed_create_steps', base64_encode( json_encode( $bp->groups->completed_create_steps ) ), time()+60*60*24, COOKIEPATH, COOKIE_DOMAIN, is_ssl() ); 
    276  
    277                 // If we have completed all steps and hit done on the final step we 
    278                 // can redirect to the completed group. 
    279                 $keys = array_keys( $bp->groups->group_creation_steps ); 
    280                 if ( count( $bp->groups->completed_create_steps ) == count( $keys ) && bp_get_groups_current_create_step() == array_pop( $keys ) ) { 
    281                         unset( $bp->groups->current_create_step ); 
    282                         unset( $bp->groups->completed_create_steps ); 
    283  
    284                         setcookie( 'bp_new_group_id', false, time() - 3600, COOKIEPATH, COOKIE_DOMAIN, is_ssl() ); 
    285                         setcookie( 'bp_completed_create_steps', false, time() - 3600, COOKIEPATH, COOKIE_DOMAIN, is_ssl() ); 
    286  
    287                         // Once we completed all steps, record the group creation in the activity stream. 
    288                         groups_record_activity( array( 
    289                                 'type' => 'created_group', 
    290                                 'item_id' => $bp->groups->new_group_id 
    291                         ) ); 
    292  
    293                         /** 
    294                          * Fires after the group has been successfully created. 
    295                          * 
    296                          * @since 1.1.0 
    297                          * 
    298                          * @param int $new_group_id ID of the newly created group. 
    299                          */ 
    300                         do_action( 'groups_group_create_complete', $bp->groups->new_group_id ); 
    301  
    302                         bp_core_redirect( bp_get_group_permalink( $bp->groups->current_group ) ); 
    303                 } else { 
    304                         /** 
    305                          * Since we don't know what the next step is going to be (any plugin can insert steps) 
    306                          * we need to loop the step array and fetch the next step that way. 
    307                          */ 
    308                         foreach ( $keys as $key ) { 
    309                                 if ( $key == bp_get_groups_current_create_step() ) { 
    310                                         $next = 1; 
    311                                         continue; 
    312                                 } 
    313  
    314                                 if ( isset( $next ) ) { 
    315                                         $next_step = $key; 
    316                                         break; 
    317                                 } 
    318                         } 
    319  
    320                         bp_core_redirect( trailingslashit( bp_get_groups_directory_permalink() . 'create/step/' . $next_step ) ); 
    321                 } 
     55        if ( ! bp_is_groups_component() || ! bp_is_current_action( 'create' ) ) { 
     56                return; 
    32257        } 
    32358 
    324         // Remove invitations. 
    325         if ( 'group-invites' === bp_get_groups_current_create_step() && ! empty( $_REQUEST['user_id'] ) && is_numeric( $_REQUEST['user_id'] ) ) { 
    326                 if ( ! check_admin_referer( 'groups_invite_uninvite_user' ) ) { 
    327                         return false; 
    328                 } 
    329  
    330                 $message = __( 'Invite successfully removed', 'buddypress' ); 
    331                 $error   = false; 
    332  
    333                 if( ! groups_uninvite_user( (int) $_REQUEST['user_id'], $bp->groups->new_group_id ) ) { 
    334                         $message = __( 'There was an error removing the invite', 'buddypress' ); 
    335                         $error   = 'error'; 
    336                 } 
    337  
    338                 bp_core_add_message( $message, $error ); 
    339                 bp_core_redirect( trailingslashit( bp_get_groups_directory_permalink() . 'create/step/group-invites' ) ); 
     59        if ( ! is_user_logged_in() ) { 
     60                return; 
    34061        } 
    34162 
    342         // Group avatar is handled separately. 
    343         if ( 'group-avatar' == bp_get_groups_current_create_step() && isset( $_POST['upload'] ) ) { 
    344                 if ( ! isset( $bp->avatar_admin ) ) { 
    345                         $bp->avatar_admin = new stdClass(); 
    346                 } 
    347  
    348                 if ( !empty( $_FILES ) && isset( $_POST['upload'] ) ) { 
    349                         // Normally we would check a nonce here, but the group save nonce is used instead. 
    350                         // Pass the file to the avatar upload handler. 
    351                         if ( bp_core_avatar_handle_upload( $_FILES, 'groups_avatar_upload_dir' ) ) { 
    352                                 $bp->avatar_admin->step = 'crop-image'; 
    353  
    354                                 // Make sure we include the jQuery jCrop file for image cropping. 
    355                                 add_action( 'wp_print_scripts', 'bp_core_add_jquery_cropper' ); 
    356                         } 
    357                 } 
    358  
    359                 // If the image cropping is done, crop the image and save a full/thumb version. 
    360                 if ( isset( $_POST['avatar-crop-submit'] ) && isset( $_POST['upload'] ) ) { 
    361  
    362                         // Normally we would check a nonce here, but the group save nonce is used instead. 
    363                         $args = array( 
    364                                 'object'        => 'group', 
    365                                 'avatar_dir'    => 'group-avatars', 
    366                                 'item_id'       => $bp->groups->current_group->id, 
    367                                 'original_file' => $_POST['image_src'], 
    368                                 'crop_x'        => $_POST['x'], 
    369                                 'crop_y'        => $_POST['y'], 
    370                                 'crop_w'        => $_POST['w'], 
    371                                 'crop_h'        => $_POST['h'] 
    372                         ); 
    373  
    374                         if ( ! bp_core_avatar_handle_crop( $args ) ) { 
    375                                 bp_core_add_message( __( 'There was an error saving the group profile photo, please try uploading again.', 'buddypress' ), 'error' ); 
    376                         } else { 
    377                                 /** 
    378                                  * Fires after a group avatar is uploaded. 
    379                                  * 
    380                                  * @since 2.8.0 
    381                                  * 
    382                                  * @param int    $group_id ID of the group. 
    383                                  * @param string $type     Avatar type. 'crop' or 'full'. 
    384                                  * @param array  $args     Array of parameters passed to the avatar handler. 
    385                                  */ 
    386                                 do_action( 'groups_avatar_uploaded', bp_get_current_group_id(), 'crop', $args ); 
    387  
    388                                 bp_core_add_message( __( 'The group profile photo was uploaded successfully.', 'buddypress' ) ); 
    389                         } 
    390                 } 
     63        if ( ! bp_user_can_create_groups() ) { 
     64                bp_core_add_message( __( 'Sorry, you are not allowed to create groups.', 'buddypress' ), 'error' ); 
     65                bp_core_redirect( bp_get_groups_directory_permalink() ); 
    39166        } 
    39267 
    393         /** 
    394          * Filters the template to load for the group creation screen. 
    395          * 
    396          * @since 1.0.0 
    397          * 
    398          * @param string $value Path to the group creation template to load. 
    399          */ 
    400         bp_core_load_template( apply_filters( 'groups_template_create_group', 'groups/create' ) ); 
     68        new BP_Groups_Action_Create_Group; 
    40169} 
    40270add_action( 'bp_actions', 'groups_action_create_group' ); 
    40371 
     
    40977 * @return bool 
    41078 */ 
    41179function groups_action_join_group() { 
    412  
    413         if ( !bp_is_single_item() || !bp_is_groups_component() || !bp_is_current_action( 'join' ) ) 
    414                 return false; 
     80        if ( ! bp_is_single_item() || ! bp_is_groups_component() || ! bp_is_current_action( 'join' ) ) { 
     81                return; 
     82        } 
    41583 
    41684        // Nonce check. 
    417         if ( !check_admin_referer( 'groups_join_group' ) ) 
    418                 return false; 
    419  
    420         $bp = buddypress(); 
    421  
    422         // Skip if banned or already a member. 
    423         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 ) ) { 
    424  
    425                 // User wants to join a group that is not public. 
    426                 if ( $bp->groups->current_group->status != 'public' ) { 
    427                         if ( !groups_check_user_has_invite( bp_loggedin_user_id(), $bp->groups->current_group->id ) ) { 
    428                                 bp_core_add_message( __( 'There was an error joining the group.', 'buddypress' ), 'error' ); 
    429                                 bp_core_redirect( bp_get_group_permalink( $bp->groups->current_group ) ); 
    430                         } 
    431                 } 
    432  
    433                 // User wants to join any group. 
    434                 if ( !groups_join_group( $bp->groups->current_group->id ) ) 
    435                         bp_core_add_message( __( 'There was an error joining the group.', 'buddypress' ), 'error' ); 
    436                 else 
    437                         bp_core_add_message( __( 'You joined the group!', 'buddypress' ) ); 
    438  
    439                 bp_core_redirect( bp_get_group_permalink( $bp->groups->current_group ) ); 
     85        if ( ! check_admin_referer( 'groups_join_group' ) ) { 
     86                return; 
    44087        } 
    44188 
    442         /** 
    443          * Filters the template to load for the single group screen. 
    444          * 
    445          * @since 1.0.0 
    446          * 
    447          * @param string $value Path to the single group template to load. 
    448          */ 
    449         bp_core_load_template( apply_filters( 'groups_template_group_home', 'groups/single/home' ) ); 
     89        new BP_Groups_Action_Join_Group; 
    45090} 
    45191add_action( 'bp_actions', 'groups_action_join_group' ); 
    45292 
     
    465105 */ 
    466106function groups_action_leave_group() { 
    467107        if ( ! bp_is_single_item() || ! bp_is_groups_component() || ! bp_is_current_action( 'leave-group' ) ) { 
    468                 return false; 
     108                return; 
    469109        } 
    470110 
    471111        // Nonce check. 
    472112        if ( ! check_admin_referer( 'groups_leave_group' ) ) { 
    473                 return false; 
     113                return; 
    474114        } 
    475115 
    476116        // User wants to leave any group. 
    477         if ( groups_is_user_member( bp_loggedin_user_id(), bp_get_current_group_id() ) ) { 
    478                 $bp = buddypress(); 
    479  
    480                 // Stop sole admins from abandoning their group. 
    481                 $group_admins = groups_get_group_admins( bp_get_current_group_id() ); 
    482  
    483                 if ( 1 == count( $group_admins ) && $group_admins[0]->user_id == bp_loggedin_user_id() ) { 
    484                         bp_core_add_message( __( 'This group must have at least one admin', 'buddypress' ), 'error' ); 
    485                 } elseif ( ! groups_leave_group( $bp->groups->current_group->id ) ) { 
    486                         bp_core_add_message( __( 'There was an error leaving the group.', 'buddypress' ), 'error' ); 
    487                 } else { 
    488                         bp_core_add_message( __( 'You successfully left the group.', 'buddypress' ) ); 
    489                 } 
    490  
    491                 $redirect = bp_get_group_permalink( groups_get_current_group() ); 
    492  
    493                 if( 'hidden' == $bp->groups->current_group->status ) { 
    494                         $redirect = trailingslashit( bp_loggedin_user_domain() . bp_get_groups_slug() ); 
    495                 } 
    496  
    497                 bp_core_redirect( $redirect ); 
    498         } 
    499  
    500         /** This filter is documented in bp-groups/bp-groups-actions.php */ 
    501         bp_core_load_template( apply_filters( 'groups_template_group_home', 'groups/single/home' ) ); 
     117        new BP_Groups_Action_Leave_Group; 
    502118} 
    503119add_action( 'bp_actions', 'groups_action_leave_group' ); 
    504120 
  • src/bp-groups/bp-groups-forums.php

     
    1818defined( 'ABSPATH' ) || exit; 
    1919 
    2020/** 
     21 * This screen function handles actions related to group forums. 
     22 * 
     23 * @since 1.0.0 
     24 */ 
     25function groups_screen_group_forum() { 
     26 
     27        if ( !bp_is_active( 'forums' ) || !bp_forums_is_installed_correctly() ) 
     28                return false; 
     29 
     30        if ( bp_action_variable( 0 ) && !bp_is_action_variable( 'topic', 0 ) ) { 
     31                bp_do_404(); 
     32                return; 
     33        } 
     34 
     35        $bp = buddypress(); 
     36 
     37        if ( !$bp->groups->current_group->user_has_access ) { 
     38                bp_core_no_access(); 
     39                return; 
     40        } 
     41 
     42        if ( ! bp_is_single_item() ) 
     43                return false; 
     44 
     45        // Fetch the details we need. 
     46        $topic_slug     = (string)bp_action_variable( 1 ); 
     47        $topic_id       = bp_forums_get_topic_id_from_slug( $topic_slug ); 
     48        $forum_id       = groups_get_groupmeta( $bp->groups->current_group->id, 'forum_id' ); 
     49        $user_is_banned = false; 
     50 
     51        if ( !bp_current_user_can( 'bp_moderate' ) && groups_is_user_banned( bp_loggedin_user_id(), $bp->groups->current_group->id ) ) 
     52                $user_is_banned = true; 
     53 
     54        if ( !empty( $topic_slug ) && !empty( $topic_id ) ) { 
     55 
     56                // Posting a reply. 
     57                if ( !$user_is_banned && !bp_action_variable( 2 ) && isset( $_POST['submit_reply'] ) ) { 
     58                        // Check the nonce. 
     59                        check_admin_referer( 'bp_forums_new_reply' ); 
     60 
     61                        // Auto join this user if they are not yet a member of this group. 
     62                        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 ) ) { 
     63                                groups_join_group( $bp->groups->current_group->id, bp_loggedin_user_id() ); 
     64                        } 
     65 
     66                        $topic_page = isset( $_GET['topic_page'] ) ? $_GET['topic_page'] : false; 
     67 
     68                        // Don't allow reply flooding. 
     69                        if ( bp_forums_reply_exists( $_POST['reply_text'], $topic_id, bp_loggedin_user_id() ) ) { 
     70                                bp_core_add_message( __( 'It looks like you\'ve already said that!', 'buddypress' ), 'error' ); 
     71                        } else { 
     72                                if ( !$post_id = groups_new_group_forum_post( $_POST['reply_text'], $topic_id, $topic_page ) ) { 
     73                                        bp_core_add_message( __( 'There was an error when replying to that topic', 'buddypress'), 'error' ); 
     74                                } else { 
     75                                        bp_core_add_message( __( 'Your reply was posted successfully', 'buddypress') ); 
     76                                } 
     77                        } 
     78 
     79                        $query_vars = isset( $_SERVER['QUERY_STRING'] ) ? '?' . $_SERVER['QUERY_STRING'] : ''; 
     80 
     81                        $redirect = bp_get_group_permalink( groups_get_current_group() ) . 'forum/topic/' . $topic_slug . '/' . $query_vars; 
     82 
     83                        if ( !empty( $post_id ) ) { 
     84                                $redirect .= '#post-' . $post_id; 
     85                        } 
     86 
     87                        bp_core_redirect( $redirect ); 
     88                } 
     89 
     90                // Sticky a topic. 
     91                elseif ( bp_is_action_variable( 'stick', 2 ) && ( bp_is_item_admin() || bp_is_item_mod() ) ) { 
     92                        // Check the nonce. 
     93                        check_admin_referer( 'bp_forums_stick_topic' ); 
     94 
     95                        if ( !bp_forums_sticky_topic( array( 'topic_id' => $topic_id ) ) ) { 
     96                                bp_core_add_message( __( 'There was an error when making that topic a sticky', 'buddypress' ), 'error' ); 
     97                        } else { 
     98                                bp_core_add_message( __( 'The topic was made sticky successfully', 'buddypress' ) ); 
     99                        } 
     100 
     101                        /** 
     102                         * Fires after a group forum topic has been stickied. 
     103                         * 
     104                         * @since 1.1.0 
     105                         * 
     106                         * @param int $topic_id ID of the topic being stickied. 
     107                         */ 
     108                        do_action( 'groups_stick_forum_topic', $topic_id ); 
     109                        bp_core_redirect( wp_get_referer() ); 
     110                } 
     111 
     112                // Un-Sticky a topic. 
     113                elseif ( bp_is_action_variable( 'unstick', 2 ) && ( bp_is_item_admin() || bp_is_item_mod() ) ) { 
     114                        // Check the nonce. 
     115                        check_admin_referer( 'bp_forums_unstick_topic' ); 
     116 
     117                        if ( !bp_forums_sticky_topic( array( 'topic_id' => $topic_id, 'mode' => 'unstick' ) ) ) { 
     118                                bp_core_add_message( __( 'There was an error when unsticking that topic', 'buddypress'), 'error' ); 
     119                        } else { 
     120                                bp_core_add_message( __( 'The topic was unstuck successfully', 'buddypress') ); 
     121                        } 
     122 
     123                        /** 
     124                         * Fires after a group forum topic has been un-stickied. 
     125                         * 
     126                         * @since 1.1.0 
     127                         * 
     128                         * @param int $topic_id ID of the topic being un-stickied. 
     129                         */ 
     130                        do_action( 'groups_unstick_forum_topic', $topic_id ); 
     131                        bp_core_redirect( wp_get_referer() ); 
     132                } 
     133 
     134                // Close a topic. 
     135                elseif ( bp_is_action_variable( 'close', 2 ) && ( bp_is_item_admin() || bp_is_item_mod() ) ) { 
     136                        // Check the nonce. 
     137                        check_admin_referer( 'bp_forums_close_topic' ); 
     138 
     139                        if ( !bp_forums_openclose_topic( array( 'topic_id' => $topic_id ) ) ) { 
     140                                bp_core_add_message( __( 'There was an error when closing that topic', 'buddypress'), 'error' ); 
     141                        } else { 
     142                                bp_core_add_message( __( 'The topic was closed successfully', 'buddypress') ); 
     143                        } 
     144 
     145                        /** 
     146                         * Fires after a group forum topic has been closed. 
     147                         * 
     148                         * @since 1.1.0 
     149                         * 
     150                         * @param int $topic_id ID of the topic being closed. 
     151                         */ 
     152                        do_action( 'groups_close_forum_topic', $topic_id ); 
     153                        bp_core_redirect( wp_get_referer() ); 
     154                } 
     155 
     156                // Open a topic. 
     157                elseif ( bp_is_action_variable( 'open', 2 ) && ( bp_is_item_admin() || bp_is_item_mod() ) ) { 
     158                        // Check the nonce. 
     159                        check_admin_referer( 'bp_forums_open_topic' ); 
     160 
     161                        if ( !bp_forums_openclose_topic( array( 'topic_id' => $topic_id, 'mode' => 'open' ) ) ) { 
     162                                bp_core_add_message( __( 'There was an error when opening that topic', 'buddypress'), 'error' ); 
     163                        } else { 
     164                                bp_core_add_message( __( 'The topic was opened successfully', 'buddypress') ); 
     165                        } 
     166 
     167                        /** 
     168                         * Fires after a group forum topic has been opened. 
     169                         * 
     170                         * @since 1.1.0 
     171                         * 
     172                         * @param int $topic_id ID of the topic being opened. 
     173                         */ 
     174                        do_action( 'groups_open_forum_topic', $topic_id ); 
     175                        bp_core_redirect( wp_get_referer() ); 
     176                } 
     177 
     178                // Delete a topic. 
     179                elseif ( empty( $user_is_banned ) && bp_is_action_variable( 'delete', 2 ) && !bp_action_variable( 3 ) ) { 
     180                        // Fetch the topic. 
     181                        $topic = bp_forums_get_topic_details( $topic_id ); 
     182 
     183                        /* Check the logged in user can delete this topic */ 
     184                        if ( ! bp_is_item_admin() && ! bp_is_item_mod() && ( (int) bp_loggedin_user_id() != (int) $topic->topic_poster ) ) { 
     185                                bp_core_redirect( wp_get_referer() ); 
     186                        } 
     187 
     188                        // Check the nonce. 
     189                        check_admin_referer( 'bp_forums_delete_topic' ); 
     190 
     191                        /** 
     192                         * Fires before a group forum topic is deleted. 
     193                         * 
     194                         * @since 1.5.0 
     195                         * 
     196                         * @param int $topic_id ID of the topic being deleted. 
     197                         */ 
     198                        do_action( 'groups_before_delete_forum_topic', $topic_id ); 
     199 
     200                        if ( !groups_delete_group_forum_topic( $topic_id ) ) { 
     201                                bp_core_add_message( __( 'There was an error deleting the topic', 'buddypress' ), 'error' ); 
     202                        } else { 
     203                                bp_core_add_message( __( 'The topic was deleted successfully', 'buddypress' ) ); 
     204                        } 
     205 
     206                        /** 
     207                         * Fires after a group forum topic has been deleted. 
     208                         * 
     209                         * @since 1.5.0 
     210                         * 
     211                         * @param int $topic_id ID of the topic being deleted. 
     212                         */ 
     213                        do_action( 'groups_delete_forum_topic', $topic_id ); 
     214                        bp_core_redirect( bp_get_group_permalink( groups_get_current_group() ) . 'forum/' ); 
     215                } 
     216 
     217                // Editing a topic. 
     218                elseif ( empty( $user_is_banned ) && bp_is_action_variable( 'edit', 2 ) && !bp_action_variable( 3 ) ) { 
     219                        // Fetch the topic. 
     220                        $topic = bp_forums_get_topic_details( $topic_id ); 
     221 
     222                        // Check the logged in user can edit this topic. 
     223                        if ( ! bp_is_item_admin() && ! bp_is_item_mod() && ( (int) bp_loggedin_user_id() != (int) $topic->topic_poster ) ) { 
     224                                bp_core_redirect( wp_get_referer() ); 
     225                        } 
     226 
     227                        if ( isset( $_POST['save_changes'] ) ) { 
     228                                // Check the nonce. 
     229                                check_admin_referer( 'bp_forums_edit_topic' ); 
     230 
     231                                $topic_tags = !empty( $_POST['topic_tags'] ) ? $_POST['topic_tags'] : false; 
     232 
     233                                if ( !groups_update_group_forum_topic( $topic_id, $_POST['topic_title'], $_POST['topic_text'], $topic_tags ) ) { 
     234                                        bp_core_add_message( __( 'There was an error when editing that topic', 'buddypress'), 'error' ); 
     235                                } else { 
     236                                        bp_core_add_message( __( 'The topic was edited successfully', 'buddypress') ); 
     237                                } 
     238 
     239                                /** 
     240                                 * Fires after a group forum topic has been edited. 
     241                                 * 
     242                                 * @since 1.1.0 
     243                                 * 
     244                                 * @param int $topic_id ID of the topic being edited. 
     245                                 */ 
     246                                do_action( 'groups_edit_forum_topic', $topic_id ); 
     247                                bp_core_redirect( bp_get_group_permalink( groups_get_current_group() ) . 'forum/topic/' . $topic_slug . '/' ); 
     248                        } 
     249 
     250                        /** 
     251                         * Filters the template to load for a topic edit page. 
     252                         * 
     253                         * @since 1.1.0 
     254                         * 
     255                         * @param string $value Path to a topic edit template. 
     256                         */ 
     257                        bp_core_load_template( apply_filters( 'groups_template_group_forum_topic_edit', 'groups/single/home' ) ); 
     258 
     259                // Delete a post. 
     260                } elseif ( empty( $user_is_banned ) && bp_is_action_variable( 'delete', 2 ) && $post_id = bp_action_variable( 4 ) ) { 
     261                        // Fetch the post. 
     262                        $post = bp_forums_get_post( $post_id ); 
     263 
     264                        // Check the logged in user can edit this topic. 
     265                        if ( ! bp_is_item_admin() && ! bp_is_item_mod() && ( (int) bp_loggedin_user_id() != (int) $post->poster_id ) ) { 
     266                                bp_core_redirect( wp_get_referer() ); 
     267                        } 
     268 
     269                        // Check the nonce. 
     270                        check_admin_referer( 'bp_forums_delete_post' ); 
     271 
     272                        /** 
     273                         * Fires before the deletion of a group forum post. 
     274                         * 
     275                         * @since 1.5.0 
     276                         * 
     277                         * @param int $post_id ID of the forum post being deleted. 
     278                         */ 
     279                        do_action( 'groups_before_delete_forum_post', $post_id ); 
     280 
     281                        if ( !groups_delete_group_forum_post( $post_id ) ) { 
     282                                bp_core_add_message( __( 'There was an error deleting that post', 'buddypress'), 'error' ); 
     283                        } else { 
     284                                bp_core_add_message( __( 'The post was deleted successfully', 'buddypress') ); 
     285                        } 
     286 
     287                        /** 
     288                         * Fires after the deletion of a group forum post. 
     289                         * 
     290                         * @since 1.1.0 
     291                         * 
     292                         * @param int $post_id ID of the forum post being deleted. 
     293                         */ 
     294                        do_action( 'groups_delete_forum_post', $post_id ); 
     295                        bp_core_redirect( wp_get_referer() ); 
     296 
     297                // Editing a post. 
     298                } elseif ( empty( $user_is_banned ) && bp_is_action_variable( 'edit', 2 ) && $post_id = bp_action_variable( 4 ) ) { 
     299 
     300                        // Fetch the post. 
     301                        $post = bp_forums_get_post( $post_id ); 
     302 
     303                        // Check the logged in user can edit this topic. 
     304                        if ( ! bp_is_item_admin() && ! bp_is_item_mod() && ( (int) bp_loggedin_user_id() != (int) $post->poster_id ) ) { 
     305                                bp_core_redirect( wp_get_referer() ); 
     306                        } 
     307 
     308                        if ( isset( $_POST['save_changes'] ) ) { 
     309                                // Check the nonce. 
     310                                check_admin_referer( 'bp_forums_edit_post' ); 
     311 
     312                                $topic_page = isset( $_GET['topic_page'] ) ? $_GET['topic_page'] : false; 
     313 
     314                                if ( !$post_id = groups_update_group_forum_post( $post_id, $_POST['post_text'], $topic_id, $topic_page ) ) { 
     315                                        bp_core_add_message( __( 'There was an error when editing that post', 'buddypress'), 'error' ); 
     316                                } else { 
     317                                        bp_core_add_message( __( 'The post was edited successfully', 'buddypress') ); 
     318                                } 
     319 
     320                                if ( $_SERVER['QUERY_STRING'] ) { 
     321                                        $query_vars = '?' . $_SERVER['QUERY_STRING']; 
     322                                } 
     323 
     324                                /** 
     325                                 * Fires after the editing of a group forum post. 
     326                                 * 
     327                                 * @since 1.1.0 
     328                                 * 
     329                                 * @param int $post_id ID of the forum post being edited. 
     330                                 */ 
     331                                do_action( 'groups_edit_forum_post', $post_id ); 
     332                                bp_core_redirect( bp_get_group_permalink( $bp->groups->current_group ) . 'forum/topic/' . $topic_slug . '/' . $query_vars . '#post-' . $post_id ); 
     333                        } 
     334 
     335                        /** This filter is documented in bp-groups/bp-groups-screens.php */ 
     336                        bp_core_load_template( apply_filters( 'groups_template_group_forum_topic_edit', 'groups/single/home' ) ); 
     337 
     338                // Standard topic display. 
     339                } else { 
     340                        if ( !empty( $user_is_banned ) ) { 
     341                                bp_core_add_message( __( "You have been banned from this group.", 'buddypress' ) ); 
     342                        } 
     343 
     344                        /** 
     345                         * Filters the template to load for a topic page. 
     346                         * 
     347                         * @since 1.1.0 
     348                         * 
     349                         * @param string $value Path to a topic template. 
     350                         */ 
     351                        bp_core_load_template( apply_filters( 'groups_template_group_forum_topic', 'groups/single/home' ) ); 
     352                } 
     353 
     354        // Forum topic does not exist. 
     355        } elseif ( !empty( $topic_slug ) && empty( $topic_id ) ) { 
     356                bp_do_404(); 
     357                return; 
     358 
     359        } else { 
     360                // Posting a topic. 
     361                if ( isset( $_POST['submit_topic'] ) && bp_is_active( 'forums' ) ) { 
     362 
     363                        // Check the nonce. 
     364                        check_admin_referer( 'bp_forums_new_topic' ); 
     365 
     366                        if ( $user_is_banned ) { 
     367                                $error_message = __( "You have been banned from this group.", 'buddypress' ); 
     368 
     369                        } 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 ) ) { 
     370                                // Auto join this user if they are not yet a member of this group. 
     371                                groups_join_group( $bp->groups->current_group->id, bp_loggedin_user_id() ); 
     372                        } 
     373 
     374                        if ( empty( $_POST['topic_title'] ) ) { 
     375                                $error_message = __( 'Please provide a title for your forum topic.', 'buddypress' ); 
     376                        } elseif ( empty( $_POST['topic_text'] ) ) { 
     377                                $error_message = __( 'Forum posts cannot be empty. Please enter some text.', 'buddypress' ); 
     378                        } 
     379 
     380                        if ( empty( $forum_id ) ) { 
     381                                $error_message = __( 'This group does not have a forum setup yet.', 'buddypress' ); 
     382                        } 
     383 
     384                        if ( isset( $error_message ) ) { 
     385                                bp_core_add_message( $error_message, 'error' ); 
     386                                $redirect = bp_get_group_permalink( $bp->groups->current_group ) . 'forum'; 
     387                        } else { 
     388                                if ( !$topic = groups_new_group_forum_topic( $_POST['topic_title'], $_POST['topic_text'], $_POST['topic_tags'], $forum_id ) ) { 
     389                                        bp_core_add_message( __( 'There was an error when creating the topic', 'buddypress'), 'error' ); 
     390                                        $redirect = bp_get_group_permalink( $bp->groups->current_group ) . 'forum'; 
     391                                } else { 
     392                                        bp_core_add_message( __( 'The topic was created successfully', 'buddypress') ); 
     393                                        $redirect = bp_get_group_permalink( $bp->groups->current_group ) . 'forum/topic/' . $topic->topic_slug . '/'; 
     394                                } 
     395                        } 
     396 
     397                        bp_core_redirect( $redirect ); 
     398                } 
     399 
     400                /** 
     401                 * Fires at the end of the group forum screen loading process. 
     402                 * 
     403                 * @since 1.0.0 
     404                 * 
     405                 * @param int $topic_id ID of the topic being displayed. 
     406                 * @param int $forum_id ID of the forum being displayed. 
     407                 */ 
     408                do_action( 'groups_screen_group_forum', $topic_id, $forum_id ); 
     409 
     410                /** 
     411                 * Filters the template to load for a group forum page. 
     412                 * 
     413                 * @since 1.0.0 
     414                 * 
     415                 * @param string $value Path to a group forum template. 
     416                 */ 
     417                bp_core_load_template( apply_filters( 'groups_template_group_forum', 'groups/single/home' ) ); 
     418        } 
     419} 
     420 
     421/** 
    21422 * Creates a new forum inside a specific BuddyPress group. 
    22423 * 
    23424 * Uses the bundled version of bbPress packaged with BuddyPress. 
  • src/bp-groups/bp-groups-screens.php

     
    2020 * @since 1.0.0 
    2121 */ 
    2222function groups_directory_groups_setup() { 
    23         if ( bp_is_groups_directory() ) { 
    24                 bp_update_is_directory( true, 'groups' ); 
     23        if ( ! bp_is_groups_directory() ) { 
     24                return; 
     25        } 
    2526 
    26                 /** 
    27                  * Fires before the loading of the Groups directory index. 
    28                  * 
    29                  * @since 1.1.0 
    30                  */ 
    31                 do_action( 'groups_directory_groups_setup' ); 
     27        bp_update_is_directory( true, 'groups' ); 
    3228 
    33                 /** 
    34                  * Filters the template to load for the Groups directory index. 
    35                  * 
    36                  * @since 1.0.0 
    37                  * 
    38                  * @param string $value Path to the groups directory index template to load. 
    39                  */ 
    40                 bp_core_load_template( apply_filters( 'groups_template_directory_groups', 'groups/index' ) ); 
    41         } 
     29        /** 
     30         * Fires before the loading of the Groups directory index. 
     31         * 
     32         * @since 1.1.0 
     33         */ 
     34        do_action( 'groups_directory_groups_setup' ); 
     35 
     36        /** 
     37         * Filters the template to load for the Groups directory index. 
     38         * 
     39         * @since 1.0.0 
     40         * 
     41         * @param string $value Path to the groups directory index template to load. 
     42         */ 
     43        bp_core_load_template( apply_filters( 'groups_template_directory_groups', 'groups/index' ) ); 
    4244} 
    4345add_action( 'bp_screens', 'groups_directory_groups_setup', 2 ); 
    4446 
     
    4850 * @since 1.0.0 
    4951 */ 
    5052function groups_screen_my_groups() { 
    51  
    5253        /** 
    5354         * Fires before the loading of the My Groups page. 
    5455         * 
     
    7273 * @since 1.0.0 
    7374 */ 
    7475function groups_screen_group_invites() { 
    75         $group_id = (int)bp_action_variable( 1 ); 
    76  
    77         if ( bp_is_action_variable( 'accept' ) && is_numeric( $group_id ) ) { 
    78                 // Check the nonce. 
    79                 if ( !check_admin_referer( 'groups_accept_invite' ) ) 
    80                         return false; 
    81  
    82                 if ( !groups_accept_invite( bp_loggedin_user_id(), $group_id ) ) { 
    83                         bp_core_add_message( __('Group invite could not be accepted', 'buddypress'), 'error' ); 
    84                 } else { 
    85                         // Record this in activity streams. 
    86                         $group = groups_get_group( $group_id ); 
    87  
    88                         bp_core_add_message( sprintf( __( 'Group invite accepted. Visit %s.', 'buddypress' ), bp_get_group_link( $group ) ) ); 
    89  
    90                         groups_record_activity( array( 
    91                                 'type'    => 'joined_group', 
    92                                 'item_id' => $group->id 
    93                         ) ); 
    94                 } 
    95  
    96                 if ( isset( $_GET['redirect_to'] ) ) { 
    97                         $redirect_to = urldecode( $_GET['redirect_to'] ); 
    98                 } else { 
    99                         $redirect_to = trailingslashit( bp_loggedin_user_domain() . bp_get_groups_slug() . '/' . bp_current_action() ); 
    100                 } 
    101  
    102                 bp_core_redirect( $redirect_to ); 
    103  
    104         } elseif ( bp_is_action_variable( 'reject' ) && is_numeric( $group_id ) ) { 
    105                 // Check the nonce. 
    106                 if ( !check_admin_referer( 'groups_reject_invite' ) ) 
    107                         return false; 
    108  
    109                 if ( !groups_reject_invite( bp_loggedin_user_id(), $group_id ) ) { 
    110                         bp_core_add_message( __( 'Group invite could not be rejected', 'buddypress' ), 'error' ); 
    111                 } else { 
    112                         bp_core_add_message( __( 'Group invite rejected', 'buddypress' ) ); 
    113                 } 
    114  
    115                 if ( isset( $_GET['redirect_to'] ) ) { 
    116                         $redirect_to = urldecode( $_GET['redirect_to'] ); 
    117                 } else { 
    118                         $redirect_to = trailingslashit( bp_loggedin_user_domain() . bp_get_groups_slug() . '/' . bp_current_action() ); 
    119                 } 
    120  
    121                 bp_core_redirect( $redirect_to ); 
    122         } 
    123  
    124         /** 
    125          * Fires before the loading of a users Groups > Invites template. 
    126          * 
    127          * @since 1.0.0 
    128          * 
    129          * @param int $group_id ID of the group being displayed 
    130          */ 
    131         do_action( 'groups_screen_group_invites', $group_id ); 
    132  
    133         /** 
    134          * Filters the template to load for a users Groups > Invites page. 
    135          * 
    136          * @since 1.0.0 
    137          * 
    138          * @param string $value Path to a users Groups > Invites page template. 
    139          */ 
    140         bp_core_load_template( apply_filters( 'groups_template_group_invites', 'members/single/home' ) ); 
     76        new BP_Groups_Screen_User_Invites; 
    14177} 
    14278 
    14379/** 
     
    14682 * @since 1.0.0 
    14783 */ 
    14884function groups_screen_group_home() { 
    149  
    15085        if ( ! bp_is_single_item() ) { 
    151                 return false; 
     86                return; 
    15287        } 
    15388 
    15489        /** 
     
    169104} 
    170105 
    171106/** 
    172  * This screen function handles actions related to group forums. 
    173  * 
    174  * @since 1.0.0 
    175  */ 
    176 function groups_screen_group_forum() { 
    177  
    178         if ( !bp_is_active( 'forums' ) || !bp_forums_is_installed_correctly() ) 
    179                 return false; 
    180  
    181         if ( bp_action_variable( 0 ) && !bp_is_action_variable( 'topic', 0 ) ) { 
    182                 bp_do_404(); 
    183                 return; 
    184         } 
    185  
    186         $bp = buddypress(); 
    187  
    188         if ( !$bp->groups->current_group->user_has_access ) { 
    189                 bp_core_no_access(); 
    190                 return; 
    191         } 
    192  
    193         if ( ! bp_is_single_item() ) 
    194                 return false; 
    195  
    196         // Fetch the details we need. 
    197         $topic_slug     = (string)bp_action_variable( 1 ); 
    198         $topic_id       = bp_forums_get_topic_id_from_slug( $topic_slug ); 
    199         $forum_id       = groups_get_groupmeta( $bp->groups->current_group->id, 'forum_id' ); 
    200         $user_is_banned = false; 
    201  
    202         if ( !bp_current_user_can( 'bp_moderate' ) && groups_is_user_banned( bp_loggedin_user_id(), $bp->groups->current_group->id ) ) 
    203                 $user_is_banned = true; 
    204  
    205         if ( !empty( $topic_slug ) && !empty( $topic_id ) ) { 
    206  
    207                 // Posting a reply. 
    208                 if ( !$user_is_banned && !bp_action_variable( 2 ) && isset( $_POST['submit_reply'] ) ) { 
    209                         // Check the nonce. 
    210                         check_admin_referer( 'bp_forums_new_reply' ); 
    211  
    212                         // Auto join this user if they are not yet a member of this group. 
    213                         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 ) ) { 
    214                                 groups_join_group( $bp->groups->current_group->id, bp_loggedin_user_id() ); 
    215                         } 
    216  
    217                         $topic_page = isset( $_GET['topic_page'] ) ? $_GET['topic_page'] : false; 
    218  
    219                         // Don't allow reply flooding. 
    220                         if ( bp_forums_reply_exists( $_POST['reply_text'], $topic_id, bp_loggedin_user_id() ) ) { 
    221                                 bp_core_add_message( __( 'It looks like you\'ve already said that!', 'buddypress' ), 'error' ); 
    222                         } else { 
    223                                 if ( !$post_id = groups_new_group_forum_post( $_POST['reply_text'], $topic_id, $topic_page ) ) { 
    224                                         bp_core_add_message( __( 'There was an error when replying to that topic', 'buddypress'), 'error' ); 
    225                                 } else { 
    226                                         bp_core_add_message( __( 'Your reply was posted successfully', 'buddypress') ); 
    227                                 } 
    228                         } 
    229  
    230                         $query_vars = isset( $_SERVER['QUERY_STRING'] ) ? '?' . $_SERVER['QUERY_STRING'] : ''; 
    231  
    232                         $redirect = bp_get_group_permalink( groups_get_current_group() ) . 'forum/topic/' . $topic_slug . '/' . $query_vars; 
    233  
    234                         if ( !empty( $post_id ) ) { 
    235                                 $redirect .= '#post-' . $post_id; 
    236                         } 
    237  
    238                         bp_core_redirect( $redirect ); 
    239                 } 
    240  
    241                 // Sticky a topic. 
    242                 elseif ( bp_is_action_variable( 'stick', 2 ) && ( bp_is_item_admin() || bp_is_item_mod() ) ) { 
    243                         // Check the nonce. 
    244                         check_admin_referer( 'bp_forums_stick_topic' ); 
    245  
    246                         if ( !bp_forums_sticky_topic( array( 'topic_id' => $topic_id ) ) ) { 
    247                                 bp_core_add_message( __( 'There was an error when making that topic a sticky', 'buddypress' ), 'error' ); 
    248                         } else { 
    249                                 bp_core_add_message( __( 'The topic was made sticky successfully', 'buddypress' ) ); 
    250                         } 
    251  
    252                         /** 
    253                          * Fires after a group forum topic has been stickied. 
    254                          * 
    255                          * @since 1.1.0 
    256                          * 
    257                          * @param int $topic_id ID of the topic being stickied. 
    258                          */ 
    259                         do_action( 'groups_stick_forum_topic', $topic_id ); 
    260                         bp_core_redirect( wp_get_referer() ); 
    261                 } 
    262  
    263                 // Un-Sticky a topic. 
    264                 elseif ( bp_is_action_variable( 'unstick', 2 ) && ( bp_is_item_admin() || bp_is_item_mod() ) ) { 
    265                         // Check the nonce. 
    266                         check_admin_referer( 'bp_forums_unstick_topic' ); 
    267  
    268                         if ( !bp_forums_sticky_topic( array( 'topic_id' => $topic_id, 'mode' => 'unstick' ) ) ) { 
    269                                 bp_core_add_message( __( 'There was an error when unsticking that topic', 'buddypress'), 'error' ); 
    270                         } else { 
    271                                 bp_core_add_message( __( 'The topic was unstuck successfully', 'buddypress') ); 
    272                         } 
    273  
    274                         /** 
    275                          * Fires after a group forum topic has been un-stickied. 
    276                          * 
    277                          * @since 1.1.0 
    278                          * 
    279                          * @param int $topic_id ID of the topic being un-stickied. 
    280                          */ 
    281                         do_action( 'groups_unstick_forum_topic', $topic_id ); 
    282                         bp_core_redirect( wp_get_referer() ); 
    283                 } 
    284  
    285                 // Close a topic. 
    286                 elseif ( bp_is_action_variable( 'close', 2 ) && ( bp_is_item_admin() || bp_is_item_mod() ) ) { 
    287                         // Check the nonce. 
    288                         check_admin_referer( 'bp_forums_close_topic' ); 
    289  
    290                         if ( !bp_forums_openclose_topic( array( 'topic_id' => $topic_id ) ) ) { 
    291                                 bp_core_add_message( __( 'There was an error when closing that topic', 'buddypress'), 'error' ); 
    292                         } else { 
    293                                 bp_core_add_message( __( 'The topic was closed successfully', 'buddypress') ); 
    294                         } 
    295  
    296                         /** 
    297                          * Fires after a group forum topic has been closed. 
    298                          * 
    299                          * @since 1.1.0 
    300                          * 
    301                          * @param int $topic_id ID of the topic being closed. 
    302                          */ 
    303                         do_action( 'groups_close_forum_topic', $topic_id ); 
    304                         bp_core_redirect( wp_get_referer() ); 
    305                 } 
    306  
    307                 // Open a topic. 
    308                 elseif ( bp_is_action_variable( 'open', 2 ) && ( bp_is_item_admin() || bp_is_item_mod() ) ) { 
    309                         // Check the nonce. 
    310                         check_admin_referer( 'bp_forums_open_topic' ); 
    311  
    312                         if ( !bp_forums_openclose_topic( array( 'topic_id' => $topic_id, 'mode' => 'open' ) ) ) { 
    313                                 bp_core_add_message( __( 'There was an error when opening that topic', 'buddypress'), 'error' ); 
    314                         } else { 
    315                                 bp_core_add_message( __( 'The topic was opened successfully', 'buddypress') ); 
    316                         } 
    317  
    318                         /** 
    319                          * Fires after a group forum topic has been opened. 
    320                          * 
    321                          * @since 1.1.0 
    322                          * 
    323                          * @param int $topic_id ID of the topic being opened. 
    324                          */ 
    325                         do_action( 'groups_open_forum_topic', $topic_id ); 
    326                         bp_core_redirect( wp_get_referer() ); 
    327                 } 
    328  
    329                 // Delete a topic. 
    330                 elseif ( empty( $user_is_banned ) && bp_is_action_variable( 'delete', 2 ) && !bp_action_variable( 3 ) ) { 
    331                         // Fetch the topic. 
    332                         $topic = bp_forums_get_topic_details( $topic_id ); 
    333  
    334                         /* Check the logged in user can delete this topic */ 
    335                         if ( ! bp_is_item_admin() && ! bp_is_item_mod() && ( (int) bp_loggedin_user_id() != (int) $topic->topic_poster ) ) { 
    336                                 bp_core_redirect( wp_get_referer() ); 
    337                         } 
    338  
    339                         // Check the nonce. 
    340                         check_admin_referer( 'bp_forums_delete_topic' ); 
    341  
    342                         /** 
    343                          * Fires before a group forum topic is deleted. 
    344                          * 
    345                          * @since 1.5.0 
    346                          * 
    347                          * @param int $topic_id ID of the topic being deleted. 
    348                          */ 
    349                         do_action( 'groups_before_delete_forum_topic', $topic_id ); 
    350  
    351                         if ( !groups_delete_group_forum_topic( $topic_id ) ) { 
    352                                 bp_core_add_message( __( 'There was an error deleting the topic', 'buddypress' ), 'error' ); 
    353                         } else { 
    354                                 bp_core_add_message( __( 'The topic was deleted successfully', 'buddypress' ) ); 
    355                         } 
    356  
    357                         /** 
    358                          * Fires after a group forum topic has been deleted. 
    359                          * 
    360                          * @since 1.5.0 
    361                          * 
    362                          * @param int $topic_id ID of the topic being deleted. 
    363                          */ 
    364                         do_action( 'groups_delete_forum_topic', $topic_id ); 
    365                         bp_core_redirect( bp_get_group_permalink( groups_get_current_group() ) . 'forum/' ); 
    366                 } 
    367  
    368                 // Editing a topic. 
    369                 elseif ( empty( $user_is_banned ) && bp_is_action_variable( 'edit', 2 ) && !bp_action_variable( 3 ) ) { 
    370                         // Fetch the topic. 
    371                         $topic = bp_forums_get_topic_details( $topic_id ); 
    372  
    373                         // Check the logged in user can edit this topic. 
    374                         if ( ! bp_is_item_admin() && ! bp_is_item_mod() && ( (int) bp_loggedin_user_id() != (int) $topic->topic_poster ) ) { 
    375                                 bp_core_redirect( wp_get_referer() ); 
    376                         } 
    377  
    378                         if ( isset( $_POST['save_changes'] ) ) { 
    379                                 // Check the nonce. 
    380                                 check_admin_referer( 'bp_forums_edit_topic' ); 
    381  
    382                                 $topic_tags = !empty( $_POST['topic_tags'] ) ? $_POST['topic_tags'] : false; 
    383  
    384                                 if ( !groups_update_group_forum_topic( $topic_id, $_POST['topic_title'], $_POST['topic_text'], $topic_tags ) ) { 
    385                                         bp_core_add_message( __( 'There was an error when editing that topic', 'buddypress'), 'error' ); 
    386                                 } else { 
    387                                         bp_core_add_message( __( 'The topic was edited successfully', 'buddypress') ); 
    388                                 } 
    389  
    390                                 /** 
    391                                  * Fires after a group forum topic has been edited. 
    392                                  * 
    393                                  * @since 1.1.0 
    394                                  * 
    395                                  * @param int $topic_id ID of the topic being edited. 
    396                                  */ 
    397                                 do_action( 'groups_edit_forum_topic', $topic_id ); 
    398                                 bp_core_redirect( bp_get_group_permalink( groups_get_current_group() ) . 'forum/topic/' . $topic_slug . '/' ); 
    399                         } 
    400  
    401                         /** 
    402                          * Filters the template to load for a topic edit page. 
    403                          * 
    404                          * @since 1.1.0 
    405                          * 
    406                          * @param string $value Path to a topic edit template. 
    407                          */ 
    408                         bp_core_load_template( apply_filters( 'groups_template_group_forum_topic_edit', 'groups/single/home' ) ); 
    409  
    410                 // Delete a post. 
    411                 } elseif ( empty( $user_is_banned ) && bp_is_action_variable( 'delete', 2 ) && $post_id = bp_action_variable( 4 ) ) { 
    412                         // Fetch the post. 
    413                         $post = bp_forums_get_post( $post_id ); 
    414  
    415                         // Check the logged in user can edit this topic. 
    416                         if ( ! bp_is_item_admin() && ! bp_is_item_mod() && ( (int) bp_loggedin_user_id() != (int) $post->poster_id ) ) { 
    417                                 bp_core_redirect( wp_get_referer() ); 
    418                         } 
    419  
    420                         // Check the nonce. 
    421                         check_admin_referer( 'bp_forums_delete_post' ); 
    422  
    423                         /** 
    424                          * Fires before the deletion of a group forum post. 
    425                          * 
    426                          * @since 1.5.0 
    427                          * 
    428                          * @param int $post_id ID of the forum post being deleted. 
    429                          */ 
    430                         do_action( 'groups_before_delete_forum_post', $post_id ); 
    431  
    432                         if ( !groups_delete_group_forum_post( $post_id ) ) { 
    433                                 bp_core_add_message( __( 'There was an error deleting that post', 'buddypress'), 'error' ); 
    434                         } else { 
    435                                 bp_core_add_message( __( 'The post was deleted successfully', 'buddypress') ); 
    436                         } 
    437  
    438                         /** 
    439                          * Fires after the deletion of a group forum post. 
    440                          * 
    441                          * @since 1.1.0 
    442                          * 
    443                          * @param int $post_id ID of the forum post being deleted. 
    444                          */ 
    445                         do_action( 'groups_delete_forum_post', $post_id ); 
    446                         bp_core_redirect( wp_get_referer() ); 
    447  
    448                 // Editing a post. 
    449                 } elseif ( empty( $user_is_banned ) && bp_is_action_variable( 'edit', 2 ) && $post_id = bp_action_variable( 4 ) ) { 
    450  
    451                         // Fetch the post. 
    452                         $post = bp_forums_get_post( $post_id ); 
    453  
    454                         // Check the logged in user can edit this topic. 
    455                         if ( ! bp_is_item_admin() && ! bp_is_item_mod() && ( (int) bp_loggedin_user_id() != (int) $post->poster_id ) ) { 
    456                                 bp_core_redirect( wp_get_referer() ); 
    457                         } 
    458  
    459                         if ( isset( $_POST['save_changes'] ) ) { 
    460                                 // Check the nonce. 
    461                                 check_admin_referer( 'bp_forums_edit_post' ); 
    462  
    463                                 $topic_page = isset( $_GET['topic_page'] ) ? $_GET['topic_page'] : false; 
    464  
    465                                 if ( !$post_id = groups_update_group_forum_post( $post_id, $_POST['post_text'], $topic_id, $topic_page ) ) { 
    466                                         bp_core_add_message( __( 'There was an error when editing that post', 'buddypress'), 'error' ); 
    467                                 } else { 
    468                                         bp_core_add_message( __( 'The post was edited successfully', 'buddypress') ); 
    469                                 } 
    470  
    471                                 if ( $_SERVER['QUERY_STRING'] ) { 
    472                                         $query_vars = '?' . $_SERVER['QUERY_STRING']; 
    473                                 } 
    474  
    475                                 /** 
    476                                  * Fires after the editing of a group forum post. 
    477                                  * 
    478                                  * @since 1.1.0 
    479                                  * 
    480                                  * @param int $post_id ID of the forum post being edited. 
    481                                  */ 
    482                                 do_action( 'groups_edit_forum_post', $post_id ); 
    483                                 bp_core_redirect( bp_get_group_permalink( $bp->groups->current_group ) . 'forum/topic/' . $topic_slug . '/' . $query_vars . '#post-' . $post_id ); 
    484                         } 
    485  
    486                         /** This filter is documented in bp-groups/bp-groups-screens.php */ 
    487                         bp_core_load_template( apply_filters( 'groups_template_group_forum_topic_edit', 'groups/single/home' ) ); 
    488  
    489                 // Standard topic display. 
    490                 } else { 
    491                         if ( !empty( $user_is_banned ) ) { 
    492                                 bp_core_add_message( __( "You have been banned from this group.", 'buddypress' ) ); 
    493                         } 
    494  
    495                         /** 
    496                          * Filters the template to load for a topic page. 
    497                          * 
    498                          * @since 1.1.0 
    499                          * 
    500                          * @param string $value Path to a topic template. 
    501                          */ 
    502                         bp_core_load_template( apply_filters( 'groups_template_group_forum_topic', 'groups/single/home' ) ); 
    503                 } 
    504  
    505         // Forum topic does not exist. 
    506         } elseif ( !empty( $topic_slug ) && empty( $topic_id ) ) { 
    507                 bp_do_404(); 
    508                 return; 
    509  
    510         } else { 
    511                 // Posting a topic. 
    512                 if ( isset( $_POST['submit_topic'] ) && bp_is_active( 'forums' ) ) { 
    513  
    514                         // Check the nonce. 
    515                         check_admin_referer( 'bp_forums_new_topic' ); 
    516  
    517                         if ( $user_is_banned ) { 
    518                                 $error_message = __( "You have been banned from this group.", 'buddypress' ); 
    519  
    520                         } 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 ) ) { 
    521                                 // Auto join this user if they are not yet a member of this group. 
    522                                 groups_join_group( $bp->groups->current_group->id, bp_loggedin_user_id() ); 
    523                         } 
    524  
    525                         if ( empty( $_POST['topic_title'] ) ) { 
    526                                 $error_message = __( 'Please provide a title for your forum topic.', 'buddypress' ); 
    527                         } elseif ( empty( $_POST['topic_text'] ) ) { 
    528                                 $error_message = __( 'Forum posts cannot be empty. Please enter some text.', 'buddypress' ); 
    529                         } 
    530  
    531                         if ( empty( $forum_id ) ) { 
    532                                 $error_message = __( 'This group does not have a forum setup yet.', 'buddypress' ); 
    533                         } 
    534  
    535                         if ( isset( $error_message ) ) { 
    536                                 bp_core_add_message( $error_message, 'error' ); 
    537                                 $redirect = bp_get_group_permalink( $bp->groups->current_group ) . 'forum'; 
    538                         } else { 
    539                                 if ( !$topic = groups_new_group_forum_topic( $_POST['topic_title'], $_POST['topic_text'], $_POST['topic_tags'], $forum_id ) ) { 
    540                                         bp_core_add_message( __( 'There was an error when creating the topic', 'buddypress'), 'error' ); 
    541                                         $redirect = bp_get_group_permalink( $bp->groups->current_group ) . 'forum'; 
    542                                 } else { 
    543                                         bp_core_add_message( __( 'The topic was created successfully', 'buddypress') ); 
    544                                         $redirect = bp_get_group_permalink( $bp->groups->current_group ) . 'forum/topic/' . $topic->topic_slug . '/'; 
    545                                 } 
    546                         } 
    547  
    548                         bp_core_redirect( $redirect ); 
    549                 } 
    550  
    551                 /** 
    552                  * Fires at the end of the group forum screen loading process. 
    553                  * 
    554                  * @since 1.0.0 
    555                  * 
    556                  * @param int $topic_id ID of the topic being displayed. 
    557                  * @param int $forum_id ID of the forum being displayed. 
    558                  */ 
    559                 do_action( 'groups_screen_group_forum', $topic_id, $forum_id ); 
    560  
    561                 /** 
    562                  * Filters the template to load for a group forum page. 
    563                  * 
    564                  * @since 1.0.0 
    565                  * 
    566                  * @param string $value Path to a group forum template. 
    567                  */ 
    568                 bp_core_load_template( apply_filters( 'groups_template_group_forum', 'groups/single/home' ) ); 
    569         } 
    570 } 
    571  
    572 /** 
    573107 * Handle the display of a group's Members page. 
    574108 * 
    575109 * @since 1.0.0 
    576110 */ 
    577111function groups_screen_group_members() { 
    578  
    579         if ( !bp_is_single_item() ) 
    580                 return false; 
    581  
    582         $bp = buddypress(); 
     112        if ( ! bp_is_single_item() ) { 
     113                return; 
     114        } 
    583115 
    584116        // Refresh the group member count meta. 
    585         groups_update_groupmeta( $bp->groups->current_group->id, 'total_member_count', groups_get_total_member_count( $bp->groups->current_group->id ) ); 
     117        groups_update_groupmeta( bp_get_current_group_id(), 'total_member_count', groups_get_total_member_count( bp_get_current_group_id() ) ); 
    586118 
    587119        /** 
    588120         * Fires before the loading of a group's Members page. 
     
    591123         * 
    592124         * @param int $id ID of the group whose members are being displayed. 
    593125         */ 
    594         do_action( 'groups_screen_group_members', $bp->groups->current_group->id ); 
     126        do_action( 'groups_screen_group_members', bp_get_current_group_id() ); 
    595127 
    596128        /** 
    597129         * Filters the template to load for a group's Members page. 
     
    609141 * @since 1.0.0 
    610142 */ 
    611143function groups_screen_group_invite() { 
    612  
    613         if ( !bp_is_single_item() ) 
    614                 return false; 
    615  
    616         $bp = buddypress(); 
    617  
    618         if ( bp_is_action_variable( 'send', 0 ) ) { 
    619  
    620                 if ( !check_admin_referer( 'groups_send_invites', '_wpnonce_send_invites' ) ) 
    621                         return false; 
    622  
    623                 if ( !empty( $_POST['friends'] ) ) { 
    624                         foreach( (array) $_POST['friends'] as $friend ) { 
    625                                 groups_invite_user( array( 'user_id' => $friend, 'group_id' => $bp->groups->current_group->id ) ); 
    626                         } 
    627                 } 
    628  
    629                 // Send the invites. 
    630                 groups_send_invites( bp_loggedin_user_id(), $bp->groups->current_group->id ); 
    631                 bp_core_add_message( __('Group invites sent.', 'buddypress') ); 
    632  
    633                 /** 
    634                  * Fires after the sending of a group invite inside the group's Send Invites page. 
    635                  * 
    636                  * @since 1.0.0 
    637                  * 
    638                  * @param int $id ID of the group whose members are being displayed. 
    639                  */ 
    640                 do_action( 'groups_screen_group_invite', $bp->groups->current_group->id ); 
    641                 bp_core_redirect( bp_get_group_permalink( $bp->groups->current_group ) ); 
    642  
    643         } elseif ( !bp_action_variable( 0 ) ) { 
    644  
    645                 /** 
    646                  * Filters the template to load for a group's Send Invites page. 
    647                  * 
    648                  * @since 1.0.0 
    649                  * 
    650                  * @param string $value Path to a group's Send Invites template. 
    651                  */ 
    652                 bp_core_load_template( apply_filters( 'groups_template_group_invite', 'groups/single/home' ) ); 
    653  
    654         } else { 
    655                 bp_do_404(); 
     144        if ( ! bp_is_single_item() ) { 
     145                return; 
    656146        } 
     147 
     148        new BP_Groups_Screen_Send_Invites; 
    657149} 
    658150 
    659151/** 
     
    674166        } 
    675167 
    676168        if ( ! check_admin_referer( 'groups_invite_uninvite_user' ) ) { 
    677                 return false; 
    678         } 
    679  
    680         $friend_id = intval( bp_action_variable( 1 ) ); 
    681         $group_id  = bp_get_current_group_id(); 
    682         $message   = __( 'Invite successfully removed', 'buddypress' ); 
    683         $redirect  = wp_get_referer(); 
    684         $error     = false; 
    685  
    686         if ( ! bp_groups_user_can_send_invites( $group_id ) ) { 
    687                 $message = __( 'You are not allowed to send or remove invites', 'buddypress' ); 
    688                 $error = 'error'; 
    689         } elseif ( groups_check_for_membership_request( $friend_id, $group_id ) ) { 
    690                 $message = __( 'The member requested to join the group', 'buddypress' ); 
    691                 $error = 'error'; 
    692         } elseif ( ! groups_uninvite_user( $friend_id, $group_id ) ) { 
    693                 $message = __( 'There was an error removing the invite', 'buddypress' ); 
    694                 $error = 'error'; 
     169                return; 
    695170        } 
    696171 
    697         bp_core_add_message( $message, $error ); 
    698         bp_core_redirect( $redirect ); 
     172        new BP_Groups_Screen_Remove_Invites; 
    699173} 
    700174add_action( 'bp_screens', 'groups_remove_group_invite' ); 
    701175 
     
    705179 * @since 1.0.0 
    706180 */ 
    707181function groups_screen_group_request_membership() { 
    708  
    709         if ( !is_user_logged_in() ) 
    710                 return false; 
    711  
    712         $bp = buddypress(); 
    713  
    714         if ( 'private' != $bp->groups->current_group->status ) 
    715                 return false; 
    716  
    717         // If the user is already invited, accept invitation. 
    718         if ( groups_check_user_has_invite( bp_loggedin_user_id(), $bp->groups->current_group->id ) ) { 
    719                 if ( groups_accept_invite( bp_loggedin_user_id(), $bp->groups->current_group->id ) ) 
    720                         bp_core_add_message( __( 'Group invite accepted', 'buddypress' ) ); 
    721                 else 
    722                         bp_core_add_message( __( 'There was an error accepting the group invitation. Please try again.', 'buddypress' ), 'error' ); 
    723                 bp_core_redirect( bp_get_group_permalink( $bp->groups->current_group ) ); 
     182        if ( ! is_user_logged_in() ) { 
     183                return; 
    724184        } 
    725185 
    726         // If the user has submitted a request, send it. 
    727         if ( isset( $_POST['group-request-send']) ) { 
    728  
    729                 // Check the nonce. 
    730                 if ( !check_admin_referer( 'groups_request_membership' ) ) 
    731                         return false; 
    732  
    733                 if ( !groups_send_membership_request( bp_loggedin_user_id(), $bp->groups->current_group->id ) ) { 
    734                         bp_core_add_message( __( 'There was an error sending your group membership request. Please try again.', 'buddypress' ), 'error' ); 
    735                 } else { 
    736                         bp_core_add_message( __( 'Your membership request was sent to the group administrator successfully. You will be notified when the group administrator responds to your request.', 'buddypress' ) ); 
    737                 } 
    738                 bp_core_redirect( bp_get_group_permalink( $bp->groups->current_group ) ); 
     186        if ( 'private' !== buddypress()->groups->current_group->status ) { 
     187                return; 
    739188        } 
    740189 
    741         /** 
    742          * Fires before the loading of a group's Request Memebership page. 
    743          * 
    744          * @since 1.0.0 
    745          * 
    746          * @param int $id ID of the group currently being displayed. 
    747          */ 
    748         do_action( 'groups_screen_group_request_membership', $bp->groups->current_group->id ); 
    749  
    750         /** 
    751          * Filters the template to load for a group's Request Membership page. 
    752          * 
    753          * @since 1.0.0 
    754          * 
    755          * @param string $value Path to a group's Request Membership template. 
    756          */ 
    757         bp_core_load_template( apply_filters( 'groups_template_group_request_membership', 'groups/single/home' ) ); 
     190        new BP_Groups_Screen_Request_Membership; 
    758191} 
    759192 
    760193/** 
     
    763196 * @since 2.4.0 
    764197 */ 
    765198function groups_screen_group_activity() { 
    766  
    767199        if ( ! bp_is_single_item() ) { 
    768                 return false; 
     200                return; 
    769201        } 
    770202 
    771203        /** 
     
    791223 * @since 1.2.0 
    792224 */ 
    793225function groups_screen_group_activity_permalink() { 
    794  
    795         if ( !bp_is_groups_component() || !bp_is_active( 'activity' ) || ( bp_is_active( 'activity' ) && !bp_is_current_action( bp_get_activity_slug() ) ) || !bp_action_variable( 0 ) ) 
    796                 return false; 
     226        if ( ! bp_is_groups_component() || ! bp_is_active( 'activity' ) || ( bp_is_active( 'activity' ) && ! bp_is_current_action( bp_get_activity_slug() ) ) || ! bp_action_variable( 0 ) ) { 
     227                return; 
     228        } 
    797229 
    798230        buddypress()->is_single_item = true; 
    799231 
     
    808240 * @since 1.0.0 
    809241 */ 
    810242function groups_screen_group_admin() { 
    811         if ( !bp_is_groups_component() || !bp_is_current_action( 'admin' ) ) 
    812                 return false; 
     243        if ( ! bp_is_groups_component() || ! bp_is_current_action( 'admin' ) ) { 
     244                return; 
     245        } 
    813246 
    814         if ( bp_action_variables() ) 
    815                 return false; 
     247        if ( bp_action_variables() ) { 
     248                return; 
     249        } 
    816250 
    817251        bp_core_redirect( bp_get_group_permalink( groups_get_current_group() ) . 'admin/edit-details/' ); 
    818252} 
     
    823257 * @since 1.0.0 
    824258 */ 
    825259function groups_screen_group_admin_edit_details() { 
     260        if ( 'edit-details' !== bp_get_group_current_admin_tab() ) { 
     261                return; 
     262        } 
    826263 
    827         if ( 'edit-details' != bp_get_group_current_admin_tab() ) 
    828                 return false; 
    829  
    830         if ( bp_is_item_admin() ) { 
    831  
    832                 $bp = buddypress(); 
    833  
    834                 // If the edit form has been submitted, save the edited details. 
    835                 if ( isset( $_POST['save'] ) ) { 
    836                         // Check the nonce. 
    837                         if ( !check_admin_referer( 'groups_edit_group_details' ) ) 
    838                                 return false; 
    839  
    840                         $group_notify_members = isset( $_POST['group-notify-members'] ) ? (int) $_POST['group-notify-members'] : 0; 
    841  
    842                         // Name and description are required and may not be empty. 
    843                         if ( empty( $_POST['group-name'] ) || empty( $_POST['group-desc'] ) ) { 
    844                                 bp_core_add_message( __( 'Groups must have a name and a description. Please try again.', 'buddypress' ), 'error' ); 
    845                         } elseif ( ! groups_edit_base_group_details( array( 
    846                                 'group_id'       => $_POST['group-id'], 
    847                                 'name'           => $_POST['group-name'], 
    848                                 'slug'           => null, // @TODO: Add to settings pane? If yes, editable by site admin only, or allow group admins to do this? 
    849                                 'description'    => $_POST['group-desc'], 
    850                                 'notify_members' => $group_notify_members, 
    851                         ) ) ) { 
    852                                 bp_core_add_message( __( 'There was an error updating group details. Please try again.', 'buddypress' ), 'error' ); 
    853                         } else { 
    854                                 bp_core_add_message( __( 'Group details were successfully updated.', 'buddypress' ) ); 
    855                         } 
    856  
    857                         /** 
    858                          * Fires before the redirect if a group details has been edited and saved. 
    859                          * 
    860                          * @since 1.0.0 
    861                          * 
    862                          * @param int $id ID of the group that was edited. 
    863                          */ 
    864                         do_action( 'groups_group_details_edited', $bp->groups->current_group->id ); 
    865  
    866                         bp_core_redirect( bp_get_group_permalink( groups_get_current_group() ) . 'admin/edit-details/' ); 
    867                 } 
    868  
    869                 /** 
    870                  * Fires before the loading of the group admin/edit-details page template. 
    871                  * 
    872                  * @since 1.0.0 
    873                  * 
    874                  * @param int $id ID of the group that is being displayed. 
    875                  */ 
    876                 do_action( 'groups_screen_group_admin_edit_details', $bp->groups->current_group->id ); 
    877  
    878                 /** 
    879                  * Filters the template to load for a group's admin/edit-details page. 
    880                  * 
    881                  * @since 1.0.0 
    882                  * 
    883                  * @param string $value Path to a group's admin/edit-details template. 
    884                  */ 
    885                 bp_core_load_template( apply_filters( 'groups_template_group_admin', 'groups/single/home' ) ); 
     264        if ( ! bp_is_item_admin() ) { 
     265                return; 
    886266        } 
     267 
     268        new BP_Groups_Screen_Admin_Edit_Details; 
    887269} 
    888270add_action( 'bp_screens', 'groups_screen_group_admin_edit_details' ); 
    889271 
     
    893275 * @since 1.0.0 
    894276 */ 
    895277function groups_screen_group_admin_settings() { 
    896  
    897         if ( 'group-settings' != bp_get_group_current_admin_tab() ) 
    898                 return false; 
    899  
    900         if ( ! bp_is_item_admin() ) 
    901                 return false; 
    902  
    903         $bp = buddypress(); 
    904  
    905         // If the edit form has been submitted, save the edited details. 
    906         if ( isset( $_POST['save'] ) ) { 
    907                 $enable_forum   = ( isset($_POST['group-show-forum'] ) ) ? 1 : 0; 
    908  
    909                 // Checked against a whitelist for security. 
    910                 /** This filter is documented in bp-groups/bp-groups-admin.php */ 
    911                 $allowed_status = apply_filters( 'groups_allowed_status', array( 'public', 'private', 'hidden' ) ); 
    912                 $status         = ( in_array( $_POST['group-status'], (array) $allowed_status ) ) ? $_POST['group-status'] : 'public'; 
    913  
    914                 // Checked against a whitelist for security. 
    915                 /** This filter is documented in bp-groups/bp-groups-admin.php */ 
    916                 $allowed_invite_status = apply_filters( 'groups_allowed_invite_status', array( 'members', 'mods', 'admins' ) ); 
    917                 $invite_status         = isset( $_POST['group-invite-status'] ) && in_array( $_POST['group-invite-status'], (array) $allowed_invite_status ) ? $_POST['group-invite-status'] : 'members'; 
    918  
    919                 // Check the nonce. 
    920                 if ( !check_admin_referer( 'groups_edit_group_settings' ) ) 
    921                         return false; 
    922  
    923                 /* 
    924                  * Save group types. 
    925                  * 
    926                  * Ensure we keep types that have 'show_in_create_screen' set to false. 
    927                  */ 
    928                 $current_types = bp_groups_get_group_type( bp_get_current_group_id(), false ); 
    929                 $current_types = array_intersect( bp_groups_get_group_types( array( 'show_in_create_screen' => false ) ), (array) $current_types ); 
    930                 if ( isset( $_POST['group-types'] ) ) { 
    931                         $current_types = array_merge( $current_types, $_POST['group-types'] ); 
    932  
    933                         // Set group types. 
    934                         bp_groups_set_group_type( bp_get_current_group_id(), $current_types ); 
    935  
    936                 // No group types checked, so this means we want to wipe out all group types. 
    937                 } else { 
    938                         /* 
    939                          * Passing a blank string will wipe out all types for the group. 
    940                          * 
    941                          * Ensure we keep types that have 'show_in_create_screen' set to false. 
    942                          */ 
    943                         $current_types = empty( $current_types ) ? '' : $current_types; 
    944  
    945                         // Set group types. 
    946                         bp_groups_set_group_type( bp_get_current_group_id(), $current_types ); 
    947                 } 
    948  
    949                 if ( !groups_edit_group_settings( $_POST['group-id'], $enable_forum, $status, $invite_status ) ) { 
    950                         bp_core_add_message( __( 'There was an error updating group settings. Please try again.', 'buddypress' ), 'error' ); 
    951                 } else { 
    952                         bp_core_add_message( __( 'Group settings were successfully updated.', 'buddypress' ) ); 
    953                 } 
    954  
    955                 /** 
    956                  * Fires before the redirect if a group settings has been edited and saved. 
    957                  * 
    958                  * @since 1.0.0 
    959                  * 
    960                  * @param int $id ID of the group that was edited. 
    961                  */ 
    962                 do_action( 'groups_group_settings_edited', $bp->groups->current_group->id ); 
    963  
    964                 bp_core_redirect( bp_get_group_permalink( groups_get_current_group() ) . 'admin/group-settings/' ); 
     278        if ( 'group-settings' !== bp_get_group_current_admin_tab() ) { 
     279                return; 
    965280        } 
    966281 
    967         /** 
    968          * Fires before the loading of the group admin/group-settings page template. 
    969          * 
    970          * @since 1.0.0 
    971          * 
    972          * @param int $id ID of the group that is being displayed. 
    973          */ 
    974         do_action( 'groups_screen_group_admin_settings', $bp->groups->current_group->id ); 
     282        if ( ! bp_is_item_admin() ) { 
     283                return; 
     284        } 
    975285 
    976         /** 
    977          * Filters the template to load for a group's admin/group-settings page. 
    978          * 
    979          * @since 1.0.0 
    980          * 
    981          * @param string $value Path to a group's admin/group-settings template. 
    982          */ 
    983         bp_core_load_template( apply_filters( 'groups_template_group_admin_settings', 'groups/single/home' ) ); 
     286        new BP_Groups_Screen_Admin_Settings; 
    984287} 
    985288add_action( 'bp_screens', 'groups_screen_group_admin_settings' ); 
    986289 
     
    990293 * @since 1.0.0 
    991294 */ 
    992295function groups_screen_group_admin_avatar() { 
    993  
    994         if ( 'group-avatar' != bp_get_group_current_admin_tab() ) 
    995                 return false; 
    996  
    997         // If the logged-in user doesn't have permission or if avatar uploads are disabled, then stop here. 
    998         if ( ! bp_is_item_admin() || bp_disable_group_avatar_uploads() || ! buddypress()->avatar->show_avatars ) 
    999                 return false; 
    1000  
    1001         $bp = buddypress(); 
    1002  
    1003         // If the group admin has deleted the admin avatar. 
    1004         if ( bp_is_action_variable( 'delete', 1 ) ) { 
    1005  
    1006                 // Check the nonce. 
    1007                 check_admin_referer( 'bp_group_avatar_delete' ); 
    1008  
    1009                 if ( bp_core_delete_existing_avatar( array( 'item_id' => $bp->groups->current_group->id, 'object' => 'group' ) ) ) { 
    1010                         bp_core_add_message( __( 'The group profile photo was deleted successfully!', 'buddypress' ) ); 
    1011                 } else { 
    1012                         bp_core_add_message( __( 'There was a problem deleting the group profile photo. Please try again.', 'buddypress' ), 'error' ); 
    1013                 } 
    1014         } 
    1015  
    1016         if ( ! isset( $bp->avatar_admin ) ) { 
    1017                 $bp->avatar_admin = new stdClass(); 
    1018         } 
    1019  
    1020         $bp->avatar_admin->step = 'upload-image'; 
    1021  
    1022         if ( !empty( $_FILES ) ) { 
    1023  
    1024                 // Check the nonce. 
    1025                 check_admin_referer( 'bp_avatar_upload' ); 
    1026  
    1027                 // Pass the file to the avatar upload handler. 
    1028                 if ( bp_core_avatar_handle_upload( $_FILES, 'groups_avatar_upload_dir' ) ) { 
    1029                         $bp->avatar_admin->step = 'crop-image'; 
    1030  
    1031                         // Make sure we include the jQuery jCrop file for image cropping. 
    1032                         add_action( 'wp_print_scripts', 'bp_core_add_jquery_cropper' ); 
    1033                 } 
    1034  
     296        if ( 'group-avatar' !== bp_get_group_current_admin_tab() ) { 
     297                return; 
    1035298        } 
    1036299 
    1037         // If the image cropping is done, crop the image and save a full/thumb version. 
    1038         if ( isset( $_POST['avatar-crop-submit'] ) ) { 
    1039  
    1040                 // Check the nonce. 
    1041                 check_admin_referer( 'bp_avatar_cropstore' ); 
    1042  
    1043                 $args = array( 
    1044                         'object'        => 'group', 
    1045                         'avatar_dir'    => 'group-avatars', 
    1046                         'item_id'       => $bp->groups->current_group->id, 
    1047                         'original_file' => $_POST['image_src'], 
    1048                         'crop_x'        => $_POST['x'], 
    1049                         'crop_y'        => $_POST['y'], 
    1050                         'crop_w'        => $_POST['w'], 
    1051                         'crop_h'        => $_POST['h'] 
    1052                 ); 
    1053  
    1054                 if ( !bp_core_avatar_handle_crop( $args ) ) { 
    1055                         bp_core_add_message( __( 'There was a problem cropping the group profile photo.', 'buddypress' ), 'error' ); 
    1056                 } else { 
    1057                         /** 
    1058                          * Fires after a group avatar is uploaded. 
    1059                          * 
    1060                          * @since 2.8.0 
    1061                          * 
    1062                          * @param int    $group_id ID of the group. 
    1063                          * @param string $type     Avatar type. 'crop' or 'full'. 
    1064                          * @param array  $args     Array of parameters passed to the avatar handler. 
    1065                          */ 
    1066                         do_action( 'groups_avatar_uploaded', bp_get_current_group_id(), 'crop', $args ); 
    1067                         bp_core_add_message( __( 'The new group profile photo was uploaded successfully.', 'buddypress' ) ); 
    1068                 } 
     300        // If the logged-in user doesn't have permission or if avatar uploads are disabled, then stop here. 
     301        if ( ! bp_is_item_admin() || bp_disable_group_avatar_uploads() || ! buddypress()->avatar->show_avatars ) { 
     302                return; 
    1069303        } 
    1070304 
    1071         /** 
    1072          * Fires before the loading of the group Change Avatar page template. 
    1073          * 
    1074          * @since 1.0.0 
    1075          * 
    1076          * @param int $id ID of the group that is being displayed. 
    1077          */ 
    1078         do_action( 'groups_screen_group_admin_avatar', $bp->groups->current_group->id ); 
    1079  
    1080         /** 
    1081          * Filters the template to load for a group's Change Avatar page. 
    1082          * 
    1083          * @since 1.0.0 
    1084          * 
    1085          * @param string $value Path to a group's Change Avatar template. 
    1086          */ 
    1087         bp_core_load_template( apply_filters( 'groups_template_group_admin_avatar', 'groups/single/home' ) ); 
     305        new BP_Groups_Screen_Admin_Avatar; 
    1088306} 
    1089307add_action( 'bp_screens', 'groups_screen_group_admin_avatar' ); 
    1090308 
     
    1094312 * @since 2.4.0 
    1095313 */ 
    1096314function groups_screen_group_admin_cover_image() { 
    1097         if ( 'group-cover-image' != bp_get_group_current_admin_tab() ) { 
    1098                 return false; 
     315        if ( 'group-cover-image' !== bp_get_group_current_admin_tab() ) { 
     316                return; 
    1099317        } 
    1100318 
    1101319        // If the logged-in user doesn't have permission or if cover image uploads are disabled, then stop here. 
    1102320        if ( ! bp_is_item_admin() || ! bp_group_use_cover_image_header() ) { 
    1103                 return false; 
     321                return; 
    1104322        } 
    1105323 
    1106324        /** 
     
    1129347 * @since 1.0.0 
    1130348 */ 
    1131349function groups_screen_group_admin_manage_members() { 
    1132  
    1133         if ( 'manage-members' != bp_get_group_current_admin_tab() ) 
    1134                 return false; 
    1135  
    1136         if ( ! bp_is_item_admin() ) 
    1137                 return false; 
    1138  
    1139         $bp = buddypress(); 
    1140  
    1141         if ( bp_action_variable( 1 ) && bp_action_variable( 2 ) && bp_action_variable( 3 ) ) { 
    1142                 if ( bp_is_action_variable( 'promote', 1 ) && ( bp_is_action_variable( 'mod', 2 ) || bp_is_action_variable( 'admin', 2 ) ) && is_numeric( bp_action_variable( 3 ) ) ) { 
    1143                         $user_id = bp_action_variable( 3 ); 
    1144                         $status  = bp_action_variable( 2 ); 
    1145  
    1146                         // Check the nonce first. 
    1147                         if ( !check_admin_referer( 'groups_promote_member' ) ) 
    1148                                 return false; 
    1149  
    1150                         // Promote a user. 
    1151                         if ( !groups_promote_member( $user_id, $bp->groups->current_group->id, $status ) ) 
    1152                                 bp_core_add_message( __( 'There was an error when promoting that user. Please try again.', 'buddypress' ), 'error' ); 
    1153                         else 
    1154                                 bp_core_add_message( __( 'User promoted successfully', 'buddypress' ) ); 
    1155  
    1156                         /** 
    1157                          * Fires before the redirect after a group member has been promoted. 
    1158                          * 
    1159                          * @since 1.0.0 
    1160                          * 
    1161                          * @param int $user_id ID of the user being promoted. 
    1162                          * @param int $id      ID of the group user is promoted within. 
    1163                          */ 
    1164                         do_action( 'groups_promoted_member', $user_id, $bp->groups->current_group->id ); 
    1165  
    1166                         bp_core_redirect( bp_get_group_permalink( groups_get_current_group() ) . 'admin/manage-members/' ); 
    1167                 } 
     350        if ( 'manage-members' !== bp_get_group_current_admin_tab() ) { 
     351                return; 
    1168352        } 
    1169353 
    1170         if ( bp_action_variable( 1 ) && bp_action_variable( 2 ) ) { 
    1171                 if ( bp_is_action_variable( 'demote', 1 ) && is_numeric( bp_action_variable( 2 ) ) ) { 
    1172                         $user_id = bp_action_variable( 2 ); 
    1173  
    1174                         // Check the nonce first. 
    1175                         if ( !check_admin_referer( 'groups_demote_member' ) ) 
    1176                                 return false; 
    1177  
    1178                         // Stop sole admins from abandoning their group. 
    1179                         $group_admins = groups_get_group_admins( $bp->groups->current_group->id ); 
    1180                         if ( 1 == count( $group_admins ) && $group_admins[0]->user_id == $user_id ) 
    1181                                 bp_core_add_message( __( 'This group must have at least one admin', 'buddypress' ), 'error' ); 
    1182  
    1183                         // Demote a user. 
    1184                         elseif ( !groups_demote_member( $user_id, $bp->groups->current_group->id ) ) 
    1185                                 bp_core_add_message( __( 'There was an error when demoting that user. Please try again.', 'buddypress' ), 'error' ); 
    1186                         else 
    1187                                 bp_core_add_message( __( 'User demoted successfully', 'buddypress' ) ); 
    1188  
    1189                         /** 
    1190                          * Fires before the redirect after a group member has been demoted. 
    1191                          * 
    1192                          * @since 1.0.0 
    1193                          * 
    1194                          * @param int $user_id ID of the user being demoted. 
    1195                          * @param int $id      ID of the group user is demoted within. 
    1196                          */ 
    1197                         do_action( 'groups_demoted_member', $user_id, $bp->groups->current_group->id ); 
    1198  
    1199                         bp_core_redirect( bp_get_group_permalink( groups_get_current_group() ) . 'admin/manage-members/' ); 
    1200                 } 
    1201  
    1202                 if ( bp_is_action_variable( 'ban', 1 ) && is_numeric( bp_action_variable( 2 ) ) ) { 
    1203                         $user_id = bp_action_variable( 2 ); 
    1204  
    1205                         // Check the nonce first. 
    1206                         if ( !check_admin_referer( 'groups_ban_member' ) ) 
    1207                                 return false; 
    1208  
    1209                         // Ban a user. 
    1210                         if ( !groups_ban_member( $user_id, $bp->groups->current_group->id ) ) 
    1211                                 bp_core_add_message( __( 'There was an error when banning that user. Please try again.', 'buddypress' ), 'error' ); 
    1212                         else 
    1213                                 bp_core_add_message( __( 'User banned successfully', 'buddypress' ) ); 
    1214  
    1215                         /** 
    1216                          * Fires before the redirect after a group member has been banned. 
    1217                          * 
    1218                          * @since 1.0.0 
    1219                          * 
    1220                          * @param int $user_id ID of the user being banned. 
    1221                          * @param int $id      ID of the group user is banned from. 
    1222                          */ 
    1223                         do_action( 'groups_banned_member', $user_id, $bp->groups->current_group->id ); 
    1224  
    1225                         bp_core_redirect( bp_get_group_permalink( groups_get_current_group() ) . 'admin/manage-members/' ); 
    1226                 } 
    1227  
    1228                 if ( bp_is_action_variable( 'unban', 1 ) && is_numeric( bp_action_variable( 2 ) ) ) { 
    1229                         $user_id = bp_action_variable( 2 ); 
    1230  
    1231                         // Check the nonce first. 
    1232                         if ( !check_admin_referer( 'groups_unban_member' ) ) 
    1233                                 return false; 
    1234  
    1235                         // Remove a ban for user. 
    1236                         if ( !groups_unban_member( $user_id, $bp->groups->current_group->id ) ) 
    1237                                 bp_core_add_message( __( 'There was an error when unbanning that user. Please try again.', 'buddypress' ), 'error' ); 
    1238                         else 
    1239                                 bp_core_add_message( __( 'User ban removed successfully', 'buddypress' ) ); 
    1240  
    1241                         /** 
    1242                          * Fires before the redirect after a group member has been unbanned. 
    1243                          * 
    1244                          * @since 1.0.0 
    1245                          * 
    1246                          * @param int $user_id ID of the user being unbanned. 
    1247                          * @param int $id      ID of the group user is unbanned from. 
    1248                          */ 
    1249                         do_action( 'groups_unbanned_member', $user_id, $bp->groups->current_group->id ); 
    1250  
    1251                         bp_core_redirect( bp_get_group_permalink( groups_get_current_group() ) . 'admin/manage-members/' ); 
    1252                 } 
    1253  
    1254                 if ( bp_is_action_variable( 'remove', 1 ) && is_numeric( bp_action_variable( 2 ) ) ) { 
    1255                         $user_id = bp_action_variable( 2 ); 
    1256  
    1257                         // Check the nonce first. 
    1258                         if ( !check_admin_referer( 'groups_remove_member' ) ) 
    1259                                 return false; 
    1260  
    1261                         // Remove a user. 
    1262                         if ( !groups_remove_member( $user_id, $bp->groups->current_group->id ) ) 
    1263                                 bp_core_add_message( __( 'There was an error removing that user from the group. Please try again.', 'buddypress' ), 'error' ); 
    1264                         else 
    1265                                 bp_core_add_message( __( 'User removed successfully', 'buddypress' ) ); 
    1266  
    1267                         /** 
    1268                          * Fires before the redirect after a group member has been removed. 
    1269                          * 
    1270                          * @since 1.2.6 
    1271                          * 
    1272                          * @param int $user_id ID of the user being removed. 
    1273                          * @param int $id      ID of the group the user is removed from. 
    1274                          */ 
    1275                         do_action( 'groups_removed_member', $user_id, $bp->groups->current_group->id ); 
    1276  
    1277                         bp_core_redirect( bp_get_group_permalink( groups_get_current_group() ) . 'admin/manage-members/' ); 
    1278                 } 
     354        if ( ! bp_is_item_admin() ) { 
     355                return; 
    1279356        } 
    1280357 
    1281         /** 
    1282          * Fires before the loading of a group's manage members template. 
    1283          * 
    1284          * @since 1.0.0 
    1285          * 
    1286          * @param int $id ID of the group whose manage members page is being displayed. 
    1287          */ 
    1288         do_action( 'groups_screen_group_admin_manage_members', $bp->groups->current_group->id ); 
    1289  
    1290         /** 
    1291          * Filters the template to load for a group's manage members page. 
    1292          * 
    1293          * @since 1.0.0 
    1294          * 
    1295          * @param string $value Path to a group's manage members template. 
    1296          */ 
    1297         bp_core_load_template( apply_filters( 'groups_template_group_admin_manage_members', 'groups/single/home' ) ); 
     358        new BP_Groups_Screen_Admin_Manage_Members; 
    1298359} 
    1299360add_action( 'bp_screens', 'groups_screen_group_admin_manage_members' ); 
    1300361 
     
    1304365 * @since 1.0.0 
    1305366 */ 
    1306367function groups_screen_group_admin_requests() { 
    1307         $bp = buddypress(); 
    1308  
    1309368        if ( 'membership-requests' != bp_get_group_current_admin_tab() ) { 
    1310                 return false; 
    1311         } 
    1312  
    1313         if ( ! bp_is_item_admin() || ( 'public' == $bp->groups->current_group->status ) ) { 
    1314                 return false; 
     369                return; 
    1315370        } 
    1316371 
    1317         $request_action = (string) bp_action_variable( 1 ); 
    1318         $membership_id  = (int) bp_action_variable( 2 ); 
    1319  
    1320         if ( !empty( $request_action ) && !empty( $membership_id ) ) { 
    1321                 if ( 'accept' == $request_action && is_numeric( $membership_id ) ) { 
    1322  
    1323                         // Check the nonce first. 
    1324                         if ( !check_admin_referer( 'groups_accept_membership_request' ) ) 
    1325                                 return false; 
    1326  
    1327                         // Accept the membership request. 
    1328                         if ( !groups_accept_membership_request( $membership_id ) ) 
    1329                                 bp_core_add_message( __( 'There was an error accepting the membership request. Please try again.', 'buddypress' ), 'error' ); 
    1330                         else 
    1331                                 bp_core_add_message( __( 'Group membership request accepted', 'buddypress' ) ); 
    1332  
    1333                 } elseif ( 'reject' == $request_action && is_numeric( $membership_id ) ) { 
    1334                         /* Check the nonce first. */ 
    1335                         if ( !check_admin_referer( 'groups_reject_membership_request' ) ) 
    1336                                 return false; 
    1337  
    1338                         // Reject the membership request. 
    1339                         if ( !groups_reject_membership_request( $membership_id ) ) 
    1340                                 bp_core_add_message( __( 'There was an error rejecting the membership request. Please try again.', 'buddypress' ), 'error' ); 
    1341                         else 
    1342                                 bp_core_add_message( __( 'Group membership request rejected', 'buddypress' ) ); 
    1343                 } 
    1344  
    1345                 /** 
    1346                  * Fires before the redirect if a group membership request has been handled. 
    1347                  * 
    1348                  * @since 1.0.0 
    1349                  * 
    1350                  * @param int    $id             ID of the group that was edited. 
    1351                  * @param string $request_action Membership request action being performed. 
    1352                  * @param int    $membership_id  The key of the action_variables array that you want. 
    1353                  */ 
    1354                 do_action( 'groups_group_request_managed', $bp->groups->current_group->id, $request_action, $membership_id ); 
    1355                 bp_core_redirect( bp_get_group_permalink( groups_get_current_group() ) . 'admin/membership-requests/' ); 
     372        if ( ! bp_is_item_admin() || ( 'public' == buddypress()->groups->current_group->status ) ) { 
     373                return; 
    1356374        } 
    1357375 
    1358         /** 
    1359          * Fires before the loading of the group membership request page template. 
    1360          * 
    1361          * @since 1.0.0 
    1362          * 
    1363          * @param int $id ID of the group that is being displayed. 
    1364          */ 
    1365         do_action( 'groups_screen_group_admin_requests', $bp->groups->current_group->id ); 
    1366  
    1367         /** 
    1368          * Filters the template to load for a group's membership request page. 
    1369          * 
    1370          * @since 1.0.0 
    1371          * 
    1372          * @param string $value Path to a group's membership request template. 
    1373          */ 
    1374         bp_core_load_template( apply_filters( 'groups_template_group_admin_requests', 'groups/single/home' ) ); 
     376        new BP_Groups_Screen_Admin_Requests; 
    1375377} 
    1376378add_action( 'bp_screens', 'groups_screen_group_admin_requests' ); 
    1377379 
     
    1381383 * @since 1.0.0 
    1382384 */ 
    1383385function groups_screen_group_admin_delete_group() { 
    1384  
    1385         if ( 'delete-group' != bp_get_group_current_admin_tab() ) 
    1386                 return false; 
    1387  
    1388         if ( ! bp_is_item_admin() && !bp_current_user_can( 'bp_moderate' ) ) 
    1389                 return false; 
    1390  
    1391         $bp = buddypress(); 
    1392  
    1393         if ( isset( $_REQUEST['delete-group-button'] ) && isset( $_REQUEST['delete-group-understand'] ) ) { 
    1394  
    1395                 // Check the nonce first. 
    1396                 if ( !check_admin_referer( 'groups_delete_group' ) ) { 
    1397                         return false; 
    1398                 } 
    1399  
    1400                 /** 
    1401                  * Fires before the deletion of a group from the Delete Group page. 
    1402                  * 
    1403                  * @since 1.5.0 
    1404                  * 
    1405                  * @param int $id ID of the group being deleted. 
    1406                  */ 
    1407                 do_action( 'groups_before_group_deleted', $bp->groups->current_group->id ); 
    1408  
    1409                 // Group admin has deleted the group, now do it. 
    1410                 if ( !groups_delete_group( $bp->groups->current_group->id ) ) { 
    1411                         bp_core_add_message( __( 'There was an error deleting the group. Please try again.', 'buddypress' ), 'error' ); 
    1412                 } else { 
    1413                         bp_core_add_message( __( 'The group was deleted successfully.', 'buddypress' ) ); 
    1414  
    1415                         /** 
    1416                          * Fires after the deletion of a group from the Delete Group page. 
    1417                          * 
    1418                          * @since 1.0.0 
    1419                          * 
    1420                          * @param int $id ID of the group being deleted. 
    1421                          */ 
    1422                         do_action( 'groups_group_deleted', $bp->groups->current_group->id ); 
    1423  
    1424                         bp_core_redirect( trailingslashit( bp_loggedin_user_domain() . bp_get_groups_slug() ) ); 
    1425                 } 
    1426  
    1427                 bp_core_redirect( trailingslashit( bp_loggedin_user_domain() . bp_get_groups_slug() ) ); 
     386        if ( 'delete-group' !== bp_get_group_current_admin_tab() ) { 
     387                return; 
    1428388        } 
    1429389 
    1430         /** 
    1431          * Fires before the loading of the Delete Group page template. 
    1432          * 
    1433          * @since 1.0.0 
    1434          * 
    1435          * @param int $id ID of the group that is being displayed. 
    1436          */ 
    1437         do_action( 'groups_screen_group_admin_delete_group', $bp->groups->current_group->id ); 
     390        if ( ! bp_is_item_admin() && ! bp_current_user_can( 'bp_moderate' ) ) { 
     391                return; 
     392        } 
    1438393 
    1439         /** 
    1440          * Filters the template to load for the Delete Group page. 
    1441          * 
    1442          * @since 1.0.0 
    1443          * 
    1444          * @param string $value Path to the Delete Group template. 
    1445          */ 
    1446         bp_core_load_template( apply_filters( 'groups_template_group_admin_delete_group', 'groups/single/home' ) ); 
     394        new BP_Groups_Screen_Admin_Delete; 
    1447395} 
    1448396add_action( 'bp_screens', 'groups_screen_group_admin_delete_group' ); 
    1449397 
     
    1453401 * @since 1.0.0 
    1454402 */ 
    1455403function groups_screen_notification_settings() { 
    1456  
    1457         if ( !$group_invite = bp_get_user_meta( bp_displayed_user_id(), 'notification_groups_invite', true ) ) 
    1458                 $group_invite  = 'yes'; 
    1459  
    1460         if ( !$group_update = bp_get_user_meta( bp_displayed_user_id(), 'notification_groups_group_updated', true ) ) 
    1461                 $group_update  = 'yes'; 
    1462  
    1463         if ( !$group_promo = bp_get_user_meta( bp_displayed_user_id(), 'notification_groups_admin_promotion', true ) ) 
    1464                 $group_promo   = 'yes'; 
    1465  
    1466         if ( !$group_request = bp_get_user_meta( bp_displayed_user_id(), 'notification_groups_membership_request', true ) ) 
    1467                 $group_request = 'yes'; 
    1468  
    1469         if ( ! $group_request_completed = bp_get_user_meta( bp_displayed_user_id(), 'notification_membership_request_completed', true ) ) { 
    1470                 $group_request_completed = 'yes'; 
    1471         } 
    1472         ?> 
    1473  
    1474         <table class="notification-settings" id="groups-notification-settings"> 
    1475                 <thead> 
    1476                         <tr> 
    1477                                 <th class="icon"></th> 
    1478                                 <th class="title"><?php _ex( 'Groups', 'Group settings on notification settings page', 'buddypress' ) ?></th> 
    1479                                 <th class="yes"><?php _e( 'Yes', 'buddypress' ) ?></th> 
    1480                                 <th class="no"><?php _e( 'No', 'buddypress' )?></th> 
    1481                         </tr> 
    1482                 </thead> 
    1483  
    1484                 <tbody> 
    1485                         <tr id="groups-notification-settings-invitation"> 
    1486                                 <td></td> 
    1487                                 <td><?php _ex( 'A member invites you to join a group', 'group settings on notification settings page','buddypress' ) ?></td> 
    1488                                 <td class="yes"><input type="radio" name="notifications[notification_groups_invite]" id="notification-groups-invite-yes" value="yes" <?php checked( $group_invite, 'yes', true ) ?>/><label for="notification-groups-invite-yes" class="bp-screen-reader-text"><?php 
    1489                                         /* translators: accessibility text */ 
    1490                                         _e( 'Yes, send email', 'buddypress' ); 
    1491                                 ?></label></td> 
    1492                                 <td class="no"><input type="radio" name="notifications[notification_groups_invite]" id="notification-groups-invite-no" value="no" <?php checked( $group_invite, 'no', true ) ?>/><label for="notification-groups-invite-no" class="bp-screen-reader-text"><?php 
    1493                                         /* translators: accessibility text */ 
    1494                                         _e( 'No, do not send email', 'buddypress' ); 
    1495                                 ?></label></td> 
    1496                         </tr> 
    1497                         <tr id="groups-notification-settings-info-updated"> 
    1498                                 <td></td> 
    1499                                 <td><?php _ex( 'Group information is updated', 'group settings on notification settings page', 'buddypress' ) ?></td> 
    1500                                 <td class="yes"><input type="radio" name="notifications[notification_groups_group_updated]" id="notification-groups-group-updated-yes" value="yes" <?php checked( $group_update, 'yes', true ) ?>/><label for="notification-groups-group-updated-yes" class="bp-screen-reader-text"><?php 
    1501                                         /* translators: accessibility text */ 
    1502                                         _e( 'Yes, send email', 'buddypress' ); 
    1503                                 ?></label></td> 
    1504                                 <td class="no"><input type="radio" name="notifications[notification_groups_group_updated]" id="notification-groups-group-updated-no" value="no" <?php checked( $group_update, 'no', true ) ?>/><label for="notification-groups-group-updated-no" class="bp-screen-reader-text"><?php 
    1505                                         /* translators: accessibility text */ 
    1506                                         _e( 'No, do not send email', 'buddypress' ); 
    1507                                 ?></label></td> 
    1508                         </tr> 
    1509                         <tr id="groups-notification-settings-promoted"> 
    1510                                 <td></td> 
    1511                                 <td><?php _ex( 'You are promoted to a group administrator or moderator', 'group settings on notification settings page', 'buddypress' ) ?></td> 
    1512                                 <td class="yes"><input type="radio" name="notifications[notification_groups_admin_promotion]" id="notification-groups-admin-promotion-yes" value="yes" <?php checked( $group_promo, 'yes', true ) ?>/><label for="notification-groups-admin-promotion-yes" class="bp-screen-reader-text"><?php 
    1513                                         /* translators: accessibility text */ 
    1514                                         _e( 'Yes, send email', 'buddypress' ); 
    1515                                 ?></label></td> 
    1516                                 <td class="no"><input type="radio" name="notifications[notification_groups_admin_promotion]" id="notification-groups-admin-promotion-no" value="no" <?php checked( $group_promo, 'no', true ) ?>/><label for="notification-groups-admin-promotion-no" class="bp-screen-reader-text"><?php 
    1517                                         /* translators: accessibility text */ 
    1518                                         _e( 'No, do not send email', 'buddypress' ); 
    1519                                 ?></label></td> 
    1520                         </tr> 
    1521                         <tr id="groups-notification-settings-request"> 
    1522                                 <td></td> 
    1523                                 <td><?php _ex( 'A member requests to join a private group for which you are an admin', 'group settings on notification settings page', 'buddypress' ) ?></td> 
    1524                                 <td class="yes"><input type="radio" name="notifications[notification_groups_membership_request]" id="notification-groups-membership-request-yes" value="yes" <?php checked( $group_request, 'yes', true ) ?>/><label for="notification-groups-membership-request-yes" class="bp-screen-reader-text"><?php 
    1525                                         /* translators: accessibility text */ 
    1526                                         _e( 'Yes, send email', 'buddypress' ); 
    1527                                 ?></label></td> 
    1528                                 <td class="no"><input type="radio" name="notifications[notification_groups_membership_request]" id="notification-groups-membership-request-no" value="no" <?php checked( $group_request, 'no', true ) ?>/><label for="notification-groups-membership-request-no" class="bp-screen-reader-text"><?php 
    1529                                         /* translators: accessibility text */ 
    1530                                         _e( 'No, do not send email', 'buddypress' ); 
    1531                                 ?></label></td> 
    1532                         </tr> 
    1533                         <tr id="groups-notification-settings-request-completed"> 
    1534                                 <td></td> 
    1535                                 <td><?php _ex( 'Your request to join a group has been approved or denied', 'group settings on notification settings page', 'buddypress' ) ?></td> 
    1536                                 <td class="yes"><input type="radio" name="notifications[notification_membership_request_completed]" id="notification-groups-membership-request-completed-yes" value="yes" <?php checked( $group_request_completed, 'yes', true ) ?>/><label for="notification-groups-membership-request-completed-yes" class="bp-screen-reader-text"><?php 
    1537                                         /* translators: accessibility text */ 
    1538                                         _e( 'Yes, send email', 'buddypress' ); 
    1539                                 ?></label></td> 
    1540                                 <td class="no"><input type="radio" name="notifications[notification_membership_request_completed]" id="notification-groups-membership-request-completed-no" value="no" <?php checked( $group_request_completed, 'no', true ) ?>/><label for="notification-groups-membership-request-completed-no" class="bp-screen-reader-text"><?php 
    1541                                         /* translators: accessibility text */ 
    1542                                         _e( 'No, do not send email', 'buddypress' ); 
    1543                                 ?></label></td> 
    1544                         </tr> 
    1545  
    1546                         <?php 
    1547  
    1548                         /** 
    1549                          * Fires at the end of the available group settings fields on Notification Settings page. 
    1550                          * 
    1551                          * @since 1.0.0 
    1552                          */ 
    1553                         do_action( 'groups_screen_notification_settings' ); ?> 
    1554  
    1555                 </tbody> 
    1556         </table> 
    1557  
    1558 <?php 
     404        new BP_Groups_Screen_User_Settings_Notifications; 
    1559405} 
    1560406add_action( 'bp_notification_settings', 'groups_screen_notification_settings' ); 
    1561407 
  • new file src/bp-groups/classes/class-bp-groups-action-create-group.php

    new file mode 100644
    - +  
     1<?php 
     2/** 
     3 * BuddyPress Groups Classes. 
     4 * 
     5 * @package BuddyPress 
     6 * @subpackage GroupsClasses 
     7 * @since 2.9.0 
     8 */ 
     9 
     10// Exit if accessed directly. 
     11defined( 'ABSPATH' ) || exit; 
     12 
     13/** 
     14 * Catch and process group creation form submissions. 
     15 * 
     16 * @since 2.9.0 
     17 * 
     18 * @see groups_action_create_group() 
     19 */ 
     20class BP_Groups_Action_Create_Group { 
     21        /** 
     22         * Constructor. 
     23         * 
     24         * @since 2.9.0 
     25         */ 
     26        public function __construct() { 
     27                $bp = buddypress(); 
     28 
     29                // Make sure creation steps are in the right order. 
     30                groups_action_sort_creation_steps(); 
     31 
     32                // If no current step is set, reset everything so we can start a fresh group creation. 
     33                $bp->groups->current_create_step = bp_action_variable( 1 ); 
     34                if ( !bp_get_groups_current_create_step() ) { 
     35                        unset( $bp->groups->current_create_step ); 
     36                        unset( $bp->groups->completed_create_steps ); 
     37 
     38                        setcookie( 'bp_new_group_id', false, time() - 1000, COOKIEPATH, COOKIE_DOMAIN, is_ssl() ); 
     39                        setcookie( 'bp_completed_create_steps', false, time() - 1000, COOKIEPATH, COOKIE_DOMAIN, is_ssl() ); 
     40 
     41                        $reset_steps = true; 
     42                        $keys        = array_keys( $bp->groups->group_creation_steps ); 
     43                        bp_core_redirect( trailingslashit( bp_get_groups_directory_permalink() . 'create/step/' . array_shift( $keys ) ) ); 
     44                } 
     45 
     46                // If this is a creation step that is not recognized, just redirect them back to the first screen. 
     47                if ( bp_get_groups_current_create_step() && empty( $bp->groups->group_creation_steps[bp_get_groups_current_create_step()] ) ) { 
     48                        bp_core_add_message( __('There was an error saving group details. Please try again.', 'buddypress'), 'error' ); 
     49                        bp_core_redirect( trailingslashit( bp_get_groups_directory_permalink() . 'create' ) ); 
     50                } 
     51 
     52                // Fetch the currently completed steps variable. 
     53                if ( isset( $_COOKIE['bp_completed_create_steps'] ) && !isset( $reset_steps ) ) 
     54                        $bp->groups->completed_create_steps = json_decode( base64_decode( stripslashes( $_COOKIE['bp_completed_create_steps'] ) ) ); 
     55 
     56                // Set the ID of the new group, if it has already been created in a previous step. 
     57                if ( bp_get_new_group_id() ) { 
     58                        $bp->groups->current_group = groups_get_group( $bp->groups->new_group_id ); 
     59 
     60                        // Only allow the group creator to continue to edit the new group. 
     61                        if ( ! bp_is_group_creator( $bp->groups->current_group, bp_loggedin_user_id() ) ) { 
     62                                bp_core_add_message( __( 'Only the group creator may continue editing this group.', 'buddypress' ), 'error' ); 
     63                                bp_core_redirect( trailingslashit( bp_get_groups_directory_permalink() . 'create' ) ); 
     64                        } 
     65                } 
     66 
     67                // If the save, upload or skip button is hit, lets calculate what we need to save. 
     68                if ( isset( $_POST['save'] ) ) { 
     69 
     70                        // Check the nonce. 
     71                        check_admin_referer( 'groups_create_save_' . bp_get_groups_current_create_step() ); 
     72 
     73                        if ( 'group-details' == bp_get_groups_current_create_step() ) { 
     74                                if ( empty( $_POST['group-name'] ) || empty( $_POST['group-desc'] ) || !strlen( trim( $_POST['group-name'] ) ) || !strlen( trim( $_POST['group-desc'] ) ) ) { 
     75                                        bp_core_add_message( __( 'Please fill in all of the required fields', 'buddypress' ), 'error' ); 
     76                                        bp_core_redirect( trailingslashit( bp_get_groups_directory_permalink() . 'create/step/' . bp_get_groups_current_create_step() ) ); 
     77                                } 
     78 
     79                                $new_group_id = isset( $bp->groups->new_group_id ) ? $bp->groups->new_group_id : 0; 
     80 
     81                                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' ) ) ) { 
     82                                        bp_core_add_message( __( 'There was an error saving group details. Please try again.', 'buddypress' ), 'error' ); 
     83                                        bp_core_redirect( trailingslashit( bp_get_groups_directory_permalink() . 'create/step/' . bp_get_groups_current_create_step() ) ); 
     84                                } 
     85                        } 
     86 
     87                        if ( 'group-settings' == bp_get_groups_current_create_step() ) { 
     88                                $group_status = 'public'; 
     89                                $group_enable_forum = 1; 
     90 
     91                                if ( !isset($_POST['group-show-forum']) ) { 
     92                                        $group_enable_forum = 0; 
     93                                } else { 
     94                                        // Create the forum if enable_forum = 1. 
     95                                        if ( bp_is_active( 'forums' ) && !groups_get_groupmeta( $bp->groups->new_group_id, 'forum_id' ) ) { 
     96                                                groups_new_group_forum(); 
     97                                        } 
     98                                } 
     99 
     100                                if ( 'private' == $_POST['group-status'] ) 
     101                                        $group_status = 'private'; 
     102                                elseif ( 'hidden' == $_POST['group-status'] ) 
     103                                        $group_status = 'hidden'; 
     104 
     105                                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 ) ) ) { 
     106                                        bp_core_add_message( __( 'There was an error saving group details. Please try again.', 'buddypress' ), 'error' ); 
     107                                        bp_core_redirect( trailingslashit( bp_get_groups_directory_permalink() . 'create/step/' . bp_get_groups_current_create_step() ) ); 
     108                                } 
     109 
     110                                // Save group types. 
     111                                if ( ! empty( $_POST['group-types'] ) ) { 
     112                                        bp_groups_set_group_type( $bp->groups->new_group_id, $_POST['group-types'] ); 
     113                                } 
     114 
     115                                /** 
     116                                 * Filters the allowed invite statuses. 
     117                                 * 
     118                                 * @since 1.5.0 
     119                                 * 
     120                                 * @param array $value Array of statuses allowed. 
     121                                 *                     Possible values are 'members, 
     122                                 *                     'mods', and 'admins'. 
     123                                 */ 
     124                                $allowed_invite_status = apply_filters( 'groups_allowed_invite_status', array( 'members', 'mods', 'admins' ) ); 
     125                                $invite_status         = !empty( $_POST['group-invite-status'] ) && in_array( $_POST['group-invite-status'], (array) $allowed_invite_status ) ? $_POST['group-invite-status'] : 'members'; 
     126 
     127                                groups_update_groupmeta( $bp->groups->new_group_id, 'invite_status', $invite_status ); 
     128                        } 
     129 
     130                        if ( 'group-invites' === bp_get_groups_current_create_step() ) { 
     131                                if ( ! empty( $_POST['friends'] ) ) { 
     132                                        foreach ( (array) $_POST['friends'] as $friend ) { 
     133                                                groups_invite_user( array( 
     134                                                        'user_id'  => (int) $friend, 
     135                                                        'group_id' => $bp->groups->new_group_id, 
     136                                                ) ); 
     137                                        } 
     138                                } 
     139 
     140                                groups_send_invites( bp_loggedin_user_id(), $bp->groups->new_group_id ); 
     141                        } 
     142 
     143                        /** 
     144                         * Fires before finalization of group creation and cookies are set. 
     145                         * 
     146                         * This hook is a variable hook dependent on the current step 
     147                         * in the creation process. 
     148                         * 
     149                         * @since 1.1.0 
     150                         */ 
     151                        do_action( 'groups_create_group_step_save_' . bp_get_groups_current_create_step() ); 
     152 
     153                        /** 
     154                         * Fires after the group creation step is completed. 
     155                         * 
     156                         * Mostly for clearing cache on a generic action name. 
     157                         * 
     158                         * @since 1.1.0 
     159                         */ 
     160                        do_action( 'groups_create_group_step_complete' ); 
     161 
     162                        /** 
     163                         * Once we have successfully saved the details for this step of the creation process 
     164                         * we need to add the current step to the array of completed steps, then update the cookies 
     165                         * holding the information 
     166                         */ 
     167                        $completed_create_steps = isset( $bp->groups->completed_create_steps ) ? $bp->groups->completed_create_steps : array(); 
     168                        if ( !in_array( bp_get_groups_current_create_step(), $completed_create_steps ) ) 
     169                                $bp->groups->completed_create_steps[] = bp_get_groups_current_create_step(); 
     170 
     171                        // Reset cookie info. 
     172                        setcookie( 'bp_new_group_id', $bp->groups->new_group_id, time()+60*60*24, COOKIEPATH, COOKIE_DOMAIN, is_ssl() ); 
     173                        setcookie( 'bp_completed_create_steps', base64_encode( json_encode( $bp->groups->completed_create_steps ) ), time()+60*60*24, COOKIEPATH, COOKIE_DOMAIN, is_ssl() ); 
     174 
     175                        // If we have completed all steps and hit done on the final step we 
     176                        // can redirect to the completed group. 
     177                        $keys = array_keys( $bp->groups->group_creation_steps ); 
     178                        if ( count( $bp->groups->completed_create_steps ) == count( $keys ) && bp_get_groups_current_create_step() == array_pop( $keys ) ) { 
     179                                unset( $bp->groups->current_create_step ); 
     180                                unset( $bp->groups->completed_create_steps ); 
     181 
     182                                setcookie( 'bp_new_group_id', false, time() - 3600, COOKIEPATH, COOKIE_DOMAIN, is_ssl() ); 
     183                                setcookie( 'bp_completed_create_steps', false, time() - 3600, COOKIEPATH, COOKIE_DOMAIN, is_ssl() ); 
     184 
     185                                // Once we completed all steps, record the group creation in the activity stream. 
     186                                groups_record_activity( array( 
     187                                        'type' => 'created_group', 
     188                                        'item_id' => $bp->groups->new_group_id 
     189                                ) ); 
     190 
     191                                /** 
     192                                 * Fires after the group has been successfully created. 
     193                                 * 
     194                                 * @since 1.1.0 
     195                                 * 
     196                                 * @param int $new_group_id ID of the newly created group. 
     197                                 */ 
     198                                do_action( 'groups_group_create_complete', $bp->groups->new_group_id ); 
     199 
     200                                bp_core_redirect( bp_get_group_permalink( $bp->groups->current_group ) ); 
     201                        } else { 
     202                                /** 
     203                                 * Since we don't know what the next step is going to be (any plugin can insert steps) 
     204                                 * we need to loop the step array and fetch the next step that way. 
     205                                 */ 
     206                                foreach ( $keys as $key ) { 
     207                                        if ( $key == bp_get_groups_current_create_step() ) { 
     208                                                $next = 1; 
     209                                                continue; 
     210                                        } 
     211 
     212                                        if ( isset( $next ) ) { 
     213                                                $next_step = $key; 
     214                                                break; 
     215                                        } 
     216                                } 
     217 
     218                                bp_core_redirect( trailingslashit( bp_get_groups_directory_permalink() . 'create/step/' . $next_step ) ); 
     219                        } 
     220                } 
     221 
     222                // Remove invitations. 
     223                if ( 'group-invites' === bp_get_groups_current_create_step() && ! empty( $_REQUEST['user_id'] ) && is_numeric( $_REQUEST['user_id'] ) ) { 
     224                        if ( ! check_admin_referer( 'groups_invite_uninvite_user' ) ) { 
     225                                return false; 
     226                        } 
     227 
     228                        $message = __( 'Invite successfully removed', 'buddypress' ); 
     229                        $error   = false; 
     230 
     231                        if( ! groups_uninvite_user( (int) $_REQUEST['user_id'], $bp->groups->new_group_id ) ) { 
     232                                $message = __( 'There was an error removing the invite', 'buddypress' ); 
     233                                $error   = 'error'; 
     234                        } 
     235 
     236                        bp_core_add_message( $message, $error ); 
     237                        bp_core_redirect( trailingslashit( bp_get_groups_directory_permalink() . 'create/step/group-invites' ) ); 
     238                } 
     239 
     240                // Group avatar is handled separately. 
     241                if ( 'group-avatar' == bp_get_groups_current_create_step() && isset( $_POST['upload'] ) ) { 
     242                        if ( ! isset( $bp->avatar_admin ) ) { 
     243                                $bp->avatar_admin = new stdClass(); 
     244                        } 
     245 
     246                        if ( !empty( $_FILES ) && isset( $_POST['upload'] ) ) { 
     247                                // Normally we would check a nonce here, but the group save nonce is used instead. 
     248                                // Pass the file to the avatar upload handler. 
     249                                if ( bp_core_avatar_handle_upload( $_FILES, 'groups_avatar_upload_dir' ) ) { 
     250                                        $bp->avatar_admin->step = 'crop-image'; 
     251 
     252                                        // Make sure we include the jQuery jCrop file for image cropping. 
     253                                        add_action( 'wp_print_scripts', 'bp_core_add_jquery_cropper' ); 
     254                                } 
     255                        } 
     256 
     257                        // If the image cropping is done, crop the image and save a full/thumb version. 
     258                        if ( isset( $_POST['avatar-crop-submit'] ) && isset( $_POST['upload'] ) ) { 
     259 
     260                                // Normally we would check a nonce here, but the group save nonce is used instead. 
     261                                $args = array( 
     262                                        'object'        => 'group', 
     263                                        'avatar_dir'    => 'group-avatars', 
     264                                        'item_id'       => $bp->groups->current_group->id, 
     265                                        'original_file' => $_POST['image_src'], 
     266                                        'crop_x'        => $_POST['x'], 
     267                                        'crop_y'        => $_POST['y'], 
     268                                        'crop_w'        => $_POST['w'], 
     269                                        'crop_h'        => $_POST['h'] 
     270                                ); 
     271 
     272                                if ( ! bp_core_avatar_handle_crop( $args ) ) { 
     273                                        bp_core_add_message( __( 'There was an error saving the group profile photo, please try uploading again.', 'buddypress' ), 'error' ); 
     274                                } else { 
     275                                        /** 
     276                                         * Fires after a group avatar is uploaded. 
     277                                         * 
     278                                         * @since 2.8.0 
     279                                         * 
     280                                         * @param int    $group_id ID of the group. 
     281                                         * @param string $type     Avatar type. 'crop' or 'full'. 
     282                                         * @param array  $args     Array of parameters passed to the avatar handler. 
     283                                         */ 
     284                                        do_action( 'groups_avatar_uploaded', bp_get_current_group_id(), 'crop', $args ); 
     285 
     286                                        bp_core_add_message( __( 'The group profile photo was uploaded successfully.', 'buddypress' ) ); 
     287                                } 
     288                        } 
     289                } 
     290 
     291                /** 
     292                 * Filters the template to load for the group creation screen. 
     293                 * 
     294                 * @since 1.0.0 
     295                 * 
     296                 * @param string $value Path to the group creation template to load. 
     297                 */ 
     298                bp_core_load_template( apply_filters( 'groups_template_create_group', 'groups/create' ) ); 
     299        } 
     300} 
     301 No newline at end of file 
  • new file src/bp-groups/classes/class-bp-groups-action-group-access-protection.php

    new file mode 100644
    - +  
     1<?php 
     2/** 
     3 * BuddyPress Groups Classes. 
     4 * 
     5 * @package BuddyPress 
     6 * @subpackage GroupsClasses 
     7 * @since 2.9.0 
     8 */ 
     9 
     10// Exit if accessed directly. 
     11defined( 'ABSPATH' ) || exit; 
     12 
     13/** 
     14 * Protect access to single groups. 
     15 * 
     16 * @since 2.9.0 
     17 * 
     18 * @see bp_groups_group_access_protection() 
     19 */ 
     20class BP_Groups_Action_Group_Access_Protection { 
     21        /** 
     22         * Constructor. 
     23         * 
     24         * @since 2.9.0 
     25         */ 
     26        public function __construct() { 
     27                $current_group   = groups_get_current_group(); 
     28                $user_has_access = $current_group->user_has_access; 
     29                $no_access_args  = array(); 
     30 
     31                if ( ! $user_has_access && 'hidden' !== $current_group->status ) { 
     32                        // Always allow access to home and request-membership. 
     33                        if ( bp_is_current_action( 'home' ) || bp_is_current_action( 'request-membership' ) ) { 
     34                                $user_has_access = true; 
     35 
     36                        // User doesn't have access, so set up redirect args. 
     37                        } elseif ( is_user_logged_in() ) { 
     38                                $no_access_args = array( 
     39                                        'message'  => __( 'You do not have access to this group.', 'buddypress' ), 
     40                                        'root'     => bp_get_group_permalink( $current_group ) . 'home/', 
     41                                        'redirect' => false 
     42                                ); 
     43                        } 
     44                } 
     45 
     46                // Protect the admin tab from non-admins. 
     47                if ( bp_is_current_action( 'admin' ) && ! bp_is_item_admin() ) { 
     48                        $user_has_access = false; 
     49                        $no_access_args  = array( 
     50                                'message'  => __( 'You are not an admin of this group.', 'buddypress' ), 
     51                                'root'     => bp_get_group_permalink( $current_group ), 
     52                                'redirect' => false 
     53                        ); 
     54                } 
     55 
     56                /** 
     57                 * Allow plugins to filter whether the current user has access to this group content. 
     58                 * 
     59                 * Note that if a plugin sets $user_has_access to false, it may also 
     60                 * want to change the $no_access_args, to avoid problems such as 
     61                 * logged-in users being redirected to wp-login.php. 
     62                 * 
     63                 * @since 2.1.0 
     64                 * 
     65                 * @param bool  $user_has_access True if the user has access to the 
     66                 *                               content, otherwise false. 
     67                 * @param array $no_access_args  Arguments to be passed to bp_core_no_access() in case 
     68                 *                               of no access. Note that this value is passed by reference, 
     69                 *                               so it can be modified by the filter callback. 
     70                 */ 
     71                $user_has_access = apply_filters_ref_array( 'bp_group_user_has_access', array( $user_has_access, &$no_access_args ) ); 
     72 
     73                // If user has access, we return rather than redirect. 
     74                if ( $user_has_access ) { 
     75                        return; 
     76                } 
     77 
     78                // Hidden groups should return a 404 for non-members. 
     79                // Unset the current group so that you're not redirected 
     80                // to the default group tab. 
     81                if ( 'hidden' == $current_group->status ) { 
     82                        buddypress()->groups->current_group = 0; 
     83                        buddypress()->is_single_item        = false; 
     84                        bp_do_404(); 
     85                        return; 
     86                } else { 
     87                        bp_core_no_access( $no_access_args ); 
     88                } 
     89        } 
     90} 
     91 No newline at end of file 
  • new file src/bp-groups/classes/class-bp-groups-action-join-group.php

    new file mode 100644
    - +  
     1<?php 
     2/** 
     3 * BuddyPress Groups Classes. 
     4 * 
     5 * @package BuddyPress 
     6 * @subpackage GroupsClasses 
     7 * @since 2.9.0 
     8 */ 
     9 
     10// Exit if accessed directly. 
     11defined( 'ABSPATH' ) || exit; 
     12 
     13/** 
     14 * Catch and process "Join Group" button clicks. 
     15 * 
     16 * @since 2.9.0 
     17 * 
     18 * @see groups_action_join_group() 
     19 */ 
     20class BP_Groups_Action_Join_Group { 
     21        /** 
     22         * Constructor. 
     23         * 
     24         * @since 2.9.0 
     25         */ 
     26        public function __construct() { 
     27                // Skip if banned or already a member. 
     28                if ( !groups_is_user_member( bp_loggedin_user_id(), bp_get_current_group_id() ) && !groups_is_user_banned( bp_loggedin_user_id(), bp_get_current_group_id() ) ) { 
     29 
     30                        // User wants to join a group that is not public. 
     31                        if ( buddypress()->groups->current_group->status != 'public' ) { 
     32                                if ( !groups_check_user_has_invite( bp_loggedin_user_id(), bp_get_current_group_id() ) ) { 
     33                                        bp_core_add_message( __( 'There was an error joining the group.', 'buddypress' ), 'error' ); 
     34                                        bp_core_redirect( bp_get_group_permalink( groups_get_current_group() ) ); 
     35                                } 
     36                        } 
     37 
     38                        // User wants to join any group. 
     39                        if ( ! groups_join_group( bp_get_current_group_id() ) ) { 
     40                                bp_core_add_message( __( 'There was an error joining the group.', 'buddypress' ), 'error' ); 
     41                        } else { 
     42                                bp_core_add_message( __( 'You joined the group!', 'buddypress' ) ); 
     43                        } 
     44 
     45                        bp_core_redirect( bp_get_group_permalink( groups_get_current_group() ) ); 
     46                } 
     47 
     48                /** 
     49                 * Filters the template to load for the single group screen. 
     50                 * 
     51                 * @since 1.0.0 
     52                 * 
     53                 * @param string $value Path to the single group template to load. 
     54                 */ 
     55                bp_core_load_template( apply_filters( 'groups_template_group_home', 'groups/single/home' ) ); 
     56        } 
     57} 
     58 No newline at end of file 
  • new file src/bp-groups/classes/class-bp-groups-action-leave-group.php

    new file mode 100644
    - +  
     1<?php 
     2/** 
     3 * BuddyPress Groups Classes. 
     4 * 
     5 * @package BuddyPress 
     6 * @subpackage GroupsClasses 
     7 * @since 2.9.0 
     8 */ 
     9 
     10// Exit if accessed directly. 
     11defined( 'ABSPATH' ) || exit; 
     12 
     13/** 
     14 * Catch and process "Leave Group" button clicks. 
     15 * 
     16 * @since 2.9.0 
     17 * 
     18 * @see groups_action_leave_group() 
     19 */ 
     20class BP_Groups_Action_Leave_Group { 
     21        /** 
     22         * Constructor. 
     23         * 
     24         * @since 2.9.0 
     25         */ 
     26        public function __construct() { 
     27                if ( groups_is_user_member( bp_loggedin_user_id(), bp_get_current_group_id() ) ) { 
     28                        // Stop sole admins from abandoning their group. 
     29                        $group_admins = groups_get_group_admins( bp_get_current_group_id() ); 
     30 
     31                        if ( 1 == count( $group_admins ) && $group_admins[0]->user_id == bp_loggedin_user_id() ) { 
     32                                bp_core_add_message( __( 'This group must have at least one admin', 'buddypress' ), 'error' ); 
     33                        } elseif ( ! groups_leave_group( bp_get_current_group_id() ) ) { 
     34                                bp_core_add_message( __( 'There was an error leaving the group.', 'buddypress' ), 'error' ); 
     35                        } else { 
     36                                bp_core_add_message( __( 'You successfully left the group.', 'buddypress' ) ); 
     37                        } 
     38 
     39                        $redirect = bp_get_group_permalink( groups_get_current_group() ); 
     40 
     41                        if( 'hidden' == buddypress()->groups->current_group->status ) { 
     42                                $redirect = trailingslashit( bp_loggedin_user_domain() . bp_get_groups_slug() ); 
     43                        } 
     44 
     45                        bp_core_redirect( $redirect ); 
     46                } 
     47 
     48                /** This filter is documented in bp-groups/bp-groups-actions.php */ 
     49                bp_core_load_template( apply_filters( 'groups_template_group_home', 'groups/single/home' ) ); 
     50        } 
     51} 
     52 No newline at end of file 
  • src/bp-groups/classes/class-bp-groups-component.php

     
    123123        public function includes( $includes = array() ) { 
    124124                $includes = array( 
    125125                        'cache', 
    126                         'forums', 
    127126                        'actions', 
    128127                        'filters', 
    129128                        'screens', 
    130129                        'widgets', 
    131                         'activity', 
    132130                        'template', 
    133131                        'adminbar', 
    134132                        'functions', 
    135133                        'notifications' 
    136134                ); 
    137135 
     136                // Conditional includes. 
    138137                if ( is_admin() ) { 
    139138                        $includes[] = 'admin'; 
    140139                } 
     140                if ( bp_is_active( 'activity' ) ) { 
     141                        $includes[] = 'activity'; 
     142                } 
     143                if ( bp_is_active( 'forums' ) && function_exists( 'bp_setup_forums' ) ) { 
     144                        $includes[] = 'forums'; 
     145                } 
    141146 
    142147                parent::includes( $includes ); 
    143148        } 
  • new file src/bp-groups/classes/class-bp-groups-screen-admin-avatar.php

    new file mode 100644
    - +  
     1<?php 
     2/** 
     3 * BuddyPress Groups Classes. 
     4 * 
     5 * @package BuddyPress 
     6 * @subpackage GroupsClasses 
     7 * @since 2.9.0 
     8 */ 
     9 
     10// Exit if accessed directly. 
     11defined( 'ABSPATH' ) || exit; 
     12 
     13/** 
     14 * Handle the display of a group's Change Avatar page. 
     15 * 
     16 * @since 2.9.0 
     17 * 
     18 * @see groups_screen_group_admin_avatar() 
     19 */ 
     20class BP_Groups_Screen_Admin_Avatar { 
     21        /** 
     22         * Constructor. 
     23         * 
     24         * @since 2.9.0 
     25         */ 
     26        public function __construct() { 
     27                $bp = buddypress(); 
     28 
     29                // If the group admin has deleted the admin avatar. 
     30                if ( bp_is_action_variable( 'delete', 1 ) ) { 
     31                        // Check the nonce. 
     32                        check_admin_referer( 'bp_group_avatar_delete' ); 
     33 
     34                        if ( bp_core_delete_existing_avatar( array( 'item_id' => bp_get_current_group_id(), 'object' => 'group' ) ) ) { 
     35                                bp_core_add_message( __( 'The group profile photo was deleted successfully!', 'buddypress' ) ); 
     36                        } else { 
     37                                bp_core_add_message( __( 'There was a problem deleting the group profile photo. Please try again.', 'buddypress' ), 'error' ); 
     38                        } 
     39                } 
     40 
     41                if ( ! isset( $bp->avatar_admin ) ) { 
     42                        $bp->avatar_admin = new stdClass(); 
     43                } 
     44 
     45                $bp->avatar_admin->step = 'upload-image'; 
     46 
     47                if ( !empty( $_FILES ) ) { 
     48 
     49                        // Check the nonce. 
     50                        check_admin_referer( 'bp_avatar_upload' ); 
     51 
     52                        // Pass the file to the avatar upload handler. 
     53                        if ( bp_core_avatar_handle_upload( $_FILES, 'groups_avatar_upload_dir' ) ) { 
     54                                $bp->avatar_admin->step = 'crop-image'; 
     55 
     56                                // Make sure we include the jQuery jCrop file for image cropping. 
     57                                add_action( 'wp_print_scripts', 'bp_core_add_jquery_cropper' ); 
     58                        } 
     59 
     60                } 
     61 
     62                // If the image cropping is done, crop the image and save a full/thumb version. 
     63                if ( isset( $_POST['avatar-crop-submit'] ) ) { 
     64                        // Check the nonce. 
     65                        check_admin_referer( 'bp_avatar_cropstore' ); 
     66 
     67                        $args = array( 
     68                                'object'        => 'group', 
     69                                'avatar_dir'    => 'group-avatars', 
     70                                'item_id'       => $bp->groups->current_group->id, 
     71                                'original_file' => $_POST['image_src'], 
     72                                'crop_x'        => $_POST['x'], 
     73                                'crop_y'        => $_POST['y'], 
     74                                'crop_w'        => $_POST['w'], 
     75                                'crop_h'        => $_POST['h'] 
     76                        ); 
     77 
     78                        if ( ! bp_core_avatar_handle_crop( $args ) ) { 
     79                                bp_core_add_message( __( 'There was a problem cropping the group profile photo.', 'buddypress' ), 'error' ); 
     80                        } else { 
     81                                /** 
     82                                 * Fires after a group avatar is uploaded. 
     83                                 * 
     84                                 * @since 2.8.0 
     85                                 * 
     86                                 * @param int    $group_id ID of the group. 
     87                                 * @param string $type     Avatar type. 'crop' or 'full'. 
     88                                 * @param array  $args     Array of parameters passed to the avatar handler. 
     89                                 */ 
     90                                do_action( 'groups_avatar_uploaded', bp_get_current_group_id(), 'crop', $args ); 
     91                                bp_core_add_message( __( 'The new group profile photo was uploaded successfully.', 'buddypress' ) ); 
     92                        } 
     93                } 
     94 
     95                /** 
     96                 * Fires before the loading of the group Change Avatar page template. 
     97                 * 
     98                 * @since 1.0.0 
     99                 * 
     100                 * @param int $id ID of the group that is being displayed. 
     101                 */ 
     102                do_action( 'groups_screen_group_admin_avatar', bp_get_current_group_id() ); 
     103 
     104                /** 
     105                 * Filters the template to load for a group's Change Avatar page. 
     106                 * 
     107                 * @since 1.0.0 
     108                 * 
     109                 * @param string $value Path to a group's Change Avatar template. 
     110                 */ 
     111                bp_core_load_template( apply_filters( 'groups_template_group_admin_avatar', 'groups/single/home' ) ); 
     112        } 
     113} 
     114 No newline at end of file 
  • new file src/bp-groups/classes/class-bp-groups-screen-admin-delete.php

    new file mode 100644
    - +  
     1<?php 
     2/** 
     3 * BuddyPress Groups Classes. 
     4 * 
     5 * @package BuddyPress 
     6 * @subpackage GroupsClasses 
     7 * @since 2.9.0 
     8 */ 
     9 
     10// Exit if accessed directly. 
     11defined( 'ABSPATH' ) || exit; 
     12 
     13/** 
     14 * Handle the display of the Delete Group page. 
     15 * 
     16 * @since 2.9.0 
     17 * 
     18 * @see groups_screen_group_admin_delete_group() 
     19 */ 
     20class BP_Groups_Screen_Admin_Delete { 
     21        /** 
     22         * Constructor. 
     23         * 
     24         * @since 2.9.0 
     25         */ 
     26        public function __construct() { 
     27                if ( isset( $_REQUEST['delete-group-button'] ) && isset( $_REQUEST['delete-group-understand'] ) ) { 
     28                        // Check the nonce first. 
     29                        if ( ! check_admin_referer( 'groups_delete_group' ) ) { 
     30                                return; 
     31                        } 
     32 
     33                        /** 
     34                         * Fires before the deletion of a group from the Delete Group page. 
     35                         * 
     36                         * @since 1.5.0 
     37                         * 
     38                         * @param int $id ID of the group being deleted. 
     39                         */ 
     40                        do_action( 'groups_before_group_deleted', bp_get_current_group_id() ); 
     41 
     42                        // Group admin has deleted the group, now do it. 
     43                        if ( ! groups_delete_group( bp_get_current_group_id() ) ) { 
     44                                bp_core_add_message( __( 'There was an error deleting the group. Please try again.', 'buddypress' ), 'error' ); 
     45                        } else { 
     46                                bp_core_add_message( __( 'The group was deleted successfully.', 'buddypress' ) ); 
     47 
     48                                /** 
     49                                 * Fires after the deletion of a group from the Delete Group page. 
     50                                 * 
     51                                 * @since 1.0.0 
     52                                 * 
     53                                 * @param int $id ID of the group being deleted. 
     54                                 */ 
     55                                do_action( 'groups_group_deleted', bp_get_current_group_id() ); 
     56 
     57                                bp_core_redirect( trailingslashit( bp_loggedin_user_domain() . bp_get_groups_slug() ) ); 
     58                        } 
     59 
     60                        bp_core_redirect( trailingslashit( bp_loggedin_user_domain() . bp_get_groups_slug() ) ); 
     61                } 
     62 
     63                /** 
     64                 * Fires before the loading of the Delete Group page template. 
     65                 * 
     66                 * @since 1.0.0 
     67                 * 
     68                 * @param int $id ID of the group that is being displayed. 
     69                 */ 
     70                do_action( 'groups_screen_group_admin_delete_group', bp_get_current_group_id() ); 
     71 
     72                /** 
     73                 * Filters the template to load for the Delete Group page. 
     74                 * 
     75                 * @since 1.0.0 
     76                 * 
     77                 * @param string $value Path to the Delete Group template. 
     78                 */ 
     79                bp_core_load_template( apply_filters( 'groups_template_group_admin_delete_group', 'groups/single/home' ) ); 
     80        } 
     81} 
     82 No newline at end of file 
  • new file src/bp-groups/classes/class-bp-groups-screen-admin-edit-details.php

    new file mode 100644
    - +  
     1<?php 
     2/** 
     3 * BuddyPress Groups Classes. 
     4 * 
     5 * @package BuddyPress 
     6 * @subpackage GroupsClasses 
     7 * @since 2.9.0 
     8 */ 
     9 
     10// Exit if accessed directly. 
     11defined( 'ABSPATH' ) || exit; 
     12 
     13/** 
     14 * Handle the display of a group's admin/edit-details page. 
     15 * 
     16 * @since 2.9.0 
     17 * 
     18 * @see groups_screen_group_admin_edit_details() 
     19 */ 
     20class BP_Groups_Screen_Admin_Edit_Details { 
     21        /** 
     22         * Constructor. 
     23         * 
     24         * @since 2.9.0 
     25         */ 
     26        public function __construct() { 
     27                // If the edit form has been submitted, save the edited details. 
     28                if ( isset( $_POST['save'] ) ) { 
     29                        // Check the nonce. 
     30                        if ( ! check_admin_referer( 'groups_edit_group_details' ) ) { 
     31                                return; 
     32                        } 
     33 
     34                        $group_notify_members = isset( $_POST['group-notify-members'] ) ? (int) $_POST['group-notify-members'] : 0; 
     35 
     36                        // Name and description are required and may not be empty. 
     37                        if ( empty( $_POST['group-name'] ) || empty( $_POST['group-desc'] ) ) { 
     38                                bp_core_add_message( __( 'Groups must have a name and a description. Please try again.', 'buddypress' ), 'error' ); 
     39 
     40                        } elseif ( ! groups_edit_base_group_details( array( 
     41                                'group_id'       => $_POST['group-id'], 
     42                                'name'           => $_POST['group-name'], 
     43                                'slug'           => null, // @TODO: Add to settings pane? If yes, editable by site admin only, or allow group admins to do this? 
     44                                'description'    => $_POST['group-desc'], 
     45                                'notify_members' => $group_notify_members, 
     46                        ) ) ) { 
     47                                bp_core_add_message( __( 'There was an error updating group details. Please try again.', 'buddypress' ), 'error' ); 
     48 
     49                        } else { 
     50                                bp_core_add_message( __( 'Group details were successfully updated.', 'buddypress' ) ); 
     51                        } 
     52 
     53                        /** 
     54                         * Fires before the redirect if a group details has been edited and saved. 
     55                         * 
     56                         * @since 1.0.0 
     57                         * 
     58                         * @param int $id ID of the group that was edited. 
     59                         */ 
     60                        do_action( 'groups_group_details_edited', bp_get_current_group_id() ); 
     61 
     62                        bp_core_redirect( bp_get_group_permalink( groups_get_current_group() ) . 'admin/edit-details/' ); 
     63                } 
     64 
     65                /** 
     66                 * Fires before the loading of the group admin/edit-details page template. 
     67                 * 
     68                 * @since 1.0.0 
     69                 * 
     70                 * @param int $id ID of the group that is being displayed. 
     71                 */ 
     72                do_action( 'groups_screen_group_admin_edit_details', bp_get_current_group_id() ); 
     73 
     74                /** 
     75                 * Filters the template to load for a group's admin/edit-details page. 
     76                 * 
     77                 * @since 1.0.0 
     78                 * 
     79                 * @param string $value Path to a group's admin/edit-details template. 
     80                 */ 
     81                bp_core_load_template( apply_filters( 'groups_template_group_admin', 'groups/single/home' ) ); 
     82        } 
     83} 
     84 No newline at end of file 
  • new file src/bp-groups/classes/class-bp-groups-screen-admin-manage-members.php

    new file mode 100644
    - +  
     1<?php 
     2/** 
     3 * BuddyPress Groups Classes. 
     4 * 
     5 * @package BuddyPress 
     6 * @subpackage GroupsClasses 
     7 * @since 2.9.0 
     8 */ 
     9 
     10// Exit if accessed directly. 
     11defined( 'ABSPATH' ) || exit; 
     12 
     13/** 
     14 * Handles actions related to member management on the group admin. 
     15 * 
     16 * @since 2.9.0 
     17 * 
     18 * @see groups_screen_group_admin_manage_members() 
     19 */ 
     20class BP_Groups_Screen_Admin_Manage_Members { 
     21        /** 
     22         * Constructor. 
     23         * 
     24         * @since 2.9.0 
     25         */ 
     26        public function __construct() { 
     27                if ( bp_action_variable( 1 ) && bp_action_variable( 2 ) && bp_action_variable( 3 ) ) { 
     28                        if ( bp_is_action_variable( 'promote', 1 ) && ( bp_is_action_variable( 'mod', 2 ) || bp_is_action_variable( 'admin', 2 ) ) && is_numeric( bp_action_variable( 3 ) ) ) { 
     29                                $user_id = bp_action_variable( 3 ); 
     30                                $status  = bp_action_variable( 2 ); 
     31 
     32                                // Check the nonce first. 
     33                                if ( ! check_admin_referer( 'groups_promote_member' ) ) { 
     34                                        return; 
     35                                } 
     36 
     37                                // Promote a user. 
     38                                if ( ! groups_promote_member( $user_id, bp_get_current_group_id(), $status ) ) { 
     39                                        bp_core_add_message( __( 'There was an error when promoting that user. Please try again.', 'buddypress' ), 'error' ); 
     40                                } else { 
     41                                        bp_core_add_message( __( 'User promoted successfully', 'buddypress' ) ); 
     42                                } 
     43 
     44                                /** 
     45                                 * Fires before the redirect after a group member has been promoted. 
     46                                 * 
     47                                 * @since 1.0.0 
     48                                 * 
     49                                 * @param int $user_id ID of the user being promoted. 
     50                                 * @param int $id      ID of the group user is promoted within. 
     51                                 */ 
     52                                do_action( 'groups_promoted_member', $user_id, bp_get_current_group_id() ); 
     53 
     54                                bp_core_redirect( bp_get_group_permalink( groups_get_current_group() ) . 'admin/manage-members/' ); 
     55                        } 
     56                } 
     57 
     58                if ( bp_action_variable( 1 ) && bp_action_variable( 2 ) ) { 
     59                        if ( bp_is_action_variable( 'demote', 1 ) && is_numeric( bp_action_variable( 2 ) ) ) { 
     60                                $user_id = bp_action_variable( 2 ); 
     61 
     62                                // Check the nonce first. 
     63                                if ( ! check_admin_referer( 'groups_demote_member' ) ) { 
     64                                        return; 
     65                                } 
     66 
     67                                // Stop sole admins from abandoning their group. 
     68                                $group_admins = groups_get_group_admins( bp_get_current_group_id() ); 
     69                                if ( 1 == count( $group_admins ) && $group_admins[0]->user_id == $user_id ) { 
     70                                        bp_core_add_message( __( 'This group must have at least one admin', 'buddypress' ), 'error' ); 
     71 
     72                                // Demote a user. 
     73                                } elseif ( ! groups_demote_member( $user_id, bp_get_current_group_id() ) ) { 
     74                                        bp_core_add_message( __( 'There was an error when demoting that user. Please try again.', 'buddypress' ), 'error' ); 
     75                                } else { 
     76                                        bp_core_add_message( __( 'User demoted successfully', 'buddypress' ) ); 
     77                                } 
     78 
     79                                /** 
     80                                 * Fires before the redirect after a group member has been demoted. 
     81                                 * 
     82                                 * @since 1.0.0 
     83                                 * 
     84                                 * @param int $user_id ID of the user being demoted. 
     85                                 * @param int $id      ID of the group user is demoted within. 
     86                                 */ 
     87                                do_action( 'groups_demoted_member', $user_id, bp_get_current_group_id() ); 
     88 
     89                                bp_core_redirect( bp_get_group_permalink( groups_get_current_group() ) . 'admin/manage-members/' ); 
     90                        } 
     91 
     92                        if ( bp_is_action_variable( 'ban', 1 ) && is_numeric( bp_action_variable( 2 ) ) ) { 
     93                                $user_id = bp_action_variable( 2 ); 
     94 
     95                                // Check the nonce first. 
     96                                if ( ! check_admin_referer( 'groups_ban_member' ) ) { 
     97                                        return; 
     98                                } 
     99 
     100                                // Ban a user. 
     101                                if ( ! groups_ban_member( $user_id, bp_get_current_group_id() ) ) { 
     102                                        bp_core_add_message( __( 'There was an error when banning that user. Please try again.', 'buddypress' ), 'error' ); 
     103                                } else { 
     104                                        bp_core_add_message( __( 'User banned successfully', 'buddypress' ) ); 
     105                                } 
     106 
     107                                /** 
     108                                 * Fires before the redirect after a group member has been banned. 
     109                                 * 
     110                                 * @since 1.0.0 
     111                                 * 
     112                                 * @param int $user_id ID of the user being banned. 
     113                                 * @param int $id      ID of the group user is banned from. 
     114                                 */ 
     115                                do_action( 'groups_banned_member', $user_id, bp_get_current_group_id() ); 
     116 
     117                                bp_core_redirect( bp_get_group_permalink( groups_get_current_group() ) . 'admin/manage-members/' ); 
     118                        } 
     119 
     120                        if ( bp_is_action_variable( 'unban', 1 ) && is_numeric( bp_action_variable( 2 ) ) ) { 
     121                                $user_id = bp_action_variable( 2 ); 
     122 
     123                                // Check the nonce first. 
     124                                if ( ! check_admin_referer( 'groups_unban_member' ) ) { 
     125                                        return; 
     126                                } 
     127 
     128                                // Remove a ban for user. 
     129                                if ( ! groups_unban_member( $user_id, bp_get_current_group_id() ) ) { 
     130                                        bp_core_add_message( __( 'There was an error when unbanning that user. Please try again.', 'buddypress' ), 'error' ); 
     131                                } else { 
     132                                        bp_core_add_message( __( 'User ban removed successfully', 'buddypress' ) ); 
     133                                } 
     134 
     135                                /** 
     136                                 * Fires before the redirect after a group member has been unbanned. 
     137                                 * 
     138                                 * @since 1.0.0 
     139                                 * 
     140                                 * @param int $user_id ID of the user being unbanned. 
     141                                 * @param int $id      ID of the group user is unbanned from. 
     142                                 */ 
     143                                do_action( 'groups_unbanned_member', $user_id, bp_get_current_group_id() ); 
     144 
     145                                bp_core_redirect( bp_get_group_permalink( groups_get_current_group() ) . 'admin/manage-members/' ); 
     146                        } 
     147 
     148                        if ( bp_is_action_variable( 'remove', 1 ) && is_numeric( bp_action_variable( 2 ) ) ) { 
     149                                $user_id = bp_action_variable( 2 ); 
     150 
     151                                // Check the nonce first. 
     152                                if ( ! check_admin_referer( 'groups_remove_member' ) ) { 
     153                                        return; 
     154                                } 
     155 
     156                                // Remove a user. 
     157                                if ( !groups_remove_member( $user_id, bp_get_current_group_id() ) ) { 
     158                                        bp_core_add_message( __( 'There was an error removing that user from the group. Please try again.', 'buddypress' ), 'error' ); 
     159                                } else { 
     160                                        bp_core_add_message( __( 'User removed successfully', 'buddypress' ) ); 
     161                                } 
     162 
     163                                /** 
     164                                 * Fires before the redirect after a group member has been removed. 
     165                                 * 
     166                                 * @since 1.2.6 
     167                                 * 
     168                                 * @param int $user_id ID of the user being removed. 
     169                                 * @param int $id      ID of the group the user is removed from. 
     170                                 */ 
     171                                do_action( 'groups_removed_member', $user_id, bp_get_current_group_id() ); 
     172 
     173                                bp_core_redirect( bp_get_group_permalink( groups_get_current_group() ) . 'admin/manage-members/' ); 
     174                        } 
     175                } 
     176 
     177                /** 
     178                 * Fires before the loading of a group's manage members template. 
     179                 * 
     180                 * @since 1.0.0 
     181                 * 
     182                 * @param int $id ID of the group whose manage members page is being displayed. 
     183                 */ 
     184                do_action( 'groups_screen_group_admin_manage_members', bp_get_current_group_id() ); 
     185 
     186                /** 
     187                 * Filters the template to load for a group's manage members page. 
     188                 * 
     189                 * @since 1.0.0 
     190                 * 
     191                 * @param string $value Path to a group's manage members template. 
     192                 */ 
     193                bp_core_load_template( apply_filters( 'groups_template_group_admin_manage_members', 'groups/single/home' ) ); 
     194        } 
     195} 
     196 No newline at end of file 
  • new file src/bp-groups/classes/class-bp-groups-screen-admin-requests.php

    new file mode 100644
    - +  
     1<?php 
     2/** 
     3 * BuddyPress Groups Classes. 
     4 * 
     5 * @package BuddyPress 
     6 * @subpackage GroupsClasses 
     7 * @since 2.9.0 
     8 */ 
     9 
     10// Exit if accessed directly. 
     11defined( 'ABSPATH' ) || exit; 
     12 
     13/** 
     14 * Handle the display of Admin > Membership Requests. 
     15 * 
     16 * @since 2.9.0 
     17 * 
     18 * @see groups_screen_group_admin_requests() 
     19 */ 
     20class BP_Groups_Screen_Admin_Requests { 
     21        /** 
     22         * Constructor. 
     23         * 
     24         * @since 2.9.0 
     25         */ 
     26        public function __construct() { 
     27                $request_action = (string) bp_action_variable( 1 ); 
     28                $membership_id  = (int) bp_action_variable( 2 ); 
     29 
     30                if ( ! empty( $request_action ) && ! empty( $membership_id ) ) { 
     31                        if ( 'accept' == $request_action && is_numeric( $membership_id ) ) { 
     32                                // Check the nonce first. 
     33                                if ( ! check_admin_referer( 'groups_accept_membership_request' ) ) { 
     34                                        return false; 
     35                                } 
     36 
     37                                // Accept the membership request. 
     38                                if ( ! groups_accept_membership_request( $membership_id ) ) { 
     39                                        bp_core_add_message( __( 'There was an error accepting the membership request. Please try again.', 'buddypress' ), 'error' ); 
     40                                } else { 
     41                                        bp_core_add_message( __( 'Group membership request accepted', 'buddypress' ) ); 
     42                                } 
     43 
     44                        } elseif ( 'reject' == $request_action && is_numeric( $membership_id ) ) { 
     45                                // Check the nonce first. 
     46                                if ( ! check_admin_referer( 'groups_reject_membership_request' ) ) { 
     47                                        return; 
     48                                } 
     49 
     50                                // Reject the membership request. 
     51                                if ( ! groups_reject_membership_request( $membership_id ) ) { 
     52                                        bp_core_add_message( __( 'There was an error rejecting the membership request. Please try again.', 'buddypress' ), 'error' ); 
     53                                } else { 
     54                                        bp_core_add_message( __( 'Group membership request rejected', 'buddypress' ) ); 
     55                                } 
     56                        } 
     57 
     58                        /** 
     59                         * Fires before the redirect if a group membership request has been handled. 
     60                         * 
     61                         * @since 1.0.0 
     62                         * 
     63                         * @param int    $id             ID of the group that was edited. 
     64                         * @param string $request_action Membership request action being performed. 
     65                         * @param int    $membership_id  The key of the action_variables array that you want. 
     66                         */ 
     67                        do_action( 'groups_group_request_managed', bp_get_current_group_id(), $request_action, $membership_id ); 
     68                        bp_core_redirect( bp_get_group_permalink( groups_get_current_group() ) . 'admin/membership-requests/' ); 
     69                } 
     70 
     71                /** 
     72                 * Fires before the loading of the group membership request page template. 
     73                 * 
     74                 * @since 1.0.0 
     75                 * 
     76                 * @param int $id ID of the group that is being displayed. 
     77                 */ 
     78                do_action( 'groups_screen_group_admin_requests', bp_get_current_group_id() ); 
     79 
     80                /** 
     81                 * Filters the template to load for a group's membership request page. 
     82                 * 
     83                 * @since 1.0.0 
     84                 * 
     85                 * @param string $value Path to a group's membership request template. 
     86                 */ 
     87                bp_core_load_template( apply_filters( 'groups_template_group_admin_requests', 'groups/single/home' ) ); 
     88        } 
     89} 
     90 No newline at end of file 
  • new file src/bp-groups/classes/class-bp-groups-screen-admin-settings.php

    new file mode 100644
    - +  
     1<?php 
     2/** 
     3 * BuddyPress Groups Classes. 
     4 * 
     5 * @package BuddyPress 
     6 * @subpackage GroupsClasses 
     7 * @since 2.9.0 
     8 */ 
     9 
     10// Exit if accessed directly. 
     11defined( 'ABSPATH' ) || exit; 
     12 
     13/** 
     14 * Handle the display of a group's admin/group-settings page. 
     15 * 
     16 * @since 2.9.0 
     17 * 
     18 * @see groups_screen_group_admin_settings() 
     19 */ 
     20class BP_Groups_Screen_Admin_Settings { 
     21        /** 
     22         * Constructor. 
     23         * 
     24         * @since 2.9.0 
     25         */ 
     26        public function __construct() { 
     27                // If the edit form has been submitted, save the edited details. 
     28                if ( isset( $_POST['save'] ) ) { 
     29                        $enable_forum   = ( isset($_POST['group-show-forum'] ) ) ? 1 : 0; 
     30 
     31                        // Checked against a whitelist for security. 
     32                        /** This filter is documented in bp-groups/bp-groups-admin.php */ 
     33                        $allowed_status = apply_filters( 'groups_allowed_status', array( 'public', 'private', 'hidden' ) ); 
     34                        $status         = ( in_array( $_POST['group-status'], (array) $allowed_status ) ) ? $_POST['group-status'] : 'public'; 
     35 
     36                        // Checked against a whitelist for security. 
     37                        /** This filter is documented in bp-groups/bp-groups-admin.php */ 
     38                        $allowed_invite_status = apply_filters( 'groups_allowed_invite_status', array( 'members', 'mods', 'admins' ) ); 
     39                        $invite_status         = isset( $_POST['group-invite-status'] ) && in_array( $_POST['group-invite-status'], (array) $allowed_invite_status ) ? $_POST['group-invite-status'] : 'members'; 
     40 
     41                        // Check the nonce. 
     42                        if ( !check_admin_referer( 'groups_edit_group_settings' ) ) 
     43                                return false; 
     44 
     45                        /* 
     46                         * Save group types. 
     47                         * 
     48                         * Ensure we keep types that have 'show_in_create_screen' set to false. 
     49                         */ 
     50                        $current_types = bp_groups_get_group_type( bp_get_current_group_id(), false ); 
     51                        $current_types = array_intersect( bp_groups_get_group_types( array( 'show_in_create_screen' => false ) ), (array) $current_types ); 
     52                        if ( isset( $_POST['group-types'] ) ) { 
     53                                $current_types = array_merge( $current_types, $_POST['group-types'] ); 
     54 
     55                                // Set group types. 
     56                                bp_groups_set_group_type( bp_get_current_group_id(), $current_types ); 
     57 
     58                        // No group types checked, so this means we want to wipe out all group types. 
     59                        } else { 
     60                                /* 
     61                                 * Passing a blank string will wipe out all types for the group. 
     62                                 * 
     63                                 * Ensure we keep types that have 'show_in_create_screen' set to false. 
     64                                 */ 
     65                                $current_types = empty( $current_types ) ? '' : $current_types; 
     66 
     67                                // Set group types. 
     68                                bp_groups_set_group_type( bp_get_current_group_id(), $current_types ); 
     69                        } 
     70 
     71                        if ( !groups_edit_group_settings( $_POST['group-id'], $enable_forum, $status, $invite_status ) ) { 
     72                                bp_core_add_message( __( 'There was an error updating group settings. Please try again.', 'buddypress' ), 'error' ); 
     73                        } else { 
     74                                bp_core_add_message( __( 'Group settings were successfully updated.', 'buddypress' ) ); 
     75                        } 
     76 
     77                        /** 
     78                         * Fires before the redirect if a group settings has been edited and saved. 
     79                         * 
     80                         * @since 1.0.0 
     81                         * 
     82                         * @param int $id ID of the group that was edited. 
     83                         */ 
     84                        do_action( 'groups_group_settings_edited', bp_get_current_group_id() ); 
     85 
     86                        bp_core_redirect( bp_get_group_permalink( groups_get_current_group() ) . 'admin/group-settings/' ); 
     87                } 
     88 
     89                /** 
     90                 * Fires before the loading of the group admin/group-settings page template. 
     91                 * 
     92                 * @since 1.0.0 
     93                 * 
     94                 * @param int $id ID of the group that is being displayed. 
     95                 */ 
     96                do_action( 'groups_screen_group_admin_settings', bp_get_current_group_id() ); 
     97 
     98                /** 
     99                 * Filters the template to load for a group's admin/group-settings page. 
     100                 * 
     101                 * @since 1.0.0 
     102                 * 
     103                 * @param string $value Path to a group's admin/group-settings template. 
     104                 */ 
     105                bp_core_load_template( apply_filters( 'groups_template_group_admin_settings', 'groups/single/home' ) ); 
     106        } 
     107} 
     108 No newline at end of file 
  • new file src/bp-groups/classes/class-bp-groups-screen-remove-invites.php

    new file mode 100644
    - +  
     1<?php 
     2/** 
     3 * BuddyPress Groups Classes. 
     4 * 
     5 * @package BuddyPress 
     6 * @subpackage GroupsClasses 
     7 * @since 2.9.0 
     8 */ 
     9 
     10// Exit if accessed directly. 
     11defined( 'ABSPATH' ) || exit; 
     12 
     13/** 
     14 * Process group invitation removal requests. 
     15 * 
     16 * @since 2.9.0 
     17 * 
     18 * @see groups_remove_group_invite() 
     19 */ 
     20class BP_Groups_Screen_Remove_Invites { 
     21        /** 
     22         * Constructor. 
     23         * 
     24         * @since 2.9.0 
     25         */ 
     26        public function __construct() { 
     27                $friend_id = intval( bp_action_variable( 1 ) ); 
     28                $group_id  = bp_get_current_group_id(); 
     29                $message   = __( 'Invite successfully removed', 'buddypress' ); 
     30                $redirect  = wp_get_referer(); 
     31                $error     = false; 
     32 
     33                if ( ! bp_groups_user_can_send_invites( $group_id ) ) { 
     34                        $message = __( 'You are not allowed to send or remove invites', 'buddypress' ); 
     35                        $error = 'error'; 
     36                } elseif ( groups_check_for_membership_request( $friend_id, $group_id ) ) { 
     37                        $message = __( 'The member requested to join the group', 'buddypress' ); 
     38                        $error = 'error'; 
     39                } elseif ( ! groups_uninvite_user( $friend_id, $group_id ) ) { 
     40                        $message = __( 'There was an error removing the invite', 'buddypress' ); 
     41                        $error = 'error'; 
     42                } 
     43 
     44                bp_core_add_message( $message, $error ); 
     45                bp_core_redirect( $redirect ); 
     46        } 
     47} 
     48 No newline at end of file 
  • new file src/bp-groups/classes/class-bp-groups-screen-request-membership.php

    new file mode 100644
    - +  
     1<?php 
     2/** 
     3 * BuddyPress Groups Classes. 
     4 * 
     5 * @package BuddyPress 
     6 * @subpackage GroupsClasses 
     7 * @since 2.9.0 
     8 */ 
     9 
     10// Exit if accessed directly. 
     11defined( 'ABSPATH' ) || exit; 
     12 
     13/** 
     14 * Handle the display of a group's Request Membership page. 
     15 * 
     16 * @since 2.9.0 
     17 * 
     18 * @see groups_screen_group_request_membership() 
     19 */ 
     20class BP_Groups_Screen_Request_Membership { 
     21        /** 
     22         * Constructor. 
     23         * 
     24         * @since 2.9.0 
     25         */ 
     26        public function __construct() { 
     27                // If the user is already invited, accept invitation. 
     28                if ( groups_check_user_has_invite( bp_loggedin_user_id(), bp_get_current_group_id() ) ) { 
     29                        if ( groups_accept_invite( bp_loggedin_user_id(), bp_get_current_group_id() ) ) 
     30                                bp_core_add_message( __( 'Group invite accepted', 'buddypress' ) ); 
     31                        else 
     32                                bp_core_add_message( __( 'There was an error accepting the group invitation. Please try again.', 'buddypress' ), 'error' ); 
     33                        bp_core_redirect( bp_get_group_permalink( groups_get_current_group() ) ); 
     34                } 
     35 
     36                // If the user has submitted a request, send it. 
     37                if ( isset( $_POST['group-request-send']) ) { 
     38                        // Check the nonce. 
     39                        if ( ! check_admin_referer( 'groups_request_membership' ) ) { 
     40                                return; 
     41                        } 
     42 
     43                        if ( ! groups_send_membership_request( bp_loggedin_user_id(), bp_get_current_group_id() ) ) { 
     44                                bp_core_add_message( __( 'There was an error sending your group membership request. Please try again.', 'buddypress' ), 'error' ); 
     45                        } else { 
     46                                bp_core_add_message( __( 'Your membership request was sent to the group administrator successfully. You will be notified when the group administrator responds to your request.', 'buddypress' ) ); 
     47                        } 
     48                        bp_core_redirect( bp_get_group_permalink( groups_get_current_group() ) ); 
     49                } 
     50 
     51                /** 
     52                 * Fires before the loading of a group's Request Memebership page. 
     53                 * 
     54                 * @since 1.0.0 
     55                 * 
     56                 * @param int $id ID of the group currently being displayed. 
     57                 */ 
     58                do_action( 'groups_screen_group_request_membership', bp_get_current_group_id() ); 
     59 
     60                /** 
     61                 * Filters the template to load for a group's Request Membership page. 
     62                 * 
     63                 * @since 1.0.0 
     64                 * 
     65                 * @param string $value Path to a group's Request Membership template. 
     66                 */ 
     67                bp_core_load_template( apply_filters( 'groups_template_group_request_membership', 'groups/single/home' ) ); 
     68        } 
     69} 
     70 No newline at end of file 
  • new file src/bp-groups/classes/class-bp-groups-screen-send-invites.php

    new file mode 100644
    - +  
     1<?php 
     2/** 
     3 * BuddyPress Groups Classes. 
     4 * 
     5 * @package BuddyPress 
     6 * @subpackage GroupsClasses 
     7 * @since 2.9.0 
     8 */ 
     9 
     10// Exit if accessed directly. 
     11defined( 'ABSPATH' ) || exit; 
     12 
     13/** 
     14 * Handle the display of a group's Send Invites page. 
     15 * 
     16 * @since 2.9.0 
     17 * 
     18 * @see groups_screen_group_invite() 
     19 */ 
     20class BP_Groups_Screen_Send_Invites { 
     21        /** 
     22         * Constructor. 
     23         * 
     24         * @since 2.9.0 
     25         */ 
     26        public function __construct() { 
     27                if ( bp_is_action_variable( 'send', 0 ) ) { 
     28 
     29                        if ( ! check_admin_referer( 'groups_send_invites', '_wpnonce_send_invites' ) ) { 
     30                                return; 
     31                        } 
     32 
     33                        if ( ! empty( $_POST['friends'] ) ) { 
     34                                foreach( (array) $_POST['friends'] as $friend ) { 
     35                                        groups_invite_user( array( 'user_id' => $friend, 'group_id' => bp_get_current_group_id() ) ); 
     36                                } 
     37                        } 
     38 
     39                        // Send the invites. 
     40                        groups_send_invites( bp_loggedin_user_id(), bp_get_current_group_id() ); 
     41                        bp_core_add_message( __('Group invites sent.', 'buddypress') ); 
     42 
     43                        /** 
     44                         * Fires after the sending of a group invite inside the group's Send Invites page. 
     45                         * 
     46                         * @since 1.0.0 
     47                         * 
     48                         * @param int $id ID of the group whose members are being displayed. 
     49                         */ 
     50                        do_action( 'groups_screen_group_invite', bp_get_current_group_id() ); 
     51                        bp_core_redirect( bp_get_group_permalink( groups_get_current_group() ) ); 
     52 
     53                } elseif ( ! bp_action_variable( 0 ) ) { 
     54                        /** 
     55                         * Filters the template to load for a group's Send Invites page. 
     56                         * 
     57                         * @since 1.0.0 
     58                         * 
     59                         * @param string $value Path to a group's Send Invites template. 
     60                         */ 
     61                        bp_core_load_template( apply_filters( 'groups_template_group_invite', 'groups/single/home' ) ); 
     62 
     63                } else { 
     64                        bp_do_404(); 
     65                } 
     66        } 
     67} 
     68 No newline at end of file 
  • new file src/bp-groups/classes/class-bp-groups-screen-user-invites.php

    new file mode 100644
    - +  
     1<?php 
     2/** 
     3 * BuddyPress Groups Classes. 
     4 * 
     5 * @package BuddyPress 
     6 * @subpackage GroupsClasses 
     7 * @since 2.9.0 
     8 */ 
     9 
     10// Exit if accessed directly. 
     11defined( 'ABSPATH' ) || exit; 
     12 
     13/** 
     14 * Handle the loading of a user's Groups > Invites page. 
     15 * 
     16 * @since 2.9.0 
     17 * 
     18 * @see groups_screen_group_invites() 
     19 */ 
     20class BP_Groups_Screen_User_Invites { 
     21        /** 
     22         * Constructor. 
     23         * 
     24         * @since 2.9.0 
     25         */ 
     26        public function __construct() { 
     27                $group_id = (int) bp_action_variable( 1 ); 
     28 
     29                if ( bp_is_action_variable( 'accept' ) && is_numeric( $group_id ) ) { 
     30                        // Check the nonce. 
     31                        if ( ! check_admin_referer( 'groups_accept_invite' ) ) { 
     32                                return; 
     33                        } 
     34 
     35                        if ( ! groups_accept_invite( bp_loggedin_user_id(), $group_id ) ) { 
     36                                bp_core_add_message( __('Group invite could not be accepted', 'buddypress'), 'error' ); 
     37                        } else { 
     38                                // Record this in activity streams. 
     39                                $group = groups_get_group( $group_id ); 
     40 
     41                                bp_core_add_message( sprintf( __( 'Group invite accepted. Visit %s.', 'buddypress' ), bp_get_group_link( $group ) ) ); 
     42 
     43                                groups_record_activity( array( 
     44                                        'type'    => 'joined_group', 
     45                                        'item_id' => $group->id 
     46                                ) ); 
     47                        } 
     48 
     49                        if ( isset( $_GET['redirect_to'] ) ) { 
     50                                $redirect_to = urldecode( $_GET['redirect_to'] ); 
     51                        } else { 
     52                                $redirect_to = trailingslashit( bp_loggedin_user_domain() . bp_get_groups_slug() . '/' . bp_current_action() ); 
     53                        } 
     54 
     55                        bp_core_redirect( $redirect_to ); 
     56 
     57                } elseif ( bp_is_action_variable( 'reject' ) && is_numeric( $group_id ) ) { 
     58                        // Check the nonce. 
     59                        if ( ! check_admin_referer( 'groups_reject_invite' ) ) { 
     60                                return; 
     61                        } 
     62 
     63                        if ( ! groups_reject_invite( bp_loggedin_user_id(), $group_id ) ) { 
     64                                bp_core_add_message( __( 'Group invite could not be rejected', 'buddypress' ), 'error' ); 
     65                        } else { 
     66                                bp_core_add_message( __( 'Group invite rejected', 'buddypress' ) ); 
     67                        } 
     68 
     69                        if ( isset( $_GET['redirect_to'] ) ) { 
     70                                $redirect_to = urldecode( $_GET['redirect_to'] ); 
     71                        } else { 
     72                                $redirect_to = trailingslashit( bp_loggedin_user_domain() . bp_get_groups_slug() . '/' . bp_current_action() ); 
     73                        } 
     74 
     75                        bp_core_redirect( $redirect_to ); 
     76                } 
     77 
     78                /** 
     79                 * Fires before the loading of a users Groups > Invites template. 
     80                 * 
     81                 * @since 1.0.0 
     82                 * 
     83                 * @param int $group_id ID of the group being displayed 
     84                 */ 
     85                do_action( 'groups_screen_group_invites', $group_id ); 
     86 
     87                /** 
     88                 * Filters the template to load for a users Groups > Invites page. 
     89                 * 
     90                 * @since 1.0.0 
     91                 * 
     92                 * @param string $value Path to a users Groups > Invites page template. 
     93                 */ 
     94                bp_core_load_template( apply_filters( 'groups_template_group_invites', 'members/single/home' ) ); 
     95        } 
     96} 
     97 No newline at end of file 
  • new file src/bp-groups/classes/class-bp-groups-screen-user-settings-notifications.php

    new file mode 100644
    - +  
     1<?php 
     2/** 
     3 * BuddyPress Groups Classes. 
     4 * 
     5 * @package BuddyPress 
     6 * @subpackage GroupsClasses 
     7 * @since 2.9.0 
     8 */ 
     9 
     10// Exit if accessed directly. 
     11defined( 'ABSPATH' ) || exit; 
     12 
     13/** 
     14 * Render the group settings fields on the Notification Settings page. 
     15 * 
     16 * @since 2.9.0 
     17 * 
     18 * @see groups_screen_notification_settings() 
     19 */ 
     20class BP_Groups_Screen_User_Settings_Notifications { 
     21        /** 
     22         * Constructor. 
     23         * 
     24         * @since 2.9.0 
     25         */ 
     26        public function __construct() { 
     27                if ( ! $group_invite = bp_get_user_meta( bp_displayed_user_id(), 'notification_groups_invite', true ) ) 
     28                        $group_invite  = 'yes'; 
     29 
     30                if ( ! $group_update = bp_get_user_meta( bp_displayed_user_id(), 'notification_groups_group_updated', true ) ) 
     31                        $group_update  = 'yes'; 
     32 
     33                if ( ! $group_promo = bp_get_user_meta( bp_displayed_user_id(), 'notification_groups_admin_promotion', true ) ) 
     34                        $group_promo   = 'yes'; 
     35 
     36                if ( ! $group_request = bp_get_user_meta( bp_displayed_user_id(), 'notification_groups_membership_request', true ) ) 
     37                        $group_request = 'yes'; 
     38 
     39                if ( ! $group_request_completed = bp_get_user_meta( bp_displayed_user_id(), 'notification_membership_request_completed', true ) ) { 
     40                        $group_request_completed = 'yes'; 
     41                } 
     42                ?> 
     43 
     44                <table class="notification-settings" id="groups-notification-settings"> 
     45                        <thead> 
     46                                <tr> 
     47                                        <th class="icon"></th> 
     48                                        <th class="title"><?php _ex( 'Groups', 'Group settings on notification settings page', 'buddypress' ) ?></th> 
     49                                        <th class="yes"><?php _e( 'Yes', 'buddypress' ) ?></th> 
     50                                        <th class="no"><?php _e( 'No', 'buddypress' )?></th> 
     51                                </tr> 
     52                        </thead> 
     53 
     54                        <tbody> 
     55                                <tr id="groups-notification-settings-invitation"> 
     56                                        <td></td> 
     57                                        <td><?php _ex( 'A member invites you to join a group', 'group settings on notification settings page','buddypress' ) ?></td> 
     58                                        <td class="yes"><input type="radio" name="notifications[notification_groups_invite]" id="notification-groups-invite-yes" value="yes" <?php checked( $group_invite, 'yes', true ) ?>/><label for="notification-groups-invite-yes" class="bp-screen-reader-text"><?php 
     59                                                /* translators: accessibility text */ 
     60                                                _e( 'Yes, send email', 'buddypress' ); 
     61                                        ?></label></td> 
     62                                        <td class="no"><input type="radio" name="notifications[notification_groups_invite]" id="notification-groups-invite-no" value="no" <?php checked( $group_invite, 'no', true ) ?>/><label for="notification-groups-invite-no" class="bp-screen-reader-text"><?php 
     63                                                /* translators: accessibility text */ 
     64                                                _e( 'No, do not send email', 'buddypress' ); 
     65                                        ?></label></td> 
     66                                </tr> 
     67                                <tr id="groups-notification-settings-info-updated"> 
     68                                        <td></td> 
     69                                        <td><?php _ex( 'Group information is updated', 'group settings on notification settings page', 'buddypress' ) ?></td> 
     70                                        <td class="yes"><input type="radio" name="notifications[notification_groups_group_updated]" id="notification-groups-group-updated-yes" value="yes" <?php checked( $group_update, 'yes', true ) ?>/><label for="notification-groups-group-updated-yes" class="bp-screen-reader-text"><?php 
     71                                                /* translators: accessibility text */ 
     72                                                _e( 'Yes, send email', 'buddypress' ); 
     73                                        ?></label></td> 
     74                                        <td class="no"><input type="radio" name="notifications[notification_groups_group_updated]" id="notification-groups-group-updated-no" value="no" <?php checked( $group_update, 'no', true ) ?>/><label for="notification-groups-group-updated-no" class="bp-screen-reader-text"><?php 
     75                                                /* translators: accessibility text */ 
     76                                                _e( 'No, do not send email', 'buddypress' ); 
     77                                        ?></label></td> 
     78                                </tr> 
     79                                <tr id="groups-notification-settings-promoted"> 
     80                                        <td></td> 
     81                                        <td><?php _ex( 'You are promoted to a group administrator or moderator', 'group settings on notification settings page', 'buddypress' ) ?></td> 
     82                                        <td class="yes"><input type="radio" name="notifications[notification_groups_admin_promotion]" id="notification-groups-admin-promotion-yes" value="yes" <?php checked( $group_promo, 'yes', true ) ?>/><label for="notification-groups-admin-promotion-yes" class="bp-screen-reader-text"><?php 
     83                                                /* translators: accessibility text */ 
     84                                                _e( 'Yes, send email', 'buddypress' ); 
     85                                        ?></label></td> 
     86                                        <td class="no"><input type="radio" name="notifications[notification_groups_admin_promotion]" id="notification-groups-admin-promotion-no" value="no" <?php checked( $group_promo, 'no', true ) ?>/><label for="notification-groups-admin-promotion-no" class="bp-screen-reader-text"><?php 
     87                                                /* translators: accessibility text */ 
     88                                                _e( 'No, do not send email', 'buddypress' ); 
     89                                        ?></label></td> 
     90                                </tr> 
     91                                <tr id="groups-notification-settings-request"> 
     92                                        <td></td> 
     93                                        <td><?php _ex( 'A member requests to join a private group for which you are an admin', 'group settings on notification settings page', 'buddypress' ) ?></td> 
     94                                        <td class="yes"><input type="radio" name="notifications[notification_groups_membership_request]" id="notification-groups-membership-request-yes" value="yes" <?php checked( $group_request, 'yes', true ) ?>/><label for="notification-groups-membership-request-yes" class="bp-screen-reader-text"><?php 
     95                                                /* translators: accessibility text */ 
     96                                                _e( 'Yes, send email', 'buddypress' ); 
     97                                        ?></label></td> 
     98                                        <td class="no"><input type="radio" name="notifications[notification_groups_membership_request]" id="notification-groups-membership-request-no" value="no" <?php checked( $group_request, 'no', true ) ?>/><label for="notification-groups-membership-request-no" class="bp-screen-reader-text"><?php 
     99                                                /* translators: accessibility text */ 
     100                                                _e( 'No, do not send email', 'buddypress' ); 
     101                                        ?></label></td> 
     102                                </tr> 
     103                                <tr id="groups-notification-settings-request-completed"> 
     104                                        <td></td> 
     105                                        <td><?php _ex( 'Your request to join a group has been approved or denied', 'group settings on notification settings page', 'buddypress' ) ?></td> 
     106                                        <td class="yes"><input type="radio" name="notifications[notification_membership_request_completed]" id="notification-groups-membership-request-completed-yes" value="yes" <?php checked( $group_request_completed, 'yes', true ) ?>/><label for="notification-groups-membership-request-completed-yes" class="bp-screen-reader-text"><?php 
     107                                                /* translators: accessibility text */ 
     108                                                _e( 'Yes, send email', 'buddypress' ); 
     109                                        ?></label></td> 
     110                                        <td class="no"><input type="radio" name="notifications[notification_membership_request_completed]" id="notification-groups-membership-request-completed-no" value="no" <?php checked( $group_request_completed, 'no', true ) ?>/><label for="notification-groups-membership-request-completed-no" class="bp-screen-reader-text"><?php 
     111                                                /* translators: accessibility text */ 
     112                                                _e( 'No, do not send email', 'buddypress' ); 
     113                                        ?></label></td> 
     114                                </tr> 
     115 
     116                                <?php 
     117 
     118                                /** 
     119                                 * Fires at the end of the available group settings fields on Notification Settings page. 
     120                                 * 
     121                                 * @since 1.0.0 
     122                                 */ 
     123                                do_action( 'groups_screen_notification_settings' ); ?> 
     124 
     125                        </tbody> 
     126                </table> 
     127 
     128        <?php 
     129        } 
     130} 
     131 No newline at end of file