Skip to:
Content

bbPress.org


Ignore:
Timestamp:
03/17/2013 01:17:54 PM (13 years ago)
Author:
johnjamesjacoby
Message:

BuddyPress Group Forum Enhancements:

  • When deleting a Group, also remove the forum connection. Fixes #2261.
  • When disabling a Group's Forum, also remove the forum connection. Fixes #2262.
  • Allow editing of a Group's Forum via the Group Admin UI. Fixes #2263.
  • Props imath.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/includes/extend/buddypress/group.php

    r4809 r4815  
    8787        // Remove group forum cap map when view is done
    8888        add_action( 'bbp_after_group_forum_display', array( $this, 'remove_group_forum_meta_cap_map' ) );
     89
     90        // bbPress needs to listen to BuddyPress group deletion.
     91        add_action( 'groups_before_delete_group',    array( $this, 'disconnect_forum_from_group'     ) );
     92
     93        // Adds a bbPress metabox to the new BuddyPress Group Admin UI
     94        add_action( 'bp_groups_admin_meta_boxes',    array( $this, 'group_admin_ui_edit_screen'      ) );
     95
     96        // Saves the bbPress options if they come from the BuddyPress Group Admin UI
     97        add_action( 'bp_group_admin_edit_after',     array( $this, 'edit_screen_save'                ) );
    8998    }
    9099
     
    240249     *
    241250     * @since bbPress (r3563)
     251     * @param object $group (the group to edit if in Group Admin UI)
     252     * @uses is_admin() To check if we're in the Group Admin UI
    242253     * @uses bbp_get_template_part()
    243254     */
    244     public function edit_screen() {
    245 
    246         $forum_ids    = bbp_get_group_forum_ids( bp_get_new_group_id() );
    247 
    248         if ( !empty( $forum_ids ) )
     255    public function edit_screen( $group = false ) {
     256        $forum_id  = 0;
     257        $group_id  = empty( $group->id ) ? bp_get_new_group_id() : $group->id ;
     258        $forum_ids = bbp_get_group_forum_ids( $group_id );
     259
     260        // Get the first forum ID
     261        if ( !empty( $forum_ids ) ) {
    249262            $forum_id = (int) is_array( $forum_ids ) ? $forum_ids[0] : $forum_ids;
    250 
    251         $checked = bp_get_new_group_enable_forum() || bp_group_is_forum_enabled( bp_get_group_id() ); ?>
     263        }
     264
     265        // Should box be checked already?
     266        $checked = is_admin() ? bp_group_is_forum_enabled( $group ) : bp_get_new_group_enable_forum() || bp_group_is_forum_enabled( bp_get_group_id() ); ?>
    252267
    253268        <h4><?php _e( 'Group Forum Settings', 'bbpress' ); ?></h4>
     
    279294            <?php endif; ?>
    280295
    281             <input type="submit" value="<?php esc_attr_e( 'Save Settings', 'bbpress' ); ?>" />
     296            <?php if ( !is_admin() ) : ?>
     297                <input type="submit" value="<?php esc_attr_e( 'Save Settings', 'bbpress' ); ?>" />
     298            <?php endif; ?>
     299
    282300        </fieldset>
    283301
     
    285303
    286304        // Verify intent
    287         wp_nonce_field( 'groups_edit_save_' . $this->slug );
     305        if ( is_admin() ) {
     306            wp_nonce_field( 'groups_edit_save_' . $this->slug, 'forum_group_admin_ui' );
     307        } else {
     308            wp_nonce_field( 'groups_edit_save_' . $this->slug );
     309        }
    288310    }
    289311
     
    292314     *
    293315     * @since bbPress (r3465)
     316     * @param int $group_id (to handle Group Admin UI hook bp_group_admin_edit_after )
    294317     * @uses bbp_new_forum_handler() To check for forum creation
    295318     * @uses bbp_edit_forum_handler() To check for forum edit
    296319     */
    297     public function edit_screen_save() {
     320    public function edit_screen_save( $group_id = 0 ) {
    298321
    299322        // Bail if not a POST action
     
    301324            return;
    302325
    303         // Nonce check
    304         if ( ! bbp_verify_nonce_request( 'groups_edit_save_' . $this->slug ) ) {
     326        // Admin Nonce check
     327        if ( is_admin() ) {
     328            check_admin_referer( 'groups_edit_save_' . $this->slug, 'forum_group_admin_ui' );
     329
     330        // Theme-side Nonce check
     331        } elseif ( ! bbp_verify_nonce_request( 'groups_edit_save_' . $this->slug ) ) {
    305332            bbp_add_error( 'bbp_edit_group_forum_screen_save', __( '<strong>ERROR</strong>: Are you sure you wanted to do that?', 'bbpress' ) );
    306333            return;
    307         }
    308 
    309         $edit_forum   = !empty( $_POST['bbp-edit-group-forum'] ) ? true : false;
    310         $forum_id     = 0;
    311         $group_id     = bp_get_current_group_id();
     334        }
     335
     336        $edit_forum = !empty( $_POST['bbp-edit-group-forum'] ) ? true : false;
     337        $forum_id   = 0;
     338        $group_id   = !empty( $group_id ) ? $group_id : bp_get_current_group_id();
    312339
    313340        // Keymasters have the ability to reconfigure forums
     
    372399            ) );
    373400
     401            // Setup forum args with forum ID
     402            $new_forum_args = array( 'forum_id' => $forum_id );
     403
     404            // If in admin, also include the group ID
     405            if ( is_admin() && !empty( $group_id ) ) {
     406                $new_forum_args['group_id'] = $group_id;
     407            }
     408
    374409            // Run the BP-specific functions for new groups
    375             $this->new_forum( array( 'forum_id' => $forum_id ) );
    376         }
    377 
    378         // Redirect after save
    379         bp_core_redirect( trailingslashit( bp_get_group_permalink( buddypress()->groups->current_group ) . '/admin/' . $this->slug ) );
     410            $this->new_forum( $new_forum_args );
     411        }
     412
     413        // Redirect after save when not in admin
     414        if ( !is_admin() ) {
     415            bp_core_redirect( trailingslashit( bp_get_group_permalink( buddypress()->groups->current_group ) . '/admin/' . $this->slug ) );
     416        }
     417    }
     418
     419    /**
     420     * Adds a metabox to BuddyPress Group Admin UI
     421     *
     422     * @since bbPress (r4814)
     423     *
     424     * @uses add_meta_box
     425     * @uses BBP_Forums_Group_Extension::group_admin_ui_display_metabox() To display the edit screen
     426     */
     427    public function group_admin_ui_edit_screen() {
     428        add_meta_box(
     429            'bbpress_group_admin_ui_meta_box',
     430            _x( 'Discussion Forum', 'group admin edit screen', 'bbpress' ),
     431            array( &$this, 'group_admin_ui_display_metabox' ),
     432            get_current_screen()->id,
     433            'side',
     434            'core'
     435        );
     436    }
     437
     438    /**
     439     * Displays the bbPress metabox in BuddyPress Group Admin UI
     440     *
     441     * @since bbPress (r4814)
     442     *
     443     * @param object $item (group object)
     444     * @uses add_meta_box
     445     * @uses BBP_Forums_Group_Extension::edit_screen() To get the html
     446     */
     447    public function group_admin_ui_display_metabox( $item ) {
     448        $this->edit_screen( $item );
    380449    }
    381450
     
    522591        // Validate forum_id
    523592        $forum_id = bbp_get_forum_id( $forum_args['forum_id'] );
    524         $group_id = bp_get_current_group_id();
     593        $group_id = !empty( $forum_args['group_id'] ) ? $forum_args['group_id'] : bp_get_current_group_id();
    525594
    526595        bbp_add_forum_id_to_group( $group_id, $forum_id );
     
    547616        // Validate forum_id
    548617        $forum_id = bbp_get_forum_id( $forum_args['forum_id'] );
    549         $group_id = bp_get_current_group_id();
     618        $group_id = !empty( $forum_args['group_id'] ) ? $forum_args['group_id'] : bp_get_current_group_id();
    550619
    551620        bbp_remove_forum_id_from_group( $group_id, $forum_id );
    552621        bbp_remove_group_id_from_forum( $forum_id, $group_id );
     622    }
     623
     624    /**
     625     * Listening to BuddyPress Group deletion to remove the forum
     626     *
     627     * @param int $group_id The group ID
     628     * @uses bbp_get_group_forum_ids()
     629     * @uses BBP_Forums_Group_Extension::remove_forum()
     630     */
     631    public function disconnect_forum_from_group( $group_id = 0 ) {
     632
     633        // Bail if no group ID available
     634        if ( empty( $group_id ) ) {
     635            return;
     636        }
     637
     638        // Get the forums for the current group
     639        $forum_ids = bbp_get_group_forum_ids( $group_id );
     640
     641        // Use the first forum ID
     642        if ( empty( $forum_ids ) )
     643            return;
     644
     645        // Get the first forum ID
     646        $forum_id = (int) is_array( $forum_ids ) ? $forum_ids[0] : $forum_ids;
     647        $this->remove_forum( array(
     648            'forum_id' => $forum_id,
     649            'group_id' => $group_id
     650        ) );
    553651    }
    554652
     
    577675        // Save the group
    578676        $group->save();
     677
     678        // Maybe disconnect forum from group
     679        if ( empty( $enabled ) ) {
     680            $this->disconnect_forum_from_group( $group_id );
     681        }
    579682
    580683        // Return the group
Note: See TracChangeset for help on using the changeset viewer.