Skip to:
Content

Ticket #7218: 7218.groups.patch

File 7218.groups.patch, 47.8 KB (added by r-a-y, 9 months ago)

For the Groups component - refreshed for 2.9. Also conditonally loads notification settings and the activity and legacy forums code if those components are active.

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

    diff --git src/bp-groups/bp-groups-actions.php src/bp-groups/bp-groups-actions.php
    index 4f804955..4252d4d4 100644
     
    1515defined( 'ABSPATH' ) || exit; 
    1616 
    1717/** 
    18  * Fire the 'bp_groups_register_group_types' action. 
    19  * 
    20  * @since 2.6.0 
    21  */ 
    22 function bp_groups_register_group_types() { 
    23         /** 
    24          * Fires when it's appropriate to register group types. 
    25          * 
    26          * @since 2.6.0 
    27          */ 
    28         do_action( 'bp_groups_register_group_types' ); 
    29 } 
    30 add_action( 'bp_register_taxonomies', 'bp_groups_register_group_types' ); 
    31  
    32 /** 
    3318 * Protect access to single groups. 
    3419 * 
    3520 * @since 2.1.0 
    function groups_action_group_feed() { 
    594579        ) ); 
    595580} 
    596581add_action( 'bp_actions', 'groups_action_group_feed' ); 
    597  
    598 /** 
    599  * Update orphaned child groups when the parent is deleted. 
    600  * 
    601  * @since 2.7.0 
    602  * 
    603  * @param BP_Groups_Group $group Instance of the group item being deleted. 
    604  */ 
    605 function bp_groups_update_orphaned_groups_on_group_delete( $group ) { 
    606         // Get child groups and set the parent to the deleted parent's parent. 
    607         $grandparent_group_id = $group->parent_id; 
    608         $child_args = array( 
    609                 'parent_id'         => $group->id, 
    610                 'show_hidden'       => true, 
    611                 'per_page'          => false, 
    612                 'update_meta_cache' => false, 
    613         ); 
    614         $children = groups_get_groups( $child_args ); 
    615         $children = $children['groups']; 
    616  
    617         foreach ( $children as $cgroup ) { 
    618                 $cgroup->parent_id = $grandparent_group_id; 
    619                 $cgroup->save(); 
    620         } 
    621 } 
    622 add_action( 'bp_groups_delete_group', 'bp_groups_update_orphaned_groups_on_group_delete', 10, 2 ); 
  • src/bp-groups/bp-groups-forums.php

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

    diff --git src/bp-groups/bp-groups-functions.php src/bp-groups/bp-groups-functions.php
    index fe7fad6b..c9ccc14b 100644
    add_action( 'wpmu_delete_user', 'groups_remove_data_for_user' ); 
    21252125add_action( 'delete_user',       'groups_remove_data_for_user' ); 
    21262126add_action( 'bp_make_spam_user', 'groups_remove_data_for_user' ); 
    21272127 
     2128/** 
     2129 * Update orphaned child groups when the parent is deleted. 
     2130 * 
     2131 * @since 2.7.0 
     2132 * 
     2133 * @param BP_Groups_Group $group Instance of the group item being deleted. 
     2134 */ 
     2135function bp_groups_update_orphaned_groups_on_group_delete( $group ) { 
     2136        // Get child groups and set the parent to the deleted parent's parent. 
     2137        $grandparent_group_id = $group->parent_id; 
     2138        $child_args = array( 
     2139                'parent_id'         => $group->id, 
     2140                'show_hidden'       => true, 
     2141                'per_page'          => false, 
     2142                'update_meta_cache' => false, 
     2143        ); 
     2144        $children = groups_get_groups( $child_args ); 
     2145        $children = $children['groups']; 
     2146 
     2147        foreach ( $children as $cgroup ) { 
     2148                $cgroup->parent_id = $grandparent_group_id; 
     2149                $cgroup->save(); 
     2150        } 
     2151} 
     2152add_action( 'bp_groups_delete_group', 'bp_groups_update_orphaned_groups_on_group_delete', 10, 2 ); 
     2153 
    21282154/** Group Types ***************************************************************/ 
    21292155 
    21302156/** 
     2157 * Fire the 'bp_groups_register_group_types' action. 
     2158 * 
     2159 * @since 2.6.0 
     2160 */ 
     2161function bp_groups_register_group_types() { 
     2162        /** 
     2163         * Fires when it's appropriate to register group types. 
     2164         * 
     2165         * @since 2.6.0 
     2166         */ 
     2167        do_action( 'bp_groups_register_group_types' ); 
     2168} 
     2169add_action( 'bp_register_taxonomies', 'bp_groups_register_group_types' ); 
     2170 
     2171/** 
    21312172 * Register a group type. 
    21322173 * 
    21332174 * @since 2.6.0 
  • src/bp-groups/bp-groups-screens.php

    diff --git src/bp-groups/bp-groups-screens.php src/bp-groups/bp-groups-screens.php
    index 06ffee75..eccac099 100644
    function groups_screen_group_home() { 
    169169} 
    170170 
    171171/** 
    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 /** 
    573172 * Handle the display of a group's Members page. 
    574173 * 
    575174 * @since 1.0.0 
    function groups_screen_group_admin_delete_group() { 
    14381037} 
    14391038add_action( 'bp_screens', 'groups_screen_group_admin_delete_group' ); 
    14401039 
    1441 /** 
    1442  * Render the group settings fields on the Notification Settings page. 
    1443  * 
    1444  * @since 1.0.0 
    1445  */ 
    1446 function groups_screen_notification_settings() { 
    1447  
    1448         if ( !$group_invite = bp_get_user_meta( bp_displayed_user_id(), 'notification_groups_invite', true ) ) 
    1449                 $group_invite  = 'yes'; 
    1450  
    1451         if ( !$group_update = bp_get_user_meta( bp_displayed_user_id(), 'notification_groups_group_updated', true ) ) 
    1452                 $group_update  = 'yes'; 
    1453  
    1454         if ( !$group_promo = bp_get_user_meta( bp_displayed_user_id(), 'notification_groups_admin_promotion', true ) ) 
    1455                 $group_promo   = 'yes'; 
    1456  
    1457         if ( !$group_request = bp_get_user_meta( bp_displayed_user_id(), 'notification_groups_membership_request', true ) ) 
    1458                 $group_request = 'yes'; 
    1459  
    1460         if ( ! $group_request_completed = bp_get_user_meta( bp_displayed_user_id(), 'notification_membership_request_completed', true ) ) { 
    1461                 $group_request_completed = 'yes'; 
    1462         } 
    1463         ?> 
    1464  
    1465         <table class="notification-settings" id="groups-notification-settings"> 
    1466                 <thead> 
    1467                         <tr> 
    1468                                 <th class="icon"></th> 
    1469                                 <th class="title"><?php _ex( 'Groups', 'Group settings on notification settings page', 'buddypress' ) ?></th> 
    1470                                 <th class="yes"><?php _e( 'Yes', 'buddypress' ) ?></th> 
    1471                                 <th class="no"><?php _e( 'No', 'buddypress' )?></th> 
    1472                         </tr> 
    1473                 </thead> 
    1474  
    1475                 <tbody> 
    1476                         <tr id="groups-notification-settings-invitation"> 
    1477                                 <td></td> 
    1478                                 <td><?php _ex( 'A member invites you to join a group', 'group settings on notification settings page','buddypress' ) ?></td> 
    1479                                 <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 
    1480                                         /* translators: accessibility text */ 
    1481                                         _e( 'Yes, send email', 'buddypress' ); 
    1482                                 ?></label></td> 
    1483                                 <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 
    1484                                         /* translators: accessibility text */ 
    1485                                         _e( 'No, do not send email', 'buddypress' ); 
    1486                                 ?></label></td> 
    1487                         </tr> 
    1488                         <tr id="groups-notification-settings-info-updated"> 
    1489                                 <td></td> 
    1490                                 <td><?php _ex( 'Group information is updated', 'group settings on notification settings page', 'buddypress' ) ?></td> 
    1491                                 <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 
    1492                                         /* translators: accessibility text */ 
    1493                                         _e( 'Yes, send email', 'buddypress' ); 
    1494                                 ?></label></td> 
    1495                                 <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 
    1496                                         /* translators: accessibility text */ 
    1497                                         _e( 'No, do not send email', 'buddypress' ); 
    1498                                 ?></label></td> 
    1499                         </tr> 
    1500                         <tr id="groups-notification-settings-promoted"> 
    1501                                 <td></td> 
    1502                                 <td><?php _ex( 'You are promoted to a group administrator or moderator', 'group settings on notification settings page', 'buddypress' ) ?></td> 
    1503                                 <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 
    1504                                         /* translators: accessibility text */ 
    1505                                         _e( 'Yes, send email', 'buddypress' ); 
    1506                                 ?></label></td> 
    1507                                 <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 
    1508                                         /* translators: accessibility text */ 
    1509                                         _e( 'No, do not send email', 'buddypress' ); 
    1510                                 ?></label></td> 
    1511                         </tr> 
    1512                         <tr id="groups-notification-settings-request"> 
    1513                                 <td></td> 
    1514                                 <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> 
    1515                                 <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 
    1516                                         /* translators: accessibility text */ 
    1517                                         _e( 'Yes, send email', 'buddypress' ); 
    1518                                 ?></label></td> 
    1519                                 <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 
    1520                                         /* translators: accessibility text */ 
    1521                                         _e( 'No, do not send email', 'buddypress' ); 
    1522                                 ?></label></td> 
    1523                         </tr> 
    1524                         <tr id="groups-notification-settings-request-completed"> 
    1525                                 <td></td> 
    1526                                 <td><?php _ex( 'Your request to join a group has been approved or denied', 'group settings on notification settings page', 'buddypress' ) ?></td> 
    1527                                 <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 
    1528                                         /* translators: accessibility text */ 
    1529                                         _e( 'Yes, send email', 'buddypress' ); 
    1530                                 ?></label></td> 
    1531                                 <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 
    1532                                         /* translators: accessibility text */ 
    1533                                         _e( 'No, do not send email', 'buddypress' ); 
    1534                                 ?></label></td> 
    1535                         </tr> 
    1536  
    1537                         <?php 
    1538  
    1539                         /** 
    1540                          * Fires at the end of the available group settings fields on Notification Settings page. 
    1541                          * 
    1542                          * @since 1.0.0 
    1543                          */ 
    1544                         do_action( 'groups_screen_notification_settings' ); ?> 
    1545  
    1546                 </tbody> 
    1547         </table> 
    1548  
    1549 <?php 
    1550 } 
    1551 add_action( 'bp_notification_settings', 'groups_screen_notification_settings' ); 
    1552  
    15531040/** Theme Compatibility *******************************************************/ 
    15541041 
    15551042new BP_Groups_Theme_Compat(); 
  • new file src/bp-groups/bp-groups-settings.php

    diff --git src/bp-groups/bp-groups-settings.php src/bp-groups/bp-groups-settings.php
    new file mode 100644
    index 00000000..5b90750c
    - +  
     1<?php 
     2 
     3/** 
     4 * Render the group settings fields on the Notification Settings page. 
     5 * 
     6 * @since 1.0.0 
     7 */ 
     8function groups_screen_notification_settings() { 
     9 
     10        if ( !$group_invite = bp_get_user_meta( bp_displayed_user_id(), 'notification_groups_invite', true ) ) 
     11                $group_invite  = 'yes'; 
     12 
     13        if ( !$group_update = bp_get_user_meta( bp_displayed_user_id(), 'notification_groups_group_updated', true ) ) 
     14                $group_update  = 'yes'; 
     15 
     16        if ( !$group_promo = bp_get_user_meta( bp_displayed_user_id(), 'notification_groups_admin_promotion', true ) ) 
     17                $group_promo   = 'yes'; 
     18 
     19        if ( !$group_request = bp_get_user_meta( bp_displayed_user_id(), 'notification_groups_membership_request', true ) ) 
     20                $group_request = 'yes'; 
     21 
     22        if ( ! $group_request_completed = bp_get_user_meta( bp_displayed_user_id(), 'notification_membership_request_completed', true ) ) { 
     23                $group_request_completed = 'yes'; 
     24        } 
     25        ?> 
     26 
     27        <table class="notification-settings" id="groups-notification-settings"> 
     28                <thead> 
     29                        <tr> 
     30                                <th class="icon"></th> 
     31                                <th class="title"><?php _ex( 'Groups', 'Group settings on notification settings page', 'buddypress' ) ?></th> 
     32                                <th class="yes"><?php _e( 'Yes', 'buddypress' ) ?></th> 
     33                                <th class="no"><?php _e( 'No', 'buddypress' )?></th> 
     34                        </tr> 
     35                </thead> 
     36 
     37                <tbody> 
     38                        <tr id="groups-notification-settings-invitation"> 
     39                                <td></td> 
     40                                <td><?php _ex( 'A member invites you to join a group', 'group settings on notification settings page','buddypress' ) ?></td> 
     41                                <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 
     42                                        /* translators: accessibility text */ 
     43                                        _e( 'Yes, send email', 'buddypress' ); 
     44                                ?></label></td> 
     45                                <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 
     46                                        /* translators: accessibility text */ 
     47                                        _e( 'No, do not send email', 'buddypress' ); 
     48                                ?></label></td> 
     49                        </tr> 
     50                        <tr id="groups-notification-settings-info-updated"> 
     51                                <td></td> 
     52                                <td><?php _ex( 'Group information is updated', 'group settings on notification settings page', 'buddypress' ) ?></td> 
     53                                <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 
     54                                        /* translators: accessibility text */ 
     55                                        _e( 'Yes, send email', 'buddypress' ); 
     56                                ?></label></td> 
     57                                <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 
     58                                        /* translators: accessibility text */ 
     59                                        _e( 'No, do not send email', 'buddypress' ); 
     60                                ?></label></td> 
     61                        </tr> 
     62                        <tr id="groups-notification-settings-promoted"> 
     63                                <td></td> 
     64                                <td><?php _ex( 'You are promoted to a group administrator or moderator', 'group settings on notification settings page', 'buddypress' ) ?></td> 
     65                                <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 
     66                                        /* translators: accessibility text */ 
     67                                        _e( 'Yes, send email', 'buddypress' ); 
     68                                ?></label></td> 
     69                                <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 
     70                                        /* translators: accessibility text */ 
     71                                        _e( 'No, do not send email', 'buddypress' ); 
     72                                ?></label></td> 
     73                        </tr> 
     74                        <tr id="groups-notification-settings-request"> 
     75                                <td></td> 
     76                                <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> 
     77                                <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 
     78                                        /* translators: accessibility text */ 
     79                                        _e( 'Yes, send email', 'buddypress' ); 
     80                                ?></label></td> 
     81                                <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 
     82                                        /* translators: accessibility text */ 
     83                                        _e( 'No, do not send email', 'buddypress' ); 
     84                                ?></label></td> 
     85                        </tr> 
     86                        <tr id="groups-notification-settings-request-completed"> 
     87                                <td></td> 
     88                                <td><?php _ex( 'Your request to join a group has been approved or denied', 'group settings on notification settings page', 'buddypress' ) ?></td> 
     89                                <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 
     90                                        /* translators: accessibility text */ 
     91                                        _e( 'Yes, send email', 'buddypress' ); 
     92                                ?></label></td> 
     93                                <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 
     94                                        /* translators: accessibility text */ 
     95                                        _e( 'No, do not send email', 'buddypress' ); 
     96                                ?></label></td> 
     97                        </tr> 
     98 
     99                        <?php 
     100 
     101                        /** 
     102                         * Fires at the end of the available group settings fields on Notification Settings page. 
     103                         * 
     104                         * @since 1.0.0 
     105                         */ 
     106                        do_action( 'groups_screen_notification_settings' ); ?> 
     107 
     108                </tbody> 
     109        </table> 
     110 
     111<?php 
     112} 
     113add_action( 'bp_notification_settings', 'groups_screen_notification_settings' ); 
     114 No newline at end of file 
  • src/bp-groups/classes/class-bp-groups-component.php

    diff --git src/bp-groups/classes/class-bp-groups-component.php src/bp-groups/classes/class-bp-groups-component.php
    index 8515a5b6..5277a843 100644
    class BP_Groups_Component extends BP_Component { 
    123123        public function includes( $includes = array() ) { 
    124124                $includes = array( 
    125125                        'cache', 
    126                         'forums', 
    127                         'actions', 
    128126                        'filters', 
    129                         'screens', 
    130127                        'widgets', 
    131                         'activity', 
    132128                        'template', 
    133129                        'adminbar', 
    134130                        'functions', 
    135131                        'notifications' 
    136132                ); 
    137133 
     134                // Conditional includes. 
    138135                if ( is_admin() ) { 
    139136                        $includes[] = 'admin'; 
    140137                } 
     138                if ( bp_is_active( 'activity' ) ) { 
     139                        $includes[] = 'activity'; 
     140                } 
     141                if ( bp_is_active( 'forums' ) && function_exists( 'bp_setup_forums' ) ) { 
     142                        $includes[] = 'forums'; 
     143                } 
     144 
     145                // Include frontend action code for test suite. 
     146                if ( function_exists( 'tests_add_filter' ) ) { 
     147                        $includes[] = 'actions'; 
     148                        $includes[] = 'screens'; 
     149 
     150                // Otherwise, only include frontend action code when on groups component. 
     151                } else { 
     152                        add_action( 'bp_setup_canonical_stack', array( $this, 'late_includes' ), 20 ); 
     153                } 
    141154 
    142155                parent::includes( $includes ); 
    143156        } 
    144157 
    145158        /** 
     159         * Late includes method 
     160         * 
     161         * Only load up group-specific action and screen code when on a group page. 
     162         * 
     163         * @since 2.9.0 
     164         */ 
     165        public function late_includes() { 
     166                if ( bp_is_user_settings_notifications() ) { 
     167                        require $this->path . 'bp-groups/bp-groups-settings.php'; 
     168                } 
     169 
     170                if ( ! bp_is_current_component( 'groups' ) ) { 
     171                        return; 
     172                } 
     173 
     174                require $this->path . 'bp-groups/bp-groups-actions.php'; 
     175                require $this->path . 'bp-groups/bp-groups-screens.php'; 
     176        } 
     177 
     178        /** 
    146179         * Set up component global data. 
    147180         * 
    148181         * The BP_GROUPS_SLUG constant is deprecated, and only used here for