Skip to:
Content

bbPress.org

Ticket #3192: groups.php

File groups.php, 40.1 KB (added by paschoolboards, 7 years ago)

Updated Groups.php with Filters added

Line 
1<?php
2
3/**
4 * bbPress BuddyPress Group Extension Class
5 *
6 * This file is responsible for connecting bbPress to BuddyPress's Groups
7 * Component. It's a great example of how to perform both simple and advanced
8 * techniques to manipulate bbPress's default output.
9 *
10 * @package bbPress
11 * @subpackage BuddyPress
12 * @todo maybe move to BuddyPress Forums once bbPress 1.1 can be removed
13 */
14
15// Exit if accessed directly
16if ( !defined( 'ABSPATH' ) ) exit;
17
18if ( !class_exists( 'BBP_Forums_Group_Extension' ) && class_exists( 'BP_Group_Extension' ) ) :
19/**
20 * Loads Group Extension for Forums Component
21 *
22 * @since bbPress (r3552)
23 *
24 * @package bbPress
25 * @subpackage BuddyPress
26 * @todo Everything
27 */
28class BBP_Forums_Group_Extension extends BP_Group_Extension {
29
30        /** Methods ***************************************************************/
31
32        /**
33         * Setup bbPress group extension variables
34         *
35         * @since bbPress (r3552)
36         */
37        public function __construct() {
38                $this->setup_variables();
39                $this->setup_actions();
40                $this->setup_filters();
41                $this->maybe_unset_forum_menu();
42        }
43
44        /**
45         * Setup the group forums class variables
46         *
47         * @since bbPress ()
48         */
49        private function setup_variables() {
50
51                // Component Name
52                $this->name          = __( 'Forum', 'bbpress' );
53                $this->nav_item_name = __( 'Forum', 'bbpress' );
54//              $this->nav_item_name = __( 'Discussions', 'bbpress' );
55
56                $this->nav_item_name = apply_filters('bbp_update_nav_item_title', $this->nav_item_name);
57                $this->name = apply_filters('bbp_update_forum_name', $this->name);
58
59                // Component slugs (hardcoded to match bbPress 1.x functionality)
60                $this->slug          = 'forum';
61                $this->topic_slug    = 'topic';
62                $this->reply_slug    = 'reply';
63
64                // Forum component is visible
65                $this->visibility = 'public';
66
67                // Set positions towards end
68                $this->create_step_position = 15;
69                $this->nav_item_position    = 10;
70
71                // Allow create step and show in nav
72                $this->enable_create_step   = true;
73                $this->enable_nav_item      = true;
74                $this->enable_edit_item     = true;
75
76                // Template file to load, and action to hook display on to
77                $this->template_file        = 'groups/single/plugins';
78                $this->display_hook         = 'bp_template_content';
79        }
80
81        /**
82         * Setup the group forums class actions
83         *
84         * @since bbPress (r4552)
85         */
86        private function setup_actions() {
87
88                // Possibly redirect
89                add_action( 'bbp_template_redirect',         array( $this, 'redirect_canonical'              ) );
90
91                // Remove group forum cap map when view is done
92                add_action( 'bbp_after_group_forum_display', array( $this, 'remove_group_forum_meta_cap_map' ) );
93
94                // bbPress needs to listen to BuddyPress group deletion.
95                add_action( 'groups_before_delete_group',    array( $this, 'disconnect_forum_from_group'     ) );
96
97                // Adds a bbPress metabox to the new BuddyPress Group Admin UI
98                add_action( 'bp_groups_admin_meta_boxes',    array( $this, 'group_admin_ui_edit_screen'      ) );
99
100                // Saves the bbPress options if they come from the BuddyPress Group Admin UI
101                add_action( 'bp_group_admin_edit_after',     array( $this, 'edit_screen_save'                ) );
102
103                // Adds a hidden input value to the "Group Settings" page
104                add_action( 'bp_before_group_settings_admin', array( $this, 'group_settings_hidden_field'    ) );
105        }
106
107        /**
108         * Setup the group forums class filters
109         *
110         * @since bbPress (r4552)
111         */
112        private function setup_filters() {
113
114                // Group forum pagination
115                add_filter( 'bbp_topic_pagination',      array( $this, 'topic_pagination'   ) );
116                add_filter( 'bbp_replies_pagination',    array( $this, 'replies_pagination' ) );
117
118                // Tweak the redirect field
119                add_filter( 'bbp_new_topic_redirect_to', array( $this, 'new_topic_redirect_to'        ), 10, 3 );
120                add_filter( 'bbp_new_reply_redirect_to', array( $this, 'new_reply_redirect_to'        ), 10, 3 );
121
122                // Map forum/topic/replys permalinks to their groups
123                add_filter( 'bbp_get_forum_permalink',   array( $this, 'map_forum_permalink_to_group' ), 10, 2 );
124                add_filter( 'bbp_get_topic_permalink',   array( $this, 'map_topic_permalink_to_group' ), 10, 2 );
125                add_filter( 'bbp_get_reply_permalink',   array( $this, 'map_reply_permalink_to_group' ), 10, 2 );
126
127                // Map reply edit links to their groups
128                add_filter( 'bbp_get_reply_edit_url',    array( $this, 'map_reply_edit_url_to_group'  ), 10, 2 );
129
130                // Map assorted template function permalinks
131                add_filter( 'post_link',                 array( $this, 'post_link'                    ), 10, 2 );
132                add_filter( 'page_link',                 array( $this, 'page_link'                    ), 10, 2 );
133                add_filter( 'post_type_link',            array( $this, 'post_type_link'               ), 10, 2 );
134
135                // Map group forum activity items to groups
136                add_filter( 'bbp_before_record_activity_parse_args', array( $this, 'map_activity_to_group' ) );
137
138                /** Caps **************************************************************/
139
140                // Only add these filters if inside a group forum
141                if ( bp_is_single_item() && bp_is_groups_component() && bp_is_current_action( 'forum' ) ) {
142
143                        // Allow group member to view private/hidden forums
144                        add_filter( 'bbp_map_meta_caps', array( $this, 'map_group_forum_meta_caps' ), 10, 4 );
145
146                        // Group member permissions to view the topic and reply forms
147                        add_filter( 'bbp_current_user_can_access_create_topic_form', array( $this, 'form_permissions' ) );
148                        add_filter( 'bbp_current_user_can_access_create_reply_form', array( $this, 'form_permissions' ) );
149                }
150        }
151
152        /**
153         * The primary display function for group forums
154         *
155         * @since bbPress (r3746)
156         *
157         * @param int $group_id ID of the current group. Available only on BP 2.2+.
158         */
159        public function display( $group_id = null ) {
160
161                // Prevent Topic Parent from appearing
162                add_action( 'bbp_theme_before_topic_form_forum', array( $this, 'ob_start'     ) );
163                add_action( 'bbp_theme_after_topic_form_forum',  array( $this, 'ob_end_clean' ) );
164                add_action( 'bbp_theme_after_topic_form_forum',  array( $this, 'topic_parent' ) );
165
166                // Prevent Forum Parent from appearing
167                add_action( 'bbp_theme_before_forum_form_parent', array( $this, 'ob_start'     ) );
168                add_action( 'bbp_theme_after_forum_form_parent',  array( $this, 'ob_end_clean' ) );
169                add_action( 'bbp_theme_after_forum_form_parent',  array( $this, 'forum_parent' ) );
170
171                // Hide breadcrumb
172                add_filter( 'bbp_no_breadcrumb', '__return_true' );
173
174                $this->display_forums( 0 );
175        }
176
177        /**
178         * Maybe unset the group forum nav item if group does not have a forum
179         *
180         * @since bbPress (r4552)
181         *
182         * @return If not viewing a single group
183         */
184        public function maybe_unset_forum_menu() {
185
186                // Bail if not viewing a single group
187                if ( ! bp_is_group() )
188                        return;
189
190                // Are forums enabled for this group?
191                $checked = bp_get_new_group_enable_forum() || groups_get_groupmeta( bp_get_new_group_id(), 'forum_id' );
192
193                // Tweak the nav item variable based on if group has forum or not
194                $this->enable_nav_item = (bool) $checked;
195        }
196
197        /**
198         * Allow group members to have advanced priviledges in group forum topics.
199         *
200         * @since bbPress (r4434)
201         *
202         * @param array $caps
203         * @param string $cap
204         * @param int $user_id
205         * @param array $args
206         * @return array
207         */
208        public function map_group_forum_meta_caps( $caps = array(), $cap = '', $user_id = 0, $args = array() ) {
209
210                switch ( $cap ) {
211
212                        // If user is a group mmember, allow them to create content.
213                        case 'read_forum'          :
214                        case 'publish_replies'     :
215                        case 'publish_topics'      :
216                        case 'read_hidden_forums'  :
217                        case 'read_private_forums' :
218                                if ( bbp_group_is_member() || bbp_group_is_mod() || bbp_group_is_admin() ) {
219                                        $caps = array( 'participate' );
220                                }
221                                break;
222
223                        // If user is a group mod ar admin, map to participate cap.
224                        case 'moderate'     :
225                        case 'edit_topic'   :
226                        case 'edit_reply'   :
227                        case 'view_trash'   :
228                        case 'edit_others_replies' :
229                        case 'edit_others_topics'  :
230                                if ( bbp_group_is_mod() || bbp_group_is_admin() ) {
231                                        $caps = array( 'participate' );
232                                }
233                                break;
234
235                        // If user is a group admin, allow them to delete topics and replies.
236                        case 'delete_topic' :
237                        case 'delete_reply' :
238                                if ( bbp_group_is_admin() ) {
239                                        $caps = array( 'participate' );
240                                }
241                                break;
242                }
243
244                return apply_filters( 'bbp_map_group_forum_topic_meta_caps', $caps, $cap, $user_id, $args );
245        }
246
247        /**
248         * Remove the topic meta cap map, so it doesn't interfere with sidebars.
249         *
250         * @since bbPress (r4434)
251         */
252        public function remove_group_forum_meta_cap_map() {
253                remove_filter( 'bbp_map_meta_caps', array( $this, 'map_group_forum_meta_caps' ), 99, 4 );
254        }
255
256        /** Edit ******************************************************************/
257
258        /**
259         * Show forums and new forum form when editing a group
260         *
261         * @since bbPress (r3563)
262         * @param object $group (the group to edit if in Group Admin UI)
263         * @uses is_admin() To check if we're in the Group Admin UI
264         * @uses bbp_get_template_part()
265         */
266        public function edit_screen( $group = false ) {
267                $forum_id  = 0;
268                $group_id  = empty( $group->id ) ? bp_get_new_group_id() : $group->id ;
269                $forum_ids = bbp_get_group_forum_ids( $group_id );
270
271                // Get the first forum ID
272                if ( !empty( $forum_ids ) ) {
273                        $forum_id = (int) is_array( $forum_ids ) ? $forum_ids[0] : $forum_ids;
274                }
275
276                // Should box be checked already?
277                $checked = is_admin() ? bp_group_is_forum_enabled( $group ) : bp_get_new_group_enable_forum() || bp_group_is_forum_enabled( bp_get_group_id() ); ?>
278
279                <h4><?php esc_html_e( 'Group Forum Settings', 'bbpress' ); ?></h4>
280
281                <fieldset>
282                        <legend class="screen-reader-text"><?php esc_html_e( 'Group Forum Settings', 'bbpress' ); ?></legend>
283                        <p><?php esc_html_e( 'Create a discussion forum to allow members of this group to communicate in a structured, bulletin-board style fashion.', 'bbpress' ); ?></p>
284
285                        <div class="field-group">
286                                <div class="checkbox">
287                                        <label><input type="checkbox" name="bbp-edit-group-forum" id="bbp-edit-group-forum" value="1"<?php checked( $checked ); ?> /> <?php esc_html_e( 'Yes. I want this group to have a forum.', 'bbpress' ); ?></label>
288                                </div>
289
290                                <p class="description"><?php esc_html_e( 'Saying no will not delete existing forum content.', 'bbpress' ); ?></p>
291                        </div>
292
293                        <?php if ( bbp_is_user_keymaster() ) : ?>
294                                <div class="field-group">
295                                        <label for="bbp_group_forum_id"><?php esc_html_e( 'Group Forum:', 'bbpress' ); ?></label>
296                                        <?php
297                                                bbp_dropdown( array(
298                                                        'select_id' => 'bbp_group_forum_id',
299                                                        'show_none' => __( '(No Forum)', 'bbpress' ),
300                                                        'selected'  => $forum_id
301                                                ) );
302                                        ?>
303                                        <p class="description"><?php esc_html_e( 'Network administrators can reconfigure which forum belongs to this group.', 'bbpress' ); ?></p>
304                                </div>
305                        <?php endif; ?>
306
307                        <?php if ( !is_admin() ) : ?>
308                                <input type="submit" value="<?php esc_attr_e( 'Save Settings', 'bbpress' ); ?>" />
309                        <?php endif; ?>
310
311                </fieldset>
312
313                <?php
314
315                // Verify intent
316                if ( is_admin() ) {
317                        wp_nonce_field( 'groups_edit_save_' . $this->slug, 'forum_group_admin_ui' );
318                } else {
319                        wp_nonce_field( 'groups_edit_save_' . $this->slug );
320                }
321        }
322
323        /**
324         * Save the Group Forum data on edit
325         *
326         * @since bbPress (r3465)
327         * @param int $group_id (to handle Group Admin UI hook bp_group_admin_edit_after )
328         * @uses bbp_new_forum_handler() To check for forum creation
329         * @uses bbp_edit_forum_handler() To check for forum edit
330         */
331        public function edit_screen_save( $group_id = 0 ) {
332
333                // Bail if not a POST action
334                if ( ! bbp_is_post_request() )
335                        return;
336
337                // Admin Nonce check
338                if ( is_admin() ) {
339                        check_admin_referer( 'groups_edit_save_' . $this->slug, 'forum_group_admin_ui' );
340
341                // Theme-side Nonce check
342                } elseif ( ! bbp_verify_nonce_request( 'groups_edit_save_' . $this->slug ) ) {
343                        bbp_add_error( 'bbp_edit_group_forum_screen_save', __( '<strong>ERROR</strong>: Are you sure you wanted to do that?', 'bbpress' ) );
344                        return;
345                }
346
347                $edit_forum = !empty( $_POST['bbp-edit-group-forum'] ) ? true : false;
348                $forum_id   = 0;
349                $group_id   = !empty( $group_id ) ? $group_id : bp_get_current_group_id();
350
351                // Keymasters have the ability to reconfigure forums
352                if ( bbp_is_user_keymaster() ) {
353                        $forum_ids = ! empty( $_POST['bbp_group_forum_id'] ) ? (array) (int) $_POST['bbp_group_forum_id'] : array();
354
355                // Use the existing forum IDs
356                } else {
357                        $forum_ids = array_values( bbp_get_group_forum_ids( $group_id ) );
358                }
359
360                // Normalize group forum relationships now
361                if ( !empty( $forum_ids ) ) {
362
363                        // Loop through forums, and make sure they exist
364                        foreach ( $forum_ids as $forum_id ) {
365
366                                // Look for forum
367                                $forum = bbp_get_forum( $forum_id );
368
369                                // No forum exists, so break the relationship
370                                if ( empty( $forum ) ) {
371                                        $this->remove_forum( array( 'forum_id' => $forum_id ) );
372                                        unset( $forum_ids[$forum_id] );
373                                }
374                        }
375
376                        // No support for multiple forums yet
377                        $forum_id = (int) ( is_array( $forum_ids ) ? $forum_ids[0] : $forum_ids );
378                }
379
380                // Update the group ID and forum ID relationships
381                bbp_update_group_forum_ids( $group_id, (array) $forum_ids );
382                bbp_update_forum_group_ids( $forum_id, (array) $group_id  );
383
384                // Update the group forum setting
385                $group = $this->toggle_group_forum( $group_id, $edit_forum );
386
387                // Create a new forum
388                if ( empty( $forum_id ) && ( true === $edit_forum ) ) {
389
390                        // Set the default forum status
391                        switch ( $group->status ) {
392                                case 'hidden'  :
393                                        $status = bbp_get_hidden_status_id();
394                                        break;
395                                case 'private' :
396                                        $status = bbp_get_private_status_id();
397                                        break;
398                                case 'public'  :
399                                default        :
400                                        $status = bbp_get_public_status_id();
401                                        break;
402                        }
403
404                        // Create the initial forum
405                        $forum_id = bbp_insert_forum( array(
406                                'post_parent'  => bbp_get_group_forums_root_id(),
407                                'post_title'   => $group->name,
408                                'post_content' => $group->description,
409                                'post_status'  => $status
410                        ) );
411
412                        // Setup forum args with forum ID
413                        $new_forum_args = array( 'forum_id' => $forum_id );
414
415                        // If in admin, also include the group ID
416                        if ( is_admin() && !empty( $group_id ) ) {
417                                $new_forum_args['group_id'] = $group_id;
418                        }
419
420                        // Run the BP-specific functions for new groups
421                        $this->new_forum( $new_forum_args );
422                }
423
424                // Redirect after save when not in admin
425                if ( !is_admin() ) {
426                        bp_core_redirect( trailingslashit( bp_get_group_permalink( buddypress()->groups->current_group ) . '/admin/' . $this->slug ) );
427                }
428        }
429
430        /**
431         * Adds a metabox to BuddyPress Group Admin UI
432         *
433         * @since bbPress (r4814)
434         *
435         * @uses add_meta_box
436         * @uses BBP_Forums_Group_Extension::group_admin_ui_display_metabox() To display the edit screen
437         */
438        public function group_admin_ui_edit_screen() {
439                add_meta_box(
440                        'bbpress_group_admin_ui_meta_box',
441                        _x( 'Discussion Forum', 'group admin edit screen', 'bbpress' ),
442                        array( $this, 'group_admin_ui_display_metabox' ),
443                        get_current_screen()->id,
444                        'side',
445                        'core'
446                );
447        }
448
449        /**
450         * Displays the bbPress metabox in BuddyPress Group Admin UI
451         *
452         * @since bbPress (r4814)
453         *
454         * @param object $item (group object)
455         * @uses add_meta_box
456         * @uses BBP_Forums_Group_Extension::edit_screen() To get the html
457         */
458        public function group_admin_ui_display_metabox( $item ) {
459                $this->edit_screen( $item );
460        }
461
462        /** Create ****************************************************************/
463
464        /**
465         * Show forums and new forum form when creating a group
466         *
467         * @since bbPress (r3465)
468         */
469        public function create_screen( $group_id = 0 ) {
470
471                // Bail if not looking at this screen
472                if ( !bp_is_group_creation_step( $this->slug ) )
473                        return false;
474
475                // Check for possibly empty group_id
476                if ( empty( $group_id ) ) {
477                        $group_id = bp_get_new_group_id();
478                }
479
480                $checked = bp_get_new_group_enable_forum() || groups_get_groupmeta( $group_id, 'forum_id' ); ?>
481
482                <h4><?php esc_html_e( 'Group Forum', 'bbpress' ); ?></h4>
483
484                <p><?php esc_html_e( 'Create a discussion forum to allow members of this group to communicate in a structured, bulletin-board style fashion.', 'bbpress' ); ?></p>
485
486                <div class="checkbox">
487                        <label><input type="checkbox" name="bbp-create-group-forum" id="bbp-create-group-forum" value="1"<?php checked( $checked ); ?> /> <?php esc_html_e( 'Yes. I want this group to have a forum.', 'bbpress' ); ?></label>
488                </div>
489
490                <?php
491        }
492
493        /**
494         * Save the Group Forum data on create
495         *
496         * @since bbPress (r3465)
497         */
498        public function create_screen_save( $group_id = 0 ) {
499
500                // Nonce check
501                if ( ! bbp_verify_nonce_request( 'groups_create_save_' . $this->slug ) ) {
502                        bbp_add_error( 'bbp_create_group_forum_screen_save', __( '<strong>ERROR</strong>: Are you sure you wanted to do that?', 'bbpress' ) );
503                        return;
504                }
505
506                // Check for possibly empty group_id
507                if ( empty( $group_id ) ) {
508                        $group_id = bp_get_new_group_id();
509                }
510
511                $create_forum = !empty( $_POST['bbp-create-group-forum'] ) ? true : false;
512                $forum_id     = 0;
513                $forum_ids    = bbp_get_group_forum_ids( $group_id );
514
515                if ( !empty( $forum_ids ) )
516                        $forum_id = (int) is_array( $forum_ids ) ? $forum_ids[0] : $forum_ids;
517
518                // Create a forum, or not
519                switch ( $create_forum ) {
520                        case true  :
521
522                                // Bail if initial content was already created
523                                if ( !empty( $forum_id ) )
524                                        return;
525
526                                // Set the default forum status
527                                switch ( bp_get_new_group_status() ) {
528                                        case 'hidden'  :
529                                                $status = bbp_get_hidden_status_id();
530                                                break;
531                                        case 'private' :
532                                                $status = bbp_get_private_status_id();
533                                                break;
534                                        case 'public'  :
535                                        default        :
536                                                $status = bbp_get_public_status_id();
537                                                break;
538                                }
539
540                                // Create the initial forum
541                                $forum_id = bbp_insert_forum( array(
542                                        'post_parent'  => bbp_get_group_forums_root_id(),
543                                        'post_title'   => bp_get_new_group_name(),
544                                        'post_content' => bp_get_new_group_description(),
545                                        'post_status'  => $status
546                                ) );
547
548                                // Run the BP-specific functions for new groups
549                                $this->new_forum( array( 'forum_id' => $forum_id ) );
550
551                                // Update forum active
552                                groups_update_groupmeta( bp_get_new_group_id(), '_bbp_forum_enabled_' . $forum_id, true );
553
554                                // Toggle forum on
555                                $this->toggle_group_forum( bp_get_new_group_id(), true );
556
557                                break;
558                        case false :
559
560                                // Forum was created but is now being undone
561                                if ( !empty( $forum_id ) ) {
562
563                                        // Delete the forum
564                                        wp_delete_post( $forum_id, true );
565
566                                        // Delete meta values
567                                        groups_delete_groupmeta( bp_get_new_group_id(), 'forum_id' );
568                                        groups_delete_groupmeta( bp_get_new_group_id(), '_bbp_forum_enabled_' . $forum_id );
569
570                                        // Toggle forum off
571                                        $this->toggle_group_forum( bp_get_new_group_id(), false );
572                                }
573
574                                break;
575                }
576        }
577
578        /**
579         * Used to start an output buffer
580         */
581        public function ob_start() {
582                ob_start();
583        }
584
585        /**
586         * Used to end an output buffer
587         */
588        public function ob_end_clean() {
589                ob_end_clean();
590        }
591
592        /**
593         * Creating a group forum or category (including root for group)
594         *
595         * @since bbPress (r3653)
596         * @param type $forum_args
597         * @uses bbp_get_forum_id()
598         * @uses bp_get_current_group_id()
599         * @uses bbp_add_forum_id_to_group()
600         * @uses bbp_add_group_id_to_forum()
601         * @return if no forum_id is available
602         */
603        public function new_forum( $forum_args = array() ) {
604
605                // Bail if no forum_id was passed
606                if ( empty( $forum_args['forum_id'] ) )
607                        return;
608
609                // Validate forum_id
610                $forum_id = bbp_get_forum_id( $forum_args['forum_id'] );
611                $group_id = !empty( $forum_args['group_id'] ) ? $forum_args['group_id'] : bp_get_current_group_id();
612
613                bbp_add_forum_id_to_group( $group_id, $forum_id );
614                bbp_add_group_id_to_forum( $forum_id, $group_id );
615        }
616
617        /**
618         * Removing a group forum or category (including root for group)
619         *
620         * @since bbPress (r3653)
621         * @param type $forum_args
622         * @uses bbp_get_forum_id()
623         * @uses bp_get_current_group_id()
624         * @uses bbp_add_forum_id_to_group()
625         * @uses bbp_add_group_id_to_forum()
626         * @return if no forum_id is available
627         */
628        public function remove_forum( $forum_args = array() ) {
629
630                // Bail if no forum_id was passed
631                if ( empty( $forum_args['forum_id'] ) )
632                        return;
633
634                // Validate forum_id
635                $forum_id = bbp_get_forum_id( $forum_args['forum_id'] );
636                $group_id = !empty( $forum_args['group_id'] ) ? $forum_args['group_id'] : bp_get_current_group_id();
637
638                bbp_remove_forum_id_from_group( $group_id, $forum_id );
639                bbp_remove_group_id_from_forum( $forum_id, $group_id );
640        }
641
642        /**
643         * Listening to BuddyPress Group deletion to remove the forum
644         *
645         * @param int $group_id The group ID
646         * @uses bbp_get_group_forum_ids()
647         * @uses BBP_Forums_Group_Extension::remove_forum()
648         */
649        public function disconnect_forum_from_group( $group_id = 0 ) {
650
651                // Bail if no group ID available
652                if ( empty( $group_id ) ) {
653                        return;
654                }
655
656                // Get the forums for the current group
657                $forum_ids = bbp_get_group_forum_ids( $group_id );
658
659                // Use the first forum ID
660                if ( empty( $forum_ids ) )
661                        return;
662
663                // Get the first forum ID
664                $forum_id = (int) is_array( $forum_ids ) ? $forum_ids[0] : $forum_ids;
665                $this->remove_forum( array(
666                        'forum_id' => $forum_id,
667                        'group_id' => $group_id
668                ) );
669        }
670
671        /**
672         * Toggle the enable_forum group setting on or off
673         *
674         * @since bbPress (r4612)
675         *
676         * @param int $group_id The group to toggle
677         * @param bool $enabled True for on, false for off
678         * @uses groups_get_group() To get the group to toggle
679         * @return False if group is not found, otherwise return the group
680         */
681        public function toggle_group_forum( $group_id = 0, $enabled = false ) {
682
683                // Get the group
684                $group = groups_get_group( array( 'group_id' => $group_id ) );
685
686                // Bail if group cannot be found
687                if ( empty( $group ) )
688                        return false;
689
690                // Set forum enabled status
691                $group->enable_forum = (int) $enabled;
692
693                // Save the group
694                $group->save();
695
696                // Maybe disconnect forum from group
697                if ( empty( $enabled ) ) {
698                        $this->disconnect_forum_from_group( $group_id );
699                }
700
701                // Update bbPress' internal private and forum ID variables
702                bbp_repair_forum_visibility();
703
704                // Return the group
705                return $group;
706        }
707
708        /** Display Methods *******************************************************/
709
710        /**
711         * Output the forums for a group in the edit screens
712         *
713         * As of right now, bbPress only supports 1-to-1 group forum relationships.
714         * In the future, many-to-many should be allowed.
715         *
716         * @since bbPress (r3653)
717         * @uses bp_get_current_group_id()
718         * @uses bbp_get_group_forum_ids()
719         * @uses bbp_has_forums()
720         * @uses bbp_get_template_part()
721         */
722        public function display_forums( $offset = 0 ) {
723                global $wp_query;
724
725                // Allow actions immediately before group forum output
726                do_action( 'bbp_before_group_forum_display' );
727
728                // Load up bbPress once
729                $bbp = bbpress();
730
731                /** Query Resets ******************************************************/
732
733                // Forum data
734                $forum_action = bp_action_variable( $offset );
735                $forum_ids    = bbp_get_group_forum_ids( bp_get_current_group_id() );
736                $forum_id     = array_shift( $forum_ids );
737
738                // Always load up the group forum
739                bbp_has_forums( array(
740                        'p'           => $forum_id,
741                        'post_parent' => null
742                ) );
743
744                // Set the global forum ID
745                $bbp->current_forum_id = $forum_id;
746
747                // Assume forum query
748                bbp_set_query_name( 'bbp_single_forum' ); ?>
749
750                <div id="bbpress-forums">
751
752                        <?php switch ( $forum_action ) :
753
754                                /** Single Forum **********************************************/
755
756                                case false  :
757                                case 'page' :
758
759                                        // Strip the super stickies from topic query
760                                        add_filter( 'bbp_get_super_stickies', array( $this, 'no_super_stickies'  ), 10, 1 );
761
762                                        // Unset the super sticky option on topic form
763                                        add_filter( 'bbp_get_topic_types',    array( $this, 'unset_super_sticky' ), 10, 1 );
764
765                                        // Query forums and show them if they exist
766                                        if ( bbp_forums() ) :
767
768                                                // Setup the forum
769                                                bbp_the_forum(); ?>
770
771                                                <h3><?php bbp_forum_title(); ?></h3>
772
773                                                <?php bbp_get_template_part( 'content', 'single-forum' );
774
775                                        // No forums found
776                                        else : ?>
777
778                                                <div id="message" class="info">
779                                                        <p><?php esc_html_e( 'This group does not currently have a forum.', 'bbpress' ); ?></p>
780                                                </div>
781
782                                        <?php endif;
783
784                                        break;
785
786                                /** Single Topic **********************************************/
787
788                                case $this->topic_slug :
789
790                                        // hide the 'to front' admin links
791                                        add_filter( 'bbp_get_topic_stick_link', array( $this, 'hide_super_sticky_admin_link' ), 10, 2 );
792
793                                        // Get the topic
794                                        bbp_has_topics( array(
795                                                'name'           => bp_action_variable( $offset + 1 ),
796                                                'posts_per_page' => 1,
797                                                'show_stickies'  => false
798                                        ) );
799
800                                        // If no topic, 404
801                                        if ( ! bbp_topics() ) {
802                                                bp_do_404( bbp_get_forum_permalink( $forum_id ) ); ?>
803                                                <h3><?php bbp_forum_title(); ?></h3>
804                                                <?php bbp_get_template_part( 'feedback', 'no-topics' );
805                                                return;
806                                        }
807
808                                        // Setup the topic
809                                        bbp_the_topic(); ?>
810
811                                        <h3><?php bbp_topic_title(); ?></h3>
812
813                                        <?php
814
815                                        // Topic edit
816                                        if ( bp_action_variable( $offset + 2 ) === bbp_get_edit_rewrite_id() ) :
817
818                                                // Unset the super sticky link on edit topic template
819                                                add_filter( 'bbp_get_topic_types', array( $this, 'unset_super_sticky' ), 10, 1 );
820
821                                                // Set the edit switches
822                                                $wp_query->bbp_is_edit       = true;
823                                                $wp_query->bbp_is_topic_edit = true;
824
825                                                // Setup the global forum ID
826                                                $bbp->current_topic_id       = get_the_ID();
827
828                                                // Merge
829                                                if ( !empty( $_GET['action'] ) && 'merge' === $_GET['action'] ) :
830                                                        bbp_set_query_name( 'bbp_topic_merge' );
831                                                        bbp_get_template_part( 'form', 'topic-merge' );
832
833                                                // Split
834                                                elseif ( !empty( $_GET['action'] ) && 'split' === $_GET['action'] ) :
835                                                        bbp_set_query_name( 'bbp_topic_split' );
836                                                        bbp_get_template_part( 'form', 'topic-split' );
837
838                                                // Edit
839                                                else :
840                                                        bbp_set_query_name( 'bbp_topic_form' );
841                                                        bbp_get_template_part( 'form', 'topic' );
842
843                                                endif;
844
845                                        // Single Topic
846                                        else:
847                                                bbp_set_query_name( 'bbp_single_topic' );
848                                                bbp_get_template_part( 'content', 'single-topic' );
849                                        endif;
850                                        break;
851
852                                /** Single Reply **********************************************/
853
854                                case $this->reply_slug :
855
856                                        // Get the reply
857                                        bbp_has_replies( array(
858                                                'name'           => bp_action_variable( $offset + 1 ),
859                                                'posts_per_page' => 1
860                                        ) );
861
862                                        // If no topic, 404
863                                        if ( ! bbp_replies() ) {
864                                                bp_do_404( bbp_get_forum_permalink( $forum_id ) ); ?>
865                                                <h3><?php bbp_forum_title(); ?></h3>
866                                                <?php bbp_get_template_part( 'feedback', 'no-replies' );
867                                                return;
868                                        }
869
870                                        // Setup the reply
871                                        bbp_the_reply(); ?>
872
873                                        <h3><?php bbp_reply_title(); ?></h3>
874
875                                        <?php if ( bp_action_variable( $offset + 2 ) === bbp_get_edit_rewrite_id() ) :
876
877                                                // Set the edit switches
878                                                $wp_query->bbp_is_edit       = true;
879                                                $wp_query->bbp_is_reply_edit = true;
880
881                                                // Setup the global reply ID
882                                                $bbp->current_reply_id       = get_the_ID();
883
884                                                // Move
885                                                if ( !empty( $_GET['action'] ) && ( 'move' === $_GET['action'] ) ) :
886                                                        bbp_set_query_name( 'bbp_reply_move' );
887                                                        bbp_get_template_part( 'form', 'reply-move' );
888
889                                                // Edit
890                                                else :
891                                                        bbp_set_query_name( 'bbp_reply_form' );
892                                                        bbp_get_template_part( 'form', 'reply' );
893                                                endif;
894                                        endif;
895                                        break;
896                        endswitch;
897
898                        // Reset the query
899                        wp_reset_query(); ?>
900
901                </div>
902
903                <?php
904
905                // Allow actions immediately after group forum output
906                do_action( 'bbp_after_group_forum_display' );
907        }
908
909        /** Super sticky filters ***************************************************/
910
911        /**
912         * Strip super stickies from the topic query
913         *
914         * @since bbPress (r4810)
915         * @access private
916         * @param array $super the super sticky post ID's
917         * @return array (empty)
918         */
919        public function no_super_stickies( $super = array() ) {
920                $super = array();
921                return $super;
922        }
923
924        /**
925         * Unset the type super sticky from topic type
926         *
927         * @since bbPress (r4810)
928         * @access private
929         * @param array $args
930         * @return array $args without the to-front link
931         */
932        public function unset_super_sticky( $args = array() ) {
933                if ( isset( $args['super'] ) ) {
934                        unset( $args['super'] );
935                }
936                return $args;
937        }
938
939        /**
940         * Ugly preg_replace to hide the to front admin link
941         *
942         * @since bbPress (r4810)
943         * @access private
944         * @param string $retval
945         * @param array $args
946         * @return string $retval without the to-front link
947         */
948        public function hide_super_sticky_admin_link( $retval = '', $args = array() ) {
949                if ( strpos( $retval, '(' ) ) {
950                        $retval = preg_replace( '/(\(.+?)+(\))/i', '', $retval );
951                }
952
953                return $retval;
954        }
955
956        /** Redirect Helpers ******************************************************/
957
958        /**
959         * Redirect to the group forum screen
960         *
961         * @since bbPress (r3653)
962         * @param str $redirect_url
963         * @param str $redirect_to
964         */
965        public function new_topic_redirect_to( $redirect_url = '', $redirect_to = '', $topic_id = 0 ) {
966                if ( bp_is_group() ) {
967                        $topic        = bbp_get_topic( $topic_id );
968                        $topic_hash   = '#post-' . $topic_id;
969                        $redirect_url = trailingslashit( bp_get_group_permalink( groups_get_current_group() ) ) . trailingslashit( $this->slug ) . trailingslashit( $this->topic_slug ) . trailingslashit( $topic->post_name ) . $topic_hash;
970                }
971
972                return $redirect_url;
973        }
974
975        /**
976         * Redirect to the group forum screen
977         *
978         * @since bbPress (r3653)
979         */
980        public function new_reply_redirect_to( $redirect_url = '', $redirect_to = '', $reply_id = 0 ) {
981                global $wp_rewrite;
982
983                if ( bp_is_group() ) {
984                        $topic_id       = bbp_get_reply_topic_id( $reply_id );
985                        $topic          = bbp_get_topic( $topic_id );
986                        $reply_position = bbp_get_reply_position( $reply_id, $topic_id );
987                        $reply_page     = ceil( (int) $reply_position / (int) bbp_get_replies_per_page() );
988                        $reply_hash     = '#post-' . $reply_id;
989                        $topic_url      = trailingslashit( bp_get_group_permalink( groups_get_current_group() ) ) . trailingslashit( $this->slug ) . trailingslashit( $this->topic_slug ) . trailingslashit( $topic->post_name );
990
991                        // Don't include pagination if on first page
992                        if ( 1 >= $reply_page ) {
993                                $redirect_url = trailingslashit( $topic_url ) . $reply_hash;
994
995                        // Include pagination
996                        } else {
997                                $redirect_url = trailingslashit( $topic_url ) . trailingslashit( $wp_rewrite->pagination_base ) . trailingslashit( $reply_page ) . $reply_hash;
998                        }
999
1000                        // Add topic view query arg back to end if it is set
1001                        if ( bbp_get_view_all() ) {
1002                                $redirect_url = bbp_add_view_all( $redirect_url );
1003                        }
1004                }
1005
1006                return $redirect_url;
1007        }
1008
1009        /**
1010         * Redirect to the group admin forum edit screen
1011         *
1012         * @since bbPress (r3653)
1013         * @uses groups_get_current_group()
1014         * @uses bp_is_group_admin_screen()
1015         * @uses trailingslashit()
1016         * @uses bp_get_root_domain()
1017         * @uses bp_get_groups_root_slug()
1018         */
1019        public function edit_redirect_to( $redirect_url = '' ) {
1020
1021                // Get the current group, if there is one
1022                $group = groups_get_current_group();
1023
1024                // If this is a group of any kind, empty out the redirect URL
1025                if ( bp_is_group_admin_screen( $this->slug ) )
1026                        $redirect_url = trailingslashit( bp_get_root_domain() . '/' . bp_get_groups_root_slug() . '/' . $group->slug . '/admin/' . $this->slug );
1027
1028                return $redirect_url;
1029        }
1030
1031        /** Form Helpers **********************************************************/
1032
1033        public function forum_parent() {
1034        ?>
1035
1036                <input type="hidden" name="bbp_forum_parent_id" id="bbp_forum_parent_id" value="<?php bbp_group_forums_root_id(); ?>" />
1037
1038        <?php
1039        }
1040
1041        public function topic_parent() {
1042
1043                $forum_ids = bbp_get_group_forum_ids( bp_get_current_group_id() ); ?>
1044
1045                <p>
1046                        <label for="bbp_forum_id"><?php esc_html_e( 'Forum:', 'bbpress' ); ?></label><br />
1047                        <?php bbp_dropdown( array( 'include' => $forum_ids, 'selected' => bbp_get_form_topic_forum() ) ); ?>
1048                </p>
1049
1050        <?php
1051        }
1052
1053        /**
1054         * Permissions to view the 'New Topic'/'Reply To' form in a BuddyPress group.
1055         *
1056         * @since bbPress (r4608)
1057         *
1058         * @param bool $retval Are we allowed to view the reply form?
1059         * @uses bp_is_group() To determine if we're on a group page
1060         * @uses is_user_logged_in() To determine if a user is logged in.
1061         * @uses bbp_is_user_keymaster() Is the current user a keymaster?
1062         * @uses bbp_group_is_member() Is the current user a member of the group?
1063         * @uses bbp_group_is_user_banned() Is the current user banned from the group?
1064         *
1065         * @return bool
1066         */
1067        public function form_permissions( $retval = false ) {
1068
1069                // Bail if not a group
1070                if ( ! bp_is_group() ) {
1071                        return $retval;
1072                }
1073
1074                // Bail if user is not logged in
1075                if ( ! is_user_logged_in() ) {
1076                        return $retval;
1077
1078                // Keymasters can always pass go
1079                } elseif ( bbp_is_user_keymaster() ) {
1080                        $retval = true;
1081
1082                // Non-members cannot see forms
1083                } elseif ( ! bbp_group_is_member() ) {
1084                        $retval = false;
1085
1086                // Banned users cannot see forms
1087                } elseif ( bbp_group_is_banned() ) {
1088                        $retval = false;
1089                }
1090
1091                return $retval;
1092        }
1093
1094        /**
1095         * Add a hidden input field on the group settings page if the group forum is
1096         * enabled.
1097         *
1098         * Due to the way BuddyPress' group admin settings page saves its settings,
1099         * we need to let BP know that bbPress added a forum.
1100         *
1101         * @since bbPress (r5026)
1102         *
1103         * @link http://bbpress.trac.wordpress.org/ticket/2339/
1104         * @see groups_screen_group_admin_settings()
1105         */
1106        public function group_settings_hidden_field() {
1107
1108                // if a forum is not enabled, we don't need to add this field
1109                if ( ! bp_group_is_forum_enabled() )
1110                        return; ?>
1111
1112                <input type="hidden" name="group-show-forum" id="group-show-forum" value="1" />
1113
1114        <?php
1115        }
1116
1117        /** Permalink Mappers *****************************************************/
1118
1119        /**
1120         * Maybe map a bbPress forum/topic/reply permalink to the corresponding group
1121         *
1122         * @param int $post_id
1123         * @uses get_post()
1124         * @uses bbp_is_reply()
1125         * @uses bbp_get_reply_topic_id()
1126         * @uses bbp_get_reply_forum_id()
1127         * @uses bbp_is_topic()
1128         * @uses bbp_get_topic_forum_id()
1129         * @uses bbp_is_forum()
1130         * @uses get_post_field()
1131         * @uses bbp_get_forum_group_ids()
1132         * @uses groups_get_group()
1133         * @uses bp_get_group_admin_permalink()
1134         * @uses bp_get_group_permalink()
1135         * @return Bail early if not a group forum post
1136         * @return string
1137         */
1138        private function maybe_map_permalink_to_group( $post_id = 0, $url = false ) {
1139
1140                switch ( get_post_type( $post_id ) ) {
1141
1142                        // Reply
1143                        case bbp_get_reply_post_type() :
1144                                $topic_id = bbp_get_reply_topic_id( $post_id );
1145                                $forum_id = bbp_get_reply_forum_id( $post_id );
1146                                $url_end  = trailingslashit( $this->reply_slug ) . get_post_field( 'post_name', $post_id );
1147                                break;
1148
1149                        // Topic
1150                        case bbp_get_topic_post_type() :
1151                                $topic_id = $post_id;
1152                                $forum_id = bbp_get_topic_forum_id( $post_id );
1153                                $url_end  = trailingslashit( $this->topic_slug ) . get_post_field( 'post_name', $post_id );
1154                                break;
1155
1156                        // Forum
1157                        case bbp_get_forum_post_type() :
1158                                $forum_id = $post_id;
1159                                $url_end  = ''; //get_post_field( 'post_name', $post_id );
1160                                break;
1161
1162                        // Unknown
1163                        default :
1164                                return $url;
1165                                break;
1166                }
1167
1168                // Get group ID's for this forum
1169                $group_ids = bbp_get_forum_group_ids( $forum_id );
1170
1171                // Bail if the post isn't associated with a group
1172                if ( empty( $group_ids ) )
1173                        return $url;
1174
1175                // @todo Multiple group forums/forum groups
1176                $group_id = $group_ids[0];
1177                $group    = groups_get_group( array( 'group_id' => $group_id ) );
1178
1179                if ( bp_is_group_admin_screen( $this->slug ) ) {
1180                        $group_permalink = trailingslashit( bp_get_group_admin_permalink( $group ) );
1181                } else {
1182                        $group_permalink = trailingslashit( bp_get_group_permalink( $group ) );
1183                }
1184
1185                return trailingslashit( trailingslashit( $group_permalink . $this->slug ) . $url_end );
1186        }
1187
1188        /**
1189         * Map a forum permalink to its corresponding group
1190         *
1191         * @since bbPress (r3802)
1192         * @param string $url
1193         * @param int $forum_id
1194         * @uses maybe_map_permalink_to_group()
1195         * @return string
1196         */
1197        public function map_forum_permalink_to_group( $url, $forum_id ) {
1198                return $this->maybe_map_permalink_to_group( $forum_id, $url );
1199        }
1200
1201        /**
1202         * Map a topic permalink to its group forum
1203         *
1204         * @since bbPress (r3802)
1205         * @param string $url
1206         * @param int $topic_id
1207         * @uses maybe_map_permalink_to_group()
1208         * @return string
1209         */
1210        public function map_topic_permalink_to_group( $url, $topic_id ) {
1211                return $this->maybe_map_permalink_to_group( $topic_id, $url );
1212        }
1213
1214        /**
1215         * Map a reply permalink to its group forum
1216         *
1217         * @since bbPress (r3802)
1218         * @param string $url
1219         * @param int $reply_id
1220         * @uses maybe_map_permalink_to_group()
1221         * @return string
1222         */
1223        public function map_reply_permalink_to_group( $url, $reply_id ) {
1224                return $this->maybe_map_permalink_to_group( bbp_get_reply_topic_id( $reply_id ), $url );
1225        }
1226
1227        /**
1228         * Map a reply edit link to its group forum
1229         *
1230         * @param string $url
1231         * @param int $reply_id
1232         * @uses maybe_map_permalink_to_group()
1233         * @return string
1234         */
1235        public function map_reply_edit_url_to_group( $url, $reply_id ) {
1236                $new = $this->maybe_map_permalink_to_group( $reply_id );
1237
1238                if ( empty( $new ) )
1239                        return $url;
1240
1241                return trailingslashit( $new ) . bbpress()->edit_id  . '/';
1242        }
1243
1244        /**
1245         * Map a post link to its group forum
1246         *
1247         * @param string $url
1248         * @param obj $post
1249         * @param boolean $leavename
1250         * @uses maybe_map_permalink_to_group()
1251         * @return string
1252         */
1253        public function post_link( $url, $post ) {
1254                return $this->maybe_map_permalink_to_group( $post->ID, $url );
1255        }
1256
1257        /**
1258         * Map a page link to its group forum
1259         *
1260         * @param string $url
1261         * @param int $post_id
1262         * @param $sample
1263         * @uses maybe_map_permalink_to_group()
1264         * @return string
1265         */
1266        public function page_link( $url, $post_id ) {
1267                return $this->maybe_map_permalink_to_group( $post_id, $url );
1268        }
1269
1270        /**
1271         * Map a custom post type link to its group forum
1272         *
1273         * @param string $url
1274         * @param obj $post
1275         * @param $leavename
1276         * @param $sample
1277         * @uses maybe_map_permalink_to_group()
1278         * @return string
1279         */
1280        public function post_type_link( $url, $post ) {
1281                return $this->maybe_map_permalink_to_group( $post->ID, $url );
1282        }
1283
1284        /**
1285         * Fix pagination of topics on forum view
1286         *
1287         * @param array $args
1288         * @global $wp_rewrite
1289         * @uses bbp_get_forum_id()
1290         * @uses maybe_map_permalink_to_group
1291         * @return array
1292         */
1293        public function topic_pagination( $args ) {
1294                $new = $this->maybe_map_permalink_to_group( bbp_get_forum_id() );
1295
1296                if ( empty( $new ) )
1297                        return $args;
1298
1299                global $wp_rewrite;
1300
1301                $args['base'] = trailingslashit( $new ) . $wp_rewrite->pagination_base . '/%#%/';
1302
1303                return $args;
1304        }
1305
1306        /**
1307         * Fix pagination of replies on topic view
1308         *
1309         * @param array $args
1310         * @global $wp_rewrite
1311         * @uses bbp_get_topic_id()
1312         * @uses maybe_map_permalink_to_group
1313         * @return array
1314         */
1315        public function replies_pagination( $args ) {
1316                $new = $this->maybe_map_permalink_to_group( bbp_get_topic_id() );
1317                if ( empty( $new ) )
1318                        return $args;
1319
1320                global $wp_rewrite;
1321
1322                $args['base'] = trailingslashit( $new ) . $wp_rewrite->pagination_base . '/%#%/';
1323
1324                return $args;
1325        }
1326
1327        /**
1328         * Ensure that forum content associated with a BuddyPress group can only be
1329         * viewed via the group URL.
1330         *
1331         * @since bbPress (r3802)
1332         */
1333        public function redirect_canonical() {
1334
1335                // Viewing a single forum
1336                if ( bbp_is_single_forum() ) {
1337                        $forum_id  = get_the_ID();
1338                        $group_ids = bbp_get_forum_group_ids( $forum_id );
1339
1340                // Viewing a single topic
1341                } elseif ( bbp_is_single_topic() ) {
1342                        $topic_id  = get_the_ID();
1343                        $slug      = get_post_field( 'post_name', $topic_id );
1344                        $forum_id  = bbp_get_topic_forum_id( $topic_id );
1345                        $group_ids = bbp_get_forum_group_ids( $forum_id );
1346
1347                // Not a forum or topic
1348                } else {
1349                        return;
1350                }
1351
1352                // Bail if not a group forum
1353                if ( empty( $group_ids ) )
1354                        return;
1355
1356                // Use the first group ID
1357                $group_id        = $group_ids[0];
1358                $group           = groups_get_group( array( 'group_id' => $group_id ) );
1359                $group_link  = trailingslashit( bp_get_group_permalink( $group ) );
1360                $redirect_to = trailingslashit( $group_link . $this->slug );
1361
1362                // Add topic slug to URL
1363                if ( bbp_is_single_topic() ) {
1364                        $redirect_to  = trailingslashit( $redirect_to . $this->topic_slug . '/' . $slug );
1365                }
1366
1367                bp_core_redirect( $redirect_to );
1368        }
1369
1370        /** Activity **************************************************************/
1371
1372        /**
1373         * Map a forum post to its corresponding group in the group activity stream.
1374         *
1375         * @since bbPress (r4396)
1376         *
1377         * @param array $args Arguments from BBP_BuddyPress_Activity::record_activity()
1378         * @uses groups_get_current_group() To see if we're posting from a BP group
1379         *
1380         * @return array
1381         */
1382        public function map_activity_to_group( $args = array() ) {
1383
1384                // Get current BP group
1385                $group = groups_get_current_group();
1386
1387                // Not posting from a BuddyPress group? stop now!
1388                if ( empty( $group ) )
1389                        return $args;
1390
1391                // Set the component to 'groups' so the activity item shows up in the group
1392                $args['component']         = buddypress()->groups->id;
1393
1394                // Move the forum post ID to the secondary item ID
1395                $args['secondary_item_id'] = $args['item_id'];
1396
1397                // Set the item ID to the group ID so the activity item shows up in the group
1398                $args['item_id']           = $group->id;
1399
1400                // Update the group's last activity
1401                groups_update_last_activity( $group->id );
1402
1403                return $args;
1404        }
1405}
1406endif;