Skip to:
Content

Changeset 11763


Ignore:
Timestamp:
12/08/17 00:22:09 (6 weeks ago)
Author:
djpaul
Message:

Retire Legacy Forums.

"Legacy Forums" is what we now call the bundled version of bbPress 1 that has shipped with BuddyPress for over nine years. The Legacy Forums codebase/features are many years stagnant, and it has been almost completely hidden from the UI for the past five years.

Legacy Forums were replaced by bbPress 2, which is its own plugin, and we've been promoting its integration with BuddyPress for a long time. Most significantly, bbPress 1 only runs on WordPress versions older than 4.7, because of a BackPress conflict (which is nested inside bbPress 1) with WordPress 4.7's WP_Taxonomy class.

If your site is still using Legacy Forums, you will need to migrate to bbPress 2 to run BuddyPress 3.0. See https://bpdevel.wordpress.com/2017/12/07/legacy-forums-support-will-be/ for more information.

Fixes #5351
See #7502

Location:
trunk
Files:
7 deleted
34 edited

Legend:

Unmodified
Added
Removed
  • trunk/.jshintignore

    r11009 r11763  
    1 // Deprecated 
    2 src/bp-forums/bbpress/**/* 
    3  
    41// 3rd party libraries 
    52src/bp-core/js/vendor/**/* 
  • trunk/Gruntfile.js

    r11690 r11763  
    1919 
    2020        BP_EXCLUDED_MISC = [ 
    21             '!bp-forums/bbpress/**/*' 
    2221        ], 
    2322 
     
    257256        }, 
    258257        exec: { 
    259             bbpress: { 
    260                 command: 'svn export --force https://bbpress.svn.wordpress.org/tags/1.2 bbpress', 
    261                 cwd: BUILD_DIR + 'bp-forums', 
    262                 stdout: false 
    263             }, 
    264258            bpdefault: { 
    265259                command: 'svn export --force https://github.com/buddypress/BP-Default.git/trunk bp-themes/bp-default', 
     
    304298    grunt.registerTask( 'commit',  ['src', 'checktextdomain', 'imagemin'] ); 
    305299    grunt.registerTask( 'build',   ['commit', 'clean:all', 'copy:files', 'uglify', 'jsvalidate:build', 'cssmin', 'makepot', 'exec:bpdefault'] ); 
    306     grunt.registerTask( 'release', ['build', 'exec:bbpress'] ); 
     300    grunt.registerTask( 'release', ['build'] ); 
    307301 
    308302    // Testing tasks. 
  • trunk/composer.json

    r11615 r11763  
    66    "activity", 
    77    "community", 
    8     "forum", 
    98    "friends", 
    109    "groups", 
  • trunk/package.json

    r11679 r11763  
    3535    "activity", 
    3636    "community", 
    37     "forum", 
    3837    "friends", 
    3938    "groups", 
  • trunk/src/bp-activity/bp-activity-filters.php

    r11592 r11763  
    9797 
    9898add_filter( 'pre_comment_content',                   'bp_activity_at_name_filter' ); 
    99 add_filter( 'group_forum_topic_text_before_save',    'bp_activity_at_name_filter' ); 
    100 add_filter( 'group_forum_post_text_before_save',     'bp_activity_at_name_filter' ); 
    10199add_filter( 'the_content',                           'bp_activity_at_name_filter' ); 
    102100add_filter( 'bp_activity_get_embed_excerpt',         'bp_activity_at_name_filter' ); 
  • trunk/src/bp-core/admin/bp-core-admin-components.php

    r10934 r11763  
    8181    $required_components = bp_core_admin_get_components( 'required' ); 
    8282    $retired_components  = bp_core_admin_get_components( 'retired'  ); 
    83  
    84     // Don't show Forums component in optional components if it's disabled. 
    85     if ( ! bp_is_active( 'forums' ) ) { 
    86         unset( $optional_components['forums'] ); 
    87     } 
    8883 
    8984    // Merge optional and required together. 
  • trunk/src/bp-core/admin/bp-core-admin-functions.php

    r11513 r11763  
    287287            $orphaned_components[] = $component['name']; 
    288288        } 
    289     } 
    290  
    291     // Special case: If the Forums component is orphaned, but the bbPress 1.x installation is 
    292     // not correctly set up, don't show a nag. (In these cases, it's probably the case that the 
    293     // user is using bbPress 2.x; see https://buddypress.trac.wordpress.org/ticket/4292. 
    294     if ( isset( $bp->forums->name ) && in_array( $bp->forums->name, $orphaned_components ) && !bp_forums_is_installed_correctly() ) { 
    295         $forum_key = array_search( $bp->forums->name, $orphaned_components ); 
    296         unset( $orphaned_components[$forum_key] ); 
    297         $orphaned_components = array_values( $orphaned_components ); 
    298289    } 
    299290 
     
    440431        ), 
    441432    ); 
    442  
    443     // If forums component is active, add additional tab. 
    444     if ( bp_is_active( 'forums' ) && class_exists( 'BP_Forums_Component' ) ) { 
    445  
    446         // Enqueue thickbox. 
    447         wp_enqueue_script( 'thickbox' ); 
    448         wp_enqueue_style( 'thickbox' ); 
    449  
    450         $tabs['3'] = array( 
    451             'href' => bp_get_admin_url( add_query_arg( array( 'page' => 'bb-forums-setup'  ), 'admin.php' ) ), 
    452             'name' => __( 'Forums', 'buddypress' ) 
    453         ); 
    454     } 
    455433 
    456434    /** 
  • trunk/src/bp-core/admin/bp-core-admin-settings.php

    r11606 r11763  
    248248} 
    249249 
    250 /** Forums Section ************************************************************/ 
    251  
    252 /** 
    253  * Forums settings section description for the settings page. 
    254  * 
    255  * @since 1.6.0 
    256  */ 
    257 function bp_admin_setting_callback_bbpress_section() { } 
    258  
    259 /** 
    260  * The bb-config.php location field. 
    261  * 
    262  * @since 1.6.0 
    263  * 
    264  */ 
    265 function bp_admin_setting_callback_bbpress_configuration() { 
    266  
    267     $config_location = bp_get_option( 'bb-config-location' ); 
    268     $file_exists     = (bool) ( file_exists( $config_location ) || is_file( $config_location ) ); ?> 
    269  
    270     <input name="bb-config-location" type="text" id="bb-config-location" value="<?php bp_form_option( 'bb-config-location', '' ); ?>" class="medium-text" style="width: 300px;" /> 
    271  
    272     <?php if ( false === $file_exists ) : ?> 
    273  
    274         <a class="button" href="<?php bp_admin_url( 'admin.php?page=bb-forums-setup&repair=1' ); ?>"><?php _e( 'Repair', 'buddypress' ) ?></a> 
    275         <span class="attention"><?php _e( 'File does not exist', 'buddypress' ); ?></span> 
    276  
    277     <?php endif; ?> 
    278  
    279     <p class="description"><?php _e( 'Absolute path to your bbPress configuration file.', 'buddypress' ); ?></p> 
    280  
    281 <?php 
    282 } 
    283  
    284250/** Settings Page *************************************************************/ 
    285251 
  • trunk/src/bp-core/admin/css/common-rtl.css

    r11711 r11763  
    524524} 
    525525 
    526 .settings_page_bp-components tr.forums td.plugin-title span:before { 
    527     content: "\f452"; 
    528 } 
    529  
    530526.settings_page_bp-components tr.blogs td.plugin-title span:before { 
    531527    content: "\f120"; 
  • trunk/src/bp-core/admin/css/common.css

    r11711 r11763  
    524524} 
    525525 
    526 .settings_page_bp-components tr.forums td.plugin-title span:before { 
    527     content: "\f452"; 
    528 } 
    529  
    530526.settings_page_bp-components tr.blogs td.plugin-title span:before { 
    531527    content: "\f120"; 
  • trunk/src/bp-core/bp-core-filters.php

    r11698 r11763  
    101101    if ( !empty( $bp->pages->register ) ) 
    102102        $pages[] = $bp->pages->register->id; 
    103  
    104     if ( !empty( $bp->pages->forums ) && ( !bp_is_active( 'forums' ) || ( bp_is_active( 'forums' ) && bp_forums_has_directory() && !bp_forums_is_installed_correctly() ) ) ) 
    105         $pages[] = $bp->pages->forums->id; 
    106103 
    107104    /** 
  • trunk/src/bp-core/bp-core-functions.php

    r11698 r11763  
    446446} 
    447447 
     448 
     449/** 
     450 * Return the parent forum ID for the Legacy Forums abstraction layer. 
     451 * 
     452 * @since 1.5.0 
     453 * @since 3.0.0 Supported for compatibility with bbPress 2. 
     454 * 
     455 * @return int Forum ID. 
     456 */ 
     457function bp_forums_parent_forum_id() { 
     458 
     459    /** 
     460     * Filters the parent forum ID for the bbPress abstraction layer. 
     461     * 
     462     * @since 1.5.0 
     463     * 
     464     * @param int BP_FORUMS_PARENT_FORUM_ID The Parent forum ID constant. 
     465     */ 
     466    return apply_filters( 'bp_forums_parent_forum_id', BP_FORUMS_PARENT_FORUM_ID ); 
     467} 
     468 
    448469/** Directory *****************************************************************/ 
    449470 
     
    467488        'notifications', 
    468489    ); 
    469  
    470     // Only add legacy forums if it is enabled 
    471     // prevents conflicts with bbPress, which also uses the same 'forums' id. 
    472     if ( class_exists( 'BP_Forums_Component' ) ) { 
    473         $components[] = 'forums'; 
    474     } 
    475490 
    476491    return $components; 
     
    17311746 
    17321747/** 
    1733  * Are oembeds allowed in forum posts? 
    1734  * 
    1735  * @since 1.5.0 
    1736  * 
    1737  * @return bool False when forum post embed support is disabled; true when 
    1738  *              enabled. Default: true. 
    1739  */ 
    1740 function bp_use_embed_in_forum_posts() { 
    1741  
    1742     /** 
    1743      * Filters whether or not oEmbeds are allowed in forum posts. 
    1744      * 
    1745      * @since 1.5.0 
    1746      * 
    1747      * @param bool $value Whether or not oEmbeds are allowed. 
    1748      */ 
    1749     return apply_filters( 'bp_use_embed_in_forum_posts', !defined( 'BP_EMBED_DISABLE_FORUM_POSTS' ) || !BP_EMBED_DISABLE_FORUM_POSTS ); 
    1750 } 
    1751  
    1752 /** 
    17531748 * Are oembeds allowed in private messages? 
    17541749 * 
     
    23562351                break; 
    23572352 
    2358             case 'forums': 
    2359                 $slug = bp_is_active( 'forums' ) ? bp_get_forums_root_slug() : ''; 
    2360                 $query_string = '/?fs='; 
    2361                 break; 
    2362  
    23632353            case 'groups': 
    23642354                $slug = bp_is_active( 'groups' ) ? bp_get_groups_root_slug() : ''; 
     
    24642454 
    24652455    $retired_components = array( 
    2466         'forums' => array( 
    2467             'title'       => __( 'Group Forums', 'buddypress' ), 
    2468             'description' => sprintf( __( 'BuddyPress Forums are retired. Use %s.', 'buddypress' ), '<a href="https://bbpress.org/">bbPress</a>' ) 
    2469         ), 
    24702456    ); 
    24712457 
     
    24982484            'title'       => __( 'User Groups', 'buddypress' ), 
    24992485            'description' => __( 'Groups allow your users to organize themselves into specific public, private or hidden sections with separate activity streams and member listings.', 'buddypress' ) 
    2500         ), 
    2501         'forums'   => array( 
    2502             'title'       => __( 'Group Forums (Legacy)', 'buddypress' ), 
    2503             'description' => __( 'Group forums allow for focused, bulletin-board style conversations.', 'buddypress' ) 
    25042486        ), 
    25052487        'blogs'    => array( 
  • trunk/src/bp-core/bp-core-options.php

    r11695 r11763  
    2929 
    3030        'bp-deactivated-components'            => array(), 
    31  
    32         /* bbPress ***********************************************************/ 
    33  
    34         // Legacy bbPress config location. 
    35         'bb-config-location'                   => ABSPATH . 'bb-config.php', 
    3631 
    3732        /* XProfile **********************************************************/ 
     
    695690 
    696691/** 
    697  * Output the group forums root parent forum id. 
    698  * 
    699  * @since 1.6.0 
    700  * 
    701  * @param bool|string $default Optional. Default: '0'. 
    702  */ 
    703 function bp_group_forums_root_id( $default = '0' ) { 
    704     echo bp_get_group_forums_root_id( $default ); 
    705 } 
    706     /** 
    707      * Return the group forums root parent forum id. 
    708      * 
    709      * @since 1.6.0 
    710      * 
    711      * @param bool|string $default Optional. Default: '0'. 
    712      * @return int The ID of the group forums root forum. 
    713      */ 
    714     function bp_get_group_forums_root_id( $default = '0' ) { 
    715  
    716         /** 
    717          * Filters the group forums root parent forum id. 
    718          * 
    719          * @since 1.6.0 
    720          * 
    721          * @param int $value The group forums root parent forum id. 
    722          */ 
    723         return (int) apply_filters( 'bp_get_group_forums_root_id', (int) bp_get_option( '_bp_group_forums_root_id', $default ) ); 
    724     } 
    725  
    726 /** 
    727  * Check whether BuddyPress Group Forums are enabled. 
    728  * 
    729  * @since 1.6.0 
    730  * 
    731  * @param bool $default Optional. Fallback value if not found in the database. 
    732  *                      Default: true. 
    733  * @return bool True if group forums are active, otherwise false. 
    734  */ 
    735 function bp_is_group_forums_active( $default = true ) { 
    736  
    737     /** 
    738      * Filters whether or not BuddyPress Group Forums are enabled. 
    739      * 
    740      * @since 1.6.0 
    741      * 
    742      * @param bool $value Whether or not BuddyPress Group Forums are enabled. 
    743      */ 
    744     return (bool) apply_filters( 'bp_is_group_forums_active', (bool) bp_get_option( '_bp_enable_group_forums', $default ) ); 
    745 } 
    746  
    747 /** 
    748692 * Check whether Akismet is enabled. 
    749693 * 
  • trunk/src/bp-core/bp-core-template.php

    r11605 r11763  
    549549    if ( bp_is_active( 'blogs' ) && is_multisite() ) { 
    550550        $options['blogs']   = _x( 'Blogs', 'search form', 'buddypress' ); 
    551     } 
    552  
    553     if ( bp_is_active( 'forums' ) && bp_forums_is_installed_correctly() && bp_forums_has_directory() ) { 
    554         $options['forums']  = _x( 'Forums', 'search form', 'buddypress' ); 
    555551    } 
    556552 
     
    22002196 * 
    22012197 * @since 1.5.0 
     2198 * @since 3.0.0 Required for bbPress 2 integration. 
    22022199 * 
    22032200 * @return bool True if the current page is part of the Forums component. 
     
    24742471 
    24752472/** 
    2476  * Is this a user's forums page? 
    2477  * 
    2478  * Eg http://example.com/members/joe/forums/ (or a subpage thereof). 
    2479  * 
    2480  * @since 1.5.0 
    2481  * 
    2482  * @return bool True if the current page is a user's forums page. 
    2483  */ 
    2484 function bp_is_user_forums() { 
    2485  
    2486     if ( ! bp_is_active( 'forums' ) ) { 
    2487         return false; 
    2488     } 
    2489  
    2490     if ( bp_is_user() && bp_is_forums_component() ) { 
    2491         return true; 
    2492     } 
    2493  
    2494     return false; 
    2495 } 
    2496  
    2497 /** 
    2498  * Is this a user's "Topics Started" page? 
    2499  * 
    2500  * Eg http://example.com/members/joe/forums/topics/. 
    2501  * 
    2502  * @since 1.5.0 
    2503  * 
    2504  * @return bool True if the current page is a user's Topics Started page. 
    2505  */ 
    2506 function bp_is_user_forums_started() { 
    2507     return (bool) ( bp_is_user_forums() && bp_is_current_action( 'topics' ) ); 
    2508 } 
    2509  
    2510 /** 
    2511  * Is this a user's "Replied To" page? 
    2512  * 
    2513  * Eg http://example.com/members/joe/forums/replies/. 
    2514  * 
    2515  * @since 1.5.0 
    2516  * 
    2517  * @return bool True if the current page is a user's Replied To forums page. 
    2518  */ 
    2519 function bp_is_user_forums_replied_to() { 
    2520     return (bool) ( bp_is_user_forums() && bp_is_current_action( 'replies' ) ); 
    2521 } 
    2522  
    2523 /** 
    25242473 * Is the current page part of a user's Groups page? 
    25252474 * 
     
    27562705 
    27572706/** 
    2758  * Is the current page a group's forum page? 
    2759  * 
    2760  * Only applies to legacy bbPress forums. 
    2761  * 
    2762  * @since 1.1.0 
    2763  * 
    2764  * @return bool True if the current page is a group forum page. 
    2765  */ 
    2766 function bp_is_group_forum() { 
    2767     $retval = false; 
    2768  
    2769     // At a forum URL. 
    2770     if ( bp_is_single_item() && bp_is_groups_component() && bp_is_current_action( 'forum' ) ) { 
    2771         $retval = true; 
    2772  
    2773         // If at a forum URL, set back to false if forums are inactive, or not 
    2774         // installed correctly. 
    2775         if ( ! bp_is_active( 'forums' ) || ! bp_forums_is_installed_correctly() ) { 
    2776             $retval = false; 
    2777         } 
    2778     } 
    2779  
    2780     return $retval; 
    2781 } 
    2782  
    2783 /** 
    27842707 * Is the current page a group's activity page? 
    27852708 * 
     
    28052728 * Is the current page a group forum topic? 
    28062729 * 
    2807  * Only applies to legacy bbPress (1.x) forums. 
    2808  * 
    28092730 * @since 1.1.0 
     2731 * @since 3.0.0 Required for bbPress 2 integration. 
    28102732 * 
    28112733 * @return bool True if the current page is part of a group forum topic. 
     
    28182740 * Is the current page a group forum topic edit page? 
    28192741 * 
    2820  * Only applies to legacy bbPress (1.x) forums. 
    2821  * 
    28222742 * @since 1.2.0 
     2743 * @since 3.0.0 Required for bbPress 2 integration. 
    28232744 * 
    28242745 * @return bool True if the current page is part of a group forum topic edit page. 
     
    34153336        if ( bp_is_group_members() ) { 
    34163337            $bp_classes[] = 'group-members'; 
    3417         } 
    3418  
    3419         if ( bp_is_group_forum_topic() ) { 
    3420             $bp_classes[] = 'group-forum-topic'; 
    3421         } 
    3422  
    3423         if ( bp_is_group_forum_topic_edit() ) { 
    3424             $bp_classes[] = 'group-forum-topic-edit'; 
    3425         } 
    3426  
    3427         if ( bp_is_group_forum() ) { 
    3428             $bp_classes[] = 'group-forum'; 
    34293338        } 
    34303339 
     
    35263435    } elseif ( bp_is_activation_page() ) { 
    35273436        $bp_classes[] = 'bp_activate'; 
    3528  
    3529     } elseif ( bp_is_forums_component() && bp_is_directory() ) { 
    3530         $bp_classes[] = 'bp_forum'; 
    35313437    } 
    35323438 
  • trunk/src/bp-core/classes/class-bp-admin.php

    r11648 r11763  
    442442                register_setting( 'buddypress', 'bp-disable-group-cover-image-uploads', 'intval' ); 
    443443            } 
    444         } 
    445  
    446         /* Forums ************************************************************/ 
    447  
    448         if ( bp_is_active( 'forums' ) ) { 
    449  
    450             // Add the main section. 
    451             add_settings_section( 'bp_forums', __( 'Legacy Group Forums', 'buddypress' ), 'bp_admin_setting_callback_bbpress_section', 'buddypress' ); 
    452  
    453             // Allow subscriptions setting. 
    454             add_settings_field( 'bb-config-location', __( 'bbPress Configuration', 'buddypress' ), 'bp_admin_setting_callback_bbpress_configuration', 'buddypress', 'bp_forums' ); 
    455             register_setting( 'buddypress', 'bb-config-location', '' ); 
    456444        } 
    457445 
  • trunk/src/bp-core/classes/class-bp-core.php

    r11361 r11763  
    6666         * @param array $value Array of included and optional components. 
    6767         */ 
    68         $bp->optional_components = apply_filters( 'bp_optional_components', array( 'activity', 'blogs', 'forums', 'friends', 'groups', 'messages', 'notifications', 'settings', 'xprofile' ) ); 
     68        $bp->optional_components = apply_filters( 'bp_optional_components', array( 'activity', 'blogs', 'friends', 'groups', 'messages', 'notifications', 'settings', 'xprofile' ) ); 
    6969 
    7070        /** 
  • trunk/src/bp-core/classes/class-bp-embed.php

    r10825 r11763  
    4444            add_filter( 'bp_get_activity_content', array( &$this, 'autoembed' ), 8 ); 
    4545            add_filter( 'bp_get_activity_content', array( &$this, 'run_shortcode' ), 7 ); 
    46         } 
    47  
    48         if ( bp_use_embed_in_forum_posts() ) { 
    49             add_filter( 'bp_get_the_topic_post_content', array( &$this, 'autoembed' ), 8 ); 
    50             add_filter( 'bp_get_the_topic_post_content', array( &$this, 'run_shortcode' ), 7 ); 
    5146        } 
    5247 
  • trunk/src/bp-core/deprecated/1.5.php

    r11447 r11763  
    398398    return BP_Core_Notification::delete_for_user_by_item_id( $user_id, $item_id, $component_name, $component_action, $secondary_item_id ); 
    399399} 
    400  
    401 /** 
    402  * In BP 1.5, these functions were renamed for greater consistency 
    403  * @deprecated 1.5.0 
    404  */ 
    405 function bp_forum_directory_permalink() { 
    406     _deprecated_function( __FUNCTION__, '1.5', 'bp_forums_directory_permalink()' ); 
    407     bp_forums_directory_permalink(); 
    408 } 
    409     function bp_get_forum_directory_permalink() { 
    410         _deprecated_function( __FUNCTION__, '1.5', 'bp_get_forums_directory_permalink()' ); 
    411         return bp_get_forums_directory_permalink(); 
    412     } 
    413400 
    414401/** 
  • trunk/src/bp-groups/bp-groups-actions.php

    r11761 r11763  
    195195            if ( !isset($_POST['group-show-forum']) ) { 
    196196                $group_enable_forum = 0; 
    197             } else { 
    198                 // Create the forum if enable_forum = 1. 
    199                 if ( bp_is_active( 'forums' ) && !groups_get_groupmeta( $bp->groups->new_group_id, 'forum_id' ) ) { 
    200                     groups_new_group_forum(); 
    201                 } 
    202197            } 
    203198 
  • trunk/src/bp-groups/bp-groups-activity.php

    r11557 r11763  
    5454        array( 'activity', 'group', 'member', 'member_groups' ) 
    5555    ); 
    56  
    57     // These actions are for the legacy forums 
    58     // Since the bbPress plugin also shares the same 'forums' identifier, we also 
    59     // check for the legacy forums loader class to be extra cautious. 
    60     if ( bp_is_active( 'forums' ) && class_exists( 'BP_Forums_Component' ) ) { 
    61         bp_activity_set_action( 
    62             $bp->groups->id, 
    63             'new_forum_topic', 
    64             __( 'New group forum topic', 'buddypress' ), 
    65             false, 
    66             __( 'Forum Topics', 'buddypress' ), 
    67             array( 'activity', 'group', 'member', 'member_groups' ) 
    68         ); 
    69  
    70         bp_activity_set_action( 
    71             $bp->groups->id, 
    72             'new_forum_post', 
    73             __( 'New group forum post',  'buddypress' ), 
    74             false, 
    75             __( 'Forum Replies', 'buddypress' ), 
    76             array( 'activity', 'group', 'member', 'member_groups' ) 
    77         ); 
    78     } 
    7956 
    8057    /** 
     
    405382add_action( 'groups_leave_group',          'groups_update_last_activity' ); 
    406383add_action( 'groups_created_group',        'groups_update_last_activity' ); 
    407 add_action( 'groups_new_forum_topic',      'groups_update_last_activity' ); 
    408 add_action( 'groups_new_forum_topic_post', 'groups_update_last_activity' ); 
    409384 
    410385/** 
  • trunk/src/bp-groups/bp-groups-filters.php

    r11703 r11763  
    4545add_filter( 'bp_get_group_member_name',         'stripslashes' ); 
    4646add_filter( 'bp_get_group_member_link',         'stripslashes' ); 
    47  
    48 add_filter( 'groups_new_group_forum_desc', 'bp_create_excerpt' ); 
    4947 
    5048add_filter( 'groups_group_name_before_save',        'force_balance_tags' ); 
     
    121119} 
    122120 
    123 /** Legacy group forums (bbPress 1.x) *****************************************/ 
    124  
    125 /** 
    126  * Filter bbPress query SQL when on group pages or on forums directory. 
    127  * 
    128  * @since 1.1.0 
    129  */ 
    130 function groups_add_forum_privacy_sql() { 
    131     add_filter( 'get_topics_fields', 'groups_add_forum_fields_sql' ); 
    132     add_filter( 'get_topics_join',   'groups_add_forum_tables_sql' ); 
    133     add_filter( 'get_topics_where',  'groups_add_forum_where_sql'  ); 
    134 } 
    135 add_filter( 'bbpress_init', 'groups_add_forum_privacy_sql' ); 
    136  
    137 /** 
    138  * Add fields to bbPress query for group-specific data. 
    139  * 
    140  * @since 1.1.0 
    141  * 
    142  * @param string $sql SQL statement to amend. 
    143  * @return string 
    144  */ 
    145 function groups_add_forum_fields_sql( $sql = '' ) { 
    146     $sql = 't.*, g.id as object_id, g.name as object_name, g.slug as object_slug'; 
    147     return $sql; 
    148 } 
    149  
    150 /** 
    151  * Add JOINed tables to bbPress query for group-specific data. 
    152  * 
    153  * @since 1.1.0 
    154  * 
    155  * @param string $sql SQL statement to amend. 
    156  * @return string 
    157  */ 
    158 function groups_add_forum_tables_sql( $sql = '' ) { 
    159     $bp = buddypress(); 
    160  
    161     $sql .= 'JOIN ' . $bp->groups->table_name . ' AS g LEFT JOIN ' . $bp->groups->table_name_groupmeta . ' AS gm ON g.id = gm.group_id '; 
    162  
    163     return $sql; 
    164 } 
    165  
    166 /** 
    167  * Add WHERE clauses to bbPress query for group-specific data and access protection. 
    168  * 
    169  * @since 1.1.0 
    170  * 
    171  * @param string $sql SQL Statement to amend. 
    172  * @return string 
    173  */ 
    174 function groups_add_forum_where_sql( $sql = '' ) { 
    175  
    176     // Define locale variable. 
    177     $parts = array(); 
    178  
    179     // Set this for groups. 
    180     $parts['groups'] = "(gm.meta_key = 'forum_id' AND gm.meta_value = t.forum_id)"; 
    181  
    182     // Restrict to public... 
    183     $parts['private'] = "g.status = 'public'"; 
    184  
    185     /** 
    186      * ...but do some checks to possibly remove public restriction. 
    187      * 
    188      * Decide if private are visible 
    189      */ 
    190  
    191     // Are we in our own profile? 
    192     if ( bp_is_my_profile() ) 
    193         unset( $parts['private'] ); 
    194  
    195     // Are we a super admin? 
    196     elseif ( bp_current_user_can( 'bp_moderate' ) ) 
    197         unset( $parts['private'] ); 
    198  
    199     // No need to filter on a single item. 
    200     elseif ( bp_is_single_item() ) 
    201         unset( $parts['private'] ); 
    202  
    203     // Check the SQL filter that was passed. 
    204     if ( !empty( $sql ) ) 
    205         $parts['passed'] = $sql; 
    206  
    207     // Assemble Voltron. 
    208     $parts_string = implode( ' AND ', $parts ); 
    209  
    210     $bp = buddypress(); 
    211  
    212     // Set it to the global filter. 
    213     $bp->groups->filter_sql = $parts_string; 
    214  
    215     // Return the global filter. 
    216     return $bp->groups->filter_sql; 
    217 } 
    218  
    219 /** 
    220  * Modify bbPress caps for bp-forums. 
    221  * 
    222  * @since 1.1.0 
    223  * 
    224  * @param bool   $value Original value for current_user_can check. 
    225  * @param string $cap   Capability checked. 
    226  * @param array  $args  Arguments for the caps. 
    227  * @return bool 
    228  */ 
    229 function groups_filter_bbpress_caps( $value, $cap, $args ) { 
    230  
    231     if ( bp_current_user_can( 'bp_moderate' ) ) 
    232         return true; 
    233  
    234     if ( 'add_tag_to' === $cap ) { 
    235         $bp = buddypress(); 
    236  
    237         if ( $bp->groups->current_group->user_has_access ) { 
    238             return true; 
    239         } 
    240     } 
    241  
    242     if ( 'manage_forums' == $cap && is_user_logged_in() ) 
    243         return true; 
    244  
    245     return $value; 
    246 } 
    247 add_filter( 'bb_current_user_can', 'groups_filter_bbpress_caps', 10, 3 ); 
    248  
    249 /** 
    250  * Amends the forum directory's "last active" bbPress SQL query to stop it fetching information we aren't going to use. 
    251  * 
    252  * This speeds up the query. 
    253  * 
    254  * @since 1.5.0 
    255  * 
    256  * @see BB_Query::_filter_sql() 
    257  * 
    258  * @param string $sql SQL statement. 
    259  * @return string 
    260  */ 
    261 function groups_filter_forums_root_page_sql( $sql ) { 
    262  
    263     /** 
    264      * Filters the forum directory's "last active" bbPress SQL query. 
    265      * 
    266      * This filter is used to prevent fetching information that is not used. 
    267      * 
    268      * @since 1.5.0 
    269      * 
    270      * @param string $value SQL string to specify fetching just topic_id. 
    271      */ 
    272     return apply_filters( 'groups_filter_bbpress_root_page_sql', 't.topic_id' ); 
    273 } 
    274 add_filter( 'get_latest_topics_fields', 'groups_filter_forums_root_page_sql' ); 
    275  
    276121/** 
    277122 * Should BuddyPress load the mentions scripts and related assets, including results to prime the 
  • trunk/src/bp-groups/bp-groups-functions.php

    r11762 r11763  
    355355    if ( !$group->save() ) 
    356356        return false; 
    357  
    358     // If forums have been enabled, and a forum does not yet exist, we need to create one. 
    359     if ( $group->enable_forum ) { 
    360         if ( bp_is_active( 'forums' ) && !groups_get_groupmeta( $group->id, 'forum_id' ) ) { 
    361             groups_new_group_forum( $group->id, $group->name, $group->description ); 
    362         } 
    363     } 
    364357 
    365358    // Set the invite status. 
  • trunk/src/bp-groups/bp-groups-screens.php

    r11556 r11763  
    167167     */ 
    168168    bp_core_load_template( apply_filters( 'groups_template_group_home', 'groups/single/home' ) ); 
    169 } 
    170  
    171 /** 
    172  * This screen function handles actions related to group forums. 
    173  * 
    174  * @since 1.0.0 
    175  */ 
    176 function groups_screen_group_forum() { 
    177  
    178     if ( !bp_is_active( 'forums' ) || !bp_forums_is_installed_correctly() ) 
    179         return false; 
    180  
    181     if ( bp_action_variable( 0 ) && !bp_is_action_variable( 'topic', 0 ) ) { 
    182         bp_do_404(); 
    183         return; 
    184     } 
    185  
    186     $bp = buddypress(); 
    187  
    188     if ( !$bp->groups->current_group->user_has_access ) { 
    189         bp_core_no_access(); 
    190         return; 
    191     } 
    192  
    193     if ( ! bp_is_single_item() ) 
    194         return false; 
    195  
    196     // Fetch the details we need. 
    197     $topic_slug = (string)bp_action_variable( 1 ); 
    198     $topic_id       = bp_forums_get_topic_id_from_slug( $topic_slug ); 
    199     $forum_id       = groups_get_groupmeta( $bp->groups->current_group->id, 'forum_id' ); 
    200     $user_is_banned = false; 
    201  
    202     if ( !bp_current_user_can( 'bp_moderate' ) && groups_is_user_banned( bp_loggedin_user_id(), $bp->groups->current_group->id ) ) 
    203         $user_is_banned = true; 
    204  
    205     if ( !empty( $topic_slug ) && !empty( $topic_id ) ) { 
    206  
    207         // Posting a reply. 
    208         if ( !$user_is_banned && !bp_action_variable( 2 ) && isset( $_POST['submit_reply'] ) ) { 
    209             // Check the nonce. 
    210             check_admin_referer( 'bp_forums_new_reply' ); 
    211  
    212             // Auto join this user if they are not yet a member of this group. 
    213             if ( bp_groups_auto_join() && !bp_current_user_can( 'bp_moderate' ) && 'public' == $bp->groups->current_group->status && !groups_is_user_member( bp_loggedin_user_id(), $bp->groups->current_group->id ) ) { 
    214                 groups_join_group( $bp->groups->current_group->id, bp_loggedin_user_id() ); 
    215             } 
    216  
    217             $topic_page = isset( $_GET['topic_page'] ) ? $_GET['topic_page'] : false; 
    218  
    219             // Don't allow reply flooding. 
    220             if ( bp_forums_reply_exists( $_POST['reply_text'], $topic_id, bp_loggedin_user_id() ) ) { 
    221                 bp_core_add_message( __( 'It looks like you\'ve already said that!', 'buddypress' ), 'error' ); 
    222             } else { 
    223                 if ( !$post_id = groups_new_group_forum_post( $_POST['reply_text'], $topic_id, $topic_page ) ) { 
    224                     bp_core_add_message( __( 'There was an error when replying to that topic', 'buddypress'), 'error' ); 
    225                 } else { 
    226                     bp_core_add_message( __( 'Your reply was posted successfully', 'buddypress') ); 
    227                 } 
    228             } 
    229  
    230             $query_vars = isset( $_SERVER['QUERY_STRING'] ) ? '?' . $_SERVER['QUERY_STRING'] : ''; 
    231  
    232             $redirect = bp_get_group_permalink( groups_get_current_group() ) . 'forum/topic/' . $topic_slug . '/' . $query_vars; 
    233  
    234             if ( !empty( $post_id ) ) { 
    235                 $redirect .= '#post-' . $post_id; 
    236             } 
    237  
    238             bp_core_redirect( $redirect ); 
    239         } 
    240  
    241         // Sticky a topic. 
    242         elseif ( bp_is_action_variable( 'stick', 2 ) && ( bp_is_item_admin() || bp_is_item_mod() ) ) { 
    243             // Check the nonce. 
    244             check_admin_referer( 'bp_forums_stick_topic' ); 
    245  
    246             if ( !bp_forums_sticky_topic( array( 'topic_id' => $topic_id ) ) ) { 
    247                 bp_core_add_message( __( 'There was an error when making that topic a sticky', 'buddypress' ), 'error' ); 
    248             } else { 
    249                 bp_core_add_message( __( 'The topic was made sticky successfully', 'buddypress' ) ); 
    250             } 
    251  
    252             /** 
    253              * Fires after a group forum topic has been stickied. 
    254              * 
    255              * @since 1.1.0 
    256              * 
    257              * @param int $topic_id ID of the topic being stickied. 
    258              */ 
    259             do_action( 'groups_stick_forum_topic', $topic_id ); 
    260             bp_core_redirect( wp_get_referer() ); 
    261         } 
    262  
    263         // Un-Sticky a topic. 
    264         elseif ( bp_is_action_variable( 'unstick', 2 ) && ( bp_is_item_admin() || bp_is_item_mod() ) ) { 
    265             // Check the nonce. 
    266             check_admin_referer( 'bp_forums_unstick_topic' ); 
    267  
    268             if ( !bp_forums_sticky_topic( array( 'topic_id' => $topic_id, 'mode' => 'unstick' ) ) ) { 
    269                 bp_core_add_message( __( 'There was an error when unsticking that topic', 'buddypress'), 'error' ); 
    270             } else { 
    271                 bp_core_add_message( __( 'The topic was unstuck successfully', 'buddypress') ); 
    272             } 
    273  
    274             /** 
    275              * Fires after a group forum topic has been un-stickied. 
    276              * 
    277              * @since 1.1.0 
    278              * 
    279              * @param int $topic_id ID of the topic being un-stickied. 
    280              */ 
    281             do_action( 'groups_unstick_forum_topic', $topic_id ); 
    282             bp_core_redirect( wp_get_referer() ); 
    283         } 
    284  
    285         // Close a topic. 
    286         elseif ( bp_is_action_variable( 'close', 2 ) && ( bp_is_item_admin() || bp_is_item_mod() ) ) { 
    287             // Check the nonce. 
    288             check_admin_referer( 'bp_forums_close_topic' ); 
    289  
    290             if ( !bp_forums_openclose_topic( array( 'topic_id' => $topic_id ) ) ) { 
    291                 bp_core_add_message( __( 'There was an error when closing that topic', 'buddypress'), 'error' ); 
    292             } else { 
    293                 bp_core_add_message( __( 'The topic was closed successfully', 'buddypress') ); 
    294             } 
    295  
    296             /** 
    297              * Fires after a group forum topic has been closed. 
    298              * 
    299              * @since 1.1.0 
    300              * 
    301              * @param int $topic_id ID of the topic being closed. 
    302              */ 
    303             do_action( 'groups_close_forum_topic', $topic_id ); 
    304             bp_core_redirect( wp_get_referer() ); 
    305         } 
    306  
    307         // Open a topic. 
    308         elseif ( bp_is_action_variable( 'open', 2 ) && ( bp_is_item_admin() || bp_is_item_mod() ) ) { 
    309             // Check the nonce. 
    310             check_admin_referer( 'bp_forums_open_topic' ); 
    311  
    312             if ( !bp_forums_openclose_topic( array( 'topic_id' => $topic_id, 'mode' => 'open' ) ) ) { 
    313                 bp_core_add_message( __( 'There was an error when opening that topic', 'buddypress'), 'error' ); 
    314             } else { 
    315                 bp_core_add_message( __( 'The topic was opened successfully', 'buddypress') ); 
    316             } 
    317  
    318             /** 
    319              * Fires after a group forum topic has been opened. 
    320              * 
    321              * @since 1.1.0 
    322              * 
    323              * @param int $topic_id ID of the topic being opened. 
    324              */ 
    325             do_action( 'groups_open_forum_topic', $topic_id ); 
    326             bp_core_redirect( wp_get_referer() ); 
    327         } 
    328  
    329         // Delete a topic. 
    330         elseif ( empty( $user_is_banned ) && bp_is_action_variable( 'delete', 2 ) && !bp_action_variable( 3 ) ) { 
    331             // Fetch the topic. 
    332             $topic = bp_forums_get_topic_details( $topic_id ); 
    333  
    334             /* Check the logged in user can delete this topic */ 
    335             if ( ! bp_is_item_admin() && ! bp_is_item_mod() && ( (int) bp_loggedin_user_id() != (int) $topic->topic_poster ) ) { 
    336                 bp_core_redirect( wp_get_referer() ); 
    337             } 
    338  
    339             // Check the nonce. 
    340             check_admin_referer( 'bp_forums_delete_topic' ); 
    341  
    342             /** 
    343              * Fires before a group forum topic is deleted. 
    344              * 
    345              * @since 1.5.0 
    346              * 
    347              * @param int $topic_id ID of the topic being deleted. 
    348              */ 
    349             do_action( 'groups_before_delete_forum_topic', $topic_id ); 
    350  
    351             if ( !groups_delete_group_forum_topic( $topic_id ) ) { 
    352                 bp_core_add_message( __( 'There was an error deleting the topic', 'buddypress' ), 'error' ); 
    353             } else { 
    354                 bp_core_add_message( __( 'The topic was deleted successfully', 'buddypress' ) ); 
    355             } 
    356  
    357             /** 
    358              * Fires after a group forum topic has been deleted. 
    359              * 
    360              * @since 1.5.0 
    361              * 
    362              * @param int $topic_id ID of the topic being deleted. 
    363              */ 
    364             do_action( 'groups_delete_forum_topic', $topic_id ); 
    365             bp_core_redirect( bp_get_group_permalink( groups_get_current_group() ) . 'forum/' ); 
    366         } 
    367  
    368         // Editing a topic. 
    369         elseif ( empty( $user_is_banned ) && bp_is_action_variable( 'edit', 2 ) && !bp_action_variable( 3 ) ) { 
    370             // Fetch the topic. 
    371             $topic = bp_forums_get_topic_details( $topic_id ); 
    372  
    373             // Check the logged in user can edit this topic. 
    374             if ( ! bp_is_item_admin() && ! bp_is_item_mod() && ( (int) bp_loggedin_user_id() != (int) $topic->topic_poster ) ) { 
    375                 bp_core_redirect( wp_get_referer() ); 
    376             } 
    377  
    378             if ( isset( $_POST['save_changes'] ) ) { 
    379                 // Check the nonce. 
    380                 check_admin_referer( 'bp_forums_edit_topic' ); 
    381  
    382                 $topic_tags = !empty( $_POST['topic_tags'] ) ? $_POST['topic_tags'] : false; 
    383  
    384                 if ( !groups_update_group_forum_topic( $topic_id, $_POST['topic_title'], $_POST['topic_text'], $topic_tags ) ) { 
    385                     bp_core_add_message( __( 'There was an error when editing that topic', 'buddypress'), 'error' ); 
    386                 } else { 
    387                     bp_core_add_message( __( 'The topic was edited successfully', 'buddypress') ); 
    388                 } 
    389  
    390                 /** 
    391                  * Fires after a group forum topic has been edited. 
    392                  * 
    393                  * @since 1.1.0 
    394                  * 
    395                  * @param int $topic_id ID of the topic being edited. 
    396                  */ 
    397                 do_action( 'groups_edit_forum_topic', $topic_id ); 
    398                 bp_core_redirect( bp_get_group_permalink( groups_get_current_group() ) . 'forum/topic/' . $topic_slug . '/' ); 
    399             } 
    400  
    401             /** 
    402              * Filters the template to load for a topic edit page. 
    403              * 
    404              * @since 1.1.0 
    405              * 
    406              * @param string $value Path to a topic edit template. 
    407              */ 
    408             bp_core_load_template( apply_filters( 'groups_template_group_forum_topic_edit', 'groups/single/home' ) ); 
    409  
    410         // Delete a post. 
    411         } elseif ( empty( $user_is_banned ) && bp_is_action_variable( 'delete', 2 ) && $post_id = bp_action_variable( 4 ) ) { 
    412             // Fetch the post. 
    413             $post = bp_forums_get_post( $post_id ); 
    414  
    415             // Check the logged in user can edit this topic. 
    416             if ( ! bp_is_item_admin() && ! bp_is_item_mod() && ( (int) bp_loggedin_user_id() != (int) $post->poster_id ) ) { 
    417                 bp_core_redirect( wp_get_referer() ); 
    418             } 
    419  
    420             // Check the nonce. 
    421             check_admin_referer( 'bp_forums_delete_post' ); 
    422  
    423             /** 
    424              * Fires before the deletion of a group forum post. 
    425              * 
    426              * @since 1.5.0 
    427              * 
    428              * @param int $post_id ID of the forum post being deleted. 
    429              */ 
    430             do_action( 'groups_before_delete_forum_post', $post_id ); 
    431  
    432             if ( !groups_delete_group_forum_post( $post_id ) ) { 
    433                 bp_core_add_message( __( 'There was an error deleting that post', 'buddypress'), 'error' ); 
    434             } else { 
    435                 bp_core_add_message( __( 'The post was deleted successfully', 'buddypress') ); 
    436             } 
    437  
    438             /** 
    439              * Fires after the deletion of a group forum post. 
    440              * 
    441              * @since 1.1.0 
    442              * 
    443              * @param int $post_id ID of the forum post being deleted. 
    444              */ 
    445             do_action( 'groups_delete_forum_post', $post_id ); 
    446             bp_core_redirect( wp_get_referer() ); 
    447  
    448         // Editing a post. 
    449         } elseif ( empty( $user_is_banned ) && bp_is_action_variable( 'edit', 2 ) && $post_id = bp_action_variable( 4 ) ) { 
    450  
    451             // Fetch the post. 
    452             $post = bp_forums_get_post( $post_id ); 
    453  
    454             // Check the logged in user can edit this topic. 
    455             if ( ! bp_is_item_admin() && ! bp_is_item_mod() && ( (int) bp_loggedin_user_id() != (int) $post->poster_id ) ) { 
    456                 bp_core_redirect( wp_get_referer() ); 
    457             } 
    458  
    459             if ( isset( $_POST['save_changes'] ) ) { 
    460                 // Check the nonce. 
    461                 check_admin_referer( 'bp_forums_edit_post' ); 
    462  
    463                 $topic_page = isset( $_GET['topic_page'] ) ? $_GET['topic_page'] : false; 
    464  
    465                 if ( !$post_id = groups_update_group_forum_post( $post_id, $_POST['post_text'], $topic_id, $topic_page ) ) { 
    466                     bp_core_add_message( __( 'There was an error when editing that post', 'buddypress'), 'error' ); 
    467                 } else { 
    468                     bp_core_add_message( __( 'The post was edited successfully', 'buddypress') ); 
    469                 } 
    470  
    471                 if ( $_SERVER['QUERY_STRING'] ) { 
    472                     $query_vars = '?' . $_SERVER['QUERY_STRING']; 
    473                 } 
    474  
    475                 /** 
    476                  * Fires after the editing of a group forum post. 
    477                  * 
    478                  * @since 1.1.0 
    479                  * 
    480                  * @param int $post_id ID of the forum post being edited. 
    481                  */ 
    482                 do_action( 'groups_edit_forum_post', $post_id ); 
    483                 bp_core_redirect( bp_get_group_permalink( $bp->groups->current_group ) . 'forum/topic/' . $topic_slug . '/' . $query_vars . '#post-' . $post_id ); 
    484             } 
    485  
    486             /** This filter is documented in bp-groups/bp-groups-screens.php */ 
    487             bp_core_load_template( apply_filters( 'groups_template_group_forum_topic_edit', 'groups/single/home' ) ); 
    488  
    489         // Standard topic display. 
    490         } else { 
    491             if ( !empty( $user_is_banned ) ) { 
    492                 bp_core_add_message( __( "You have been banned from this group.", 'buddypress' ) ); 
    493             } 
    494  
    495             /** 
    496              * Filters the template to load for a topic page. 
    497              * 
    498              * @since 1.1.0 
    499              * 
    500              * @param string $value Path to a topic template. 
    501              */ 
    502             bp_core_load_template( apply_filters( 'groups_template_group_forum_topic', 'groups/single/home' ) ); 
    503         } 
    504  
    505     // Forum topic does not exist. 
    506     } elseif ( !empty( $topic_slug ) && empty( $topic_id ) ) { 
    507         bp_do_404(); 
    508         return; 
    509  
    510     } else { 
    511         // Posting a topic. 
    512         if ( isset( $_POST['submit_topic'] ) && bp_is_active( 'forums' ) ) { 
    513  
    514             // Check the nonce. 
    515             check_admin_referer( 'bp_forums_new_topic' ); 
    516  
    517             if ( $user_is_banned ) { 
    518                 $error_message = __( "You have been banned from this group.", 'buddypress' ); 
    519  
    520             } elseif ( bp_groups_auto_join() && !bp_current_user_can( 'bp_moderate' ) && 'public' == $bp->groups->current_group->status && !groups_is_user_member( bp_loggedin_user_id(), $bp->groups->current_group->id ) ) { 
    521                 // Auto join this user if they are not yet a member of this group. 
    522                 groups_join_group( $bp->groups->current_group->id, bp_loggedin_user_id() ); 
    523             } 
    524  
    525             if ( empty( $_POST['topic_title'] ) ) { 
    526                 $error_message = __( 'Please provide a title for your forum topic.', 'buddypress' ); 
    527             } elseif ( empty( $_POST['topic_text'] ) ) { 
    528                 $error_message = __( 'Forum posts cannot be empty. Please enter some text.', 'buddypress' ); 
    529             } 
    530  
    531             if ( empty( $forum_id ) ) { 
    532                 $error_message = __( 'This group does not have a forum setup yet.', 'buddypress' ); 
    533             } 
    534  
    535             if ( isset( $error_message ) ) { 
    536                 bp_core_add_message( $error_message, 'error' ); 
    537                 $redirect = bp_get_group_permalink( $bp->groups->current_group ) . 'forum'; 
    538             } else { 
    539                 if ( !$topic = groups_new_group_forum_topic( $_POST['topic_title'], $_POST['topic_text'], $_POST['topic_tags'], $forum_id ) ) { 
    540                     bp_core_add_message( __( 'There was an error when creating the topic', 'buddypress'), 'error' ); 
    541                     $redirect = bp_get_group_permalink( $bp->groups->current_group ) . 'forum'; 
    542                 } else { 
    543                     bp_core_add_message( __( 'The topic was created successfully', 'buddypress') ); 
    544                     $redirect = bp_get_group_permalink( $bp->groups->current_group ) . 'forum/topic/' . $topic->topic_slug . '/'; 
    545                 } 
    546             } 
    547  
    548             bp_core_redirect( $redirect ); 
    549         } 
    550  
    551         /** 
    552          * Fires at the end of the group forum screen loading process. 
    553          * 
    554          * @since 1.0.0 
    555          * 
    556          * @param int $topic_id ID of the topic being displayed. 
    557          * @param int $forum_id ID of the forum being displayed. 
    558          */ 
    559         do_action( 'groups_screen_group_forum', $topic_id, $forum_id ); 
    560  
    561         /** 
    562          * Filters the template to load for a group forum page. 
    563          * 
    564          * @since 1.0.0 
    565          * 
    566          * @param string $value Path to a group forum template. 
    567          */ 
    568         bp_core_load_template( apply_filters( 'groups_template_group_forum', 'groups/single/home' ) ); 
    569     } 
    570169} 
    571170 
  • trunk/src/bp-groups/bp-groups-template.php

    r11761 r11763  
    20252025 
    20262026/** 
    2027  * Output the URL of the Forum page of the current group in the loop. 
    2028  * 
    2029  * @since 1.0.0 
    2030  */ 
    2031 function bp_group_forum_permalink() { 
    2032     echo bp_get_group_forum_permalink(); 
    2033 } 
    2034     /** 
    2035      * Generate the URL of the Forum page of a group. 
    2036      * 
    2037      * @since 1.0.0 
    2038      * 
    2039      * @param object|bool $group Optional. Group object. 
    2040      *                           Default: current group in loop. 
    2041      * @return string 
    2042      */ 
    2043     function bp_get_group_forum_permalink( $group = false ) { 
    2044         global $groups_template; 
    2045  
    2046         if ( empty( $group ) ) { 
    2047             $group =& $groups_template->group; 
    2048         } 
    2049  
    2050         /** 
    2051          * Filters the URL of the Forum page of a group. 
    2052          * 
    2053          * @since 1.0.0 
    2054          * @since 2.5.0 Added the `$group` parameter. 
    2055          * 
    2056          * @param string $value URL permalink for the Forum Page. 
    2057          * @param object $group Group object. 
    2058          */ 
    2059         return apply_filters( 'bp_get_group_forum_permalink', trailingslashit( bp_get_group_permalink( $group ) . 'forum' ), $group ); 
    2060     } 
    2061  
    2062 /** 
    2063  * Output the topic count for a group forum. 
    2064  * 
    2065  * @since 1.2.0 
    2066  * 
    2067  * @param array|string $args See {@link bp_get_group_forum_topic_count()}. 
    2068  */ 
    2069 function bp_group_forum_topic_count( $args = '' ) { 
    2070     echo bp_get_group_forum_topic_count( $args ); 
    2071 } 
    2072     /** 
    2073      * Generate the topic count string for a group forum. 
    2074      * 
    2075      * @since 1.2.0 
    2076      * 
    2077      * @param array|string $args { 
    2078      *     Array of arguments. 
    2079      *     @type bool $showtext Optional. If true, result will be formatted as "x topics". 
    2080      *                          If false, just a number will be returned. 
    2081      *                          Default: false. 
    2082      * } 
    2083      * @return string|int 
    2084      */ 
    2085     function bp_get_group_forum_topic_count( $args = '' ) { 
    2086         global $groups_template; 
    2087  
    2088         $defaults = array( 
    2089             'showtext' => false 
    2090         ); 
    2091  
    2092         $r = wp_parse_args( $args, $defaults ); 
    2093         extract( $r, EXTR_SKIP ); 
    2094  
    2095         if ( !$forum_id = groups_get_groupmeta( $groups_template->group->id, 'forum_id' ) ) { 
    2096             return false; 
    2097         } 
    2098  
    2099         if ( !bp_is_active( 'forums' ) ) { 
    2100             return false; 
    2101         } 
    2102  
    2103         if ( !$groups_template->group->forum_counts ) { 
    2104             $groups_template->group->forum_counts = bp_forums_get_forum_topicpost_count( (int) $forum_id ); 
    2105         } 
    2106  
    2107         if ( (bool) $showtext ) { 
    2108             if ( 1 == (int) $groups_template->group->forum_counts[0]->topics ) { 
    2109                 $total_topics = sprintf( __( '%d topic', 'buddypress' ), (int) $groups_template->group->forum_counts[0]->topics ); 
    2110             } else { 
    2111                 $total_topics = sprintf( __( '%d topics', 'buddypress' ), (int) $groups_template->group->forum_counts[0]->topics ); 
    2112             } 
    2113         } else { 
    2114             $total_topics = (int) $groups_template->group->forum_counts[0]->topics; 
    2115         } 
    2116  
    2117         /** 
    2118          * Filters the topic count string for a group forum. 
    2119          * 
    2120          * @since 1.2.0 
    2121          * 
    2122          * @param string $total_topics Total topic count string. 
    2123          * @param bool   $showtext     Whether or not to return as formatted string. 
    2124          */ 
    2125         return apply_filters( 'bp_get_group_forum_topic_count', $total_topics, (bool)$showtext ); 
    2126     } 
    2127  
    2128 /** 
    2129  * Output the post count for a group forum. 
    2130  * 
    2131  * @since 1.2.0 
    2132  * 
    2133  * @param array|string $args See {@link bp_get_group_forum_post_count()}. 
    2134  */ 
    2135 function bp_group_forum_post_count( $args = '' ) { 
    2136     echo bp_get_group_forum_post_count( $args ); 
    2137 } 
    2138     /** 
    2139      * Generate the post count string for a group forum. 
    2140      * 
    2141      * @since 1.2.0 
    2142      * 
    2143      * @param array|string $args { 
    2144      *     Array of arguments. 
    2145      *     @type bool $showtext Optional. If true, result will be formatted as "x posts". 
    2146      *                          If false, just a number will be returned. 
    2147      *                          Default: false. 
    2148      * } 
    2149      * @return string|int 
    2150      */ 
    2151     function bp_get_group_forum_post_count( $args = '' ) { 
    2152         global $groups_template; 
    2153  
    2154         $defaults = array( 
    2155             'showtext' => false 
    2156         ); 
    2157  
    2158         $r = wp_parse_args( $args, $defaults ); 
    2159         extract( $r, EXTR_SKIP ); 
    2160  
    2161         if ( !$forum_id = groups_get_groupmeta( $groups_template->group->id, 'forum_id' ) ) { 
    2162             return false; 
    2163         } 
    2164  
    2165         if ( !bp_is_active( 'forums' ) ) { 
    2166             return false; 
    2167         } 
    2168  
    2169         if ( !$groups_template->group->forum_counts ) { 
    2170             $groups_template->group->forum_counts = bp_forums_get_forum_topicpost_count( (int) $forum_id ); 
    2171         } 
    2172  
    2173         if ( (bool) $showtext ) { 
    2174             if ( 1 == (int) $groups_template->group->forum_counts[0]->posts ) { 
    2175                 $total_posts = sprintf( __( '%d post', 'buddypress' ), (int) $groups_template->group->forum_counts[0]->posts ); 
    2176             } else { 
    2177                 $total_posts = sprintf( __( '%d posts', 'buddypress' ), (int) $groups_template->group->forum_counts[0]->posts ); 
    2178             } 
    2179         } else { 
    2180             $total_posts = (int) $groups_template->group->forum_counts[0]->posts; 
    2181         } 
    2182  
    2183         /** 
    2184          * Filters the post count string for a group forum. 
    2185          * 
    2186          * @since 1.2.0 
    2187          * 
    2188          * @param string $total_posts Total post count string. 
    2189          * @param bool   $showtext    Whether or not to return as formatted string. 
    2190          */ 
    2191         return apply_filters( 'bp_get_group_forum_post_count', $total_posts, (bool)$showtext ); 
    2192     } 
    2193  
    2194 /** 
    21952027 * Determine whether forums are enabled for a group. 
    21962028 * 
     
    33813213    return true; 
    33823214} 
    3383  
    3384 /** 
    3385  * Output a 'New Topic' button for a group. 
    3386  * 
    3387  * @since 1.2.7 
    3388  * 
    3389  * @param BP_Groups_Group|bool $group The BP Groups_Group object if passed, 
    3390  *                                    boolean false if not passed. 
    3391  */ 
    3392 function bp_group_new_topic_button( $group = false ) { 
    3393     echo bp_get_group_new_topic_button( $group ); 
    3394 } 
    3395  
    3396     /** 
    3397      * Returns a 'New Topic' button for a group. 
    3398      * 
    3399      * @since 1.2.7 
    3400      * 
    3401      * @param BP_Groups_Group|bool $group The BP Groups_Group object if 
    3402      *                                    passed, boolean false if not passed. 
    3403      * @return false|string HTML code for the button. 
    3404      */ 
    3405     function bp_get_group_new_topic_button( $group = false ) { 
    3406         global $groups_template; 
    3407  
    3408         if ( empty( $group ) ) { 
    3409             $group =& $groups_template->group; 
    3410         } 
    3411  
    3412         if ( !is_user_logged_in() || bp_group_is_user_banned() || !bp_is_group_forum() || bp_is_group_forum_topic() ) { 
    3413             return false; 
    3414         } 
    3415  
    3416         $button = array( 
    3417             'id'                => 'new_topic', 
    3418             'component'         => 'groups', 
    3419             'must_be_logged_in' => true, 
    3420             'block_self'        => true, 
    3421             'wrapper_class'     => 'group-button', 
    3422             'link_href'         => '#post-new', 
    3423             'link_class'        => 'group-button show-hide-new', 
    3424             'link_id'           => 'new-topic-button', 
    3425             'link_text'         => __( 'New Topic', 'buddypress' ), 
    3426         ); 
    3427  
    3428         /** 
    3429          * Filters the HTML button for creating a new topic in a group. 
    3430          * 
    3431          * @since 1.5.0 
    3432          * @since 2.5.0 Added the `$group` parameter. 
    3433          * 
    3434          * @param string $button HTML button for a new topic. 
    3435          * @param object $group  Group object. 
    3436          */ 
    3437         return bp_get_button( apply_filters( 'bp_get_group_new_topic_button', $button, $group ) ); 
    3438     } 
    34393215 
    34403216/** 
  • trunk/src/bp-groups/classes/class-bp-groups-component.php

    r11559 r11763  
    124124        $includes = array( 
    125125            'cache', 
    126             'forums', 
    127126            'actions', 
    128127            'filters', 
  • trunk/src/bp-groups/classes/class-bp-groups-group.php

    r11762 r11763  
    7979 
    8080    /** 
    81      * Should (legacy) bbPress forums be enabled for this group? 
    82      * 
    83      * @since 1.6.0 
     81     * Controls whether the group has a forum enabled. 
     82     * 
     83     * @since 1.6.0 
     84     * @since 3.0.0 Previously, this referred to Legacy Forums. It's still used by bbPress 2 for integration. 
     85     * 
    8486     * @var int 
    8587     */ 
     
    14571459 
    14581460    /** 
    1459      * Get a list of groups, sorted by those that have the most legacy forum topics. 
     1461     * Convert the 'orderby' param into a proper SQL term/column. 
     1462     * 
     1463     * @since 1.8.0 
     1464     * 
     1465     * @param string $orderby Orderby term as passed to get(). 
     1466     * @return string $order_by_term SQL-friendly orderby term. 
     1467     */ 
     1468    protected static function convert_orderby_to_order_by_term( $orderby ) { 
     1469        $order_by_term = ''; 
     1470 
     1471        switch ( $orderby ) { 
     1472            case 'date_created' : 
     1473            default : 
     1474                $order_by_term = 'g.date_created'; 
     1475                break; 
     1476 
     1477            case 'last_activity' : 
     1478                $order_by_term = 'gm_last_activity.meta_value'; 
     1479                break; 
     1480 
     1481            case 'total_member_count' : 
     1482                $order_by_term = 'CONVERT(gm_total_member_count.meta_value, SIGNED)'; 
     1483                break; 
     1484 
     1485            case 'name' : 
     1486                $order_by_term = 'g.name'; 
     1487                break; 
     1488 
     1489            case 'random' : 
     1490                $order_by_term = 'rand()'; 
     1491                break; 
     1492 
     1493            case 'meta_id' : 
     1494                $order_by_term = buddypress()->groups->table_name_groupmeta . '.id'; 
     1495                break; 
     1496        } 
     1497 
     1498        return $order_by_term; 
     1499    } 
     1500 
     1501    /** 
     1502     * Get a list of groups whose names start with a given letter. 
     1503     * 
     1504     * @since 1.6.0 
     1505     * 
     1506     * @param string            $letter          The letter. 
     1507     * @param int|null          $limit           Optional. The max number of results to return. 
     1508     *                                           Default: null (no limit). 
     1509     * @param int|null          $page            Optional. The page offset of results to return. 
     1510     *                                           Default: null (no limit). 
     1511     * @param bool              $populate_extras Deprecated. 
     1512     * @param string|array|bool $exclude         Optional. Array or comma-separated list of group 
     1513     *                                           IDs to exclude from results. 
     1514     * @return false|array { 
     1515     *     @type array $groups Array of group objects returned by the 
     1516     *                         paginated query. 
     1517     *     @type int   $total  Total count of all groups matching non- 
     1518     *                         paginated query params. 
     1519     * } 
     1520     */ 
     1521    public static function get_by_letter( $letter, $limit = null, $page = null, $populate_extras = true, $exclude = false ) { 
     1522        global $wpdb; 
     1523 
     1524        $pag_sql = $hidden_sql = $exclude_sql = ''; 
     1525 
     1526        // Multibyte compliance. 
     1527        if ( function_exists( 'mb_strlen' ) ) { 
     1528            if ( mb_strlen( $letter, 'UTF-8' ) > 1 || is_numeric( $letter ) || !$letter ) { 
     1529                return false; 
     1530            } 
     1531        } else { 
     1532            if ( strlen( $letter ) > 1 || is_numeric( $letter ) || !$letter ) { 
     1533                return false; 
     1534            } 
     1535        } 
     1536 
     1537        $args = array( 
     1538            'per_page'       => $limit, 
     1539            'page'           => $page, 
     1540            'search_terms'   => $letter . '*', 
     1541            'search_columns' => array( 'name' ), 
     1542            'exclude'        => $exclude, 
     1543        ); 
     1544 
     1545        return BP_Groups_Group::get( $args ); 
     1546    } 
     1547 
     1548    /** 
     1549     * Get a list of random groups. 
     1550     * 
     1551     * Use BP_Groups_Group::get() with 'type' = 'random' instead. 
    14601552     * 
    14611553     * @since 1.6.0 
     
    14801572     * } 
    14811573     */ 
    1482     public static function get_by_most_forum_topics( $limit = null, $page = null, $user_id = 0, $search_terms = false, $populate_extras = true, $exclude = false ) { 
    1483         global $wpdb, $bbdb; 
    1484  
    1485         if ( empty( $bbdb ) ) { 
    1486  
    1487             /** This action is documented in bp-forums/bp-forums-screens */ 
    1488             do_action( 'bbpress_init' ); 
    1489         } 
    1490  
    1491         if ( !empty( $limit ) && !empty( $page ) ) { 
    1492             $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) ); 
    1493         } 
    1494  
    1495         if ( !is_user_logged_in() || ( !bp_current_user_can( 'bp_moderate' ) && ( $user_id != bp_loggedin_user_id() ) ) ) 
    1496             $hidden_sql = " AND g.status != 'hidden'"; 
    1497  
    1498         if ( !empty( $search_terms ) ) { 
    1499             $search_terms_like = '%' . bp_esc_like( $search_terms ) . '%'; 
    1500             $search_sql        = $wpdb->prepare( ' AND ( g.name LIKE %s OR g.description LIKE %s ) ', $search_terms_like, $search_terms_like ); 
    1501         } 
    1502  
    1503         if ( !empty( $exclude ) ) { 
    1504             $exclude     = implode( ',', wp_parse_id_list( $exclude ) ); 
    1505             $exclude_sql = " AND g.id NOT IN ({$exclude})"; 
    1506         } 
    1507  
    1508         $bp = buddypress(); 
    1509  
    1510         if ( !empty( $user_id ) ) { 
    1511             $user_id      = absint( esc_sql( $user_id ) ); 
    1512             $paged_groups = $wpdb->get_results( "SELECT DISTINCT g.*, gm1.meta_value as total_member_count, gm2.meta_value as last_activity FROM {$bp->groups->table_name_groupmeta} gm1, {$bp->groups->table_name_groupmeta} gm2, {$bp->groups->table_name_groupmeta} gm3, {$bp->groups->table_name_members} m, {$bbdb->forums} f, {$bp->groups->table_name} g WHERE g.id = m.group_id AND g.id = gm1.group_id AND g.id = gm2.group_id AND g.id = gm3.group_id AND gm2.meta_key = 'last_activity' AND gm1.meta_key = 'total_member_count' AND (gm3.meta_key = 'forum_id' AND gm3.meta_value = f.forum_id) AND f.topics > 0 {$hidden_sql} {$search_sql} AND m.user_id = {$user_id} AND m.is_confirmed = 1 AND m.is_banned = 0 {$exclude_sql} ORDER BY f.topics DESC {$pag_sql}" ); 
    1513             $total_groups = $wpdb->get_var( "SELECT COUNT(DISTINCT g.id) FROM {$bp->groups->table_name_groupmeta} gm1, {$bp->groups->table_name_groupmeta} gm2, {$bp->groups->table_name_groupmeta} gm3, {$bbdb->forums} f, {$bp->groups->table_name} g WHERE g.id = gm1.group_id AND g.id = gm2.group_id AND g.id = gm3.group_id AND gm2.meta_key = 'last_activity' AND gm1.meta_key = 'total_member_count' AND (gm3.meta_key = 'forum_id' AND gm3.meta_value = f.forum_id) AND f.topics > 0 {$hidden_sql} {$search_sql} AND m.user_id = {$user_id} AND m.is_confirmed = 1 AND m.is_banned = 0 {$exclude_sql}" ); 
    1514         } else { 
    1515             $paged_groups = $wpdb->get_results( "SELECT DISTINCT g.*, gm1.meta_value as total_member_count, gm2.meta_value as last_activity FROM {$bp->groups->table_name_groupmeta} gm1, {$bp->groups->table_name_groupmeta} gm2, {$bp->groups->table_name_groupmeta} gm3, {$bbdb->forums} f, {$bp->groups->table_name} g WHERE g.id = gm1.group_id AND g.id = gm2.group_id AND g.id = gm3.group_id AND gm2.meta_key = 'last_activity' AND gm1.meta_key = 'total_member_count' AND (gm3.meta_key = 'forum_id' AND gm3.meta_value = f.forum_id) AND f.topics > 0 {$hidden_sql} {$search_sql} {$exclude_sql} ORDER BY f.topics DESC {$pag_sql}" ); 
    1516             $total_groups = $wpdb->get_var( "SELECT COUNT(DISTINCT g.id) FROM {$bp->groups->table_name_groupmeta} gm1, {$bp->groups->table_name_groupmeta} gm2, {$bp->groups->table_name_groupmeta} gm3, {$bbdb->forums} f, {$bp->groups->table_name} g WHERE g.id = gm1.group_id AND g.id = gm2.group_id AND g.id = gm3.group_id AND gm2.meta_key = 'last_activity' AND gm1.meta_key = 'total_member_count' AND (gm3.meta_key = 'forum_id' AND gm3.meta_value = f.forum_id) AND f.topics > 0 {$hidden_sql} {$search_sql} {$exclude_sql}" ); 
    1517         } 
    1518  
    1519         if ( !empty( $populate_extras ) ) { 
    1520             foreach ( (array) $paged_groups as $group ) { 
    1521                 $group_ids[] = $group->id; 
    1522             } 
    1523             $paged_groups = BP_Groups_Group::get_group_extras( $paged_groups, $group_ids, 'newest' ); 
    1524         } 
    1525  
    1526         return array( 'groups' => $paged_groups, 'total' => $total_groups ); 
    1527     } 
    1528  
    1529     /** 
    1530      * Convert the 'orderby' param into a proper SQL term/column. 
    1531      * 
    1532      * @since 1.8.0 
    1533      * 
    1534      * @param string $orderby Orderby term as passed to get(). 
    1535      * @return string $order_by_term SQL-friendly orderby term. 
    1536      */ 
    1537     protected static function convert_orderby_to_order_by_term( $orderby ) { 
    1538         $order_by_term = ''; 
    1539  
    1540         switch ( $orderby ) { 
    1541             case 'date_created' : 
    1542             default : 
    1543                 $order_by_term = 'g.date_created'; 
    1544                 break; 
    1545  
    1546             case 'last_activity' : 
    1547                 $order_by_term = 'gm_last_activity.meta_value'; 
    1548                 break; 
    1549  
    1550             case 'total_member_count' : 
    1551                 $order_by_term = 'CONVERT(gm_total_member_count.meta_value, SIGNED)'; 
    1552                 break; 
    1553  
    1554             case 'name' : 
    1555                 $order_by_term = 'g.name'; 
    1556                 break; 
    1557  
    1558             case 'random' : 
    1559                 $order_by_term = 'rand()'; 
    1560                 break; 
    1561  
    1562             case 'meta_id' : 
    1563                 $order_by_term = buddypress()->groups->table_name_groupmeta . '.id'; 
    1564                 break; 
    1565         } 
    1566  
    1567         return $order_by_term; 
    1568     } 
    1569  
    1570     /** 
    1571      * Get a list of groups, sorted by those that have the most legacy forum posts. 
    1572      * 
    1573      * @since 1.6.0 
    1574      * 
    1575      * @param int|null          $limit           Optional. The max number of results to return. 
    1576      *                                           Default: null (no limit). 
    1577      * @param int|null          $page            Optional. The page offset of results to return. 
    1578      *                                           Default: null (no limit). 
    1579      * @param string|bool       $search_terms    Optional. Limit groups to those whose name 
    1580      *                                           or description field contain the search string. 
    1581      * @param bool              $populate_extras Optional. Whether to fetch extra 
    1582      *                                           information about the groups. Default: true. 
    1583      * @param string|array|bool $exclude         Optional. Array or comma-separated list of group 
    1584      *                                           IDs to exclude from results. 
    1585      * @return array { 
    1586      *     @type array $groups Array of group objects returned by the 
    1587      *                         paginated query. 
    1588      *     @type int   $total  Total count of all groups matching non- 
    1589      *                         paginated query params. 
    1590      * } 
    1591      */ 
    1592     public static function get_by_most_forum_posts( $limit = null, $page = null, $search_terms = false, $populate_extras = true, $exclude = false ) { 
    1593         global $wpdb, $bbdb; 
    1594  
    1595         if ( empty( $bbdb ) ) { 
    1596  
    1597             /** This action is documented in bp-forums/bp-forums-screens */ 
    1598             do_action( 'bbpress_init' ); 
    1599         } 
    1600  
    1601         if ( !empty( $limit ) && !empty( $page ) ) { 
    1602             $pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) ); 
    1603         } 
    1604  
    1605         if ( !is_user_logged_in() || ( !bp_current_user_can( 'bp_moderate' ) && ( $user_id != bp_loggedin_user_id() ) ) ) 
    1606             $hidden_sql = " AND g.status != 'hidden'"; 
    1607  
    1608         if ( !empty( $search_terms ) ) { 
    1609             $search_terms_like = '%' . bp_esc_like( $search_terms ) . '%'; 
    1610             $search_sql        = $wpdb->prepare( ' AND ( g.name LIKE %s OR g.description LIKE %s ) ', $search_terms_like, $search_terms_like ); 
    1611         } 
    1612  
    1613         if ( !empty( $exclude ) ) { 
    1614             $exclude     = implode( ',', wp_parse_id_list( $exclude ) ); 
    1615             $exclude_sql = " AND g.id NOT IN ({$exclude})"; 
    1616         } 
    1617  
    1618         $bp = buddypress(); 
    1619  
    1620         if ( !empty( $user_id ) ) { 
    1621             $user_id = esc_sql( $user_id ); 
    1622             $paged_groups = $wpdb->get_results( "SELECT DISTINCT g.*, gm1.meta_value as total_member_count, gm2.meta_value as last_activity FROM {$bp->groups->table_name_groupmeta} gm1, {$bp->groups->table_name_groupmeta} gm2, {$bp->groups->table_name_groupmeta} gm3, {$bp->groups->table_name_members} m, {$bbdb->forums} f, {$bp->groups->table_name} g WHERE g.id = m.group_id AND g.id = gm1.group_id AND g.id = gm2.group_id AND g.id = gm3.group_id AND gm2.meta_key = 'last_activity' AND gm1.meta_key = 'total_member_count' AND (gm3.meta_key = 'forum_id' AND gm3.meta_value = f.forum_id) {$hidden_sql} {$search_sql} AND m.user_id = {$user_id} AND m.is_confirmed = 1 AND m.is_banned = 0 {$exclude_sql} ORDER BY f.posts ASC {$pag_sql}" ); 
    1623             $total_groups = $wpdb->get_results( "SELECT COUNT(DISTINCT g.id) FROM {$bp->groups->table_name_groupmeta} gm1, {$bp->groups->table_name_groupmeta} gm2, {$bp->groups->table_name_groupmeta} gm3, {$bp->groups->table_name_members} m, {$bbdb->forums} f, {$bp->groups->table_name} g WHERE g.id = m.group_id AND g.id = gm1.group_id AND g.id = gm2.group_id AND g.id = gm3.group_id AND gm2.meta_key = 'last_activity' AND gm1.meta_key = 'total_member_count' AND (gm3.meta_key = 'forum_id' AND gm3.meta_value = f.forum_id) AND f.posts > 0 {$hidden_sql} {$search_sql} AND m.user_id = {$user_id} AND m.is_confirmed = 1 AND m.is_banned = 0 {$exclude_sql} " ); 
    1624         } else { 
    1625             $paged_groups = $wpdb->get_results( "SELECT DISTINCT g.*, gm1.meta_value as total_member_count, gm2.meta_value as last_activity FROM {$bp->groups->table_name_groupmeta} gm1, {$bp->groups->table_name_groupmeta} gm2, {$bp->groups->table_name_groupmeta} gm3, {$bbdb->forums} f, {$bp->groups->table_name} g WHERE g.id = gm1.group_id AND g.id = gm2.group_id AND g.id = gm3.group_id AND gm2.meta_key = 'last_activity' AND gm1.meta_key = 'total_member_count' AND (gm3.meta_key = 'forum_id' AND gm3.meta_value = f.forum_id) AND f.posts > 0 {$hidden_sql} {$search_sql} {$exclude_sql} ORDER BY f.posts ASC {$pag_sql}" ); 
    1626             $total_groups = $wpdb->get_var( "SELECT COUNT(DISTINCT g.id) FROM {$bp->groups->table_name_groupmeta} gm1, {$bp->groups->table_name_groupmeta} gm2, {$bp->groups->table_name_groupmeta} gm3, {$bbdb->forums} f, {$bp->groups->table_name} g WHERE g.id = gm1.group_id AND g.id = gm2.group_id AND g.id = gm3.group_id AND gm2.meta_key = 'last_activity' AND gm1.meta_key = 'total_member_count' AND (gm3.meta_key = 'forum_id' AND gm3.meta_value = f.forum_id) {$hidden_sql} {$search_sql} {$exclude_sql}" ); 
    1627         } 
    1628  
    1629         if ( !empty( $populate_extras ) ) { 
    1630             foreach ( (array) $paged_groups as $group ) { 
    1631                 $group_ids[] = $group->id; 
    1632             } 
    1633             $paged_groups = BP_Groups_Group::get_group_extras( $paged_groups, $group_ids, 'newest' ); 
    1634         } 
    1635  
    1636         return array( 'groups' => $paged_groups, 'total' => $total_groups ); 
    1637     } 
    1638  
    1639     /** 
    1640      * Get a list of groups whose names start with a given letter. 
    1641      * 
    1642      * @since 1.6.0 
    1643      * 
    1644      * @param string            $letter          The letter. 
    1645      * @param int|null          $limit           Optional. The max number of results to return. 
    1646      *                                           Default: null (no limit). 
    1647      * @param int|null          $page            Optional. The page offset of results to return. 
    1648      *                                           Default: null (no limit). 
    1649      * @param bool              $populate_extras Deprecated. 
    1650      * @param string|array|bool $exclude         Optional. Array or comma-separated list of group 
    1651      *                                           IDs to exclude from results. 
    1652      * @return false|array { 
    1653      *     @type array $groups Array of group objects returned by the 
    1654      *                         paginated query. 
    1655      *     @type int   $total  Total count of all groups matching non- 
    1656      *                         paginated query params. 
    1657      * } 
    1658      */ 
    1659     public static function get_by_letter( $letter, $limit = null, $page = null, $populate_extras = true, $exclude = false ) { 
    1660         global $wpdb; 
    1661  
    1662         $pag_sql = $hidden_sql = $exclude_sql = ''; 
    1663  
    1664         // Multibyte compliance. 
    1665         if ( function_exists( 'mb_strlen' ) ) { 
    1666             if ( mb_strlen( $letter, 'UTF-8' ) > 1 || is_numeric( $letter ) || !$letter ) { 
    1667                 return false; 
    1668             } 
    1669         } else { 
    1670             if ( strlen( $letter ) > 1 || is_numeric( $letter ) || !$letter ) { 
    1671                 return false; 
    1672             } 
    1673         } 
    1674  
    1675         $args = array( 
    1676             'per_page'       => $limit, 
    1677             'page'           => $page, 
    1678             'search_terms'   => $letter . '*', 
    1679             'search_columns' => array( 'name' ), 
    1680             'exclude'        => $exclude, 
    1681         ); 
    1682  
    1683         return BP_Groups_Group::get( $args ); 
    1684     } 
    1685  
    1686     /** 
    1687      * Get a list of random groups. 
    1688      * 
    1689      * Use BP_Groups_Group::get() with 'type' = 'random' instead. 
    1690      * 
    1691      * @since 1.6.0 
    1692      * 
    1693      * @param int|null          $limit           Optional. The max number of results to return. 
    1694      *                                           Default: null (no limit). 
    1695      * @param int|null          $page            Optional. The page offset of results to return. 
    1696      *                                           Default: null (no limit). 
    1697      * @param int               $user_id         Optional. If present, groups will be limited to 
    1698      *                                           those of which the specified user is a member. 
    1699      * @param string|bool       $search_terms    Optional. Limit groups to those whose name 
    1700      *                                           or description field contain the search string. 
    1701      * @param bool              $populate_extras Optional. Whether to fetch extra 
    1702      *                                           information about the groups. Default: true. 
    1703      * @param string|array|bool $exclude         Optional. Array or comma-separated list of group 
    1704      *                                           IDs to exclude from results. 
    1705      * @return array { 
    1706      *     @type array $groups Array of group objects returned by the 
    1707      *                         paginated query. 
    1708      *     @type int   $total  Total count of all groups matching non- 
    1709      *                         paginated query params. 
    1710      * } 
    1711      */ 
    17121574    public static function get_random( $limit = null, $page = null, $user_id = 0, $search_terms = false, $populate_extras = true, $exclude = false ) { 
    17131575        $args = array( 
     
    17941656 
    17951657    /** 
    1796      * Get global count of forum topics in public groups (legacy forums). 
    1797      * 
    1798      * @since 1.6.0 
    1799      * 
    1800      * @param string $type Optional. If 'unreplied', count will be limited to 
    1801      *                     those topics that have received no replies. 
    1802      * @return int Forum topic count. 
    1803      */ 
    1804     public static function get_global_forum_topic_count( $type ) { 
    1805         global $bbdb, $wpdb; 
    1806  
    1807         $bp = buddypress(); 
    1808  
    1809         if ( 'unreplied' == $type ) 
    1810             $bp->groups->filter_sql = ' AND t.topic_posts = 1'; 
    1811  
    1812         /** 
    1813          * Filters the portion of the SQL related to global count of forum topics in public groups. 
    1814          * 
    1815          * See https://buddypress.trac.wordpress.org/ticket/4306. 
    1816          * 
    1817          * @since 1.6.0 
    1818          * 
    1819          * @param string $filter_sql SQL portion for the query. 
    1820          * @param string $type       Type of forum topics to query for. 
    1821          */ 
    1822         $extra_sql = apply_filters( 'get_global_forum_topic_count_extra_sql', $bp->groups->filter_sql, $type ); 
    1823  
    1824         // Make sure the $extra_sql begins with an AND. 
    1825         if ( 'AND' != substr( trim( strtoupper( $extra_sql ) ), 0, 3 ) ) 
    1826             $extra_sql = ' AND ' . $extra_sql; 
    1827  
    1828         return $wpdb->get_var( "SELECT COUNT(t.topic_id) FROM {$bbdb->topics} AS t, {$bp->groups->table_name} AS g LEFT JOIN {$bp->groups->table_name_groupmeta} AS gm ON g.id = gm.group_id WHERE (gm.meta_key = 'forum_id' AND gm.meta_value = t.forum_id) AND g.status = 'public' AND t.topic_status = '0' AND t.topic_sticky != '2' {$extra_sql} " ); 
    1829     } 
    1830  
    1831     /** 
    18321658     * Get the member count for a group. 
    18331659     * 
     
    18431669 
    18441670        return $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(id) FROM {$bp->groups->table_name_members} WHERE group_id = %d AND is_confirmed = 1 AND is_banned = 0", $group_id ) ); 
    1845     } 
    1846  
    1847     /** 
    1848      * Get a total count of all topics of a given status, across groups/forums. 
    1849      * 
    1850      * @since 1.5.0 
    1851      * 
    1852      * @param string      $status       Which group type to count. 'public', 'private', 
    1853      *                                  'hidden', or 'all'. Default: 'public'. 
    1854      * @param string|bool $search_terms Provided search terms. 
    1855      * @return int The topic count 
    1856      */ 
    1857     public static function get_global_topic_count( $status = 'public', $search_terms = false ) { 
    1858         global $bbdb, $wpdb; 
    1859  
    1860         switch ( $status ) { 
    1861             case 'all' : 
    1862                 $status_sql = ''; 
    1863                 break; 
    1864  
    1865             case 'hidden' : 
    1866                 $status_sql = "AND g.status = 'hidden'"; 
    1867                 break; 
    1868  
    1869             case 'private' : 
    1870                 $status_sql = "AND g.status = 'private'"; 
    1871                 break; 
    1872  
    1873             case 'public' : 
    1874             default : 
    1875                 $status_sql = "AND g.status = 'public'"; 
    1876                 break; 
    1877         } 
    1878  
    1879         $bp = buddypress(); 
    1880  
    1881         $sql = array(); 
    1882  
    1883         $sql['select'] = "SELECT COUNT(t.topic_id)"; 
    1884         $sql['from']   = "FROM {$bbdb->topics} AS t INNER JOIN {$bp->groups->table_name_groupmeta} AS gm ON t.forum_id = gm.meta_value INNER JOIN {$bp->groups->table_name} AS g ON gm.group_id = g.id"; 
    1885         $sql['where']  = "WHERE gm.meta_key = 'forum_id' {$status_sql} AND t.topic_status = '0' AND t.topic_sticky != '2'"; 
    1886  
    1887         if ( !empty( $search_terms ) ) { 
    1888             $search_terms_like = '%' . bp_esc_like( $search_terms ) . '%'; 
    1889             $sql['where'] .= $wpdb->prepare( " AND ( t.topic_title LIKE %s )", $search_terms_like ); 
    1890         } 
    1891  
    1892         return $wpdb->get_var( implode( ' ', $sql ) ); 
    18931671    } 
    18941672 
  • trunk/src/bp-templates/bp-legacy/buddypress/groups/create.php

    r11591 r11763  
    194194                    <h4><?php _e( 'Group Forums', 'buddypress' ); ?></h4> 
    195195 
    196                     <?php if ( bp_forums_is_installed_correctly() ) : ?> 
    197  
    198                         <p><?php _e( 'Should this group have a forum?', 'buddypress' ); ?></p> 
    199  
    200                         <div class="checkbox"> 
    201                             <label for="group-show-forum"><input type="checkbox" name="group-show-forum" id="group-show-forum" value="1"<?php checked( bp_get_new_group_enable_forum(), true, true ); ?> /> <?php _e( 'Enable discussion forum', 'buddypress' ); ?></label> 
    202                         </div> 
    203                     <?php elseif ( is_super_admin() ) : ?> 
    204  
    205                         <p><?php printf( __( '<strong>Attention Site Admin:</strong> Group forums require the <a href="%s">correct setup and configuration</a> of a bbPress installation.', 'buddypress' ), bp_core_do_network_admin() ? network_admin_url( 'settings.php?page=bb-forums-setup' ) :  admin_url( 'admin.php?page=bb-forums-setup' ) ); ?></p> 
    206  
    207                     <?php endif; ?> 
     196                    <p><?php _e( 'Should this group have a forum?', 'buddypress' ); ?></p> 
     197 
     198                    <div class="checkbox"> 
     199                        <label for="group-show-forum"><input type="checkbox" name="group-show-forum" id="group-show-forum" value="1"<?php checked( bp_get_new_group_enable_forum(), true, true ); ?> /> <?php _e( 'Enable discussion forum', 'buddypress' ); ?></label> 
     200                    </div> 
    208201 
    209202                <?php endif; ?> 
  • trunk/src/bp-templates/bp-legacy/buddypress/groups/single/admin/group-settings.php

    r11591 r11763  
    2222<?php if ( bp_is_active( 'forums' ) ) : ?> 
    2323 
    24     <?php if ( bp_forums_is_installed_correctly() ) : ?> 
     24    <div class="checkbox"> 
     25        <label for="group-show-forum"><input type="checkbox" name="group-show-forum" id="group-show-forum" value="1"<?php bp_group_show_forum_setting(); ?> /> <?php _e( 'Enable discussion forum', 'buddypress' ); ?></label> 
     26    </div> 
    2527 
    26         <div class="checkbox"> 
    27             <label for="group-show-forum"><input type="checkbox" name="group-show-forum" id="group-show-forum" value="1"<?php bp_group_show_forum_setting(); ?> /> <?php _e( 'Enable discussion forum', 'buddypress' ); ?></label> 
    28         </div> 
    29  
    30         <hr /> 
    31  
    32     <?php endif; ?> 
     28    <hr /> 
    3329 
    3430<?php endif; ?> 
  • trunk/src/bp-templates/bp-legacy/buddypress/groups/single/home.php

    r11128 r11763  
    120120                elseif ( bp_is_group_invites()    ) : bp_get_template_part( 'groups/single/send-invites' ); 
    121121 
    122                 // Old group forums 
    123                 elseif ( bp_is_group_forum()      ) : bp_get_template_part( 'groups/single/forum'        ); 
    124  
    125122                // Membership request 
    126123                elseif ( bp_is_group_membership_request() ) : bp_get_template_part( 'groups/single/request-membership' ); 
  • trunk/src/bp-templates/bp-legacy/buddypress/members/single/home.php

    r11128 r11763  
    8686            bp_get_template_part( 'members/single/profile'  ); 
    8787 
    88         elseif ( bp_is_user_forums() ) : 
    89             bp_get_template_part( 'members/single/forums'   ); 
    90  
    9188        elseif ( bp_is_user_notifications() ) : 
    9289            bp_get_template_part( 'members/single/notifications' ); 
  • trunk/src/bp-templates/bp-legacy/js/buddypress.js

    r11619 r11763  
    1313    /**** Page Load Actions *******************************************************/ 
    1414 
    15     /* Hide Forums Post Form */ 
    16     if ( '-1' === window.location.search.indexOf('new') && jq('div.forums').length ) { 
    17         jq('#new-topic-post').hide(); 
    18     } else { 
    19         jq('#new-topic-post').show(); 
    20     } 
    21  
    2215    /* Activity filter and scope set */ 
    2316    bp_init_activity(); 
    2417 
    25     var objects  = [ 'members', 'groups', 'blogs', 'forums', 'group_members' ], 
     18    var objects  = [ 'members', 'groups', 'blogs', 'group_members' ], 
    2619        $whats_new = jq('#whats-new'); 
    2720 
     
    10451038        } 
    10461039 
    1047     }); 
    1048  
    1049     /**** New Forum Directory Post **************************************/ 
    1050  
    1051     /* Hit the "New Topic" button on the forums directory page */ 
    1052     jq('a.show-hide-new').on( 'click', function() { 
    1053         if ( !jq('#new-topic-post').length ) { 
    1054             return false; 
    1055         } 
    1056  
    1057         if ( jq('#new-topic-post').is(':visible') ) { 
    1058             jq('#new-topic-post').slideUp(200); 
    1059         } else { 
    1060             jq('#new-topic-post').slideDown(200, function() { 
    1061                 jq('#topic_title').focus(); 
    1062             } ); 
    1063         } 
    1064  
    1065         return false; 
    1066     }); 
    1067  
    1068     /* Cancel the posting of a new forum topic */ 
    1069     jq('#submit_topic_cancel').on( 'click', function() { 
    1070         if ( !jq('#new-topic-post').length ) { 
    1071             return false; 
    1072         } 
    1073  
    1074         jq('#new-topic-post').slideUp(200); 
    1075         return false; 
    1076     }); 
    1077  
    1078     /* Clicking a forum tag */ 
    1079     jq('#forum-directory-tags a').on( 'click', function() { 
    1080         bp_filter_request( 'forums', 'tags', jq.cookie('bp-forums-scope'), 'div.forums', jq(this).html().replace( /&nbsp;/g, '-' ), 1, jq.cookie('bp-forums-extras') ); 
    1081         return false; 
    10821040    }); 
    10831041 
  • trunk/src/class-buddypress.php

    r11717 r11763  
    234234        if ( ! defined( 'BP_PLUGIN_URL' ) ) { 
    235235            define( 'BP_PLUGIN_URL', plugin_dir_url( __FILE__ ) ); 
     236        } 
     237 
     238        // Legacy forum constant - supported for compatibility with bbPress 2. 
     239        if ( ! defined( 'BP_FORUMS_PARENT_FORUM_ID' ) ) { 
     240            define( 'BP_FORUMS_PARENT_FORUM_ID', 1 ); 
     241        } 
     242 
     243        // Legacy forum constant - supported for compatibility with bbPress 2. 
     244        if ( ! defined( 'BP_FORUMS_SLUG' ) ) { 
     245            define( 'BP_FORUMS_SLUG', 'forums' ); 
    236246        } 
    237247 
  • trunk/src/readme.txt

    r11745 r11763  
    11=== BuddyPress === 
    22Contributors: johnjamesjacoby, DJPaul, boonebgorges, r-a-y, imath, mercime, tw2113, dcavins, hnla 
    3 Tags: social networking, activity, profiles, messaging, friends, groups, forums, notifications, settings, social, community, networks, networking 
     3Tags: social networking, activity, profiles, messaging, friends, groups, notifications, settings, social, community, networks, networking 
    44Requires at least: 4.5 
    55Tested up to: 4.9 
  • trunk/tests/phpunit/testcases/admin/functions.php

    r11737 r11763  
    8484        $this->assertEquals( bp_core_admin_get_active_components_from_submitted_settings( $submitted2 ), array( 'activity' => 1, 'groups' => 1, 'members' => 1, 'messages' => 1, 'settings' => 1, 'xprofile' => 1 ) ); 
    8585 
    86         // Activating from the Retired screen 
    87         $_GET['action'] = 'retired'; 
    88         buddypress()->active_components = array( 
    89             'activity' => 1, 
    90             'members' => 1, 
    91             'messages' => 1, 
    92             'settings' => 1, 
    93             'xprofile' => 1, 
    94         ); 
    95  
    96         $submitted3 = array( 
    97             'forums' => 1, 
    98         ); 
    99  
    100         $this->assertEquals( bp_core_admin_get_active_components_from_submitted_settings( $submitted3 ), array( 'activity' => 1, 'forums' => 1, 'members' => 1, 'messages' => 1, 'settings' => 1, 'xprofile' => 1 ) ); 
    101  
    10286        // Deactivating from the Retired screen 
    10387        $_GET['action'] = 'retired'; 
    10488        buddypress()->active_components = array( 
    10589            'activity' => 1, 
    106             'forums' => 1, 
    10790            'members' => 1, 
    10891            'messages' => 1, 
Note: See TracChangeset for help on using the changeset viewer.