Skip to:
Content

bbPress.org

Ticket #1799: 1799.16.diff

File 1799.16.diff, 96.6 KB (added by johnjamesjacoby, 5 years ago)
  • src/bbpress.php

     
    55 *
    66 * bbPress is forum software with a twist from the creators of WordPress.
    77 *
    8  * $Id: bbpress.php 6341 2017-03-25 18:46:32Z johnjamesjacoby $
     8 * $Id: bbpress.php 6341 2017-03-02 04:46:00Z johnjamesjacoby $
    99 *
    1010 * @package bbPress
    1111 * @subpackage Main
     
    246246
    247247                // Status identifiers
    248248                $this->spam_status_id    = apply_filters( 'bbp_spam_post_status',    'spam'    );
     249                $this->open_status_id    = apply_filters( 'bbp_open_post_status',    'open'    );
    249250                $this->closed_status_id  = apply_filters( 'bbp_closed_post_status',  'closed'  );
    250251                $this->orphan_status_id  = apply_filters( 'bbp_orphan_post_status',  'orphan'  );
    251252                $this->public_status_id  = apply_filters( 'bbp_public_post_status',  'publish' );
     
    293294
    294295                /** Misc **************************************************************/
    295296
    296                 $this->domain         = 'bbpress';      // Unique identifier for retrieving translated strings
    297                 $this->extend         = new stdClass(); // Plugins add data here
    298                 $this->errors         = new WP_Error(); // Feedback
     297                $this->domain             = 'bbpress';      // Unique identifier for retrieving translated strings
     298                $this->extend             = new stdClass(); // Plugins add data here
     299                $this->errors             = new WP_Error(); // Feedback
     300                $this->transitioned_posts = array();        // Transitioned post ids.
    299301
    300302                /** Deprecated ********************************************************/
    301303
     
    341343                // Forums
    342344                require $this->includes_dir . 'forums/capabilities.php';
    343345                require $this->includes_dir . 'forums/functions.php';
     346                require $this->includes_dir . 'forums/status.php';
    344347                require $this->includes_dir . 'forums/template.php';
    345348
    346349                // Topics
    347350                require $this->includes_dir . 'topics/capabilities.php';
    348351                require $this->includes_dir . 'topics/functions.php';
     352                require $this->includes_dir . 'topics/status.php';
    349353                require $this->includes_dir . 'topics/template.php';
    350354
    351355                // Replies
    352356                require $this->includes_dir . 'replies/capabilities.php';
    353357                require $this->includes_dir . 'replies/functions.php';
     358                require $this->includes_dir . 'replies/status.php';
    354359                require $this->includes_dir . 'replies/template.php';
    355360
    356361                // Search
  • src/includes/admin/forums.php

     
    7575                add_action( 'add_meta_boxes', array( $this, 'comments_metabox'      ) );
    7676                add_action( 'save_post',      array( $this, 'save_meta_boxes'       ) );
    7777
     78                // Transitioned forum actions.
     79                add_action( 'save_post', 'bbp_transitioned_forum_status_new_public',    20 );
     80                add_action( 'save_post', 'bbp_transitioned_forum_status_new_moderated', 20 );
     81                add_action( 'save_post', 'bbp_transitioned_forum_status_public',        20 );
     82                add_action( 'save_post', 'bbp_transitioned_forum_status_moderated',     20 );
     83
    7884                // Check if there are any bbp_toggle_forum_* requests on admin_init, also have a message displayed
    7985                add_action( 'load-edit.php',  array( $this, 'toggle_forum'        ) );
    8086                add_action( 'admin_notices',  array( $this, 'toggle_forum_notice' ) );
  • src/includes/admin/metaboxes.php

     
    316316        ?>
    317317
    318318        <p>
    319                 <strong class="label"><?php esc_html_e( 'Status:', 'bbpress' ); ?></strong>
    320                 <label class="screen-reader-text" for="bbp_forum_status_select"><?php esc_html_e( 'Status:', 'bbpress' ) ?></label>
    321                 <?php bbp_form_forum_status_dropdown( array( 'forum_id' => $post->ID ) ); ?>
     319                <strong class="label"><?php esc_html_e( 'Lock:', 'bbpress' ); ?></strong>
     320                <label class="screen-reader-text" for="bbp_forum_status_select"><?php esc_html_e( 'Lock:', 'bbpress' ) ?></label>
     321                <?php bbp_form_forum_lock_dropdown( array( 'forum_id' => $post->ID ) ); ?>
    322322        </p>
    323323
    324324        <?php
  • src/includes/admin/replies.php

     
    8282                add_action( 'add_meta_boxes', array( $this, 'comments_metabox'   ) );
    8383                add_action( 'save_post',      array( $this, 'save_meta_boxes'    ) );
    8484
     85                // Transitioned reply actions.
     86                add_action( 'save_post', 'bbp_transitioned_reply_status_new_public',    20 );
     87                add_action( 'save_post', 'bbp_transitioned_reply_status_new_moderated', 20 );
     88                add_action( 'save_post', 'bbp_transitioned_reply_status_public',        20 );
     89                add_action( 'save_post', 'bbp_transitioned_reply_status_moderated',     20 );
     90
    8591                // Check if there are any bbp_toggle_reply_* requests on admin_init, also have a message displayed
    8692                add_action( 'load-edit.php',  array( $this, 'toggle_reply'        ) );
    8793                add_action( 'admin_notices',  array( $this, 'toggle_reply_notice' ) );
  • src/includes/admin/topics.php

     
    8686                add_action( 'add_meta_boxes', array( $this, 'comments_metabox'      ) );
    8787                add_action( 'save_post',      array( $this, 'save_meta_boxes'       ) );
    8888
     89                // Transitioned topic actions.
     90                add_action( 'save_post', 'bbp_transitioned_topic_status_new_public',    20 );
     91                add_action( 'save_post', 'bbp_transitioned_topic_status_new_moderated', 20 );
     92                add_action( 'save_post', 'bbp_transitioned_topic_status_public',        20 );
     93                add_action( 'save_post', 'bbp_transitioned_topic_status_moderated',     20 );
     94
    8995                // Check if there are any bbp_toggle_topic_* requests on admin_init, also have a message displayed
    9096                add_action( 'load-edit.php',  array( $this, 'toggle_topic'        ) );
    9197                add_action( 'admin_notices',  array( $this, 'toggle_topic_notice' ) );
  • src/includes/common/functions.php

     
    17751775                                                                'feed'           => true,
    17761776                                                                'post_type'      => bbp_get_reply_post_type(),
    17771777                                                                'post_parent'    => 'any',
    1778                                                                 'post_status'    => bbp_get_public_topic_statuses(),
     1778                                                                'post_status'    => bbp_get_topic_statuses( null, 'public', true ),
    17791779                                                                'posts_per_page' => bbp_get_replies_per_rss_page(),
    17801780                                                                'order'          => 'DESC',
    17811781                                                                'meta_query'     => $meta_query
     
    17931793                                                                'feed'           => true,
    17941794                                                                'post_type'      => bbp_get_topic_post_type(),
    17951795                                                                'post_parent'    => bbp_get_forum_id(),
    1796                                                                 'post_status'    => bbp_get_public_topic_statuses(),
     1796                                                                'post_status'    => bbp_get_topic_statuses( null, 'public', true ),
    17971797                                                                'posts_per_page' => bbp_get_topics_per_rss_page(),
    17981798                                                                'order'          => 'DESC'
    17991799                                                        );
     
    18151815                                                                'feed'           => true,
    18161816                                                                'post_type'      => array( bbp_get_reply_post_type(), bbp_get_topic_post_type() ),
    18171817                                                                'post_parent'    => 'any',
    1818                                                                 'post_status'    => bbp_get_public_topic_statuses(),
     1818                                                                'post_status'    => bbp_get_topic_statuses( null, 'public', true ),
    18191819                                                                'posts_per_page' => bbp_get_replies_per_rss_page(),
    18201820                                                                'order'          => 'DESC',
    18211821                                                                'meta_query'     => $meta_query
     
    19531953
    19541954        $wp_query->set_404();
    19551955}
     1956
     1957/** Statuses ******************************************************************/
     1958
     1959/**
     1960 * Store the transitioned forum/topic/reply id along with it's transitioned
     1961 * status (new/public/moderated).
     1962 *
     1963 * @since 2.6.0 bbPress (rXXXX)
     1964 *
     1965 * @param int    $post_id The forum/topic/reply id.
     1966 * @param string $status  The transition status. Expects new/public/moderated.
     1967 *
     1968 * @return void
     1969 */
     1970function bbp_stash_transitioned_post_status( $post_id = 0, $status = '' ) {
     1971
     1972        // Bail if we don't have all the necessary data.
     1973        if ( empty( $post_id ) || empty( $status ) ) {
     1974                return;
     1975        }
     1976
     1977        // Copy to a variable, to update.
     1978        $bbp                = bbpress();
     1979        $transitioned_posts = $bbp->transitioned_posts;
     1980
     1981        // Update the global.
     1982        $transitioned_posts[ $post_id ] = $status;
     1983        $bbp->transitioned_posts        = $transitioned_posts;
     1984}
     1985
     1986/**
     1987 * Returns the transitioned post status.
     1988 *
     1989 * @since 2.6.0 bbPress (rXXXX)
     1990 *
     1991 * @param int $post_id The forum/topic/reply id.
     1992 *
     1993 * @return string new/public/moderated. Empty on failure.
     1994 */
     1995function bbp_get_transitioned_post_status( $post_id = 0 ) {
     1996
     1997        // Get transitioned posts
     1998        $transitioned_posts = bbpress()->transitioned_posts;
     1999
     2000        // Get the transitioned post status.
     2001        $status = ! empty( $transitioned_posts[ $post_id ] )
     2002                ? $transitioned_posts[ $post_id ]
     2003                : '';
     2004
     2005        /**
     2006         * Filters the return of `bbp_get_transitioned_post_status()`.
     2007         *
     2008         * @since 2.6.0 bbPress (rXXXX)
     2009         *
     2010         * @param string $status  new/public/moderated. Empty on failure.
     2011         * @param int    $post_id The forum/topic/reply id.
     2012         */
     2013        return apply_filters( 'bbp_get_transitioned_post_status', $status, $post_id );
     2014}
     2015
     2016/**
     2017 * Checks if a given post id was transitioned to a given status.
     2018 *
     2019 * @since 2.6.0 bbPress (rXXXX)
     2020 *
     2021 * @param int    $post_id The forum/topic/reply id.
     2022 * @param string $status  The status.
     2023 *
     2024 * @return bool True if the post id was transitioned to new public.
     2025 */
     2026function bbp_is_post_status_transitioned( $post_id = 0, $status = 'new_public' ) {
     2027
     2028        // Is status?
     2029        $retval = ( bbp_get_transitioned_post_status( $post_id ) === $status );
     2030
     2031        /**
     2032         * Filters the return of `bbp_is_post_status_transitioned()`.
     2033         *
     2034         * @since 2.6.0 bbPress (rXXXX)
     2035         *
     2036         * @param bool $retval  True if the post was transitioned to the status.
     2037         * @param int  $post_id The forum/topic/reply id.
     2038         */
     2039        return (bool) apply_filters( 'bbp_is_post_status_transitioned', $retval, $post_id, $status );
     2040}
  • src/includes/common/widgets.php

     
    745745                                        'post_type'           => bbp_get_topic_post_type(),
    746746                                        'post_parent'         => $settings['parent_forum'],
    747747                                        'posts_per_page'      => (int) $settings['max_shown'],
    748                                         'post_status'         => bbp_get_public_topic_statuses(),
     748                                        'post_status'         => bbp_get_topic_statuses( null, 'public', true ),
    749749                                        'ignore_sticky_posts' => true,
    750750                                        'no_found_rows'       => true,
    751751                                        'meta_key'            => '_bbp_last_active_time',
     
    761761                                        'post_type'           => bbp_get_topic_post_type(),
    762762                                        'post_parent'         => $settings['parent_forum'],
    763763                                        'posts_per_page'      => (int) $settings['max_shown'],
    764                                         'post_status'         => bbp_get_public_topic_statuses(),
     764                                        'post_status'         => bbp_get_topic_statuses( null, 'public', true ),
    765765                                        'ignore_sticky_posts' => true,
    766766                                        'no_found_rows'       => true,
    767767                                        'meta_key'            => '_bbp_reply_count',
     
    778778                                        'post_type'           => bbp_get_topic_post_type(),
    779779                                        'post_parent'         => $settings['parent_forum'],
    780780                                        'posts_per_page'      => (int) $settings['max_shown'],
    781                                         'post_status'         => bbp_get_public_topic_statuses(),
     781                                        'post_status'         => bbp_get_topic_statuses( null, 'public', true ),
    782782                                        'ignore_sticky_posts' => true,
    783783                                        'no_found_rows'       => true,
    784784                                        'order'               => 'DESC'
     
    11301130                // bbp_pre_get_posts_normalize_forum_visibility action and function.
    11311131                $widget_query = new WP_Query( array(
    11321132                        'post_type'           => bbp_get_reply_post_type(),
    1133                         'post_status'         => bbp_get_public_topic_statuses(),
     1133                        'post_status'         => bbp_get_topic_statuses( null, 'public', true ),
    11341134                        'posts_per_page'      => (int) $settings['max_shown'],
    11351135                        'ignore_sticky_posts' => true,
    11361136                        'no_found_rows'       => true,
  • src/includes/core/actions.php

     
    5353add_action( 'login_form_login',         'bbp_login_form_login',       10    );
    5454add_action( 'profile_update',           'bbp_profile_update',         10, 2 ); // user_id and old_user_data
    5555add_action( 'user_register',            'bbp_user_register',          10    );
     56add_action( 'transition_post_status',   'bbp_transition_post_status', 10, 3 );
    5657
    5758/**
    5859 * bbp_loaded - Attached to 'plugins_loaded' above
     
    164165add_action( 'untrashed_post', 'bbp_untrashed_forum' );
    165166add_action( 'deleted_post',   'bbp_deleted_forum'   );
    166167
     168// Transition forum status.
     169add_action( 'bbp_transition_forum_status', 'bbp_transition_forum_status_new_public',    10, 3 );
     170add_action( 'bbp_transition_forum_status', 'bbp_transition_forum_status_new_moderated', 10, 3 );
     171add_action( 'bbp_transition_forum_status', 'bbp_transition_forum_status_public',        10, 3 );
     172add_action( 'bbp_transition_forum_status', 'bbp_transition_forum_status_moderated',     10, 3 );
     173
     174// Transitioned forum status.
     175add_action( 'bbp_new_forum',       'bbp_transitioned_forum_status_new_public',    20 );
     176add_action( 'bbp_new_forum',       'bbp_transitioned_forum_status_new_moderated', 20 );
     177add_action( 'bbp_insert_forum',    'bbp_transitioned_forum_status_new_public',    20 );
     178add_action( 'bbp_insert_forum',    'bbp_transitioned_forum_status_new_moderated', 20 );
     179add_action( 'bbp_trashed_forum',   'bbp_transitioned_forum_status_moderated',     20 );
     180add_action( 'bbp_untrashed_forum', 'bbp_transitioned_forum_status_public',        20 );
     181
    167182// Auto trash/untrash/delete a forums topics
    168183add_action( 'bbp_delete_forum',  'bbp_delete_forum_topics',  10 );
    169184add_action( 'bbp_trash_forum',   'bbp_trash_forum_topics',   10 );
     
    193208add_action( 'untrashed_post', 'bbp_untrashed_reply' );
    194209add_action( 'deleted_post',   'bbp_deleted_reply'   );
    195210
     211// Transition reply status.
     212add_action( 'bbp_transition_reply_status', 'bbp_transition_reply_status_new_public',    10, 3 );
     213add_action( 'bbp_transition_reply_status', 'bbp_transition_reply_status_new_moderated', 10, 3 );
     214add_action( 'bbp_transition_reply_status', 'bbp_transition_reply_status_public',        10, 3 );
     215add_action( 'bbp_transition_reply_status', 'bbp_transition_reply_status_moderated',     10, 3 );
     216
     217// Transitioned reply status.
     218add_action( 'bbp_new_reply',        'bbp_transitioned_reply_status_new_public',    20 );
     219add_action( 'bbp_new_reply',        'bbp_transitioned_reply_status_new_moderated', 20 );
     220add_action( 'bbp_insert_reply',     'bbp_transitioned_reply_status_new_public',    20 );
     221add_action( 'bbp_insert_reply',     'bbp_transitioned_reply_status_new_moderated', 20 );
     222add_action( 'bbp_trashed_reply',    'bbp_transitioned_reply_status_moderated',     20 );
     223add_action( 'bbp_untrashed_reply',  'bbp_transitioned_reply_status_public',        20 );
     224add_action( 'bbp_spammed_reply',    'bbp_transitioned_reply_status_moderated',     20 );
     225add_action( 'bbp_unspammed_reply',  'bbp_transitioned_reply_status_public',        20 );
     226add_action( 'bbp_approved_reply',   'bbp_transitioned_reply_status_public',        20 );
     227add_action( 'bbp_unapproved_reply', 'bbp_transitioned_reply_status_moderated',     20 );
     228
    196229// New/Edit Topic
    197230add_action( 'bbp_new_topic',  'bbp_update_topic', 10, 5 );
    198231add_action( 'bbp_edit_topic', 'bbp_update_topic', 10, 5 );
     
    215248add_action( 'untrashed_post', 'bbp_untrashed_topic' );
    216249add_action( 'deleted_post',   'bbp_deleted_topic'   );
    217250
     251// Transition topic status.
     252add_action( 'bbp_transition_topic_status', 'bbp_transition_topic_status_new_public',    10, 3 );
     253add_action( 'bbp_transition_topic_status', 'bbp_transition_topic_status_new_moderated', 10, 3 );
     254add_action( 'bbp_transition_topic_status', 'bbp_transition_topic_status_public',        10, 3 );
     255add_action( 'bbp_transition_topic_status', 'bbp_transition_topic_status_moderated',     10, 3 );
     256
     257// Transitioned topic status.
     258add_action( 'bbp_new_topic',        'bbp_transitioned_topic_status_new_public',    20 );
     259add_action( 'bbp_new_topic',        'bbp_transitioned_topic_status_new_moderated', 20 );
     260add_action( 'bbp_insert_topic',     'bbp_transitioned_topic_status_new_public',    20 );
     261add_action( 'bbp_insert_topic',     'bbp_transitioned_topic_status_new_moderated', 20 );
     262add_action( 'bbp_trashed_topic',    'bbp_transitioned_topic_status_moderated',     20 );
     263add_action( 'bbp_untrashed_topic',  'bbp_transitioned_topic_status_public',        20 );
     264add_action( 'bbp_spammed_topic',    'bbp_transitioned_topic_status_moderated',     20 );
     265add_action( 'bbp_unspammed_topic',  'bbp_transitioned_topic_status_public',        20 );
     266add_action( 'bbp_approved_topic',   'bbp_transitioned_topic_status_public',        20 );
     267add_action( 'bbp_unapproved_topic', 'bbp_transitioned_topic_status_moderated',     20 );
     268
    218269// Favorites
    219270add_action( 'bbp_spam_topic',   'bbp_remove_topic_from_all_favorites' );
    220271add_action( 'bbp_trash_topic',  'bbp_remove_topic_from_all_favorites' );
     
    253304add_action( 'bbp_unapproved_reply', 'bbp_update_reply_walker' );
    254305
    255306// Update forum topic/reply counts.
    256 add_action( 'bbp_new_reply',        'bbp_increase_forum_reply_count'        );
    257 add_action( 'bbp_new_topic',        'bbp_increase_forum_topic_count'        );
    258 add_action( 'bbp_trashed_reply',    'bbp_decrease_forum_reply_count'        );
    259 add_action( 'bbp_trashed_topic',    'bbp_decrease_forum_topic_count'        );
    260 add_action( 'bbp_trashed_topic',    'bbp_increase_forum_topic_count_hidden' );
    261 add_action( 'bbp_untrashed_reply',  'bbp_increase_forum_reply_count'        );
    262 add_action( 'bbp_untrashed_topic',  'bbp_increase_forum_topic_count'        );
    263 add_action( 'bbp_untrashed_topic',  'bbp_decrease_forum_topic_count_hidden' );
    264 add_action( 'bbp_spammed_reply',    'bbp_decrease_forum_reply_count'        );
    265 add_action( 'bbp_spammed_topic',    'bbp_decrease_forum_topic_count'        );
    266 add_action( 'bbp_spammed_topic',    'bbp_increase_forum_topic_count_hidden' );
    267 add_action( 'bbp_unspammed_reply',  'bbp_increase_forum_reply_count'        );
    268 add_action( 'bbp_unspammed_topic',  'bbp_increase_forum_topic_count'        );
    269 add_action( 'bbp_unspammed_topic',  'bbp_decrease_forum_topic_count_hidden' );
    270 add_action( 'bbp_approved_reply',   'bbp_increase_forum_reply_count'        );
    271 add_action( 'bbp_approved_topic',   'bbp_increase_forum_topic_count'        );
    272 add_action( 'bbp_approved_topic',   'bbp_decrease_forum_topic_count_hidden' );
    273 add_action( 'bbp_unapproved_reply', 'bbp_decrease_forum_reply_count'        );
    274 add_action( 'bbp_unapproved_topic', 'bbp_decrease_forum_topic_count'        );
    275 add_action( 'bbp_unapproved_topic', 'bbp_increase_forum_topic_count_hidden' );
     307add_action( 'bbp_transitioned_reply_status_new_public',    'bbp_increase_forum_reply_count'        );
     308add_action( 'bbp_transitioned_reply_status_public',        'bbp_increase_forum_reply_count'        );
     309add_action( 'bbp_transitioned_reply_status_moderated',     'bbp_decrease_forum_reply_count'        );
     310add_action( 'bbp_transitioned_topic_status_new_public',    'bbp_increase_forum_topic_count'        );
     311add_action( 'bbp_transitioned_topic_status_new_moderated', 'bbp_increase_forum_topic_count_hidden' );
     312add_action( 'bbp_transitioned_topic_status_public',        'bbp_increase_forum_topic_count'        );
     313add_action( 'bbp_transitioned_topic_status_public',        'bbp_decrease_forum_topic_count_hidden' );
     314add_action( 'bbp_transitioned_topic_status_moderated',     'bbp_decrease_forum_topic_count'        );
     315add_action( 'bbp_transitioned_topic_status_moderated',     'bbp_increase_forum_topic_count_hidden' );
    276316
    277317// Update forum reply counts for approved/unapproved topics.
    278318add_action( 'bbp_approved_topic',   'bbp_approved_unapproved_topic_update_forum_reply_count' );
    279319add_action( 'bbp_unapproved_topic', 'bbp_approved_unapproved_topic_update_forum_reply_count' );
    280320
    281321// Update topic reply counts.
    282 add_action( 'bbp_new_reply',        'bbp_increase_topic_reply_count'        );
    283 add_action( 'bbp_trashed_reply',    'bbp_decrease_topic_reply_count'        );
    284 add_action( 'bbp_trashed_reply',    'bbp_increase_topic_reply_count_hidden' );
    285 add_action( 'bbp_untrashed_reply',  'bbp_increase_topic_reply_count'        );
    286 add_action( 'bbp_untrashed_reply',  'bbp_decrease_topic_reply_count_hidden' );
    287 add_action( 'bbp_spammed_reply',    'bbp_decrease_topic_reply_count'        );
    288 add_action( 'bbp_spammed_reply',    'bbp_increase_topic_reply_count_hidden' );
    289 add_action( 'bbp_unspammed_reply',  'bbp_increase_topic_reply_count'        );
    290 add_action( 'bbp_unspammed_reply',  'bbp_decrease_topic_reply_count_hidden' );
    291 add_action( 'bbp_approved_reply',   'bbp_increase_topic_reply_count'        );
    292 add_action( 'bbp_approved_reply',   'bbp_decrease_topic_reply_count_hidden' );
    293 add_action( 'bbp_unapproved_reply', 'bbp_decrease_topic_reply_count'        );
    294 add_action( 'bbp_unapproved_reply', 'bbp_increase_topic_reply_count_hidden' );
     322add_action( 'bbp_transitioned_reply_status_new_public',    'bbp_increase_topic_reply_count'        );
     323add_action( 'bbp_transitioned_reply_status_new_moderated', 'bbp_increase_topic_reply_count_hidden' );
     324add_action( 'bbp_transitioned_reply_status_public',        'bbp_increase_topic_reply_count'        );
     325add_action( 'bbp_transitioned_reply_status_public',        'bbp_decrease_topic_reply_count_hidden' );
     326add_action( 'bbp_transitioned_reply_status_moderated',     'bbp_decrease_topic_reply_count'        );
     327add_action( 'bbp_transitioned_reply_status_moderated',     'bbp_increase_topic_reply_count_hidden' );
    295328
    296329// Users topic & reply counts.
    297 add_action( 'bbp_new_topic',     'bbp_increase_user_topic_count' );
    298 add_action( 'bbp_new_reply',     'bbp_increase_user_reply_count' );
    299 add_action( 'bbp_untrash_topic', 'bbp_increase_user_topic_count' );
    300 add_action( 'bbp_untrash_reply', 'bbp_increase_user_reply_count' );
    301 add_action( 'bbp_unspam_topic',  'bbp_increase_user_topic_count' );
    302 add_action( 'bbp_unspam_reply',  'bbp_increase_user_reply_count' );
    303 add_action( 'bbp_trash_topic',   'bbp_decrease_user_topic_count' );
    304 add_action( 'bbp_trash_reply',   'bbp_decrease_user_reply_count' );
    305 add_action( 'bbp_spam_topic',    'bbp_decrease_user_topic_count' );
    306 add_action( 'bbp_spam_reply',    'bbp_decrease_user_reply_count' );
     330add_action( 'bbp_transitioned_reply_status_new_public', 'bbp_increase_user_reply_count' );
     331add_action( 'bbp_transitioned_reply_status_public',     'bbp_increase_user_reply_count' );
     332add_action( 'bbp_transitioned_reply_status_moderated',  'bbp_decrease_user_reply_count' );
     333add_action( 'bbp_transitioned_topic_status_new_public', 'bbp_increase_user_topic_count' );
     334add_action( 'bbp_transitioned_topic_status_public',     'bbp_increase_user_topic_count' );
     335add_action( 'bbp_transitioned_topic_status_moderated',  'bbp_decrease_user_topic_count' );
    307336
    308 // Insert topic/reply counts.
    309 add_action( 'bbp_insert_topic', 'bbp_insert_topic_update_counts', 10, 2 );
    310 add_action( 'bbp_insert_reply', 'bbp_insert_reply_update_counts', 10, 3 );
    311 
    312337// Update topic voice counts.
    313338add_action( 'bbp_new_reply',        'bbp_update_topic_voice_count' );
    314339add_action( 'bbp_trashed_reply',    'bbp_update_topic_voice_count' );
  • src/includes/core/functions.php

     
    448448}
    449449
    450450/**
     451 * Return the open post status ID
     452 *
     453 * @since 2.6.0 bbPress (rXXXX)
     454 *
     455 * @return string
     456 */
     457function bbp_get_open_status_id() {
     458        return bbpress()->open_status_id;
     459}
     460
     461/**
    451462 * Return the closed post status ID
    452463 *
    453464 * @since 2.0.0 bbPress (r3504)
  • src/includes/core/sub-actions.php

     
    534534function bbp_map_meta_caps( $caps = array(), $cap = '', $user_id = 0, $args = array() ) {
    535535        return apply_filters( 'bbp_map_meta_caps', $caps, $cap, $user_id, $args );
    536536}
     537
     538/** Statuses ******************************************************************/
     539
     540/**
     541 * Maps forum/topic/reply status transition
     542 *
     543 * @since 2.6.0 bbPress (rXXXX)
     544 *
     545 * @param string  $new_status The new post status
     546 * @param string  $old_status The old post status
     547 * @param WP_Post $post       The post being transitioned
     548 */
     549function bbp_transition_post_status( $new_status = '', $old_status = '', $post = 0 ) {
     550
     551        // Get type of post
     552        $post_type = get_post_type( $post );
     553
     554        // Bail if not a bbPress post type
     555        if ( ! in_array( $post_type, array(
     556                bbp_get_forum_post_type(),
     557                bbp_get_topic_post_type(),
     558                bbp_get_reply_post_type()
     559        ), true ) ) {
     560                return;
     561        }
     562
     563        /**
     564         * Transition a bbPress post-type status
     565         *
     566         * @since 2.6.0 bbPress (rXXXX)
     567         */
     568        do_action( "bbp_transition_{$post_type}_status", $new_status, $old_status, $post );
     569}
  • src/includes/forums/functions.php

     
    644644
    645645        /** Forum Status **********************************************************/
    646646
    647         if ( ! empty( $_POST['bbp_forum_status'] ) && in_array( $_POST['bbp_forum_status'], array( 'open', 'closed' ) ) ) {
    648                 if ( 'closed' === $_POST['bbp_forum_status'] && ! bbp_is_forum_closed( $forum_id, false ) ) {
     647        if ( ! empty( $_POST['bbp_forum_lock'] ) && in_array( $_POST['bbp_forum_lock'], array_keys( bbp_get_forum_locks( $forum_id ) ) ) ) {
     648                if ( bbp_get_closed_status_id() === $_POST['bbp_forum_lock'] && ! bbp_is_forum_closed( $forum_id, false ) ) {
    649649                        bbp_close_forum( $forum_id );
    650                 } elseif ( 'open' === $_POST['bbp_forum_status'] && bbp_is_forum_open( $forum_id, false ) ) {
     650                } elseif ( bbp_get_open_status_id() === $_POST['bbp_forum_lock'] && bbp_is_forum_open( $forum_id, false ) ) {
    651651                        bbp_open_forum( $forum_id );
    652                 } elseif ( 'open' === $_POST['bbp_forum_status'] && bbp_is_forum_closed( $forum_id, false ) ) {
     652                } elseif ( bbp_get_open_status_id() === $_POST['bbp_forum_lock'] && bbp_is_forum_closed( $forum_id, false ) ) {
    653653                        bbp_open_forum( $forum_id );
    654654                }
    655655        }
     
    668668
    669669        /** Forum Visibility ******************************************************/
    670670
    671         if ( ! empty( $_POST['bbp_forum_visibility'] ) && in_array( $_POST['bbp_forum_visibility'], array_keys( bbp_get_forum_visibilities() ) ) ) {
     671        if ( ! empty( $_POST['bbp_forum_visibility'] ) && in_array( $_POST['bbp_forum_visibility'], array_keys( bbp_get_forum_visibilities( $forum_id ) ) ) ) {
    672672
    673673                // Get forums current visibility
    674674                $old_visibility = bbp_get_forum_visibility( $forum_id );
     
    762762
    763763        do_action( 'bbp_close_forum',  $forum_id );
    764764
    765         update_post_meta( $forum_id, '_bbp_status', 'closed' );
     765        update_post_meta( $forum_id, '_bbp_status', bbp_get_closed_status_id() );
    766766
    767767        do_action( 'bbp_closed_forum', $forum_id );
    768768
     
    787787
    788788        do_action( 'bbp_open_forum',   $forum_id );
    789789
    790         update_post_meta( $forum_id, '_bbp_status', 'open' );
     790        update_post_meta( $forum_id, '_bbp_status', bbp_get_open_status_id() );
    791791
    792792        do_action( 'bbp_opened_forum', $forum_id );
    793793
     
    19721972        bbp_update_forum_subforum_count( $r['forum_id'] );
    19731973
    19741974        // Only update topic count if we're deleting a topic, or in the dashboard.
    1975         if ( in_array( current_filter(), array( 'bbp_deleted_topic', 'save_post' ), true ) ) {
     1975        if ( 'bbp_deleted_topic' === current_action() ) {
    19761976                bbp_update_forum_reply_count(        $r['forum_id'] );
    19771977                bbp_update_forum_topic_count(        $r['forum_id'] );
    19781978                bbp_update_forum_topic_count_hidden( $r['forum_id'] );
     
    19901990/** Helpers *******************************************************************/
    19911991
    19921992/**
    1993  * Return an associative array of available topic statuses
     1993 * Return an associative array of forum locks and labels
    19941994 *
    1995  * @since 2.4.0 bbPress (r5059)
     1995 * @since 2.6.0 bbPress (rXXXX)
    19961996 *
    1997  * @param int $forum_id   Optional. Forum id.
    1998  *
     1997 * @param int $forum_id The forum ID to get locks for
    19991998 * @return array
    20001999 */
    2001 function bbp_get_forum_statuses( $forum_id = 0 ) {
    2002         return apply_filters( 'bbp_get_forum_statuses', array(
    2003                 'open'   => _x( 'Open',    'Open the forum',  'bbpress' ),
    2004                 'closed' => _x( 'Closed', 'Close the forum', 'bbpress' )
     2000function bbp_get_forum_locks( $forum_id = 0 ) {
     2001        return (array) apply_filters( 'bbp_get_forum_statuses', array(
     2002                bbp_get_open_status_id()   => _x( 'Open',   'Open the forum',  'bbpress' ),
     2003                bbp_get_closed_status_id() => _x( 'Closed', 'Close the forum', 'bbpress' )
    20052004        ), $forum_id );
    20062005}
    20072006
    20082007/**
    2009  * Return an associative array of forum types
     2008 * Return an associative array of forum types and labels
    20102009 *
    20112010 * @since 2.4.0 bbPress (r5059)
    20122011 *
     
    20222021}
    20232022
    20242023/**
    2025  * Return an associative array of forum visibility
     2024 * Return an associative array of forum visibilities and labels
    20262025 *
    20272026 * @since 2.4.0 bbPress (r5059)
    20282027 *
     
    20382037        ), $forum_id );
    20392038}
    20402039
     2040/**
     2041 * Return an associative array of available topic statuses
     2042 *
     2043 * @since 2.4.0 bbPress (r5059)
     2044 * @since 2.6.0 bbPress (rXXXX) Switched to work for post_status vs locks
     2045 *
     2046 * @param int    $forum_id   Optional. Forum id.
     2047 * @param string $type       Optional. all|new|public|moderated
     2048 * @param bool   $keys_only  Optional. Just return array keys
     2049 *
     2050 * @return array
     2051 */
     2052function bbp_get_forum_statuses( $forum_id = 0, $type = 'all', $keys_only = false ) {
     2053        static $all_statuses = null;
     2054
     2055        // All statuses
     2056        if ( null === $all_statuses ) {
     2057                $all_statuses = array(
     2058                        bbp_get_public_status_id()  => _x( 'Published', 'Open the forum',        'bbpress' ),
     2059                        bbp_get_closed_status_id()  => _x( 'Closed',    'Close the forum',       'bbpress' ),
     2060                        bbp_get_spam_status_id()    => _x( 'Spam',      'Spam the reply',        'bbpress' ),
     2061                        bbp_get_trash_status_id()   => _x( 'Trash',     'Trash the reply',       'bbpress' ),
     2062                        bbp_get_pending_status_id() => _x( 'Pending',   'Mark reply as pending', 'bbpress' )
     2063                );
     2064        }
     2065
     2066        // What type of statuses do we want?
     2067        switch ( $type ) {
     2068                case 'new' :
     2069                        $statuses = array(
     2070                                'auto-draft' => '',
     2071                                'draft'      => '',
     2072                                'new'        => ''
     2073                        );
     2074                        break;
     2075                case 'all' :
     2076                        $statuses = $all_statuses;
     2077                        break;
     2078                case 'public' :
     2079                        $keys     = array( bbp_get_public_status_id(), bbp_get_closed_status_id() );
     2080                        $statuses = array_intersect_key( $all_statuses, array_flip( $keys ) );
     2081                        break;
     2082                case 'moderated' :
     2083                        $keys     = array( bbp_get_spam_status_id(), bbp_get_trash_status_id(), bbp_get_pending_status_id() );
     2084                        $statuses = array_intersect_key( $all_statuses, array_flip( $keys ) );
     2085                        break;
     2086        }
     2087
     2088        // Only return status keys
     2089        if ( true === $keys_only ) {
     2090                $statuses = array_keys( $statuses );
     2091        }
     2092
     2093        /**
     2094         * Filter the returned reply statuses
     2095         *
     2096         * @since 2.0.0 bbPress (r2740)
     2097         *
     2098         * @param array  $statuses Array of statuses
     2099         * @param int    $reply_id Reply ID
     2100         * @param string $type     Type of statuses
     2101         */
     2102        return (array) apply_filters( 'bbp_get_forum_statuses', $statuses, $forum_id, $type );
     2103}
     2104
    20412105/** Queries *******************************************************************/
    20422106
    20432107/**
  • src/includes/forums/status.php

     
     1<?php
     2
     3/**
     4 * bbPress Forum Status Transitions
     5 *
     6 * @package bbPress
     7 * @subpackage Statuses
     8 */
     9
     10// Exit if accessed directly
     11defined( 'ABSPATH' ) || exit;
     12
     13/** Transition Forum Statuses *************************************************/
     14
     15/**
     16 * Called when transitioning a forum post status to a public status from a
     17 * draft/new status.
     18 *
     19 * @since 2.6.0 bbPress (rXXXX)
     20 *
     21 * @param string  $new_status The new post status.
     22 * @param string  $old_status The old post status.
     23 * @param WP_Post $forum      The forum post object.
     24 *
     25 * @return bool
     26 */
     27function bbp_transition_forum_status_new_public( $new_status, $old_status, $forum ) {
     28
     29        // Is the new status public?
     30        if ( ! in_array( $new_status, bbp_get_forum_statuses( $forum->ID, 'public', true ), true ) ) {
     31                return false;
     32        }
     33
     34        // Is the old status draft or new?
     35        if ( ! in_array( $old_status, bbp_get_forum_statuses( $forum->ID, 'new', true ), true ) ) {
     36                return false;
     37        }
     38
     39        // Store the transitioned forum id.
     40        bbp_stash_transitioned_post_status( $forum->ID, 'new_public' );
     41
     42        /**
     43         * Fires when a forum post status is transitioned to a public status from
     44         * a draft/new status.
     45         *
     46         * @since 2.6.0 bbPress (rXXXX)
     47         *
     48         * @param int $forum_id The forum id.
     49         */
     50        do_action( 'bbp_transition_forum_status_new_public', $forum->ID );
     51
     52        return true;
     53}
     54
     55/**
     56 * Called when transitioning a forum post status to a moderated status from a
     57 * draft/new status.
     58 *
     59 * @since 2.6.0 bbPress (rXXXX)
     60 *
     61 * @param string  $new_status The new post status.
     62 * @param string  $old_status The old post status.
     63 * @param WP_Post $forum      The forum post object.
     64 *
     65 * @return bool
     66 */
     67function bbp_transition_forum_status_new_moderated( $new_status, $old_status, $forum ) {
     68
     69        // Is the new status moderated?
     70        if ( ! in_array( $new_status, bbp_get_forum_statuses( $forum->ID, 'moderated', true ), true ) ) {
     71                return false;
     72        }
     73
     74        // Is the old status draft or new?
     75        if ( ! in_array( $old_status, bbp_get_forum_statuses( $forum->ID, 'new', true ), true ) ) {
     76                return false;
     77        }
     78
     79        // Store the transitioned forum id.
     80        bbp_stash_transitioned_post_status( $forum->ID, 'new_moderated' );
     81
     82        /**
     83         * Fires when a forum post status is transitioned to a public status from
     84         * a draft/new status.
     85         *
     86         * @since 2.6.0 bbPress (rXXXX)
     87         *
     88         * @param int $forum_id The forum id.
     89         */
     90        do_action( 'bbp_transition_forum_status_new_moderated', $forum->ID );
     91
     92        return true;
     93}
     94
     95/**
     96 * Called when transitioning a forum post status to a public status from a
     97 * moderated status.
     98 *
     99 * @since 2.6.0 bbPress (rXXXX)
     100 *
     101 * @param string  $new_status The new post status.
     102 * @param string  $old_status The old post status.
     103 * @param WP_Post $forum      The forum post object.
     104 *
     105 * @return bool
     106 */
     107function bbp_transition_forum_status_public( $new_status, $old_status, $forum ) {
     108
     109        // Is the new status public?
     110        if ( ! in_array( $new_status, bbp_get_forum_statuses( $forum->ID, 'public', true ), true ) ) {
     111                return false;
     112        }
     113
     114        // Is the old status moderated?
     115        if ( ! in_array( $old_status, bbp_get_forum_statuses( $forum->ID, 'moderated', true ), true ) ) {
     116                return false;
     117        }
     118
     119        // Store the transitioned forum id.
     120        bbp_stash_transitioned_post_status( $forum->ID, 'public' );
     121
     122        /**
     123         * Fires when a forum post status is transitioned to a public status from
     124         * a moderated status.
     125         *
     126         * @since 2.6.0 bbPress (rXXXX)
     127         *
     128         * @param int $forum_id The forum id.
     129         */
     130        do_action( 'bbp_transition_forum_status_public', $forum->ID );
     131
     132        return true;
     133}
     134
     135/**
     136 * Called when transitioning a forum post status to a moderated status from a
     137 * public status.
     138 *
     139 * @since 2.6.0 bbPress (rXXXX)
     140 *
     141 * @param string  $new_status The new post status.
     142 * @param string  $old_status The old post status.
     143 * @param WP_Post $forum      The forum post object.
     144 *
     145 * @return bool
     146 */
     147function bbp_transition_forum_status_moderated( $new_status, $old_status, $forum ) {
     148
     149        // Is the new status moderated?
     150        if ( ! in_array( $new_status, bbp_get_forum_statuses( $forum->ID, 'moderated', true ), true ) ) {
     151                return false;
     152        }
     153
     154        // Is the old status public?
     155        if ( ! in_array( $old_status, bbp_get_forum_statuses( $forum->ID, 'public', true ), true ) ) {
     156                return false;
     157        }
     158
     159        // Store the transitioned forum id.
     160        bbp_stash_transitioned_post_status( $forum->ID, 'moderated' );
     161
     162        /**
     163         * Fires when a forum post status is transitioned to a moderated status
     164         * from a public status.
     165         *
     166         * @since 2.6.0 bbPress (rXXXX)
     167         *
     168         * @param int $forum_id The forum id.
     169         */
     170        do_action( 'bbp_transition_forum_status_moderated', $forum->ID );
     171
     172        return true;
     173}
     174
     175/**
     176 * Called after transitioning a forum post status to a public status from a
     177 * draft/new status and it's post meta has been updated.
     178 *
     179 * @since 2.6.0 bbPress (rXXXX)
     180 *
     181 * @param int $forum_id The forum id.
     182 *
     183 * @return bool
     184 */
     185function bbp_transitioned_forum_status_new_public( $forum_id = 0 ) {
     186
     187        // Bail if the forum wasn't transitioned to a new public status.
     188        if ( ! bbp_is_post_status_transitioned( $forum_id, 'new_public' ) ) {
     189                return false;
     190        }
     191
     192        /**
     193         * Fires when a forum post status is transitioned to a public status from
     194         * a draft/new status and it's post meta has been updated.
     195         *
     196         * @since 2.6.0 bbPress (rXXXX)
     197         *
     198         * @param int $forum_id The forum id.
     199         */
     200        do_action( 'bbp_transitioned_forum_status_new_public', $forum_id );
     201
     202        return true;
     203}
     204
     205/**
     206 * Called after transitioning a forum post status to a moderated status from a
     207 * draft/new status and it's post meta has been updated.
     208 *
     209 * @since 2.6.0 bbPress (rXXXX)
     210 *
     211 * @param int $forum_id The forum id.
     212 *
     213 * @return bool
     214 */
     215function bbp_transitioned_forum_status_new_moderated( $forum_id = 0 ) {
     216
     217        // Bail if the forum wasn't transitioned to a new moderated status.
     218        if ( ! bbp_is_post_status_transitioned( $forum_id, 'new_moderated' ) ) {
     219                return false;
     220        }
     221
     222        /**
     223         * Fires when a forum post status is transitioned to a moderated status
     224         * from a draft/new status and it's post meta has been updated.
     225         *
     226         * @since 2.6.0 bbPress (rXXXX)
     227         *
     228         * @param int $forum_id The forum id.
     229         */
     230        do_action( 'bbp_transitioned_forum_status_new_moderated', $forum_id );
     231
     232        return true;
     233}
     234
     235/**
     236 * Called after transitioning a forum post status to a public status from a
     237 * moderated status and it's post meta has been updated.
     238 *
     239 * @since 2.6.0 bbPress (rXXXX)
     240 *
     241 * @param int $forum_id The forum id.
     242 *
     243 * @return bool
     244 */
     245function bbp_transitioned_forum_status_public( $forum_id = 0 ) {
     246
     247        // Bail if the forum wasn't transitioned to a public status.
     248        if ( ! bbp_is_post_status_transitioned( $forum_id, 'public' ) ) {
     249                return false;
     250        }
     251
     252        /**
     253         * Fires when a forum post status is transitioned to a public status from
     254         * a public status and it's post meta has been updated.
     255         *
     256         * @since 2.6.0 bbPress (rXXXX)
     257         *
     258         * @param int $forum_id The forum id.
     259         */
     260        do_action( 'bbp_transitioned_forum_status_public', $forum_id );
     261
     262        return true;
     263}
     264
     265/**
     266 * Called after transitioning a forum post status to a moderated status from a
     267 * public status and it's post meta has been updated.
     268 *
     269 * @since 2.6.0 bbPress (rXXXX)
     270 *
     271 * @param int $forum_id The forum id.
     272 *
     273 * @return bool
     274 */
     275function bbp_transitioned_forum_status_moderated( $forum_id = 0 ) {
     276
     277        // Bail if the forum wasn't transitioned to a moderated status.
     278        if ( ! bbp_is_post_status_transitioned( $forum_id, 'moderated' ) ) {
     279                return false;
     280        }
     281
     282        /**
     283         * Fires when a forum post status is transitioned to a moderated status
     284         * from a public status and it's post meta has been updated.
     285         *
     286         * @since 2.6.0 bbPress (rXXXX)
     287         *
     288         * @param int $forum_id The forum id.
     289         */
     290        do_action( 'bbp_transitioned_forum_status_moderated', $forum_id );
     291
     292        return true;
     293}
  • src/includes/forums/template.php

     
    15311531                $status   = get_post_meta( $forum_id, '_bbp_status', true );
    15321532
    15331533                if ( empty( $status ) ) {
    1534                         $status = 'open';
     1534                        $status = bbp_get_open_status_id();
    15351535                }
    15361536
    15371537                return apply_filters( 'bbp_get_forum_status', $status, $forum_id );
     
    26172617         *
    26182618         * @since 2.1.0 bbPress (r3563)
    26192619         *
     2620         * @param type $args
     2621         * @return type
     2622         */
     2623        function bbp_get_form_forum_status_dropdown( $args = array() ) {
     2624                $retval = bbp_get_form_forum_lock_dropdown( $args );
     2625               
     2626                return apply_filters( 'bbp_get_form_forum_status_dropdown', $retval, $args );
     2627        }
     2628
     2629/**
     2630 * Output value forum lock dropdown
     2631 *
     2632 * @since 2.6.0 bbPress (rXXXX)
     2633 *
     2634 * @param $args This function supports these arguments:
     2635 *  - select_id: Select id. Defaults to bbp_forum_status
     2636 *  - tab: Deprecated. Tabindex
     2637 *  - forum_id: Forum id
     2638 *  - selected: Override the selected option
     2639 * @uses bbp_get_form_forum_status() To get the topic's forum id
     2640 */
     2641function bbp_form_forum_lock_dropdown( $args = array() ) {
     2642        echo bbp_get_form_forum_lock_dropdown( $args );
     2643}
     2644        /**
     2645         * Return the forum lock dropdown
     2646         *
     2647         * @since 2.6.0 bbPress (rXXXX)
     2648         *
    26202649         * @param $args This function supports these arguments:
    26212650         *  - select_id: Select id. Defaults to bbp_forum_status
    26222651         *  - tab: Deprecated. Tabindex
     
    26272656         * @uses apply_filters()
    26282657         * @return string HTML select list for selecting forum status
    26292658         */
    2630         function bbp_get_form_forum_status_dropdown( $args = array() ) {
     2659        function bbp_get_form_forum_lock_dropdown( $args = array() ) {
    26312660
    26322661                // Backpat for handling passing of a forum ID
    26332662                if ( is_int( $args ) ) {
     
    26392668
    26402669                // Parse arguments against default values
    26412670                $r = bbp_parse_args( $args, array(
    2642                         'select_id'    => 'bbp_forum_status',
     2671                        'select_id'    => 'bbp_forum_lock',
    26432672                        'select_class' => 'bbp_dropdown',
    26442673                        'tab'          => false,
    26452674                        'forum_id'     => $forum_id,
    26462675                        'selected'     => false
    2647                 ), 'forum_status_select' );
     2676                ), 'forum_lock_select' );
    26482677
    26492678                // No specific selected value passed
    26502679                if ( empty( $r['selected'] ) ) {
     
    26762705
    26772706                <select name="<?php echo esc_attr( $r['select_id'] ) ?>" id="<?php echo esc_attr( $r['select_id'] ) ?>_select" class="<?php echo esc_attr( $r['select_class'] ); ?>"<?php echo $tab; ?>>
    26782707
    2679                         <?php foreach ( bbp_get_forum_statuses( $r['forum_id'] ) as $key => $label ) : ?>
     2708                        <?php foreach ( bbp_get_forum_locks( $r['forum_id'] ) as $key => $label ) : ?>
    26802709
    26812710                                <option value="<?php echo esc_attr( $key ); ?>"<?php selected( $key, $r['selected'] ); ?>><?php echo esc_html( $label ); ?></option>
    26822711
     
    26872716                <?php
    26882717
    26892718                // Return the results
    2690                 return apply_filters( 'bbp_get_form_forum_status_dropdown', ob_get_clean(), $r, $args );
     2719                return apply_filters( 'bbp_get_form_forum_lock_dropdown', ob_get_clean(), $r, $args );
    26912720        }
    26922721
    26932722/**
  • src/includes/replies/functions.php

     
    8484 * Update counts after a reply is inserted via `bbp_insert_reply`.
    8585 *
    8686 * @since 2.6.0 bbPress (r6036)
     87 * @deprecated 2.6.0 bbPress (rXXXX)
     88 * @todo Do we completely remove, or add a deprecation notice?
    8789 *
    8890 * @param int $reply_id The reply id.
    8991 * @param int $topic_id The topic id.
     
    827829 * @uses bbp_update_reply_forum_id() To update the reply forum id
    828830 * @uses bbp_update_reply_topic_id() To update the reply topic id
    829831 * @uses bbp_update_reply_to() To update the reply to id
    830  * @uses bbp_update_reply_walker() To update the reply's ancestors' counts
     832 * @uses bbp_update_reply_walker() To update the reply ancestors' counts
    831833 */
    832834function bbp_update_reply( $reply_id = 0, $topic_id = 0, $forum_id = 0, $anonymous_data = false, $author_id = 0, $is_edit = false, $reply_to = 0 ) {
    833835
     
    10151017                                bbp_update_topic_last_active_time( $ancestor, $topic_last_active_time );
    10161018
    10171019                                // Only update reply count if we're deleting a reply, or in the dashboard.
    1018                                 if ( in_array( current_filter(), array( 'bbp_deleted_reply', 'save_post' ), true ) ) {
     1020                                if ( 'bbp_deleted_reply' === current_action() ) {
    10191021                                        bbp_update_topic_reply_count(        $ancestor );
    10201022                                        bbp_update_topic_reply_count_hidden( $ancestor );
    10211023                                        bbp_update_topic_voice_count(        $ancestor );
     
    10441046
    10451047                                // Counts
    10461048                                // Only update reply count if we're deleting a reply, or in the dashboard.
    1047                                 if ( in_array( current_filter(), array( 'bbp_deleted_reply', 'save_post' ), true ) ) {
     1049                                if ( 'bbp_deleted_reply' === current_action() ) {
    10481050                                        bbp_update_forum_reply_count( $ancestor );
    10491051                                }
    10501052                        }
     
    10631065 * @param int $forum_id Optional. Forum id
    10641066 * @uses bbp_get_reply_id() To get the reply id
    10651067 * @uses bbp_get_forum_id() To get the forum id
    1066  * @uses get_post_ancestors() To get the reply's forum
     1068 * @uses get_post_ancestors() To get the reply forum
    10671069 * @uses get_post_field() To get the post type of the post
    10681070 * @uses update_post_meta() To update the reply forum id meta
    10691071 * @uses apply_filters() Calls 'bbp_update_reply_forum_id' with the forum id
     
    11121114 * @param int $topic_id Optional. Topic id
    11131115 * @uses bbp_get_reply_id() To get the reply id
    11141116 * @uses bbp_get_topic_id() To get the topic id
    1115  * @uses get_post_ancestors() To get the reply's topic
     1117 * @uses get_post_ancestors() To get the reply topic
    11161118 * @uses get_post_field() To get the post type of the post
    11171119 * @uses update_post_meta() To update the reply topic id meta
    11181120 * @uses apply_filters() Calls 'bbp_update_reply_topic_id' with the topic id
     
    11531155}
    11541156
    11551157/*
    1156  * Update the reply's meta data with its reply to id
     1158 * Update the reply meta data with its reply to id
    11571159 *
    11581160 * @since 2.4.0 bbPress (r4944)
    11591161 *
     
    13381340
    13391341        /** Topic to Move From ***************************************************/
    13401342
    1341         // Get the reply's current topic
     1343        // Get the reply current topic
    13421344        $source_topic = bbp_get_topic( $move_reply->post_parent );
    13431345
    13441346        // No topic
     
    17701772 * Return an associative array of available reply statuses
    17711773 *
    17721774 * @since 2.6.0 bbPress (r5399)
     1775 * @since 2.6.0 bbPress (rXXXX) Added $type and $keys_only parameters
    17731776 *
    1774  * @param int $reply_id   Optional. Reply id.
     1777 * @param int    $reply_id   Optional. Reply id.
     1778 * @param string $type       Optional. all|new|public|moderated
     1779 * @param bool   $keys_only  Optional. Just return array keys
    17751780 *
    17761781 * @return array
    17771782 */
    1778 function bbp_get_reply_statuses( $reply_id = 0 ) {
    1779         return apply_filters( 'bbp_get_reply_statuses', array(
    1780                 bbp_get_public_status_id()  => _x( 'Publish', 'Publish the reply',     'bbpress' ),
    1781                 bbp_get_spam_status_id()    => _x( 'Spam',    'Spam the reply',        'bbpress' ),
    1782                 bbp_get_trash_status_id()   => _x( 'Trash',   'Trash the reply',       'bbpress' ),
    1783                 bbp_get_pending_status_id() => _x( 'Pending', 'Mark reply as pending', 'bbpress' ),
    1784         ), $reply_id );
     1783function bbp_get_reply_statuses( $reply_id = 0, $type = 'all', $keys_only = false ) {
     1784        static $all_statuses = null;
     1785
     1786        // All statuses
     1787        if ( null === $all_statuses ) {
     1788                $all_statuses = array(
     1789                        bbp_get_public_status_id()  => _x( 'Open',    'Publish the reply',     'bbpress' ),
     1790                        bbp_get_spam_status_id()    => _x( 'Spam',    'Spam the reply',        'bbpress' ),
     1791                        bbp_get_trash_status_id()   => _x( 'Trash',   'Trash the reply',       'bbpress' ),
     1792                        bbp_get_pending_status_id() => _x( 'Pending', 'Mark reply as pending', 'bbpress' )
     1793                );
     1794        }
     1795
     1796        // What type of statuses do we want?
     1797        switch ( $type ) {
     1798                case 'new' :
     1799                        $statuses = array(
     1800                                'auto-draft' => '',
     1801                                'draft'      => '',
     1802                                'new'        => ''
     1803                        );
     1804                        break;
     1805                case 'all' :
     1806                        $statuses = $all_statuses;
     1807                        break;
     1808                case 'public' :
     1809                        $keys     = array( bbp_get_public_status_id() );
     1810                        $statuses = array_intersect_key( $all_statuses, array_flip( $keys ) );
     1811                        break;
     1812                case 'moderated' :
     1813                        $keys     = array( bbp_get_spam_status_id(), bbp_get_trash_status_id(), bbp_get_pending_status_id() );
     1814                        $statuses = array_intersect_key( $all_statuses, array_flip( $keys ) );
     1815                        break;
     1816        }
     1817
     1818        // Only return status keys
     1819        if ( true === $keys_only ) {
     1820                $statuses = array_keys( $statuses );
     1821        }
     1822
     1823        /**
     1824         * Filter the returned reply statuses
     1825         *
     1826         * @since 2.0.0 bbPress (r2740)
     1827         *
     1828         * @param array  $statuses Array of statuses
     1829         * @param int    $reply_id Reply ID
     1830         * @param string $type     Type of statuses
     1831         */
     1832        return (array) apply_filters( 'bbp_get_reply_statuses', $statuses, $reply_id, $type );
    17851833}
    17861834
    17871835/**
  • src/includes/replies/status.php

     
     1<?php
     2
     3/**
     4 * bbPress Reply Status Transitions
     5 *
     6 * @package bbPress
     7 * @subpackage Statuses
     8 */
     9
     10// Exit if accessed directly
     11defined( 'ABSPATH' ) || exit;
     12
     13/** Transition Reply Statuses *************************************************/
     14
     15/**
     16 * Called when transitioning a reply post status to a public status from a
     17 * draft/new status.
     18 *
     19 * @since 2.6.0 bbPress (rXXXX)
     20 *
     21 * @param string  $new_status The new post status.
     22 * @param string  $old_status The old post status.
     23 * @param WP_Post $reply      The reply post object.
     24 *
     25 * @return bool
     26 */
     27function bbp_transition_reply_status_new_public( $new_status, $old_status, $reply ) {
     28
     29        // Is the new status public?
     30        if ( ! in_array( $new_status, bbp_get_reply_statuses( $reply->ID, 'public', true ), true ) ) {
     31                return false;
     32        }
     33
     34        // Is the old status draft or new?
     35        if ( ! in_array( $old_status, bbp_get_reply_statuses( $reply->ID, 'new', true ), true ) ) {
     36                return false;
     37        }
     38
     39        $reply_id = bbp_get_reply_id( $reply->ID );
     40
     41        // Store the transitioned reply id.
     42        bbp_stash_transitioned_post_status( $reply_id, 'new_public' );
     43
     44        /**
     45         * Fires when a reply post status is transitioned to a public status from
     46         * a draft/new status.
     47         *
     48         * @since 2.6.0 bbPress (rXXXX)
     49         *
     50         * @param int $reply_id The reply id.
     51         */
     52        do_action( 'bbp_transition_reply_status_new_public', $reply_id );
     53
     54        return true;
     55}
     56
     57/**
     58 * Called when transitioning a reply post status to a moderated status from a
     59 * draft/new status.
     60 *
     61 * @since 2.6.0 bbPress (rXXXX)
     62 *
     63 * @param string  $new_status The new post status.
     64 * @param string  $old_status The old post status.
     65 * @param WP_Post $reply      The reply post object.
     66 *
     67 * @return bool
     68 */
     69function bbp_transition_reply_status_new_moderated( $new_status, $old_status, $reply ) {
     70
     71        // Is the new status moderated?
     72        if ( ! in_array( $new_status, bbp_get_reply_statuses( $reply->ID, 'moderated', true ), true ) ) {
     73                return false;
     74        }
     75
     76        // Is the old status draft or new?
     77        if ( ! in_array( $old_status, bbp_get_reply_statuses( $reply->ID, 'new', true ), true ) ) {
     78                return false;
     79        }
     80
     81        // Store the transitioned reply id.
     82        bbp_stash_transitioned_post_status( $reply->ID, 'new_moderated' );
     83
     84        /**
     85         * Fires when a reply post status is transitioned to a public status from
     86         * a draft/new status.
     87         *
     88         * @since 2.6.0 bbPress (rXXXX)
     89         *
     90         * @param int $reply_id The reply id.
     91         */
     92        do_action( 'bbp_transition_reply_status_new_moderated', $reply->ID );
     93
     94        return true;
     95}
     96
     97/**
     98 * Called when transitioning a reply post status to a public status from a
     99 * moderated status.
     100 *
     101 * @since 2.6.0 bbPress (rXXXX)
     102 *
     103 * @param string  $new_status The new post status.
     104 * @param string  $old_status The old post status.
     105 * @param WP_Post $reply      The reply post object.
     106 *
     107 * @return bool
     108 */
     109function bbp_transition_reply_status_public( $new_status, $old_status, $reply ) {
     110
     111        // Is the new status public?
     112        if ( ! in_array( $new_status, bbp_get_reply_statuses( $reply->ID, 'public', true ), true ) ) {
     113                return false;
     114        }
     115
     116        // Is the old status moderated?
     117        if ( ! in_array( $old_status, bbp_get_reply_statuses( $reply->ID, 'moderated', true ), true ) ) {
     118                return false;
     119        }
     120
     121        // Store the transitioned reply id.
     122        bbp_stash_transitioned_post_status( $reply->ID, 'public' );
     123
     124        /**
     125         * Fires when a reply post status is transitioned to a public status from
     126         * a moderated status.
     127         *
     128         * @since 2.6.0 bbPress (rXXXX)
     129         *
     130         * @param int $reply_id The reply id.
     131         */
     132        do_action( 'bbp_transition_reply_status_public', $reply->ID );
     133
     134        return true;
     135}
     136
     137/**
     138 * Called when transitioning a reply post status to a moderated status from a
     139 * public status.
     140 *
     141 * @since 2.6.0 bbPress (rXXXX)
     142 *
     143 * @param string  $new_status The new post status.
     144 * @param string  $old_status The old post status.
     145 * @param WP_Post $reply      The reply post object.
     146 *
     147 * @return bool
     148 */
     149function bbp_transition_reply_status_moderated( $new_status, $old_status, $reply ) {
     150
     151        // Is the new status moderated?
     152        if ( ! in_array( $new_status, bbp_get_reply_statuses( $reply->ID, 'moderated', true ), true ) ) {
     153                return false;
     154        }
     155
     156        // Is the old status public?
     157        if ( ! in_array( $old_status, bbp_get_reply_statuses( $reply->ID, 'public', true ), true ) ) {
     158                return false;
     159        }
     160
     161        // Store the transitioned reply id.
     162        bbp_stash_transitioned_post_status( $reply->ID, 'moderated' );
     163
     164        /**
     165         * Fires when a reply post status is transitioned to a moderated status
     166         * from a public status.
     167         *
     168         * @since 2.6.0 bbPress (rXXXX)
     169         *
     170         * @param int $reply_id The reply id.
     171         */
     172        do_action( 'bbp_transition_reply_status_moderated', $reply->ID );
     173
     174        return true;
     175}
     176
     177/**
     178 * Called after transitioning a reply post status to a public status from a
     179 * draft/new status and it's post meta has been updated.
     180 *
     181 * @since 2.6.0 bbPress (rXXXX)
     182 *
     183 * @param int $reply_id The reply id.
     184 *
     185 * @return bool
     186 */
     187function bbp_transitioned_reply_status_new_public( $reply_id = 0 ) {
     188
     189        // Bail if the reply wasn't transitioned to a new public status.
     190        if ( ! bbp_is_post_status_transitioned( $reply_id, 'new_public' ) ) {
     191                return false;
     192        }
     193
     194        /**
     195         * Fires when a reply post status is transitioned to a public status from
     196         * a draft/new status and it's post meta has been updated.
     197         *
     198         * @since 2.6.0 bbPress (rXXXX)
     199         *
     200         * @param int $reply_id The reply id.
     201         */
     202        do_action( 'bbp_transitioned_reply_status_new_public', $reply_id );
     203
     204        return true;
     205}
     206
     207/**
     208 * Called after transitioning a reply post status to a moderated status from a
     209 * draft/new status and it's post meta has been updated.
     210 *
     211 * @since 2.6.0 bbPress (rXXXX)
     212 *
     213 * @param int $reply_id The reply id.
     214 *
     215 * @return bool
     216 */
     217function bbp_transitioned_reply_status_new_moderated( $reply_id = 0 ) {
     218
     219        // Bail if the reply wasn't transitioned to a new moderated status.
     220        if ( ! bbp_is_post_status_transitioned( $reply_id, 'new_moderated' ) ) {
     221                return false;
     222        }
     223
     224        /**
     225         * Fires when a reply post status is transitioned to a moderated status
     226         * from a draft/new status and it's post meta has been updated.
     227         *
     228         * @since 2.6.0 bbPress (rXXXX)
     229         *
     230         * @param int $reply_id The reply id.
     231         */
     232        do_action( 'bbp_transitioned_reply_status_new_moderated', $reply_id );
     233
     234        return true;
     235}
     236
     237/**
     238 * Called after transitioning a reply post status to a public status from a
     239 * moderated status and it's post meta has been updated.
     240 *
     241 * @since 2.6.0 bbPress (rXXXX)
     242 *
     243 * @param int $reply_id The reply id.
     244 *
     245 * @return bool
     246 */
     247function bbp_transitioned_reply_status_public( $reply_id = 0 ) {
     248
     249        // Bail if the reply wasn't transitioned to a public status.
     250        if ( ! bbp_is_post_status_transitioned( $reply_id, 'public' ) ) {
     251                return false;
     252        }
     253
     254        /**
     255         * Fires when a reply post status is transitioned to a public status from
     256         * a public status and it's post meta has been updated.
     257         *
     258         * @since 2.6.0 bbPress (rXXXX)
     259         *
     260         * @param int $reply_id The reply id.
     261         */
     262        do_action( 'bbp_transitioned_reply_status_public', $reply_id );
     263
     264        return true;
     265}
     266
     267/**
     268 * Called after transitioning a reply post status to a moderated status from a
     269 * public status and it's post meta has been updated.
     270 *
     271 * @since 2.6.0 bbPress (rXXXX)
     272 *
     273 * @param int $reply_id The reply id.
     274 *
     275 * @return bool
     276 */
     277function bbp_transitioned_reply_status_moderated( $reply_id = 0 ) {
     278
     279        // Bail if the reply wasn't transitioned to a moderated status.
     280        if ( ! bbp_is_post_status_transitioned( $reply_id, 'moderated' ) ) {
     281                return false;
     282        }
     283
     284        /**
     285         * Fires when a reply post status is transitioned to a moderated status
     286         * from a public status and it's post meta has been updated.
     287         *
     288         * @since 2.6.0 bbPress (rXXXX)
     289         *
     290         * @param int $reply_id The reply id.
     291         */
     292        do_action( 'bbp_transitioned_reply_status_moderated', $reply_id );
     293
     294        return true;
     295}
  • src/includes/topics/functions.php

     
    20222022/** Helpers *******************************************************************/
    20232023
    20242024/**
    2025  * Return an associative array of available topic statuses
    2026  *
    2027  * @since 2.4.0 bbPress (r5059)
    2028  *
    2029  * @param int $topic_id   Optional. Topic id.
    2030  *
    2031  * @return array
    2032  */
    2033 function bbp_get_topic_statuses( $topic_id = 0 ) {
    2034         return apply_filters( 'bbp_get_topic_statuses', array(
    2035                 bbp_get_public_status_id()  => _x( 'Open',    'Open the topic',        'bbpress' ),
    2036                 bbp_get_closed_status_id()  => _x( 'Closed',  'Close the topic',       'bbpress' ),
    2037                 bbp_get_spam_status_id()    => _x( 'Spam',    'Spam the topic',        'bbpress' ),
    2038                 bbp_get_trash_status_id()   => _x( 'Trash',   'Trash the topic',       'bbpress' ),
    2039                 bbp_get_pending_status_id() => _x( 'Pending', 'Mark topic as pending', 'bbpress' ),
    2040         ), $topic_id );
    2041 }
    2042 
    2043 /**
    20442025 * Return an associative array of topic sticky types
    20452026 *
    20462027 * @since 2.4.0 bbPress (r5059)
     
    20762057        ), $topic_id );
    20772058}
    20782059
     2060/**
     2061 * Return an associative array of available topic statuses
     2062 *
     2063 * @since 2.4.0 bbPress (r5059)
     2064 * @since 2.6.0 bbPress (rXXXX) Added $type and $keys_only parameters
     2065 *
     2066 * @param int    $topic_id   Optional. Topic id.
     2067 * @param string $type       Optional. all|new|public|moderated
     2068 * @param bool   $keys_only  Optional. Just return array keys
     2069 *
     2070 * @return array
     2071 */
     2072function bbp_get_topic_statuses( $topic_id = 0, $type = 'all', $keys_only = false ) {
     2073        static $all_statuses = null;
     2074
     2075        // All statuses
     2076        if ( null === $all_statuses ) {
     2077                $all_statuses = array(
     2078                        bbp_get_public_status_id()  => _x( 'Open',    'Open the topic',        'bbpress' ),
     2079                        bbp_get_closed_status_id()  => _x( 'Closed',  'Close the topic',       'bbpress' ),
     2080                        bbp_get_spam_status_id()    => _x( 'Spam',    'Spam the topic',        'bbpress' ),
     2081                        bbp_get_trash_status_id()   => _x( 'Trash',   'Trash the topic',       'bbpress' ),
     2082                        bbp_get_pending_status_id() => _x( 'Pending', 'Mark topic as pending', 'bbpress' )
     2083                );
     2084        }
     2085
     2086        // What type of statuses do we want?
     2087        switch ( $type ) {
     2088                case 'new' :
     2089                        $statuses = array(
     2090                                'auto-draft' => '',
     2091                                'draft'      => '',
     2092                                'new'        => ''
     2093                        );
     2094                        break;
     2095                case 'all' :
     2096                        $statuses = $all_statuses;
     2097                        break;
     2098                case 'public' :
     2099                        $keys     = array( bbp_get_public_status_id(), bbp_get_closed_status_id() );
     2100                        $statuses = array_intersect_key( $all_statuses, array_flip( $keys ) );
     2101                        break;
     2102                case 'moderated' :
     2103                        $keys     = array( bbp_get_spam_status_id(), bbp_get_trash_status_id(), bbp_get_pending_status_id() );
     2104                        $statuses = array_intersect_key( $all_statuses, array_flip( $keys ) );
     2105                        break;
     2106        }
     2107
     2108        // Only return status keys
     2109        if ( true === $keys_only ) {
     2110                $statuses = array_keys( $statuses );
     2111        }
     2112
     2113        /**
     2114         * Filter the returned topic statuses
     2115         *
     2116         * @since 2.0.0 bbPress (r2740)
     2117         *
     2118         * @param array  $statuses Array of statuses
     2119         * @param int    $topic_id Topic ID
     2120         * @param string $type     Type of statuses
     2121         */
     2122        return apply_filters( 'bbp_get_topic_statuses', $statuses, $topic_id, $type );
     2123}
     2124
    20792125/** Stickies ******************************************************************/
    20802126
    20812127/**
     
    26312677 * Update counts after a topic is inserted via `bbp_insert_topic`.
    26322678 *
    26332679 * @since 2.6.0 bbPress (r6036)
     2680 * @deprecated 2.6.0 bbPress (rXXXX)
     2681 * @todo Do we completely remove, or add a deprecation notice?
    26342682 *
    26352683 * @param int $topic_id The topic id.
    26362684 * @param int $forum_id The forum id.
  • src/includes/topics/status.php

     
     1<?php
     2
     3/**
     4 * bbPress Topic Status Transitions
     5 *
     6 * @package bbPress
     7 * @subpackage Statuses
     8 */
     9
     10/** Transition Topic Statuses *************************************************/
     11
     12/**
     13 * Called when transitioning a topic post status to a public status from a
     14 * draft/new status.
     15 *
     16 * @since 2.6.0 bbPress (rXXXX)
     17 *
     18 * @param string  $new_status The new post status.
     19 * @param string  $old_status The old post status.
     20 * @param WP_Post $topic      The topic post object.
     21 *
     22 * @return bool
     23 */
     24function bbp_transition_topic_status_new_public( $new_status, $old_status, $topic ) {
     25
     26        // Is the new status public?
     27        if ( ! in_array( $new_status, bbp_get_topic_statuses( $topic->ID, 'public', true ), true ) ) {
     28                return false;
     29        }
     30
     31        // Is the old status draft or new?
     32        if ( ! in_array( $old_status, bbp_get_topic_statuses( $topic->ID, 'new', true ), true ) ) {
     33                return false;
     34        }
     35
     36        $topic_id = bbp_get_topic_id( $topic->ID );
     37
     38        // Store the transitioned topic id.
     39        bbp_stash_transitioned_post_status( $topic_id, 'new_public' );
     40
     41        /**
     42         * Fires when a topic post status is transitioned to a public status from
     43         * a draft/new status.
     44         *
     45         * @since 2.6.0 bbPress (rXXXX)
     46         *
     47         * @param int $topic_id The topic id.
     48         */
     49        do_action( 'bbp_transition_topic_status_new_public', $topic_id );
     50
     51        return true;
     52}
     53
     54/**
     55 * Called when transitioning a topic post status to a moderated status
     56 * from a draft/new status.
     57 *
     58 * @since 2.6.0 bbPress (rXXXX)
     59 *
     60 * @param string  $new_status The new post status.
     61 * @param string  $old_status The old post status.
     62 * @param WP_Post $topic      The topic post object.
     63 *
     64 * @return bool
     65 */
     66function bbp_transition_topic_status_new_moderated( $new_status, $old_status, $topic ) {
     67
     68        // Is the new status moderated?
     69        if ( ! in_array( $new_status, bbp_get_topic_statuses( $topic->ID, 'moderated', true ), true ) ) {
     70                return false;
     71        }
     72
     73        // Is the old status draft or new?
     74        if ( ! in_array( $old_status, bbp_get_topic_statuses( $topic->ID, 'new', true ), true ) ) {
     75                return false;
     76        }
     77
     78        // Store the transitioned topic id.
     79        bbp_stash_transitioned_post_status( $topic->ID, 'new_moderated' );
     80
     81        /**
     82         * Fires when a topic post status is transitioned to a moderated status
     83         * from a draft/new status.
     84         *
     85         * @since 2.6.0 bbPress (rXXXX)
     86         *
     87         * @param int $topic_id The topic id.
     88         */
     89        do_action( 'bbp_transition_topic_status_new_moderated', $topic->ID );
     90
     91        return true;
     92}
     93
     94/**
     95 * Called when transitioning a topic post status to a public status from a
     96 * moderated status.
     97 *
     98 * @since 2.6.0 bbPress (rXXXX)
     99 *
     100 * @param string  $new_status The new post status.
     101 * @param string  $old_status The old post status.
     102 * @param WP_Post $topic      The topic post object.
     103 *
     104 * @return bool
     105 */
     106function bbp_transition_topic_status_public( $new_status, $old_status, $topic ) {
     107
     108        // Is the new status public?
     109        if ( ! in_array( $new_status, bbp_get_topic_statuses( $topic->ID, 'public', true ), true ) ) {
     110                return false;
     111        }
     112
     113        // Is the old status moderated?
     114        if ( ! in_array( $old_status, bbp_get_topic_statuses( $topic->ID, 'moderated', true ), true ) ) {
     115                return false;
     116        }
     117
     118        // Store the transitioned topic id.
     119        bbp_stash_transitioned_post_status( $topic->ID, 'public' );
     120
     121        /**
     122         * Fires when a topic post status is transitioned to a public status from
     123         * a moderated status.
     124         *
     125         * @since 2.6.0 bbPress (rXXXX)
     126         *
     127         * @param int $topic_id The topic id.
     128         */
     129        do_action( 'bbp_transition_topic_status_public', $topic->ID );
     130
     131        return true;
     132}
     133
     134/**
     135 * Called when transitioning a topic post status to a moderated status from a
     136 * public status.
     137 *
     138 * @since 2.6.0 bbPress (rXXXX)
     139 *
     140 * @param string  $new_status The new post status.
     141 * @param string  $old_status The old post status.
     142 * @param WP_Post $topic      The topic post object.
     143 *
     144 * @return bool
     145 */
     146function bbp_transition_topic_status_moderated( $new_status, $old_status, $topic ) {
     147
     148        // Is the new status moderated?
     149        if ( ! in_array( $new_status, bbp_get_topic_statuses( $topic->ID, 'moderated', true ), true ) ) {
     150                return false;
     151        }
     152
     153        // Is the old status public?
     154        if ( ! in_array( $old_status, bbp_get_topic_statuses( $topic->ID, 'public', true ), true ) ) {
     155                return false;
     156        }
     157
     158        // Store the transitioned topic id.
     159        bbp_stash_transitioned_post_status( $topic->ID, 'moderated' );
     160
     161        /**
     162         * Fires when a topic post status is transitioned to a moderated status
     163         * from a public status.
     164         *
     165         * @since 2.6.0 bbPress (rXXXX)
     166         *
     167         * @param int $topic_id The topic id.
     168         */
     169        do_action( 'bbp_transition_topic_status_moderated', $topic->ID );
     170
     171        return true;
     172}
     173
     174/**
     175 * Called after transitioning a topic post status to a public status from a
     176 * draft/new status and it's post meta has been updated.
     177 *
     178 * @since 2.6.0 bbPress (rXXXX)
     179 *
     180 * @param int $topic_id The topic id.
     181 *
     182 * @return bool
     183 */
     184function bbp_transitioned_topic_status_new_public( $topic_id = 0 ) {
     185
     186        // Bail if the topic wasn't transitioned to a new public status.
     187        if ( ! bbp_is_post_status_transitioned( $topic_id, 'new_public' ) ) {
     188                return false;
     189        }
     190
     191        /**
     192         * Fires when a topic post status is transitioned to a public status from
     193         * a draft/new status and it's post meta has been updated.
     194         *
     195         * @since 2.6.0 bbPress (rXXXX)
     196         *
     197         * @param int $topic_id The topic id.
     198         */
     199        do_action( 'bbp_transitioned_topic_status_new_public', $topic_id );
     200
     201        return true;
     202}
     203
     204/**
     205 * Called after transitioning a topic post status to a moderated status from a
     206 * draft/new status and it's post meta has been updated.
     207 *
     208 * @since 2.6.0 bbPress (rXXXX)
     209 *
     210 * @param int $topic_id The topic id.
     211 *
     212 * @return bool
     213 */
     214function bbp_transitioned_topic_status_new_moderated( $topic_id = 0 ) {
     215
     216        // Bail if the topic wasn't transitioned to a new moderated status.
     217        if ( ! bbp_is_post_status_transitioned( $topic_id, 'new_moderated' ) ) {
     218                return false;
     219        }
     220
     221        /**
     222         * Fires when a topic post status is transitioned to a moderated status
     223         * from a draft/new status and it's post meta has been updated.
     224         *
     225         * @since 2.6.0 bbPress (rXXXX)
     226         *
     227         * @param int $topic_id The topic id.
     228         */
     229        do_action( 'bbp_transitioned_topic_status_new_moderated', $topic_id );
     230
     231        return true;
     232}
     233
     234/**
     235 * Called after transitioning a topic post status to a public status from a
     236 * moderated status and it's post meta has been updated.
     237 *
     238 * @since 2.6.0 bbPress (rXXXX)
     239 *
     240 * @param int $topic_id The topic id.
     241 *
     242 * @return bool
     243 */
     244function bbp_transitioned_topic_status_public( $topic_id = 0 ) {
     245
     246        // Bail if the topic wasn't transitioned to a public status.
     247        if ( ! bbp_is_post_status_transitioned( $topic_id, 'public' ) ) {
     248                return false;
     249        }
     250
     251        /**
     252         * Fires when a topic post status is transitioned to a public status from
     253         * a public status and it's post meta has been updated.
     254         *
     255         * @since 2.6.0 bbPress (rXXXX)
     256         *
     257         * @param int $topic_id The topic id.
     258         */
     259        do_action( 'bbp_transitioned_topic_status_public', $topic_id );
     260
     261        return true;
     262}
     263
     264/**
     265 * Called after transitioning a topic post status to a moderated status from a
     266 * public status and it's post meta has been updated.
     267 *
     268 * @since 2.6.0 bbPress (rXXXX)
     269 *
     270 * @param int $topic_id The topic id.
     271 *
     272 * @return bool
     273 */
     274function bbp_transitioned_topic_status_moderated( $topic_id = 0 ) {
     275
     276        // Bail if the topic wasn't transitioned to a moderated status.
     277        if ( ! bbp_is_post_status_transitioned( $topic_id, 'moderated' ) ) {
     278                return false;
     279        }
     280
     281        /**
     282         * Fires when a topic post status is transitioned to a moderated status
     283         * from a public status and it's post meta has been updated.
     284         *
     285         * @since 2.6.0 bbPress (rXXXX)
     286         *
     287         * @param int $topic_id The topic id.
     288         */
     289        do_action( 'bbp_transitioned_topic_status_moderated', $topic_id );
     290
     291        return true;
     292}
  • src/includes/topics/template.php

     
    11671167        }
    11681168
    11691169/**
    1170  * Return array of public topic statuses.
    1171  *
    1172  * @since 2.6.0 bbPress (r6383)
    1173  *
    1174  * @uses bbp_get_public_status_id()
    1175  * @uses bbp_get_closed_status_id()
    1176  *
    1177  * @return array
    1178  */
    1179 function bbp_get_public_topic_statuses() {
    1180         $statuses = array( bbp_get_public_status_id(), bbp_get_closed_status_id() );
    1181 
    1182         return (array) apply_filters( 'bbp_get_public_topic_statuses', $statuses );
    1183 }
    1184 
    1185 /**
    11861170 * Is the topic closed to new replies?
    11871171 *
    11881172 * @since 2.0.0 bbPress (r2746)
     
    12301214function bbp_is_topic_public( $topic_id = 0 ) {
    12311215        $topic_id  = bbp_get_topic_id( $topic_id );
    12321216        $status    = bbp_get_topic_status( $topic_id );
    1233         $public    = bbp_get_public_topic_statuses();
     1217        $public    = bbp_get_topic_statuses( null, 'public', true );
    12341218        $is_public = in_array( $status, $public, true );
    12351219
    12361220        return (bool) apply_filters( 'bbp_is_topic_public', (bool) $is_public, $topic_id );
  • src/templates/default/bbpress/form-forum.php

     
    118118                                        <?php do_action( 'bbp_theme_before_forum_form_status' ); ?>
    119119
    120120                                        <p>
    121                                                 <label for="bbp_forum_status"><?php esc_html_e( 'Status:', 'bbpress' ); ?></label><br />
    122                                                 <?php bbp_form_forum_status_dropdown(); ?>
     121                                                <label for="bbp_forum_status"><?php esc_html_e( 'Lock:', 'bbpress' ); ?></label><br />
     122                                                <?php bbp_form_forum_lock_dropdown(); ?>
    123123                                        </p>
    124124
    125125                                        <?php do_action( 'bbp_theme_after_forum_form_status' ); ?>
  • src/templates/default/bbpress/form-topic-merge.php

     
    5252                                                                                bbp_dropdown( array(
    5353                                                                                        'post_type'   => bbp_get_topic_post_type(),
    5454                                                                                        'post_parent' => bbp_get_topic_forum_id( bbp_get_topic_id() ),
    55                                                                                         'post_status' => bbp_get_public_topic_statuses(),
     55                                                                                        'post_status' => bbp_get_topic_statuses( null, 'public', true ),
    5656                                                                                        'selected'    => -1,
    5757                                                                                        'exclude'     => bbp_get_topic_id(),
    5858                                                                                        'select_id'   => 'bbp_destination_topic'
  • src/templates/default/bbpress/form-topic-split.php

     
    5959                                                                                bbp_dropdown( array(
    6060                                                                                        'post_type'   => bbp_get_topic_post_type(),
    6161                                                                                        'post_parent' => bbp_get_topic_forum_id( bbp_get_topic_id() ),
    62                                                                                         'post_status' => bbp_get_public_topic_statuses(),
     62                                                                                        'post_status' => bbp_get_topic_statuses( null, 'public', true ),
    6363                                                                                        'selected'    => -1,
    6464                                                                                        'exclude'     => bbp_get_topic_id(),
    6565                                                                                        'select_id'   => 'bbp_destination_topic'
  • tests/phpunit/testcases/common/functions.php

     
    12211221                        'This test has not been implemented yet.'
    12221222                );
    12231223        }
     1224
     1225        /**
     1226         * @covers ::bbp_stash_transitioned_post_status
     1227         */
     1228        public function test_bbp_stash_transitioned_post_status() {
     1229                $bbp = bbpress();
     1230
     1231                // Reset transitioned posts.
     1232                $bbp->transitioned_posts = array();
     1233
     1234                bbp_stash_transitioned_post_status( 1, 'new' );
     1235                $this->assertArrayHasKey( 1, $bbp->transitioned_posts );
     1236
     1237                bbp_stash_transitioned_post_status( 2, 'moderated' );
     1238                $this->assertArrayHasKey( 1, $bbp->transitioned_posts );
     1239                $this->assertArrayHasKey( 2, $bbp->transitioned_posts );
     1240        }
     1241
     1242        /**
     1243         * @covers ::bbp_get_transitioned_post_status
     1244         */
     1245        public function test_bbp_get_transitioned_post_status() {
     1246
     1247                // Reset transitioned posts.
     1248                bbpress()->transitioned_posts = array();
     1249
     1250                bbp_stash_transitioned_post_status( 1, 'new_public' );
     1251
     1252                $status = bbp_get_transitioned_post_status( 1 );
     1253                $this->assertEquals( 'new_public', $status );
     1254        }
     1255
     1256        /**
     1257         * @covers ::bbp_is_post_transitioned_new_public
     1258         */
     1259        public function test_bbp_is_post_transitioned_new_public() {
     1260
     1261                // Reset transitioned posts.
     1262                bbpress()->transitioned_posts = array();
     1263
     1264                bbp_stash_transitioned_post_status( 1, 'new_public' );
     1265                $this->assertTrue( bbp_is_post_status_transitioned( 1, 'new_public' ) );
     1266
     1267                bbp_stash_transitioned_post_status( 2, 'moderated' );
     1268                $this->assertFalse( bbp_is_post_status_transitioned( 2, 'new_public' ) );
     1269        }
     1270
     1271        /**
     1272         * @covers ::bbp_is_post_transitioned_new_moderated
     1273         */
     1274        public function test_bbp_is_post_transitioned_new_moderated() {
     1275
     1276                // Reset transitioned posts.
     1277                bbpress()->transitioned_posts = array();
     1278
     1279                bbp_stash_transitioned_post_status( 1, 'new_moderated' );
     1280                $this->assertTrue( bbp_is_post_status_transitioned( 1, 'new_moderated' ) );
     1281
     1282                bbp_stash_transitioned_post_status( 2, 'moderated' );
     1283                $this->assertFalse( bbp_is_post_status_transitioned( 2, 'new_moderated' ) );
     1284        }
     1285
     1286        /**
     1287         * @covers ::bbp_is_post_transitioned_public
     1288         */
     1289        public function test_bbp_is_post_transitioned_public() {
     1290
     1291                // Reset transitioned posts.
     1292                bbpress()->transitioned_posts = array();
     1293
     1294                bbp_stash_transitioned_post_status( 1, 'public' );
     1295                $this->assertTrue( bbp_is_post_status_transitioned( 1, 'public' ) );
     1296
     1297                bbp_stash_transitioned_post_status( 2, 'moderated' );
     1298                $this->assertFalse( bbp_is_post_status_transitioned( 2, 'public' ) );
     1299        }
     1300
     1301        /**
     1302         * @covers ::bbp_is_post_transitioned_moderated
     1303         */
     1304        public function test_bbp_is_post_transitioned_moderated() {
     1305
     1306                // Reset transitioned posts.
     1307                bbpress()->transitioned_posts = array();
     1308
     1309                bbp_stash_transitioned_post_status( 1, 'moderated' );
     1310                $this->assertTrue( bbp_is_post_status_transitioned( 1, 'moderated' ) );
     1311
     1312                bbp_stash_transitioned_post_status( 2, 'new' );
     1313                $this->assertFalse( bbp_is_post_status_transitioned( 2, 'moderated' ) );
     1314        }
    12241315}
  • tests/phpunit/testcases/forums/functions/counts.php

     
    1313         * Generic function to test the forum counts with a new topic
    1414         */
    1515        public function test_bbp_forum_new_topic_counts() {
    16                 remove_action( 'bbp_insert_topic', 'bbp_insert_topic_update_counts', 10 );
    1716
     17                // Remove the transitioned new action so we can simulate a new topic.
     18                remove_action( 'bbp_insert_topic', 'bbp_transitioned_topic_status_new' );
     19
    1820                $f = $this->factory->forum->create();
    1921                $t1 = $this->factory->topic->create( array(
    2022                        'post_parent' => $f,
     
    2527                ) );
    2628                $u = $this->factory->user->create();
    2729
    28                 // Don't attempt to send an email. This is for speed and PHP errors.
    29                 remove_action( 'bbp_new_topic', 'bbp_notify_forum_subscribers', 11, 4 );
     30                // Simulate the 'bbp_transitioned_topic_status_new' action.
     31                do_action( 'bbp_transitioned_topic_status_new', $t1 );
    3032
    31                 // Simulate the 'bbp_new_topic' action.
    32                 do_action( 'bbp_new_topic', $t1, $f, false, bbp_get_current_user_id(), $t1 );
    33 
    3433                $count = bbp_get_forum_topic_count( $f, true, true );
    3534                $this->assertSame( 1, $count );
    3635
     
    4544                        ),
    4645                ) );
    4746
    48                 // Simulate the 'bbp_new_topic' action.
    49                 do_action( 'bbp_new_topic', $t2, $f, false, $u , $t2 );
     47                // Simulate the 'bbp_transitioned_topic_status_new' action.
     48                do_action( 'bbp_transitioned_topic_status_new', $t2 );
    5049
    5150                $count = bbp_get_forum_topic_count( $f, true, true );
    5251                $this->assertSame( 2, $count );
     
    5453                $count = bbp_get_forum_topic_count_hidden( $f, true, true );
    5554                $this->assertSame( 0, $count );
    5655
    57                 // Re-add removed actions.
    58                 add_action( 'bbp_insert_topic', 'bbp_insert_topic_update_counts', 10, 2 );
    59                 add_action( 'bbp_new_topic',    'bbp_notify_forum_subscribers',   11, 4 );
     56                // Re-add the transitioned new action.
     57                add_action( 'bbp_insert_topic', 'bbp_transitioned_topic_status_new' );
    6058        }
    6159
    6260        /**
  • tests/phpunit/testcases/forums/functions/status.php

     
    107107                        'This test has not been implemented yet.'
    108108                );
    109109        }
     110
     111        /**
     112         * @covers ::bbp_transition_forum_status_new_public
     113         */
     114        public function test_bbp_transition_forum_status_new_public() {
     115                $f = $this->factory->forum->create();
     116
     117                $result = bbp_transition_forum_status_new_public(
     118                        bbp_get_public_status_id(),
     119                        'new',
     120                        bbp_get_forum( $f )
     121                );
     122
     123                // A true result means the action was added, as failures return false.
     124                $this->assertTrue( $result );
     125
     126                $this->assertEquals( 'new_public', bbp_get_transitioned_post_status( $f ) );
     127        }
     128
     129        /**
     130         * @covers ::bbp_transition_forum_status_new_moderated
     131         */
     132        public function test_bbp_transition_forum_status_new_moderated() {
     133                $f = $this->factory->forum->create();
     134
     135                $result = bbp_transition_forum_status_new_moderated(
     136                        bbp_get_trash_status_id(),
     137                        'new',
     138                        bbp_get_forum( $f )
     139                );
     140
     141                // A true result means the action was added, as failures return false.
     142                $this->assertTrue( $result );
     143
     144                $this->assertEquals( 'new_moderated', bbp_get_transitioned_post_status( $f ) );
     145        }
     146
     147        /**
     148         * @covers ::bbp_transition_forum_status_public
     149         */
     150        public function test_bbp_transition_forum_status_public() {
     151                $f = $this->factory->forum->create();
     152
     153                $result = bbp_transition_forum_status_public(
     154                        bbp_get_public_status_id(),
     155                        bbp_get_trash_status_id(),
     156                        bbp_get_forum( $f )
     157                );
     158
     159                // A true result means the action was added, as failures return false.
     160                $this->assertTrue( $result );
     161
     162                $this->assertEquals( 'public', bbp_get_transitioned_post_status( $f ) );
     163        }
     164
     165        /**
     166         * @covers ::bbp_transition_forum_status_moderated
     167         */
     168        public function test_bbp_transition_forum_status_moderated() {
     169                $f = $this->factory->forum->create();
     170
     171                $result = bbp_transition_forum_status_moderated(
     172                        bbp_get_trash_status_id(),
     173                        bbp_get_public_status_id(),
     174                        bbp_get_forum( $f )
     175                );
     176
     177                // A true result means the action was added, as failures return false.
     178                $this->assertTrue( $result );
     179
     180                $this->assertEquals( 'moderated', bbp_get_transitioned_post_status( $f ) );
     181        }
     182
     183        /**
     184         * @covers ::bbp_transitioned_forum_status_new_public
     185         */
     186        public function test_bbp_transitioned_forum_status_new_public() {
     187                $f = $this->factory->forum->create();
     188
     189                $result = bbp_transitioned_forum_status_new_public( $f );
     190
     191                // A true result means the action was added, as failures return false.
     192                $this->assertTrue( $result );
     193        }
     194
     195        /**
     196         * @covers ::bbp_transitioned_forum_status_new_moderated
     197         */
     198        public function test_bbp_transitioned_forum_status_new_moderated() {
     199                $f = $this->factory->forum->create( array(
     200                        'post_status' => bbp_get_trash_status_id(),
     201                ) );
     202
     203                $result = bbp_transitioned_forum_status_new_moderated( $f );
     204
     205                // A true result means the action was added, as failures return false.
     206                $this->assertTrue( $result );
     207        }
     208
     209        /**
     210         * @covers ::bbp_transitioned_forum_status_public
     211         */
     212        public function test_bbp_transitioned_forum_status_public() {
     213                $f = $this->factory->forum->create();
     214
     215                wp_trash_post( $f );
     216                wp_untrash_post( $f );
     217
     218                $result = bbp_transitioned_forum_status_public( $f );
     219
     220                // A true result means the action was added, as failures return false.
     221                $this->assertTrue( $result );
     222        }
     223
     224        /**
     225         * @covers ::bbp_transitioned_forum_status_moderated
     226         */
     227        public function test_bbp_transitioned_forum_status_moderated() {
     228                $f = $this->factory->forum->create();
     229
     230                wp_trash_post( $f );
     231
     232                $result = bbp_transitioned_forum_status_moderated( $f );
     233
     234                // A true result means the action was added, as failures return false.
     235                $this->assertTrue( $result );
     236        }
    110237}
  • tests/phpunit/testcases/forums/template/forms.php

     
    101101        }
    102102
    103103        /**
    104          * @covers ::bbp_form_forum_status_dropdown
    105          * @covers ::bbp_get_form_forum_status_dropdown
    106          * @todo   Implement test_bbp_form_forum_status_dropdown().
    107          * @todo   Implement test_bbp_get_form_forum_status_dropdown().
     104         * @covers ::bbp_form_forum_lock_dropdown
     105         * @covers ::bbp_get_form_forum_lock_dropdown
     106         * @todo   Implement test_bbp_form_forum_lock_dropdown().
     107         * @todo   Implement test_bbp_get_form_forum_lock_dropdown().
    108108         */
    109         public function test_bbp_get_form_forum_status_dropdown() {
     109        public function test_bbp_get_form_forum_lock_dropdown() {
    110110                // Remove the following lines when you implement this test.
    111111                $this->markTestIncomplete(
    112112                        'This test has not been implemented yet.'
  • tests/phpunit/testcases/forums/template/status.php

     
    2424        }
    2525
    2626        /**
     27         * @covers ::bbp_get_forum_statuses
     28         */
     29        public function test_bbp_get_forum_statuses() {
     30
     31                // New
     32                $actual   = bbp_get_forum_statuses( null, 'new', true );
     33                $expected = array( 'auto-draft', 'draft', 'new' );
     34                $this->assertEquals( $expected, $actual );
     35
     36                // Public
     37                $actual   = bbp_get_forum_statuses( null, 'public', true );
     38                $expected = array( bbp_get_public_status_id(), bbp_get_closed_status_id() );
     39                $this->assertEquals( $expected, $actual );
     40
     41                // Moderated
     42                $actual   = bbp_get_forum_statuses( null, 'moderated', true );
     43                $expected = array(
     44                        bbp_get_spam_status_id(),
     45                        bbp_get_trash_status_id(),
     46                        bbp_get_pending_status_id(),
     47                );
     48                $this->assertEquals( $expected, $actual );
     49        }
     50
     51        /**
    2752         * @covers ::bbp_forum_type
    2853         * @covers ::bbp_get_forum_type
    2954         */
  • tests/phpunit/testcases/replies/functions/status.php

     
    213213                $topic_reply_count = bbp_get_topic_reply_count( $t );
    214214                $this->assertSame( '1', $topic_reply_count );
    215215        }
     216
     217        /**
     218         * @covers ::bbp_transition_reply_status_new_public
     219         */
     220        public function test_bbp_transition_reply_status_new_public() {
     221                $f = $this->factory->forum->create();
     222                $t = $this->factory->topic->create( array(
     223                        'post_parent' => $f,
     224                        'topic_meta'  => array(
     225                                'forum_id' => $f,
     226                        ),
     227                ) );
     228                $r = $this->factory->reply->create( array(
     229                        'post_parent' => $t,
     230                        'reply_meta'  => array(
     231                                'forum_id' => $f,
     232                                'topic_id' => $t,
     233                        ),
     234                ) );
     235
     236                $result = bbp_transition_reply_status_new_public(
     237                        bbp_get_public_status_id(),
     238                        'new',
     239                        bbp_get_reply( $r )
     240                );
     241
     242                // A true result means the action was added, as failures return false.
     243                $this->assertTrue( $result );
     244
     245                $this->assertEquals( 'new_public', bbp_get_transitioned_post_status( $r ) );
     246        }
     247
     248        /**
     249         * @covers ::bbp_transition_reply_status_new_moderated
     250         */
     251        public function test_bbp_transition_reply_status_new_moderated() {
     252                $f = $this->factory->forum->create();
     253                $t = $this->factory->topic->create( array(
     254                        'post_parent' => $f,
     255                        'topic_meta'  => array(
     256                                'forum_id' => $f,
     257                        ),
     258                ) );
     259                $r = $this->factory->reply->create( array(
     260                        'post_parent' => $t,
     261                        'reply_meta'  => array(
     262                                'forum_id' => $f,
     263                                'topic_id' => $t,
     264                        ),
     265                ) );
     266
     267                $result = bbp_transition_reply_status_new_moderated(
     268                        bbp_get_pending_status_id(),
     269                        'new',
     270                        bbp_get_reply( $r )
     271                );
     272
     273                // A true result means the action was added, as failures return false.
     274                $this->assertTrue( $result );
     275
     276                $this->assertEquals( 'new_moderated', bbp_get_transitioned_post_status( $r ) );
     277        }
     278
     279        /**
     280         * @covers ::bbp_transition_reply_status_public
     281         */
     282        public function test_bbp_transition_reply_status_public() {
     283                $f = $this->factory->forum->create();
     284                $t = $this->factory->topic->create( array(
     285                        'post_parent' => $f,
     286                        'topic_meta'  => array(
     287                                'forum_id' => $f,
     288                        ),
     289                ) );
     290                $r = $this->factory->reply->create( array(
     291                        'post_parent' => $t,
     292                        'reply_meta'  => array(
     293                                'forum_id' => $f,
     294                                'topic_id' => $t,
     295                        ),
     296                ) );
     297
     298                $result = bbp_transition_reply_status_public(
     299                        bbp_get_public_status_id(),
     300                        bbp_get_pending_status_id(),
     301                        bbp_get_reply( $r )
     302                );
     303
     304                // A true result means the action was added, as failures return false.
     305                $this->assertTrue( $result );
     306
     307                $this->assertEquals( 'public', bbp_get_transitioned_post_status( $r ) );
     308        }
     309
     310        /**
     311         * @covers ::bbp_transition_reply_status_moderated
     312         */
     313        public function test_bbp_transition_reply_status_moderated() {
     314                $f = $this->factory->forum->create();
     315                $t = $this->factory->topic->create( array(
     316                        'post_parent' => $f,
     317                        'topic_meta'  => array(
     318                                'forum_id' => $f,
     319                        ),
     320                ) );
     321                $r = $this->factory->reply->create( array(
     322                        'post_parent' => $t,
     323                        'reply_meta'  => array(
     324                                'forum_id' => $f,
     325                                'topic_id' => $t,
     326                        ),
     327                ) );
     328
     329                $result = bbp_transition_reply_status_moderated(
     330                        bbp_get_pending_status_id(),
     331                        bbp_get_public_status_id(),
     332                        bbp_get_reply( $r )
     333                );
     334
     335                // A true result means the action was added, as failures return false.
     336                $this->assertTrue( $result );
     337
     338                $this->assertEquals( 'moderated', bbp_get_transitioned_post_status( $r ) );
     339        }
     340
     341        /**
     342         * @covers ::bbp_transitioned_reply_status_new_public
     343         */
     344        public function test_bbp_transitioned_reply_status_new_public() {
     345                $f = $this->factory->forum->create();
     346                $t = $this->factory->topic->create( array(
     347                        'post_parent' => $f,
     348                        'topic_meta'  => array(
     349                                'forum_id' => $f,
     350                        ),
     351                ) );
     352                $r = $this->factory->reply->create( array(
     353                        'post_parent' => $t,
     354                        'reply_meta'  => array(
     355                                'forum_id' => $f,
     356                                'topic_id' => $t,
     357                        ),
     358                ) );
     359
     360                $result = bbp_transitioned_reply_status_new_public( $r );
     361
     362                // A true result means the action was added, as failures return false.
     363                $this->assertTrue( $result );
     364        }
     365
     366        /**
     367         * @covers ::bbp_transitioned_reply_status_new_moderated
     368         */
     369        public function test_bbp_transitioned_reply_status_new_moderated() {
     370                $f = $this->factory->forum->create();
     371                $t = $this->factory->topic->create( array(
     372                        'post_parent' => $f,
     373                        'topic_meta'  => array(
     374                                'forum_id' => $f,
     375                        ),
     376                ) );
     377                $r = $this->factory->reply->create( array(
     378                        'post_parent' => $t,
     379                        'post_status' => bbp_get_pending_status_id(),
     380                        'reply_meta'  => array(
     381                                'forum_id' => $f,
     382                                'topic_id' => $t,
     383                        ),
     384                ) );
     385
     386                $result = bbp_transitioned_reply_status_new_moderated( $r );
     387
     388                // A true result means the action was added, as failures return false.
     389                $this->assertTrue( $result );
     390        }
     391
     392        /**
     393         * @covers ::bbp_transitioned_reply_status_public
     394         */
     395        public function test_bbp_transitioned_reply_status_public() {
     396                $f = $this->factory->forum->create();
     397                $t = $this->factory->topic->create( array(
     398                        'post_parent' => $f,
     399                        'topic_meta'  => array(
     400                                'forum_id' => $f,
     401                        ),
     402                ) );
     403                $r = $this->factory->reply->create( array(
     404                        'post_parent' => $t,
     405                        'post_status' => bbp_get_pending_status_id(),
     406                        'reply_meta'  => array(
     407                                'forum_id' => $f,
     408                                'topic_id' => $t,
     409                        ),
     410                ) );
     411
     412                bbp_approve_reply( $r );
     413
     414                $result = bbp_transitioned_reply_status_public( $r );
     415
     416                // A true result means the action was added, as failures return false.
     417                $this->assertTrue( $result );
     418        }
     419
     420        /**
     421         * @covers ::bbp_transitioned_reply_status_moderated
     422         */
     423        public function test_bbp_transitioned_reply_status_moderated() {
     424                $f = $this->factory->forum->create();
     425                $t = $this->factory->topic->create( array(
     426                        'post_parent' => $f,
     427                        'topic_meta'  => array(
     428                                'forum_id' => $f,
     429                        ),
     430                ) );
     431                $r = $this->factory->reply->create( array(
     432                        'post_parent' => $t,
     433                        'reply_meta'  => array(
     434                                'forum_id' => $f,
     435                                'topic_id' => $t,
     436                        ),
     437                ) );
     438
     439                bbp_unapprove_reply( $r );
     440
     441                $result = bbp_transitioned_reply_status_moderated( $r );
     442
     443                // A true result means the action was added, as failures return false.
     444                $this->assertTrue( $result );
     445        }
    216446}
  • tests/phpunit/testcases/replies/template/status.php

     
    3737        }
    3838
    3939        /**
     40         * @covers ::bbp_get_reply_statuses
     41         */
     42        public function test_bbp_get_reply_statuses() {
     43
     44                // New
     45                $actual   = bbp_get_reply_statuses( null, 'new', true );
     46                $expected = array( 'auto-draft', 'draft', 'new' );
     47                $this->assertEquals( $expected, $actual );
     48
     49                // Public
     50                $actual   = bbp_get_reply_statuses( null, 'public', true );
     51                $expected = array( bbp_get_public_status_id() );
     52                $this->assertEquals( $expected, $actual );
     53
     54                // Moderated
     55                $actual   = bbp_get_reply_statuses( null, 'moderated', true );
     56                $expected = array(
     57                        bbp_get_spam_status_id(),
     58                        bbp_get_trash_status_id(),
     59                        bbp_get_pending_status_id(),
     60                );
     61                $this->assertEquals( $expected, $actual );
     62        }
     63
     64        /**
    4065         * @covers ::bbp_is_reply_published
    4166         */
    4267        public function test_bbp_is_reply_published() {
  • tests/phpunit/testcases/topics/functions/counts.php

     
    1313         * Generic function to test the topics counts with a new reply
    1414         */
    1515        public function test_bbp_topic_new_reply_counts() {
    16                 remove_action( 'bbp_insert_reply', 'bbp_insert_reply_update_counts', 10 );
    1716
     17                // Remove the transitioned new action so we can simulate a new reply.
     18                remove_action( 'bbp_insert_reply', 'bbp_transitioned_reply_status_new' );
     19
    1820                $u  = $this->factory->user->create();
    1921                $u2 = $this->factory->user->create();
    2022                $f  = $this->factory->forum->create();
     
    3436                        ),
    3537                ) );
    3638
    37                 // Don't attempt to send an email. This is for speed and PHP errors.
    38                 remove_action( 'bbp_new_reply', 'bbp_notify_topic_subscribers', 11, 5 );
     39                // Simulate the 'bbp_transitioned_reply_status_new' action.
     40                do_action( 'bbp_transitioned_reply_status_new', $r1 );
    3941
    40                 // Simulate the 'bbp_new_reply' action.
    41                 do_action( 'bbp_new_reply', $r1, $t, $f, false, bbp_get_current_user_id() );
    42 
    4342                $count = bbp_get_topic_reply_count( $t, true );
    4443                $this->assertSame( 1, $count );
    4544
     
    5857                        ),
    5958                ) );
    6059
    61                 // Simulate the 'bbp_new_topic' action.
    62                 do_action( 'bbp_new_reply', $r2, $t, $f, false, $u2 );
     60                // Simulate the 'bbp_transitioned_reply_status_new' action.
     61                do_action( 'bbp_transitioned_reply_status_new', $r2 );
    6362
    6463                $count = bbp_get_topic_reply_count( $t, true );
    6564                $this->assertSame( 2, $count );
     
    7069                $count = bbp_get_topic_voice_count( $t, true );
    7170                $this->assertSame( 2, $count );
    7271
    73                 // Re-add removed actions.
    74                 add_action( 'bbp_insert_reply', 'bbp_insert_reply_update_counts', 10, 2 );
    75                 add_action( 'bbp_new_reply',    'bbp_notify_topic_subscribers',   11, 5 );
     72                // Re-add the transitioned new action.
     73                add_action( 'bbp_insert_reply', 'bbp_transitioned_reply_status_new' );
    7674        }
    7775
    7876        /**
  • tests/phpunit/testcases/topics/functions/status.php

     
    419419                        'This test has not been implemented yet.'
    420420                );
    421421        }
     422
     423        /**
     424         * @covers ::bbp_transition_topic_status_new_public
     425         */
     426        public function test_bbp_transition_topic_status_new_public() {
     427                $f = $this->factory->forum->create();
     428                $t = $this->factory->topic->create( array(
     429                        'post_parent' => $f,
     430                        'topic_meta'  => array(
     431                                'forum_id' => $f,
     432                        ),
     433                ) );
     434
     435                $result = bbp_transition_topic_status_new_public(
     436                        bbp_get_public_status_id(),
     437                        'new',
     438                        bbp_get_topic( $t )
     439                );
     440
     441                // A true result means the action was added, as failures return false.
     442                $this->assertTrue( $result );
     443
     444                $this->assertEquals( 'new_public', bbp_get_transitioned_post_status( $t ) );
     445        }
     446
     447        /**
     448         * @covers ::bbp_transition_topic_status_new_moderated
     449         */
     450        public function test_bbp_transition_topic_status_new_moderated() {
     451                $f = $this->factory->forum->create();
     452                $t = $this->factory->topic->create( array(
     453                        'post_parent' => $f,
     454                        'topic_meta'  => array(
     455                                'forum_id' => $f,
     456                        ),
     457                ) );
     458
     459                $result = bbp_transition_topic_status_new_moderated(
     460                        bbp_get_pending_status_id(),
     461                        'new',
     462                        bbp_get_topic( $t )
     463                );
     464
     465                // A true result means the action was added, as failures return false.
     466                $this->assertTrue( $result );
     467
     468                $this->assertEquals( 'new_moderated', bbp_get_transitioned_post_status( $t ) );
     469        }
     470
     471        /**
     472         * @covers ::bbp_transition_topic_status_public
     473         */
     474        public function test_bbp_transition_topic_status_public() {
     475                $f = $this->factory->forum->create();
     476                $t = $this->factory->topic->create( array(
     477                        'post_parent' => $f,
     478                        'topic_meta'  => array(
     479                                'forum_id' => $f,
     480                        ),
     481                ) );
     482
     483                $result = bbp_transition_topic_status_public(
     484                        bbp_get_public_status_id(),
     485                        bbp_get_pending_status_id(),
     486                        bbp_get_topic( $t )
     487                );
     488
     489                // A true result means the action was added, as failures return false.
     490                $this->assertTrue( $result );
     491
     492                $this->assertEquals( 'public', bbp_get_transitioned_post_status( $t ) );
     493        }
     494
     495        /**
     496         * @covers ::bbp_transition_topic_status_moderated
     497         */
     498        public function test_bbp_transition_topic_status_moderated() {
     499                $f = $this->factory->forum->create();
     500                $t = $this->factory->topic->create( array(
     501                        'post_parent' => $f,
     502                        'topic_meta'  => array(
     503                                'forum_id' => $f,
     504                        ),
     505                ) );
     506
     507                $result = bbp_transition_topic_status_moderated(
     508                        bbp_get_pending_status_id(),
     509                        bbp_get_public_status_id(),
     510                        bbp_get_topic( $t )
     511                );
     512
     513                // A true result means the action was added, as failures return false.
     514                $this->assertTrue( $result );
     515
     516                $this->assertEquals( 'moderated', bbp_get_transitioned_post_status( $t ) );
     517        }
     518
     519        /**
     520         * @covers ::bbp_transitioned_topic_status_new_public
     521         */
     522        public function test_bbp_transitioned_topic_status_new_public() {
     523                $f = $this->factory->forum->create();
     524                $t = $this->factory->topic->create( array(
     525                        'post_parent' => $f,
     526                        'topic_meta'  => array(
     527                                'forum_id' => $f,
     528                        ),
     529                ) );
     530
     531                $result = bbp_transitioned_topic_status_new_public( $t );
     532
     533                // A true result means the action was added, as failures return false.
     534                $this->assertTrue( $result );
     535        }
     536
     537        /**
     538         * @covers ::bbp_transitioned_topic_status_new_moderated
     539         */
     540        public function test_bbp_transitioned_topic_status_new_moderated() {
     541                $f = $this->factory->forum->create();
     542                $t = $this->factory->topic->create( array(
     543                        'post_parent' => $f,
     544                        'post_status' => bbp_get_pending_status_id(),
     545                        'topic_meta'  => array(
     546                                'forum_id' => $f,
     547                        ),
     548                ) );
     549
     550                $result = bbp_transitioned_topic_status_new_moderated( $t );
     551
     552                // A true result means the action was added, as failures return false.
     553                $this->assertTrue( $result );
     554        }
     555
     556        /**
     557         * @covers ::bbp_transitioned_topic_status_public
     558         */
     559        public function test_bbp_transitioned_topic_status_public() {
     560                $f = $this->factory->forum->create();
     561                $t = $this->factory->topic->create( array(
     562                        'post_parent' => $f,
     563                        'post_status' => bbp_get_pending_status_id(),
     564                        'topic_meta'  => array(
     565                                'forum_id' => $f,
     566                        ),
     567                ) );
     568
     569                bbp_approve_topic( $t );
     570
     571                $result = bbp_transitioned_topic_status_public( $t );
     572
     573                // A true result means the action was added, as failures return false.
     574                $this->assertTrue( $result );
     575        }
     576
     577        /**
     578         * @covers ::bbp_transitioned_topic_status_moderated
     579         */
     580        public function test_bbp_transitioned_topic_status_moderated() {
     581                $f = $this->factory->forum->create();
     582                $t = $this->factory->topic->create( array(
     583                        'post_parent' => $f,
     584                        'topic_meta'  => array(
     585                                'forum_id' => $f,
     586                        ),
     587                ) );
     588
     589                bbp_unapprove_topic( $t );
     590
     591                $result = bbp_transitioned_topic_status_moderated( $t );
     592
     593                // A true result means the action was added, as failures return false.
     594                $this->assertTrue( $result );
     595        }
    422596}
  • tests/phpunit/testcases/topics/template/status.php

     
    5454        }
    5555
    5656        /**
     57         * @covers ::bbp_get_topic_statuses
     58         */
     59        public function test_bbp_get_topic_statuses() {
     60
     61                // New
     62                $actual   = bbp_get_topic_statuses( null, 'new', true );
     63                $expected = array( 'auto-draft', 'draft', 'new' );
     64                $this->assertEquals( $expected, $actual );
     65
     66                // Public
     67                $actual   = bbp_get_topic_statuses( null, 'public', true );
     68                $expected = array( bbp_get_public_status_id(), bbp_get_closed_status_id() );
     69                $this->assertEquals( $expected, $actual );
     70
     71                // Moderated
     72                $actual   = bbp_get_topic_statuses( null, 'moderated', true );
     73                $expected = array(
     74                        bbp_get_spam_status_id(),
     75                        bbp_get_trash_status_id(),
     76                        bbp_get_pending_status_id(),
     77                );
     78                $this->assertEquals( $expected, $actual );
     79        }
     80
     81        /**
    5782         * @covers ::bbp_is_topic_closed
    5883         * @todo   Implement test_bbp_is_topic_closed().
    5984         */
  • tests/phpunit/testcases/users/functions/counts.php

     
    266266         * @covers ::bbp_increase_user_topic_count
    267267         */
    268268        public function test_bbp_increase_user_topic_count() {
     269
     270                // Remove the transitioned new action so we manually manipulate counts.
     271                remove_action( 'bbp_insert_topic', 'bbp_transitioned_topic_status_new_public', 20 );
     272
    269273                $u = $this->factory->user->create();
    270274                $int_value = 3;
    271275                $integer = true;
     
    283287
    284288                $count = bbp_get_user_topic_count( $u, $integer );
    285289                $this->assertSame( $int_value + 1, $count );
     290
     291                // Re-add the transitioned new action.
     292                add_action( 'bbp_insert_topic', 'bbp_transitioned_topic_status_new_public', 20 );
    286293        }
    287294
    288295        /**
    289296         * @covers ::bbp_increase_user_reply_count
    290297         */
    291298        public function test_bbp_increase_user_reply_count() {
     299
     300                // Remove the transitioned new action so we manually manipulate counts.
     301                remove_action( 'bbp_insert_reply', 'bbp_transitioned_reply_status_new_public', 20 );
     302
    292303                $u = $this->factory->user->create();
    293304                $int_value = 3;
    294305                $integer = true;
     
    312323
    313324                $count = bbp_get_user_reply_count( $u, $integer );
    314325                $this->assertSame( $int_value, $count );
     326
     327                // Re-add the transitioned new action.
     328                add_action( 'bbp_insert_reply', 'bbp_transitioned_reply_status_new_public', 20 );
    315329        }
    316330
    317331        /**
    318332         * @covers ::bbp_decrease_user_topic_count
    319333         */
    320334        public function test_bbp_decrease_user_topic_count() {
     335
     336                // Remove the transitioned new action so we manually manipulate counts.
     337                remove_action( 'bbp_insert_topic', 'bbp_transitioned_topic_status_new_public', 20 );
     338
    321339                $u = $this->factory->user->create();
    322340                $int_value = 3;
    323341                $integer = true;
     
    342360
    343361                $count = bbp_get_user_topic_count( $u, $integer );
    344362                $this->assertSame( $int_value - 2, $count );
     363
     364                // Re-add the transitioned new action.
     365                add_action( 'bbp_insert_topic', 'bbp_transitioned_topic_status_new_public', 20 );
    345366        }
    346367
    347368        /**
    348369         * @covers ::bbp_decrease_user_reply_count
    349370         */
    350371        public function test_bbp_decrease_user_reply_count() {
     372
     373                // Remove the transitioned new action so we manually manipulate counts.
     374                remove_action( 'bbp_insert_reply', 'bbp_transitioned_reply_status_new_public', 20 );
     375
    351376                $u = $this->factory->user->create();
    352377                $int_value = 3;
    353378                $integer = true;
     
    378403
    379404                $count = bbp_get_user_reply_count( $u, $integer );
    380405                $this->assertSame( $int_value - 2, $count );
     406
     407                // Re-add the transitioned new action.
     408                add_action( 'bbp_insert_reply', 'bbp_transitioned_reply_status_new_public', 20 );
    381409        }
    382410}