Skip to:
Content

bbPress.org


Ignore:
Timestamp:
03/03/2012 12:14:56 PM (12 years ago)
Author:
johnjamesjacoby
Message:

BuddyPress Group Forum create page and handler. See #1669

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/plugin/bbp-includes/bbp-extend-buddypress.php

    r3760 r3789  
    939939        $this->name          = bbp_get_forum_archive_title();
    940940        $this->nav_item_name = bbp_get_forum_archive_title();
    941         $this->slug          = bbp_get_forum_slug();
    942         $this->topic_slug    = bbp_get_topic_slug();
    943         $this->reply_slug    = bbp_get_reply_slug();
     941        $this->slug          = 'forums';
     942        $this->topic_slug    = 'topic';
     943        $this->reply_slug    = 'reply';
    944944
    945945        // Forum component is visible @todo configure?
     
    987987        // Hide breadcrumb
    988988        add_filter( 'bbp_no_breadcrumb', '__return_true' );
     989
     990        // Tweak the redirect field
     991        add_filter( 'bbp_new_topic_redirect_to', array( $this, 'new_topic_redirect_to' ), 10, 2 );
     992        add_filter( 'bbp_new_reply_redirect_to', array( $this, 'new_reply_redirect_to' ), 10, 2 );
    989993
    990994        $this->display_forums( 0 );
     
    11891193            return false;
    11901194
    1191         // Map forum permalinks to current group
    1192         add_filter( 'bbp_get_forum_permalink', array( $this, 'map_forum_permalink_to_group' ), 10, 2 );
    1193         add_filter( 'bbp_get_topic_permalink', array( $this, 'map_topic_permalink_to_group' ), 10, 2 );
    1194         add_filter( 'bbp_get_reply_permalink', array( $this, 'map_reply_permalink_to_group' ), 10, 2 );
    1195 
    1196         // Add group admin actions to forum row actions
    1197         add_action( 'bbp_forum_row_actions', array( $this, 'forum_row_actions' ) );
    1198         add_action( 'bbp_topic_row_actions', array( $this, 'topic_row_actions' ) );
    1199 
    1200         // Prevent Topic Parent from appearing
    1201         add_action( 'bbp_theme_before_topic_form_forum', array( $this, 'ob_start'     ) );
    1202         add_action( 'bbp_theme_after_topic_form_forum',  array( $this, 'ob_end_clean' ) );
    1203         add_action( 'bbp_theme_after_topic_form_forum',  array( $this, 'topic_parent' ) );
    1204 
    1205         // Prevent Forum Parent from appearing
    1206         add_action( 'bbp_theme_before_forum_form_parent', array( $this, 'ob_start'     ) );
    1207         add_action( 'bbp_theme_after_forum_form_parent',  array( $this, 'ob_end_clean' ) );
    1208         add_action( 'bbp_theme_after_forum_form_parent',  array( $this, 'forum_parent' ) );
    1209 
    1210         // Do not show the new topic form in the moderation area
    1211         add_filter( 'bbp_current_user_can_access_create_topic_form', '__return_false' );
    1212 
    1213         // Hide breadcrumb
    1214         add_filter( 'bbp_no_breadcrumb', '__return_true' );
    1215 
    1216         $this->display_forums( 1 );
     1195        $checked = bp_get_new_group_enable_forum() || groups_get_groupmeta( bp_get_new_group_id(), 'forum_id' );
     1196        ?>
     1197
     1198        <h4><?php _e( 'Group Forums', 'buddypress' ); ?></h4>
     1199
     1200        <p><?php _e( 'Create a discussion forum to allow members of this group to communicate in a structured, bulletin-board style fashion.', 'buddypress' ); ?></p>
     1201
     1202        <div class="checkbox">
     1203            <label><input type="checkbox" name="bbp-create-group-forum" id="bbp-create-group-forum" value="1"<?php checked( $checked ); ?> /> <?php _e( 'Yes. I want this group to have a forum.', 'buddypress' ); ?></label>
     1204        </div>
     1205
     1206        <?php
    12171207
    12181208        // Verify intent
    1219         wp_nonce_field( 'bbp_group_create_save_' . $this->slug );
     1209        wp_nonce_field( 'groups_create_save_' . $this->slug );
    12201210    }
    12211211
     
    12291219    function create_screen_save() {
    12301220
    1231         // Bail if not a POST action
    1232         if ( 'POST' !== strtoupper( $_SERVER['REQUEST_METHOD'] ) )
    1233             return;
    1234 
    1235         // Bail if action is empty
    1236         if ( empty( $_POST['action'] ) )
    1237             return;
    1238 
    1239         // Handle the different actions that can happen here
    1240         switch ( $_POST['action'] ) {
    1241 
    1242             // New forum
    1243             case 'bbp-new-forum' :
    1244 
    1245                 // Redirect back here, not to the new forum
    1246                 add_filter( 'bbp_new_forum_redirect_to',  array( $this, 'create_redirect_to' )        );
    1247 
    1248                 // Add actions to bbp_new_forum
    1249                 add_action( 'bbp_new_forum',              array( $this, 'new_forum'          ), 10, 4 );
    1250 
    1251                 // Handle the new forum
    1252                 bbp_new_forum_handler();
     1221        check_admin_referer( 'groups_create_save_' . $this->slug );
     1222
     1223        $create_forum = !empty( $_POST['bbp-create-group-forum'] ) ? true : false;
     1224        $forum_id     = groups_get_groupmeta( bp_get_new_group_id(), 'forum_id' );
     1225
     1226        // Create a forum, or not
     1227        switch ( $create_forum ) {
     1228            case true  :
     1229
     1230                // Bail if initial content was already created
     1231                if ( !empty( $forum_id ) )
     1232                    return;
     1233
     1234                // Set the default forum status
     1235                switch ( bp_get_new_group_status() ) {
     1236                    case 'hidden'  :
     1237                        $status = bbp_get_hidden_status_id();
     1238                        break;
     1239                    case 'private' :
     1240                        $status = bbp_get_private_status_id();
     1241                        break;
     1242                    case 'public'  :
     1243                    default        :
     1244                        $status = bbp_get_public_status_id();
     1245                        break;
     1246                }
     1247
     1248                // Create the initial forum
     1249                $forum_id = bbp_insert_forum( array(
     1250                    'post_parent'  => bbp_get_group_forums_root_id(),
     1251                    'post_title'   => bp_get_new_group_name(),
     1252                    'post_content' => bp_get_new_group_description(),
     1253                    'post_status'  => $status
     1254                ) );
     1255
     1256                // Create the initial topic
     1257                $topic_id = bbp_insert_topic(
     1258                    array(
     1259                        'post_parent'  => $forum_id,
     1260                        'post_title'   => __( 'Hello World!', 'bbpress' ),
     1261                        'post_content' => __( 'I am the first topic in your group forum. You can keep me, edit me, trash me, or delete me.', 'bbpress' )
     1262                    ),
     1263                    array( 'forum_id'  => $forum_id )
     1264                );
     1265
     1266                // Create the initial reply
     1267                $reply_id = bbp_insert_reply(
     1268                    array(
     1269                        'post_parent'  => $topic_id,
     1270                        'post_title'   => __( 'Re: Hello World!', 'bbpress' ),
     1271                        'post_content' => __( 'Oh, and this is what a reply looks like.', 'bbpress' )
     1272                    ),
     1273                    array(
     1274                        'forum_id'     => $forum_id,
     1275                        'topic_id'     => $topic_id
     1276                    )
     1277                );
     1278
     1279                // Add the ID's to group meta
     1280                groups_update_groupmeta( bp_get_new_group_id(), 'forum_id',       $forum_id );
     1281                groups_update_groupmeta( bp_get_new_group_id(), 'first_topic_id', $topic_id );
     1282                groups_update_groupmeta( bp_get_new_group_id(), 'first_reply_id', $reply_id );
    12531283
    12541284                break;
    1255 
    1256             // Edit existing forum
    1257             case 'bbp-edit-forum' :
    1258 
    1259                 // Redirect back here, not to the new forum
    1260                 add_filter( 'bbp_edit_forum_redirect_to', array( $this, 'create_redirect_to' )        );
    1261 
    1262                 // Handle the forum edit
    1263                 bbp_edit_forum_handler();
    1264 
    1265                 break;
    1266 
    1267             // Trash a forum
    1268             case 'bbp-trash-forum' :
    1269                 //bbp_trash_forum_handler();
    1270                 break;
    1271 
    1272             // Permanently delet a forum
    1273             case 'bbp-delete-forum' :
    1274                 //bbp_delete_forum_handler();
     1285            case false :
     1286
     1287                // Forum was created but is now being undone
     1288                if ( !empty( $forum_id ) ) {
     1289                    $topic_id = groups_get_groupmeta( bp_get_new_group_id(), 'first_topic_id' );
     1290                    $reply_id = groups_get_groupmeta( bp_get_new_group_id(), 'first_reply_id' );
     1291
     1292                    // Delete initial content
     1293                    wp_delete_post( $forum_id, true );
     1294                    wp_delete_post( $topic_id, true );
     1295                    wp_delete_post( $reply_id, true );
     1296
     1297                    // Remove the forum ID to group meta
     1298                    groups_delete_groupmeta( bp_get_new_group_id(), 'forum_id'       );
     1299                    groups_delete_groupmeta( bp_get_new_group_id(), 'first_topic_id' );
     1300                    groups_delete_groupmeta( bp_get_new_group_id(), 'first_reply_id' );
     1301                }
     1302
    12751303                break;
    12761304        }
     
    13301358
    13311359    /**
    1332      * Output the forums for a group in the edit/create screens
     1360     * Output the forums for a group in the edit screens
    13331361     *
    13341362     * @since bbPress (r3653)
     
    13451373        // Forum data
    13461374        $forum_ids  = bbp_get_group_forum_ids( bp_get_current_group_id() );
    1347         $forum_args = array( 'post__in' => $forum_ids );
    1348 
    1349         ?>
     1375        $forum_args = array( 'post__in' => $forum_ids, 'post_parent' => null ); ?>
    13501376
    13511377        <div id="bbpress-forums">
     
    13541380
    13551381            // Looking at the group forum root
    1356             if ( ! bp_action_variable( $offset ) || bp_is_group_create() ) :
     1382            if ( ! bp_action_variable( $offset ) ) :
    13571383
    13581384                // Query forums and show them if
     
    13661392                        <h3><?php _e( 'Forum', 'bbpress' ); ?></h3>
    13671393
     1394                        <?php bbp_set_query_name( 'bbp_single_forum' ); ?>
     1395
    13681396                        <?php if ( bbp_has_topics( array( 'post_parent' => bbp_get_forum_id() ) ) ) : ?>
    13691397
     
    14181446                        </div>
    14191447
    1420                         <?php if ( bp_is_group_create() ) :
     1448                        <?php if ( bp_is_group_admin_screen( $this->slug ) ) :
    14211449                            bbp_get_template_part( 'form', 'forum' );
    14221450                        endif;
     
    14301458                    </div>
    14311459
    1432                     <?php if ( bp_is_group_admin_screen( $this->slug ) || bp_is_group_create() ) :
     1460                    <?php if ( bp_is_group_admin_screen( $this->slug ) ) :
    14331461                        bbp_get_template_part( 'form', 'forum' );
    14341462                    endif;
     
    15411569
    15421570    /**
    1543      * Redirect to the group admin forum edit screen
     1571     * Redirect to the group forum screen
    15441572     *
    15451573     * @since bbPress (r3653)
     
    15511579     * @uses bp_get_groups_root_slug()
    15521580     */
     1581    public function new_topic_redirect_to( $redirect_url = '', $redirect_to = '' ) {
     1582        return $redirect_url;
     1583    }
     1584
     1585    /**
     1586     * Redirect to the group admin forum edit screen
     1587     *
     1588     * @since bbPress (r3653)
     1589     *
     1590     * @uses groups_get_current_group()
     1591     * @uses bp_is_group_admin_screen()
     1592     * @uses trailingslashit()
     1593     * @uses bp_get_root_domain()
     1594     * @uses bp_get_groups_root_slug()
     1595     */
    15531596    public function edit_redirect_to( $redirect_url = '' ) {
    15541597
     
    15631606    }
    15641607
    1565     /**
    1566      * Redirect to the group creation forum edit screen
    1567      *
    1568      * @since bbPress (r3653)
    1569      *
    1570      * @uses bp_is_group_creation_step()
    1571      * @uses bp_is_action_variable()
    1572      * @uses bp_get_root_domain()
    1573      * @uses bp_get_groups_root_slug()
    1574      */
    1575     public function create_redirect_to( $redirect_url = '' ) {
    1576         global $bp;
    1577 
    1578         // If this is a group of any kind, empty out the redirect URL
    1579         if ( bp_is_group_creation_step( $this->slug ) ) {
    1580 
    1581             // Loop through
    1582             foreach ( (array) $bp->groups->group_creation_steps as $slug => $name ) {
    1583                 if ( bp_is_action_variable( $slug ) ) {
    1584                     $previous_steps[] = $slug;
    1585                     break;
    1586                 }
    1587 
    1588                 $previous_steps[] = $slug;
    1589             }
    1590         }
    1591         $redirect_url = trailingslashit( bp_get_root_domain() ) . bp_get_groups_root_slug() . '/create/step/' . array_pop( $previous_steps );
    1592 
    1593         return $redirect_url;
    1594     }
    1595    
    15961608    public function forum_parent() {
    15971609    ?>
     
    16131625
    16141626    <?php
    1615     }
     1627    }   
    16161628}
    16171629endif;
Note: See TracChangeset for help on using the changeset viewer.