Skip to:
Content

bbPress.org

Changeset 3746


Ignore:
Timestamp:
02/18/2012 11:10:52 PM (10 years ago)
Author:
johnjamesjacoby
Message:

Next pass at BuddyPress Group Fourms integration:

  • Filter forms to prevent fields from appearing
  • Output new field data where needed on above forms
  • Better integration with group create and edit screens
  • Tweak forum/group ID functions to return arrays when needed
  • Flesh out display_forums() method
  • See #1669
File:
1 edited

Legend:

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

    r3723 r3746  
    941941        $this->nav_item_name = __( 'Forums', 'bbpress' );
    942942        $this->slug          = bp_get_option( '_bbp_forum_slug', 'forum' );
     943        $this->topic_slug    = bp_get_option( '_bbp_topic_slug', 'topic' );
     944        $this->reply_slug    = bp_get_option( '_bbp_reply_slug', 'reply' );
    943945
    944946        // Forum component is visible @todo configure?
     
    957959        $this->display_hook         = 'bp_template_content';
    958960        $this->template_file        = 'groups/single/plugins';
     961
     962        // Add handlers to bp_actions
     963        add_action( 'bp_actions', 'bbp_new_forum_handler'  );
     964        add_action( 'bp_actions', 'bbp_new_topic_handler'  );
     965        add_action( 'bp_actions', 'bbp_new_reply_handler'  );
     966        add_action( 'bp_actions', 'bbp_edit_forum_handler' );
     967        add_action( 'bp_actions', 'bbp_edit_topic_handler' );
     968        add_action( 'bp_actions', 'bbp_edit_reply_handler' );
    959969    }
    960970
    961971    function display() {
    962972
    963         // More than one forum, so show hierarchy
    964         if ( count( bbp_get_group_forum_ids( bp_get_current_group_id() ) ) > 1 )
    965             $this->display_group_forums();
    966 
    967         // Only one forum, so show its topics
    968         else
    969             $this->display_group_forum();
    970     }
    971 
    972     function widget_display() {
    973 
     973        // Map forum permalinks to current group
     974        add_filter( 'bbp_get_forum_permalink', array( $this, 'map_forum_permalink_to_group' ), 10, 2 );
     975        add_filter( 'bbp_get_topic_permalink', array( $this, 'map_topic_permalink_to_group' ), 10, 2 );
     976        add_filter( 'bbp_get_reply_permalink', array( $this, 'map_reply_permalink_to_group' ), 10, 2 );
     977
     978        // Prevent Topic Parent from appearing
     979        add_action( 'bbp_theme_before_topic_form_forum', array( $this, 'ob_start'     ) );
     980        add_action( 'bbp_theme_after_topic_form_forum',  array( $this, 'ob_end_clean' ) );
     981        add_action( 'bbp_theme_after_topic_form_forum',  array( $this, 'topic_parent' ) );
     982
     983        // Prevent Forum Parent from appearing
     984        add_action( 'bbp_theme_before_forum_form_parent', array( $this, 'ob_start'     ) );
     985        add_action( 'bbp_theme_after_forum_form_parent',  array( $this, 'ob_end_clean' ) );
     986        add_action( 'bbp_theme_after_forum_form_parent',  array( $this, 'forum_parent' ) );
     987
     988        // Hide breadcrumb
     989        add_filter( 'bbp_no_breadcrumb', '__return_true' );
     990
     991        $this->display_forums( 0 );
     992    }
     993
     994    /**
     995     * Used to start an output buffer
     996     */
     997    public function ob_start() {
     998        ob_start();
     999    }
     1000
     1001    /**
     1002     * Used to end an output buffer
     1003     */
     1004    public function ob_end_clean() {
     1005        ob_end_clean();
     1006    }
     1007
     1008    /**
     1009     * Map a forum permalink to the current group
     1010     *
     1011     * @sunce bbPress (rxxxx)
     1012     *
     1013     * @param string $url
     1014     * @param int $forum_id
     1015     * @return string
     1016     */
     1017    public function map_forum_permalink_to_group( $url, $forum_id ) {
     1018        $slug  = get_post_field( 'post_name', $forum_id );
     1019        $group = groups_get_group( array( 'group_id' => bp_get_current_group_id() ) );
     1020       
     1021        if ( bp_is_group_admin_screen( $this->slug ) ) {
     1022            $group_permalink = bp_get_group_admin_permalink( $group );
     1023        } else {
     1024            $group_permalink = bp_get_group_permalink( $group );
     1025        }
     1026
     1027        $url = trailingslashit( $group_permalink . $this->slug . '/' . $slug );
     1028
     1029        return $url;
     1030    }
     1031
     1032    /**
     1033     * Map a topic permalink to the current group forum
     1034     *
     1035     * @sunce bbPress (rxxxx)
     1036     *
     1037     * @param string $url
     1038     * @param int $forum_id
     1039     * @return string
     1040     */
     1041    public function map_topic_permalink_to_group( $url, $topic_id ) {
     1042        $slug  = get_post_field( 'post_name', $topic_id );
     1043        $group = groups_get_group( array( 'group_id' => bp_get_current_group_id() ) );
     1044
     1045        if ( bp_is_group_admin_screen( $this->slug ) ) {
     1046            $group_permalink = bp_get_group_admin_permalink( $group );
     1047        } else {
     1048            $group_permalink = bp_get_group_permalink( $group );
     1049        }
     1050       
     1051        $url = trailingslashit( $group_permalink . $this->slug . '/' . $this->topic_slug . '/' . $slug );
     1052
     1053        return $url;
     1054    }
     1055
     1056    /**
     1057     * Map a topic permalink to the current group forum
     1058     *
     1059     * @sunce bbPress (rxxxx)
     1060     *
     1061     * @param string $url
     1062     * @param int $forum_id
     1063     * @return string
     1064     */
     1065    public function map_reply_permalink_to_group( $url, $topic_id ) {
     1066        $slug  = get_post_field( 'post_name', $topic_id );
     1067        $group = groups_get_group( array( 'group_id' => bp_get_current_group_id() ) );
     1068
     1069        if ( bp_is_group_admin_screen( $this->slug ) ) {
     1070            $group_permalink = bp_get_group_admin_permalink( $group );
     1071        } else {
     1072            $group_permalink = bp_get_group_permalink( $group );
     1073        }
     1074       
     1075        $url = trailingslashit( $group_permalink . $this->slug . '/' . $this->reply_slug . '/' . $slug );
     1076
     1077        return $url;
    9741078    }
    9751079
     
    9841088     */
    9851089    function edit_screen() {
     1090
     1091        // Map forum permalinks to current group
     1092        add_filter( 'bbp_get_forum_permalink', array( $this, 'map_forum_permalink_to_group' ), 10, 2 );
     1093        add_filter( 'bbp_get_topic_permalink', array( $this, 'map_topic_permalink_to_group' ), 10, 2 );
     1094        add_filter( 'bbp_get_reply_permalink', array( $this, 'map_reply_permalink_to_group' ), 10, 2 );
    9861095
    9871096        // Add group admin actions to forum row actions
    9881097        add_action( 'bbp_forum_row_actions', array( $this, 'forum_row_actions' ) );
    989 
    990         // Show forums if needed
    991         $this->display_group_forums();
    992 
    993         // Output the forum form
    994         bbp_get_template_part( 'bbpress/form', 'forum'  );
    995 
    996         // Verify intent
    997         wp_nonce_field( 'bbp_group_edit_save_' . $this->slug );
     1098        add_action( 'bbp_topic_row_actions', array( $this, 'topic_row_actions' ) );
     1099
     1100        // Prevent Topic Parent from appearing
     1101        add_action( 'bbp_theme_before_topic_form_forum', array( $this, 'ob_start'     ) );
     1102        add_action( 'bbp_theme_after_topic_form_forum',  array( $this, 'ob_end_clean' ) );
     1103        add_action( 'bbp_theme_after_topic_form_forum',  array( $this, 'topic_parent' ) );
     1104
     1105        // Prevent Forum Parent from appearing
     1106        add_action( 'bbp_theme_before_forum_form_parent', array( $this, 'ob_start'     ) );
     1107        add_action( 'bbp_theme_after_forum_form_parent',  array( $this, 'ob_end_clean' ) );
     1108        add_action( 'bbp_theme_after_forum_form_parent',  array( $this, 'forum_parent' ) );
     1109
     1110        // Do not show the new topic form in the moderation area
     1111        add_filter( 'bbp_current_user_can_access_create_topic_form', '__return_false' );
     1112
     1113        // Hide breadcrumb
     1114        add_filter( 'bbp_no_breadcrumb', '__return_true' );
     1115
     1116        $this->display_forums( 1 );
    9981117    }
    9991118
     
    10711190            return false;
    10721191
     1192        // Map forum permalinks to current group
     1193        add_filter( 'bbp_get_forum_permalink', array( $this, 'map_forum_permalink_to_group' ), 10, 2 );
     1194        add_filter( 'bbp_get_topic_permalink', array( $this, 'map_topic_permalink_to_group' ), 10, 2 );
     1195        add_filter( 'bbp_get_reply_permalink', array( $this, 'map_reply_permalink_to_group' ), 10, 2 );
     1196
    10731197        // Add group admin actions to forum row actions
    10741198        add_action( 'bbp_forum_row_actions', array( $this, 'forum_row_actions' ) );
    1075 
    1076         // Show forums if needed
    1077         $this->display_group_forums();
    1078 
    1079         // Output the forum form
    1080         bbp_get_template_part( 'bbpress/form', 'forum' );
     1199        add_action( 'bbp_topic_row_actions', array( $this, 'topic_row_actions' ) );
     1200
     1201        // Prevent Topic Parent from appearing
     1202        add_action( 'bbp_theme_before_topic_form_forum', array( $this, 'ob_start'     ) );
     1203        add_action( 'bbp_theme_after_topic_form_forum',  array( $this, 'ob_end_clean' ) );
     1204        add_action( 'bbp_theme_after_topic_form_forum',  array( $this, 'topic_parent' ) );
     1205
     1206        // Prevent Forum Parent from appearing
     1207        add_action( 'bbp_theme_before_forum_form_parent', array( $this, 'ob_start'     ) );
     1208        add_action( 'bbp_theme_after_forum_form_parent',  array( $this, 'ob_end_clean' ) );
     1209        add_action( 'bbp_theme_after_forum_form_parent',  array( $this, 'forum_parent' ) );
     1210
     1211        // Do not show the new topic form in the moderation area
     1212        add_filter( 'bbp_current_user_can_access_create_topic_form', '__return_false' );
     1213
     1214        // Hide breadcrumb
     1215        add_filter( 'bbp_no_breadcrumb', '__return_true' );
     1216
     1217        $this->display_forums( 1 );
    10811218
    10821219        // Verify intent
     
    12021339     * @uses bbp_get_template_part()
    12031340     */
    1204     static function display_group_forums() {
    1205 
     1341    public function display_forums( $offset = 0 ) {
     1342        global $bbp, $wpdb;
     1343       
    12061344        // Forum data
    12071345        $forum_ids  = bbp_get_group_forum_ids( bp_get_current_group_id() );
    12081346        $forum_args = array( 'post__in' => $forum_ids );
    12091347
    1210         // Query forums and show them if
    1211         if ( !empty( $forum_ids ) && bbp_has_forums( $forum_args ) ) : ?>
    1212 
    1213             <div id="bbpress-forums">
    1214 
    1215                 <?php bbp_get_template_part( 'bbpress/loop', 'forums' ); ?>
    1216 
    1217             </div>
    1218 
    1219         <?php else : ?>
    1220 
    1221             <div id="message" class="info">
    1222                 <p><?php _e( 'This group does not have any forums. Create some or continue to the next step. You can modify this groups forums later.', 'bbpress' ); ?></p>
    1223             </div>
    1224 
    1225         <?php endif;
    1226     }
    1227 
    1228     /**
    1229      * Output the forums for a group in the edit/create screens
    1230      *
    1231      * @since bbPress (r3653)
    1232      * @uses bp_get_current_group_id()
    1233      * @uses bbp_get_group_forum_ids()
    1234      * @uses bbp_has_forums()
    1235      * @uses bbp_get_template_part()
    1236      */
    1237     static function display_group_forum() {
    1238 
    1239         // Forum data
    1240         $forum_ids  = bbp_get_group_forum_ids( bp_get_current_group_id() );
    1241         $forum_args = array( 'post__in' => $forum_ids );
    1242 
    1243         // Query forums and show them if
    1244         if ( !empty( $forum_ids ) && bbp_has_forums( $forum_args ) ) : ?>
    1245 
    1246             <div id="bbpress-forums">
    1247 
    1248                 <?php bbp_get_template_part( 'bbpress/content', 'single-forum' ); ?>
    1249 
    1250             </div>
    1251 
    1252         <?php else : ?>
    1253 
    1254             <div id="message" class="info">
    1255                 <p><?php _e( 'This group does not have any forums. Create some or continue to the next step. You can modify this groups forums later.', 'bbpress' ); ?></p>
    1256             </div>
    1257 
    1258         <?php endif;
     1348        ?>
     1349
     1350        <div id="bbpress-forums">
     1351
     1352            <?php
     1353
     1354            // Looking at the group forum root
     1355            if ( ! bp_action_variable( $offset ) || bp_is_group_create() ) :
     1356
     1357                // Query forums and show them if
     1358                if ( !empty( $forum_ids ) && bbp_has_forums( $forum_args ) ) :
     1359                   
     1360                    bbp_the_forum();
     1361
     1362                    // Only one forum found
     1363                    if ( $bbp->forum_query->post_count == 1 ) :?>
     1364
     1365                        <h3><?php _e( 'Forum', 'bbpress' ); ?></h3>
     1366
     1367                        <?php if ( bbp_has_topics( array( 'post_parent' => bbp_get_forum_id() ) ) ) : ?>
     1368
     1369                            <?php bbp_get_template_part( 'pagination', 'topics'    ); ?>
     1370
     1371                            <?php bbp_get_template_part( 'loop',       'topics'    ); ?>
     1372
     1373                            <?php bbp_get_template_part( 'pagination', 'topics'    ); ?>
     1374
     1375                            <?php bbp_get_template_part( 'form',       'topic'     ); ?>
     1376
     1377                        <?php else : ?>
     1378
     1379                            <?php bbp_get_template_part( 'feedback',   'no-topics' ); ?>
     1380
     1381                            <?php bbp_get_template_part( 'form',       'topic'     ); ?>
     1382
     1383                        <?php endif;
     1384
     1385                    // More than 1 forum found
     1386                    elseif ( $bbp->forum_query->post_count > 1 ) : ?>
     1387
     1388                        <h3><?php _e( 'Forums', 'bbpress' ); ?></h3>
     1389
     1390                        <?php bbp_get_template_part( 'loop', 'forums' ); ?>
     1391
     1392                        <h3><?php _e( 'Topics', 'bbpress' ); ?></h3>
     1393
     1394                        <?php if ( bbp_has_topics( array( 'post_parent__in' => $forum_ids ) ) ) : ?>
     1395
     1396                            <?php bbp_get_template_part( 'pagination', 'topics'    ); ?>
     1397
     1398                            <?php bbp_get_template_part( 'loop',       'topics'    ); ?>
     1399
     1400                            <?php bbp_get_template_part( 'pagination', 'topics'    ); ?>
     1401
     1402                            <?php bbp_get_template_part( 'form',       'topic'     ); ?>
     1403
     1404                        <?php else : ?>
     1405
     1406                            <?php bbp_get_template_part( 'feedback',   'no-topics' ); ?>
     1407
     1408                            <?php bbp_get_template_part( 'form',       'topic'     ); ?>
     1409
     1410                        <?php endif;
     1411
     1412                    // No forums found
     1413                    else : ?>
     1414
     1415                        <div id="message" class="info">
     1416                            <p><?php _e( 'This group does not currently have any forums.', 'bbpress' ); ?></p>
     1417                        </div>
     1418
     1419                        <?php if ( bp_is_group_create() ) :
     1420                            bbp_get_template_part( 'form', 'forum' );
     1421                        endif;
     1422                    endif;
     1423
     1424                // No forums found
     1425                else : ?>
     1426
     1427                    <div id="message" class="info">
     1428                        <p><?php _e( 'This group does not currently have any forums.', 'bbpress' ); ?></p>
     1429                    </div>
     1430
     1431                    <?php if ( bp_is_group_admin_screen( $this->slug ) || bp_is_group_create() ) :
     1432                        bbp_get_template_part( 'form', 'forum' );
     1433                    endif;
     1434                endif;
     1435
     1436            // Single forum
     1437            elseif ( ( bp_action_variable( $offset ) != $this->slug ) && ( bp_action_variable( $offset ) != $this->topic_slug ) ) :
     1438               
     1439                // Get the forum
     1440                $forum_post_type = bbp_get_forum_post_type();
     1441                $forum_slug      = bp_action_variable( $offset );
     1442                $forums          = $wpdb->get_row( "SELECT ID FROM {$wpdb->posts} WHERE post_name = '{$forum_slug}' AND post_type = '{$forum_post_type}'", ARRAY_N );
     1443
     1444                // Forum exists
     1445                if ( !empty( $forums ) ) :
     1446                    $forum_id              = $forums[0];
     1447                    $bbp->current_forum_id = $forum_id;
     1448                    bbp_set_query_name( 'bbp_single_forum' ); ?>
     1449
     1450                    <h3><?php bbp_forum_title(); ?></h3>
     1451
     1452                    <?php bbp_get_template_part( 'content', 'single-forum' ); ?>
     1453
     1454                <?php else : ?>
     1455
     1456                    <?php bbp_get_template_part( 'feedback', 'no-topics'   ); ?>
     1457
     1458                    <?php bbp_get_template_part( 'form',     'topic'       ); ?>
     1459
     1460                <?php endif;
     1461               
     1462            // Single topic
     1463            elseif ( ( bp_action_variable( $offset ) != $this->slug ) && ( bp_action_variable( $offset ) == $this->topic_slug ) ) :
     1464               
     1465                // Get the topic
     1466                $topic_post_type = bbp_get_topic_post_type();
     1467                $topic_slug      = bp_action_variable( $offset + 1 );
     1468                $topics          = $wpdb->get_row( "SELECT ID FROM {$wpdb->posts} WHERE post_name = '{$topic_slug}' AND post_type = '{$topic_post_type}'", ARRAY_N );
     1469
     1470                // Topic exists
     1471                if ( !empty( $topics ) ) :
     1472                    $topic_id              = $topics[0];
     1473                    $bbp->current_topic_id = $topic_id;
     1474                    bbp_set_query_name( 'bbp_single_topic' ); ?>
     1475
     1476                    <h3><?php bbp_topic_title(); ?></h3>
     1477
     1478                    <?php bbp_get_template_part( 'content', 'single-topic' ); ?>
     1479                   
     1480                <?php else : ?>
     1481
     1482                    <?php bbp_get_template_part( 'feedback', 'no-topics'   ); ?>
     1483
     1484                    <?php bbp_get_template_part( 'form',     'topic'       ); ?>
     1485
     1486                <?php endif;
     1487               
     1488            endif; ?>
     1489
     1490        </div>
     1491           
     1492        <?php
    12591493    }
    12601494
     
    12701504
    12711505        // Only admins can take actions on forums
    1272         if ( !bp_is_item_admin() )
    1273             return;
    1274 
    1275         $forum_id = bbp_get_forum_id();
    1276 
    1277         ?>
     1506        if ( is_super_admin() || current_user_can( 'moderate' ) || bp_is_item_admin() || bp_is_item_mod() ) : ?>
    12781507
    12791508        <div class="row-actions">
    12801509
    1281             <?php // @todo add links echo 'Edit | Remove | Trash'; ?>
     1510            <?php echo 'Edit | View | Trash'; ?>
    12821511
    12831512        </div>
    12841513
    1285         <?php
     1514        <?php endif;
    12861515    }
    12871516
     
    12971526
    12981527        // Only admins can take actions on forums
    1299         if ( !bp_is_item_admin() || !bp_is_item_mod() )
    1300             return;
    1301 
    1302         $forum_id = bbp_get_forum_id();
    1303         $topic_id = bbp_get_topic_id();
    1304 
    1305         ?>
     1528        if ( is_super_admin() || current_user_can( 'moderate' ) || bp_is_item_admin() || bp_is_item_mod() ) : ?>
    13061529
    13071530        <div class="row-actions">
    13081531
    1309             <?php // @todo add links echo 'Edit | Trash | View | Close | Stick (To Front) | Spam'; ?>
     1532            <?php echo 'Edit | View | Trash | Close | Stick (To Front) | Spam'; ?>
    13101533
    13111534        </div>
    13121535
    1313         <?php
     1536        <?php endif;
    13141537    }
    13151538
     
    13691592        return $redirect_url;
    13701593    }
     1594   
     1595    public function forum_parent() {
     1596    ?>
     1597
     1598        <input type="hidden" name="bbp_forum_parent_id" id="bbp_forum_parent_id" value="<?php bbp_group_forums_root_id(); ?>" />
     1599
     1600    <?php
     1601    }
     1602
     1603    public function topic_parent() {
     1604       
     1605        $forum_ids = bbp_get_group_forum_ids( bp_get_current_group_id() );
     1606    ?>
     1607
     1608        <p>
     1609            <label for="bbp_forum_id"><?php _e( 'Forum:', 'bbpress' ); ?></label><br />
     1610            <?php bbp_dropdown( array( 'include' => $forum_ids, 'selected' => bbp_get_form_topic_forum() ) ); ?>
     1611        </p>
     1612
     1613    <?php
     1614    }
    13711615}
    13721616endif;
     
    15401784    <div id="bbpress-forums">
    15411785
    1542         <?php bbp_get_template_part( 'bbpress/user', 'topics-created' ); ?>
     1786        <?php bbp_get_template_part( 'user', 'topics-created' ); ?>
    15431787
    15441788    </div>
     
    15591803    <div id="bbpress-forums">
    15601804
    1561         <?php bbp_get_template_part( 'bbpress/user', 'topics-replied-to' ); ?>
     1805        <?php bbp_get_template_part( 'user', 'topics-replied-to' ); ?>
    15621806
    15631807    </div>
     
    15781822    <div id="bbpress-forums">
    15791823
    1580         <?php bbp_get_template_part( 'bbpress/user', 'favorites' ); ?>
     1824        <?php bbp_get_template_part( 'user', 'favorites' ); ?>
    15811825
    15821826    </div>
     
    15971841    <div id="bbpress-forums">
    15981842
    1599         <?php bbp_get_template_part( 'bbpress/user', 'subscriptions' ); ?>
     1843        <?php bbp_get_template_part( 'user', 'subscriptions' ); ?>
    16001844
    16011845    </div>
     
    16321876        $forum_ids = groups_get_groupmeta( $group_id, 'forum_id' );
    16331877
     1878    // Make sure result is an array
     1879    if ( !is_array( $forum_ids ) )
     1880        $forum_ids = (array) $forum_ids;
     1881
    16341882    // Trim out any empty array items
    16351883    $forum_ids = array_filter( $forum_ids );
     
    16561904    if ( !empty( $forum_id ) )
    16571905        $group_ids = get_post_meta( $forum_id, '_bbp_group_ids' );
     1906
     1907    // Make sure result is an array
     1908    if ( !is_array( $group_ids ) )
     1909        $group_ids = (array) $group_ids;
    16581910
    16591911    // Trim out any empty array items
Note: See TracChangeset for help on using the changeset viewer.