Skip to:
Content

bbPress.org

Changeset 6186


Ignore:
Timestamp:
12/27/2016 10:45:16 PM (5 years ago)
Author:
johnjamesjacoby
Message:

Admin: Implement new loading sequence for major admin components.

  • Introduce new bbp_current_screen sub-action
  • Hook forums/topics/replies into bbp_current_screen
  • Remove various bail() methods, which were fragile and terrible anyways
  • Revert r6178, thanks to order-of-operation issues with get_current_screen()
  • Remove Comments & Discussion metaboxes if comments is not explicitly supported

See #2959.

Location:
trunk/src/includes/admin
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/includes/admin/actions.php

    r5951 r6186  
    4343add_action( 'admin_head',              'bbp_admin_head'                    );
    4444add_action( 'admin_notices',           'bbp_admin_notices'                 );
     45add_action( 'menu_order',              'bbp_admin_menu_order'              );
    4546add_action( 'custom_menu_order',       'bbp_admin_custom_menu_order'       );
    46 add_action( 'menu_order',              'bbp_admin_menu_order'              );
     47add_action( 'current_screen',          'bbp_current_screen'                );
    4748add_action( 'wpmu_new_blog',           'bbp_new_site',               10, 6 );
    4849
    4950// Hook on to admin_init
    50 add_action( 'bbp_admin_init', 'bbp_admin_forums'                );
    51 add_action( 'bbp_admin_init', 'bbp_admin_topics'                );
    52 add_action( 'bbp_admin_init', 'bbp_admin_replies'               );
    5351add_action( 'bbp_admin_init', 'bbp_setup_updater',          999 );
    5452add_action( 'bbp_admin_init', 'bbp_register_importers'          );
     
    5654add_action( 'bbp_admin_init', 'bbp_register_admin_settings'     );
    5755add_action( 'bbp_admin_init', 'bbp_do_activation_redirect', 1   );
     56
     57// Hook on to current_screen
     58add_action( 'bbp_current_screen', 'bbp_admin_forums'  );
     59add_action( 'bbp_current_screen', 'bbp_admin_topics'  );
     60add_action( 'bbp_current_screen', 'bbp_admin_replies' );
    5861
    5962// Initialize the admin area
     
    261264    do_action( 'bbp_register_admin_settings' );
    262265}
     266
     267/**
     268 * Dedicated action to hook into the current screen
     269 *
     270 * @since 2.6.0 bbPress (r6185)
     271 *
     272 * @param WP_Screen $current_screen
     273 * @uses do_action() Calls 'bbp_current_screen'
     274 */
     275function bbp_current_screen( $current_screen = '' ) {
     276    do_action( 'bbp_current_screen', $current_screen );
     277}
  • trunk/src/includes/admin/forums.php

    r6178 r6186  
    2828    private $post_type = '';
    2929
    30     /**
    31      * @var WP_Screen The current screen object
    32      */
    33     private $screen;
    34 
    3530    /** Functions *************************************************************/
    3631
     
    8075        add_action( 'add_meta_boxes', array( $this, 'attributes_metabox' ) );
    8176        add_action( 'add_meta_boxes', array( $this, 'moderators_metabox' ) );
     77        add_action( 'add_meta_boxes', array( $this, 'comments_metabox'   ) );
    8278        add_action( 'save_post',      array( $this, 'save_meta_boxes'    ) );
    8379
     
    9389
    9490    /**
    95      * Should we bail out of this method?
    96      *
    97      * @since 2.1.0 bbPress (r4067)
    98      *
    99      * @return boolean
    100      */
    101     private function bail() {
    102 
    103         // Not for a post type
    104         if ( empty( $this->screen->post_type ) ) {
    105             return true;
    106         }
    107 
    108         // Not this post type
    109         if ( $this->post_type != $this->screen->post_type ) {
    110             return true;
    111         }
    112 
    113         return false;
    114     }
    115 
    116     /**
    11791     * Admin globals
    11892     *
     
    12397    private function setup_globals() {
    12498        $this->post_type = bbp_get_forum_post_type();
    125         $this->screen    = get_current_screen();
    12699    }
    127100
     
    137110    public function edit_help() {
    138111
    139         if ( $this->bail() ) {
    140             return;
    141         }
    142 
    143112        // Overview
    144         $this->screen->add_help_tab( array(
     113        get_current_screen()->add_help_tab( array(
    145114            'id'        => 'overview',
    146115            'title'     => __( 'Overview', 'bbpress' ),
     
    150119
    151120        // Screen Content
    152         $this->screen->add_help_tab( array(
     121        get_current_screen()->add_help_tab( array(
    153122            'id'        => 'screen-content',
    154123            'title'     => __( 'Screen Content', 'bbpress' ),
     
    163132
    164133        // Available Actions
    165         $this->screen->add_help_tab( array(
     134        get_current_screen()->add_help_tab( array(
    166135            'id'        => 'action-links',
    167136            'title'     => __( 'Available Actions', 'bbpress' ),
     
    176145
    177146        // Bulk Actions
    178         $this->screen->add_help_tab( array(
     147        get_current_screen()->add_help_tab( array(
    179148            'id'        => 'bulk-actions',
    180149            'title'     => __( 'Bulk Actions', 'bbpress' ),
     
    185154
    186155        // Help Sidebar
    187         $this->screen->set_help_sidebar(
     156        get_current_screen()->set_help_sidebar(
    188157            '<p><strong>' . __( 'For more information:', 'bbpress' ) . '</strong></p>' .
    189158            '<p>' . __( '<a href="https://codex.bbpress.org" target="_blank">bbPress Documentation</a>',    'bbpress' ) . '</p>' .
     
    197166     * @since 2.0.0 bbPress (r3119)
    198167     *
    199      * @uses $this->screen
     168     * @uses get_current_screen()
    200169     */
    201170    public function new_help() {
    202171
    203         if ( $this->bail() ) {
    204             return;
    205         }
    206 
    207172        $customize_display = '<p>' . __( 'The title field and the big forum editing Area are fixed in place, but you can reposition all the other boxes using drag and drop, and can minimize or expand them by clicking the title bar of each box. Use the Screen Options tab to unhide more boxes (Excerpt, Send Trackbacks, Custom Fields, Discussion, Slug, Author) or to choose a 1- or 2-column layout for this screen.', 'bbpress' ) . '</p>';
    208173
    209         $this->screen->add_help_tab( array(
     174        get_current_screen()->add_help_tab( array(
    210175            'id'      => 'customize-display',
    211176            'title'   => __( 'Customizing This Display', 'bbpress' ),
     
    213178        ) );
    214179
    215         $this->screen->add_help_tab( array(
     180        get_current_screen()->add_help_tab( array(
    216181            'id'      => 'title-forum-editor',
    217182            'title'   => __( 'Title and Forum Editor', 'bbpress' ),
     
    227192        }
    228193
    229         $this->screen->add_help_tab( array(
     194        get_current_screen()->add_help_tab( array(
    230195            'id'      => 'forum-attributes',
    231196            'title'   => __( 'Forum Attributes', 'bbpress' ),
     
    241206        ) );
    242207
    243         $this->screen->add_help_tab( array(
     208        get_current_screen()->add_help_tab( array(
    244209            'id'      => 'publish-box',
    245210            'title'   => __( 'Publish Box', 'bbpress' ),
     
    247212        ) );
    248213
    249         $this->screen->set_help_sidebar(
     214        get_current_screen()->set_help_sidebar(
    250215            '<p><strong>' . __( 'For more information:', 'bbpress' ) . '</strong></p>' .
    251216            '<p>' . __( '<a href="https://codex.bbpress.org" target="_blank">bbPress Documentation</a>',    'bbpress' ) . '</p>' .
     
    264229     */
    265230    public function attributes_metabox() {
    266 
    267         if ( $this->bail() ) {
    268             return;
    269         }
    270231
    271232        // Meta data
     
    293254    public function moderators_metabox() {
    294255
    295         if ( $this->bail() ) {
    296             return;
    297         }
    298 
    299256        // Bail if feature not active or user cannot assign moderators
    300257        if ( ! bbp_allow_forum_mods() || ! current_user_can( 'assign_moderators' ) ) {
     
    313270
    314271        do_action( 'bbp_forum_moderators_metabox' );
     272    }
     273
     274    /**
     275     * Remove comments & discussion metaboxes if comments are not supported
     276     *
     277     * @since 2.6.0 bbPress
     278     */
     279    public function comments_metabox() {
     280        if ( ! post_type_supports( $this->post_type, 'comments' ) ) {
     281            remove_meta_box( 'commentstatusdiv', $this->post_type, 'normal' );
     282            remove_meta_box( 'commentsdiv',      $this->post_type, 'normal' );
     283        }
    315284    }
    316285
     
    339308    public function save_meta_boxes( $forum_id ) {
    340309
    341         if ( $this->bail() ) {
    342             return $forum_id;
    343         }
    344 
    345310        // Bail if doing an autosave
    346311        if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
     
    396361     */
    397362    public function admin_head() {
    398 
    399         if ( $this->bail() ) {
    400             return;
    401         } ?>
     363        ?>
    402364
    403365        <style type="text/css" media="screen">
     
    492454    public function toggle_forum() {
    493455
    494         if ( $this->bail() ) {
    495             return;
    496         }
    497 
    498456        // Only proceed if GET is a forum toggle action
    499457        if ( bbp_is_get_request() && ! empty( $_GET['forum_id'] ) && ! empty( $_GET['action'] ) && in_array( $_GET['action'], array( 'bbp_toggle_forum_close' ) ) ) {
     
    560518    public function toggle_forum_notice() {
    561519
    562         if ( $this->bail() ) {
    563             return;
    564         }
    565 
    566520        // Only proceed if GET is a forum toggle action
    567521        if ( bbp_is_get_request() && ! empty( $_GET['bbp_forum_toggle_notice'] ) && in_array( $_GET['bbp_forum_toggle_notice'], array( 'opened', 'closed' ) ) && ! empty( $_GET['forum_id'] ) ) {
     
    621575     */
    622576    public function column_headers( $columns ) {
    623 
    624         if ( $this->bail() ) {
    625             return $columns;
    626         }
    627577
    628578        // Set list table column headers
     
    665615    public function column_data( $column, $forum_id ) {
    666616
    667         if ( $this->bail() ) {
    668             return;
    669         }
    670 
    671617        switch ( $column ) {
    672618            case 'bbp_forum_topic_count' :
     
    731677    public function row_actions( $actions, $forum ) {
    732678
    733         if ( $this->bail() ) {
    734             return $actions;
    735         }
    736 
    737679        unset( $actions['inline hide-if-no-js'] );
    738680
     
    774716    public function updated_messages( $messages ) {
    775717        global $post_ID;
    776 
    777         if ( $this->bail() ) {
    778             return $messages;
    779         }
    780718
    781719        // URL for the current forum
     
    867805 * @uses BBP_Forums_Admin
    868806 */
    869 function bbp_admin_forums() {
     807function bbp_admin_forums( $current_screen ) {
     808
     809    // Bail if not a forum screen
     810    if ( empty( $current_screen->post_type ) || ( bbp_get_forum_post_type() !== $current_screen->post_type ) ) {
     811        return;
     812    }
     813
     814    // Init the forums admin
    870815    bbpress()->admin->forums = new BBP_Forums_Admin();
    871816}
  • trunk/src/includes/admin/replies.php

    r6178 r6186  
    2828    private $post_type = '';
    2929
    30     /**
    31      * @var WP_Screen The current screen object
    32      */
    33     private $screen;
    34 
    3530    /** Functions *************************************************************/
    3631
     
    8883        add_action( 'add_meta_boxes', array( $this, 'attributes_metabox' ) );
    8984        add_action( 'add_meta_boxes', array( $this, 'author_metabox'     ) );
     85        add_action( 'add_meta_boxes', array( $this, 'comments_metabox'   ) );
    9086        add_action( 'save_post',      array( $this, 'save_meta_boxes'    ) );
    9187
     
    105101
    106102    /**
    107      * Should we bail out of this method?
    108      *
    109      * @since 2.1.0 bbPress (r4067)
    110      *
    111      * @return boolean
    112      */
    113     private function bail() {
    114 
    115         // Not for a post type
    116         if ( empty( $this->screen->post_type ) ) {
    117             return true;
    118         }
    119 
    120         // Not this post type
    121         if ( $this->post_type != $this->screen->post_type ) {
    122             return true;
    123         }
    124 
    125         return false;
    126     }
    127 
    128     /**
    129103     * Admin globals
    130104     *
     
    134108     */
    135109    private function setup_globals() {
    136         $this->post_type = bbp_get_forum_post_type();
    137         $this->screen    = $this->screen;
     110        $this->post_type = bbp_get_reply_post_type();
    138111    }
    139112
     
    149122    public function edit_help() {
    150123
    151         if ( $this->bail() ) {
    152             return;
    153         }
    154 
    155124        // Overview
    156         $this->screen->add_help_tab( array(
     125        get_current_screen()->add_help_tab( array(
    157126            'id'        => 'overview',
    158127            'title'     => __( 'Overview', 'bbpress' ),
     
    162131
    163132        // Screen Content
    164         $this->screen->add_help_tab( array(
     133        get_current_screen()->add_help_tab( array(
    165134            'id'        => 'screen-content',
    166135            'title'     => __( 'Screen Content', 'bbpress' ),
     
    176145
    177146        // Available Actions
    178         $this->screen->add_help_tab( array(
     147        get_current_screen()->add_help_tab( array(
    179148            'id'        => 'action-links',
    180149            'title'     => __( 'Available Actions', 'bbpress' ),
     
    192161
    193162        // Bulk Actions
    194         $this->screen->add_help_tab( array(
     163        get_current_screen()->add_help_tab( array(
    195164            'id'        => 'bulk-actions',
    196165            'title'     => __( 'Bulk Actions', 'bbpress' ),
     
    201170
    202171        // Help Sidebar
    203         $this->screen->set_help_sidebar(
     172        get_current_screen()->set_help_sidebar(
    204173            '<p><strong>' . __( 'For more information:', 'bbpress' ) . '</strong></p>' .
    205174            '<p>' . __( '<a href="https://codex.bbpress.org" target="_blank">bbPress Documentation</a>',    'bbpress' ) . '</p>' .
     
    213182     * @since 2.0.0 bbPress (r3119)
    214183     *
    215      * @uses $this->screen
     184     * @uses get_current_screen()
    216185     */
    217186    public function new_help() {
    218187
    219         if ( $this->bail() ) {
    220             return;
    221         }
    222 
    223188        $customize_display = '<p>' . __( 'The title field and the big reply editing Area are fixed in place, but you can reposition all the other boxes using drag and drop, and can minimize or expand them by clicking the title bar of each box. Use the Screen Options tab to unhide more boxes (Excerpt, Send Trackbacks, Custom Fields, Discussion, Slug, Author) or to choose a 1- or 2-column layout for this screen.', 'bbpress' ) . '</p>';
    224189
    225         $this->screen->add_help_tab( array(
     190        get_current_screen()->add_help_tab( array(
    226191            'id'      => 'customize-display',
    227192            'title'   => __( 'Customizing This Display', 'bbpress' ),
     
    229194        ) );
    230195
    231         $this->screen->add_help_tab( array(
     196        get_current_screen()->add_help_tab( array(
    232197            'id'      => 'title-reply-editor',
    233198            'title'   => __( 'Title and Reply Editor', 'bbpress' ),
     
    243208        }
    244209
    245         $this->screen->add_help_tab( array(
     210        get_current_screen()->add_help_tab( array(
    246211            'id'      => 'reply-attributes',
    247212            'title'   => __( 'Reply Attributes', 'bbpress' ),
     
    255220        ) );
    256221
    257         $this->screen->add_help_tab( array(
     222        get_current_screen()->add_help_tab( array(
    258223            'id'      => 'publish-box',
    259224            'title'   => __( 'Publish Box', 'bbpress' ),
     
    261226        ) );
    262227
    263         $this->screen->set_help_sidebar(
     228        get_current_screen()->set_help_sidebar(
    264229            '<p><strong>' . __( 'For more information:', 'bbpress' ) . '</strong></p>' .
    265230            '<p>' . __( '<a href="https://codex.bbpress.org" target="_blank">bbPress Documentation</a>',    'bbpress' ) . '</p>' .
     
    277242     */
    278243    public function bulk_actions( $actions ) {
    279 
    280         if ( $this->bail() ) {
    281             return $actions;
    282         }
    283244
    284245        if ( current_user_can( 'moderate' ) ) {
     
    303264    public function bulk_post_updated_messages( $bulk_messages, $bulk_counts ) {
    304265
    305         if ( $this->bail() ) {
    306             return $bulk_messages;
    307         }
    308 
    309266        $bulk_messages['reply']['updated'] = _n( '%s reply updated.', '%s replies updated.', $bulk_counts['updated'], 'bbpress' );
    310267        $bulk_messages['reply']['locked']  = ( 1 === $bulk_counts['locked'] ) ? __( '1 reply not updated, somebody is editing it.', 'bbpress' ) :
     
    325282    public function handle_bulk_actions( $sendback, $doaction, $post_ids ) {
    326283
    327         if ( $this->bail() ) {
    328             return $sendback;
    329         }
    330 
    331284        $sendback = remove_query_arg( array( 'spam', 'unspam' ), $sendback );
    332285        $updated = $locked = 0;
     
    388341     */
    389342    public function attributes_metabox() {
    390 
    391         if ( $this->bail() ) {
    392             return;
    393         }
    394343
    395344        add_meta_box(
     
    406355
    407356    /**
    408      * Pass the reply attributes for processing
    409      *
    410      * @since 2.0.0 bbPress (r2746)
    411      *
    412      * @param int $reply_id Reply id
    413      * @uses current_user_can() To check if the current user is capable of
    414      *                           editing the reply
    415      * @uses do_action() Calls 'bbp_reply_attributes_metabox_save' with the
    416      *                    reply id and parent id
    417      * @return int Parent id
    418      */
    419     public function save_meta_boxes( $reply_id ) {
    420 
    421         if ( $this->bail() ) {
    422             return $reply_id;
    423         }
    424 
    425         // Bail if doing an autosave
    426         if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
    427             return $reply_id;
    428         }
    429 
    430         // Bail if not a post request
    431         if ( ! bbp_is_post_request() ) {
    432             return $reply_id;
    433         }
    434 
    435         // Check action exists
    436         if ( empty( $_POST['action'] ) ) {
    437             return $reply_id;
    438         }
    439 
    440         // Nonce check
    441         if ( empty( $_POST['bbp_reply_metabox'] ) || ! wp_verify_nonce( $_POST['bbp_reply_metabox'], 'bbp_reply_metabox_save' ) ) {
    442             return $reply_id;
    443         }
    444 
    445         // Current user cannot edit this reply
    446         if ( !current_user_can( 'edit_reply', $reply_id ) ) {
    447             return $reply_id;
    448         }
    449 
    450         // Get the reply meta post values
    451         $topic_id = ! empty( $_POST['parent_id']    ) ? (int) $_POST['parent_id']    : 0;
    452         $forum_id = ! empty( $_POST['bbp_forum_id'] ) ? (int) $_POST['bbp_forum_id'] : bbp_get_topic_forum_id( $topic_id );
    453         $reply_to = ! empty( $_POST['bbp_reply_to'] ) ? (int) $_POST['bbp_reply_to'] : 0;
    454 
    455         // Get reply author data
    456         $anonymous_data = bbp_filter_anonymous_post_data();
    457         $author_id      = bbp_get_reply_author_id( $reply_id );
    458         $is_edit        = ( isset( $_POST['hidden_post_status'] ) && ( $_POST['hidden_post_status'] !== 'draft' ) );
    459 
    460         // Formally update the reply
    461         bbp_update_reply( $reply_id, $topic_id, $forum_id, $anonymous_data, $author_id, $is_edit, $reply_to );
    462 
    463         // Allow other fun things to happen
    464         do_action( 'bbp_reply_attributes_metabox_save', $reply_id, $topic_id, $forum_id, $reply_to );
    465         do_action( 'bbp_author_metabox_save',           $reply_id, $anonymous_data                 );
    466 
    467         return $reply_id;
    468     }
    469 
    470     /**
    471357     * Add the author info metabox
    472358     *
     
    484370     */
    485371    public function author_metabox() {
    486 
    487         if ( $this->bail() ) {
    488             return;
    489         }
    490372
    491373        // Bail if post_type is not a reply
     
    508390
    509391    /**
     392     * Remove comments & discussion metaboxes if comments are not supported
     393     *
     394     * @since 2.6.0 bbPress
     395     */
     396    public function comments_metabox() {
     397        if ( ! post_type_supports( $this->post_type, 'comments' ) ) {
     398            remove_meta_box( 'commentstatusdiv', $this->post_type, 'normal' );
     399            remove_meta_box( 'commentsdiv',      $this->post_type, 'normal' );
     400        }
     401    }
     402
     403    /**
     404     * Pass the reply attributes for processing
     405     *
     406     * @since 2.0.0 bbPress (r2746)
     407     *
     408     * @param int $reply_id Reply id
     409     * @uses current_user_can() To check if the current user is capable of
     410     *                           editing the reply
     411     * @uses do_action() Calls 'bbp_reply_attributes_metabox_save' with the
     412     *                    reply id and parent id
     413     * @return int Parent id
     414     */
     415    public function save_meta_boxes( $reply_id ) {
     416
     417        // Bail if doing an autosave
     418        if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
     419            return $reply_id;
     420        }
     421
     422        // Bail if not a post request
     423        if ( ! bbp_is_post_request() ) {
     424            return $reply_id;
     425        }
     426
     427        // Check action exists
     428        if ( empty( $_POST['action'] ) ) {
     429            return $reply_id;
     430        }
     431
     432        // Nonce check
     433        if ( empty( $_POST['bbp_reply_metabox'] ) || ! wp_verify_nonce( $_POST['bbp_reply_metabox'], 'bbp_reply_metabox_save' ) ) {
     434            return $reply_id;
     435        }
     436
     437        // Current user cannot edit this reply
     438        if ( !current_user_can( 'edit_reply', $reply_id ) ) {
     439            return $reply_id;
     440        }
     441
     442        // Get the reply meta post values
     443        $topic_id = ! empty( $_POST['parent_id']    ) ? (int) $_POST['parent_id']    : 0;
     444        $forum_id = ! empty( $_POST['bbp_forum_id'] ) ? (int) $_POST['bbp_forum_id'] : bbp_get_topic_forum_id( $topic_id );
     445        $reply_to = ! empty( $_POST['bbp_reply_to'] ) ? (int) $_POST['bbp_reply_to'] : 0;
     446
     447        // Get reply author data
     448        $anonymous_data = bbp_filter_anonymous_post_data();
     449        $author_id      = bbp_get_reply_author_id( $reply_id );
     450        $is_edit        = ( isset( $_POST['hidden_post_status'] ) && ( $_POST['hidden_post_status'] !== 'draft' ) );
     451
     452        // Formally update the reply
     453        bbp_update_reply( $reply_id, $topic_id, $forum_id, $anonymous_data, $author_id, $is_edit, $reply_to );
     454
     455        // Allow other fun things to happen
     456        do_action( 'bbp_reply_attributes_metabox_save', $reply_id, $topic_id, $forum_id, $reply_to );
     457        do_action( 'bbp_author_metabox_save',           $reply_id, $anonymous_data                 );
     458
     459        return $reply_id;
     460    }
     461
     462    /**
    510463     * Add some general styling to the admin area
    511464     *
     
    519472     */
    520473    public function admin_head() {
    521 
    522         if ( $this->bail() ) {
    523             return;
    524         } ?>
     474        ?>
    525475
    526476        <style type="text/css" media="screen">
     
    603553    public function toggle_reply() {
    604554
    605         if ( $this->bail() ) {
    606             return;
    607         }
    608 
    609555        // Only proceed if GET is a reply toggle action
    610556        if ( bbp_is_get_request() && ! empty( $_GET['action'] ) && in_array( $_GET['action'], array( 'bbp_toggle_reply_spam', 'bbp_toggle_reply_approve' ) ) && ! empty( $_GET['reply_id'] ) ) {
     
    676622    public function toggle_reply_notice() {
    677623
    678         if ( $this->bail() ) {
    679             return;
    680         }
    681 
    682624        // Only proceed if GET is a reply toggle action
    683625        if ( bbp_is_get_request() && ! empty( $_GET['bbp_reply_toggle_notice'] ) && in_array( $_GET['bbp_reply_toggle_notice'], array( 'spammed', 'unspammed', 'approved', 'unapproved' ) ) && ! empty( $_GET['reply_id'] ) ) {
     
    749691     */
    750692    public function column_headers( $columns ) {
    751 
    752         if ( $this->bail() ) {
    753             return $columns;
    754         }
    755 
    756693        $columns = array(
    757694            'cb'                => '<input type="checkbox" />',
     
    795732    public function column_data( $column, $reply_id ) {
    796733
    797         if ( $this->bail() ) {
    798             return;
    799         }
    800 
    801734        // Get topic ID
    802735        $topic_id = bbp_get_reply_topic_id( $reply_id );
     
    909842    public function row_actions( $actions, $reply ) {
    910843
    911         if ( $this->bail() ) {
    912             return $actions;
    913         }
    914 
    915844        unset( $actions['inline hide-if-no-js'] );
    916845
     
    975904     */
    976905    public function filter_dropdown() {
    977 
    978         if ( $this->bail() ) {
    979             return;
    980         }
    981906
    982907        // Add "Empty Spam" button for moderators
     
    1016941    public function filter_post_rows( $query_vars ) {
    1017942
    1018         if ( $this->bail() ) {
    1019             return $query_vars;
    1020         }
    1021 
    1022943        // Add post_parent query_var if one is present
    1023944        if ( ! empty( $_GET['bbp_forum_id'] ) ) {
     
    1048969    public function updated_messages( $messages ) {
    1049970        global $post_ID;
    1050 
    1051         if ( $this->bail() ) {
    1052             return $messages;
    1053         }
    1054971
    1055972        // URL for the current topic
     
    11411058 * @uses BBP_Replies_Admin
    11421059 */
    1143 function bbp_admin_replies() {
     1060function bbp_admin_replies( $current_screen ) {
     1061
     1062    // Bail if not a forum screen
     1063    if ( empty( $current_screen->post_type ) || ( bbp_get_reply_post_type() !== $current_screen->post_type ) ) {
     1064        return;
     1065    }
     1066
     1067    // Init the replies admin
    11441068    bbpress()->admin->replies = new BBP_Replies_Admin();
    11451069}
  • trunk/src/includes/admin/topics.php

    r6178 r6186  
    2828    private $post_type = '';
    2929
    30     /**
    31      * @var WP_Screen The current screen object
    32      */
    33     private $screen;
    34 
    3530    /** Functions *************************************************************/
    3631
     
    8984        add_action( 'add_meta_boxes', array( $this, 'author_metabox'     ) );
    9085        add_action( 'add_meta_boxes', array( $this, 'replies_metabox'    ) );
     86        add_action( 'add_meta_boxes', array( $this, 'comments_metabox'   ) );
    9187        add_action( 'save_post',      array( $this, 'save_meta_boxes'    ) );
    9288
     
    106102
    107103    /**
    108      * Should we bail out of this method?
    109      *
    110      * @since 2.1.0 bbPress (r4067)
    111      *
    112      * @return boolean
    113      */
    114     private function bail() {
    115 
    116         // Not for a post type
    117         if ( empty( $this->screen->post_type ) ) {
    118             return true;
    119         }
    120 
    121         // Not this post type
    122         if ( $this->post_type != $this->screen->post_type ) {
    123             return true;
    124         }
    125 
    126         return false;
    127     }
    128 
    129     /**
    130104     * Admin globals
    131105     *
     
    135109     */
    136110    private function setup_globals() {
    137         $this->post_type = bbp_get_forum_post_type();
    138         $this->screen    = get_current_screen();
     111        $this->post_type = bbp_get_topic_post_type();
    139112    }
    140113
     
    150123    public function edit_help() {
    151124
    152         if ( $this->bail() ) {
    153             return;
    154         }
    155 
    156125        // Overview
    157         $this->screen->add_help_tab( array(
     126        get_current_screen()->add_help_tab( array(
    158127            'id'        => 'overview',
    159128            'title'     => __( 'Overview', 'bbpress' ),
     
    163132
    164133        // Screen Content
    165         $this->screen->add_help_tab( array(
     134        get_current_screen()->add_help_tab( array(
    166135            'id'        => 'screen-content',
    167136            'title'     => __( 'Screen Content', 'bbpress' ),
     
    177146
    178147        // Available Actions
    179         $this->screen->add_help_tab( array(
     148        get_current_screen()->add_help_tab( array(
    180149            'id'        => 'action-links',
    181150            'title'     => __( 'Available Actions', 'bbpress' ),
     
    195164
    196165        // Bulk Actions
    197         $this->screen->add_help_tab( array(
     166        get_current_screen()->add_help_tab( array(
    198167            'id'        => 'bulk-actions',
    199168            'title'     => __( 'Bulk Actions', 'bbpress' ),
     
    204173
    205174        // Help Sidebar
    206         $this->screen->set_help_sidebar(
     175        get_current_screen()->set_help_sidebar(
    207176            '<p><strong>' . __( 'For more information:', 'bbpress' ) . '</strong></p>' .
    208177            '<p>' . __( '<a href="https://codex.bbpress.org" target="_blank">bbPress Documentation</a>',     'bbpress' ) . '</p>' .
     
    216185     * @since 2.0.0 bbPress (r3119)
    217186     *
    218      * @uses $this->screen
     187     * @uses get_current_screen()
    219188     */
    220189    public function new_help() {
    221190
    222         if ( $this->bail() ) {
    223             return;
    224         }
    225 
    226191        $customize_display = '<p>' . __( 'The title field and the big topic editing Area are fixed in place, but you can reposition all the other boxes using drag and drop, and can minimize or expand them by clicking the title bar of each box. Use the Screen Options tab to unhide more boxes (Excerpt, Send Trackbacks, Custom Fields, Discussion, Slug, Author) or to choose a 1- or 2-column layout for this screen.', 'bbpress' ) . '</p>';
    227192
    228         $this->screen->add_help_tab( array(
     193        get_current_screen()->add_help_tab( array(
    229194            'id'      => 'customize-display',
    230195            'title'   => __( 'Customizing This Display', 'bbpress' ),
     
    232197        ) );
    233198
    234         $this->screen->add_help_tab( array(
     199        get_current_screen()->add_help_tab( array(
    235200            'id'      => 'title-topic-editor',
    236201            'title'   => __( 'Title and Topic Editor', 'bbpress' ),
     
    246211        }
    247212
    248         $this->screen->add_help_tab( array(
     213        get_current_screen()->add_help_tab( array(
    249214            'id'      => 'topic-attributes',
    250215            'title'   => __( 'Topic Attributes', 'bbpress' ),
     
    257222        ) );
    258223
    259         $this->screen->add_help_tab( array(
     224        get_current_screen()->add_help_tab( array(
    260225            'id'      => 'publish-box',
    261226            'title'   => __( 'Publish Box', 'bbpress' ),
     
    263228        ) );
    264229
    265         $this->screen->set_help_sidebar(
     230        get_current_screen()->set_help_sidebar(
    266231            '<p><strong>' . __( 'For more information:', 'bbpress' ) . '</strong></p>' .
    267232            '<p>' . __( '<a href="https://codex.bbpress.org" target="_blank">bbPress Documentation</a>',    'bbpress' ) . '</p>' .
     
    279244     */
    280245    public function bulk_actions( $actions ) {
    281 
    282         if ( $this->bail() ) {
    283             return $actions;
    284         }
    285246
    286247        if ( current_user_can( 'moderate' ) ) {
     
    305266    public function bulk_post_updated_messages( $bulk_messages, $bulk_counts ) {
    306267
    307         if ( $this->bail() ) {
    308             return $bulk_messages;
    309         }
    310 
    311268        $bulk_messages['topic']['updated'] = _n( '%s topic updated.', '%s topics updated.', $bulk_counts['updated'], 'bbpress'  );
    312269        $bulk_messages['topic']['locked']  = ( 1 === $bulk_counts['locked'] ) ? __( '1 topic not updated, somebody is editing it.', 'bbpress'  ) :
     
    327284    public function handle_bulk_actions( $sendback, $doaction, $post_ids ) {
    328285
    329         if ( $this->bail() ) {
    330             return $sendback;
    331         }
    332 
    333286        $sendback = remove_query_arg( array( 'spam', 'unspam' ), $sendback );
    334287        $updated = $locked = 0;
     
    379332        return $sendback;
    380333    }
     334
    381335    /**
    382336     * Add the topic attributes metabox
     
    389343     */
    390344    public function attributes_metabox() {
    391 
    392         if ( $this->bail() ) {
    393             return;
    394         }
    395345
    396346        add_meta_box(
     
    407357
    408358    /**
    409      * Pass the topic attributes for processing
    410      *
    411      * @since 2.0.0 bbPress (r2746)
    412      *
    413      * @param int $topic_id Topic id
    414      * @uses current_user_can() To check if the current user is capable of
    415      *                           editing the topic
    416      * @uses do_action() Calls 'bbp_topic_attributes_metabox_save' with the
    417      *                    topic id and parent id
    418      * @return int Parent id
    419      */
    420     public function save_meta_boxes( $topic_id ) {
    421 
    422         if ( $this->bail() ) {
    423             return $topic_id;
    424         }
    425 
    426         // Bail if doing an autosave
    427         if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
    428             return $topic_id;
    429         }
    430 
    431         // Bail if not a post request
    432         if ( ! bbp_is_post_request() ) {
    433             return $topic_id;
    434         }
    435 
    436         // Nonce check
    437         if ( empty( $_POST['bbp_topic_metabox'] ) || ! wp_verify_nonce( $_POST['bbp_topic_metabox'], 'bbp_topic_metabox_save' ) ) {
    438             return $topic_id;
    439         }
    440 
    441         // Bail if current user cannot edit this topic
    442         if ( !current_user_can( 'edit_topic', $topic_id ) ) {
    443             return $topic_id;
    444         }
    445 
    446         // Get the forum ID
    447         $forum_id = ! empty( $_POST['parent_id'] ) ? (int) $_POST['parent_id'] : 0;
    448 
    449         // Get topic author data
    450         $anonymous_data = bbp_filter_anonymous_post_data();
    451         $author_id      = bbp_get_topic_author_id( $topic_id );
    452         $is_edit        = ( isset( $_POST['hidden_post_status'] ) && ( $_POST['hidden_post_status'] !== 'draft' ) );
    453 
    454         // Formally update the topic
    455         bbp_update_topic( $topic_id, $forum_id, $anonymous_data, $author_id, $is_edit );
    456 
    457         // Allow other fun things to happen
    458         do_action( 'bbp_topic_attributes_metabox_save', $topic_id, $forum_id       );
    459         do_action( 'bbp_author_metabox_save',           $topic_id, $anonymous_data );
    460 
    461         return $topic_id;
    462     }
    463 
    464     /**
    465359     * Add the author info metabox
    466360     *
     
    476370     */
    477371    public function author_metabox() {
    478 
    479         if ( $this->bail() ) {
    480             return;
    481         }
    482372
    483373        // Bail if post_type is not a topic
     
    517407    public function replies_metabox() {
    518408
    519         if ( $this->bail() ) {
    520             return;
    521         }
    522 
    523409        // Bail if post_type is not a reply
    524410        if ( empty( $_GET['action'] ) || ( 'edit' !== $_GET['action'] ) ) {
     
    540426
    541427    /**
     428     * Remove comments & discussion metaboxes if comments are not supported
     429     *
     430     * @since 2.6.0 bbPress
     431     */
     432    public function comments_metabox() {
     433        if ( ! post_type_supports( $this->post_type, 'comments' ) ) {
     434            remove_meta_box( 'commentstatusdiv', $this->post_type, 'normal' );
     435            remove_meta_box( 'commentsdiv',      $this->post_type, 'normal' );
     436        }
     437    }
     438
     439    /**
     440     * Pass the topic attributes for processing
     441     *
     442     * @since 2.0.0 bbPress (r2746)
     443     *
     444     * @param int $topic_id Topic id
     445     * @uses current_user_can() To check if the current user is capable of
     446     *                           editing the topic
     447     * @uses do_action() Calls 'bbp_topic_attributes_metabox_save' with the
     448     *                    topic id and parent id
     449     * @return int Parent id
     450     */
     451    public function save_meta_boxes( $topic_id ) {
     452
     453        // Bail if doing an autosave
     454        if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
     455            return $topic_id;
     456        }
     457
     458        // Bail if not a post request
     459        if ( ! bbp_is_post_request() ) {
     460            return $topic_id;
     461        }
     462
     463        // Nonce check
     464        if ( empty( $_POST['bbp_topic_metabox'] ) || ! wp_verify_nonce( $_POST['bbp_topic_metabox'], 'bbp_topic_metabox_save' ) ) {
     465            return $topic_id;
     466        }
     467
     468        // Bail if current user cannot edit this topic
     469        if ( !current_user_can( 'edit_topic', $topic_id ) ) {
     470            return $topic_id;
     471        }
     472
     473        // Get the forum ID
     474        $forum_id = ! empty( $_POST['parent_id'] ) ? (int) $_POST['parent_id'] : 0;
     475
     476        // Get topic author data
     477        $anonymous_data = bbp_filter_anonymous_post_data();
     478        $author_id      = bbp_get_topic_author_id( $topic_id );
     479        $is_edit        = ( isset( $_POST['hidden_post_status'] ) && ( $_POST['hidden_post_status'] !== 'draft' ) );
     480
     481        // Formally update the topic
     482        bbp_update_topic( $topic_id, $forum_id, $anonymous_data, $author_id, $is_edit );
     483
     484        // Allow other fun things to happen
     485        do_action( 'bbp_topic_attributes_metabox_save', $topic_id, $forum_id       );
     486        do_action( 'bbp_author_metabox_save',           $topic_id, $anonymous_data );
     487
     488        return $topic_id;
     489    }
     490
     491    /**
    542492     * Add some general styling to the admin area
    543493     *
     
    551501     */
    552502    public function admin_head() {
    553 
    554         if ( $this->bail() ) {
    555             return;
    556         } ?>
     503        ?>
    557504
    558505        <style type="text/css" media="screen">
     
    654601    public function toggle_topic() {
    655602
    656         if ( $this->bail() ) {
    657             return;
    658         }
    659 
    660603        // Only proceed if GET is a topic toggle action
    661604        if ( bbp_is_get_request() && ! empty( $_GET['action'] ) && in_array( $_GET['action'], array( 'bbp_toggle_topic_close', 'bbp_toggle_topic_stick', 'bbp_toggle_topic_spam', 'bbp_toggle_topic_approve' ) ) && ! empty( $_GET['topic_id'] ) ) {
     
    767710    public function toggle_topic_notice() {
    768711
    769         if ( $this->bail() ) {
    770             return;
    771         }
    772 
    773712        // Only proceed if GET is a topic toggle action
    774713        if ( bbp_is_get_request() && ! empty( $_GET['bbp_topic_toggle_notice'] ) && in_array( $_GET['bbp_topic_toggle_notice'], array( 'opened', 'closed', 'super_sticky', 'stuck', 'unstuck', 'spammed', 'unspammed', 'approved', 'unapproved' ) ) && ! empty( $_GET['topic_id'] ) ) {
     
    870809     */
    871810    public function column_headers( $columns ) {
    872 
    873         if ( $this->bail() ) {
    874             return $columns;
    875         }
    876 
    877811        $columns = array(
    878812            'cb'                    => '<input type="checkbox" />',
     
    915849    public function column_data( $column, $topic_id ) {
    916850
    917         if ( $this->bail() ) {
    918             return;
    919         }
    920 
    921851        // Get topic forum ID
    922852        $forum_id = bbp_get_topic_forum_id( $topic_id );
     
    1017947    public function row_actions( $actions, $topic ) {
    1018948
    1019         if ( $this->bail() ) {
    1020             return $actions;
    1021         }
    1022 
    1023949        unset( $actions['inline hide-if-no-js'] );
    1024950
     
    11041030    public function filter_dropdown() {
    11051031
    1106         if ( $this->bail() ) {
    1107             return;
    1108         }
    1109 
    11101032        // Add "Empty Spam" button for moderators
    11111033        if ( ! empty( $_GET['post_status'] ) && ( bbp_get_spam_status_id() === $_GET['post_status'] ) && current_user_can( 'moderate' ) ) {
     
    11441066    function filter_post_rows( $query_vars ) {
    11451067
    1146         if ( $this->bail() ) {
    1147             return $query_vars;
    1148         }
    1149 
    11501068        // Add post_parent query_var if one is present
    11511069        if ( ! empty( $_GET['bbp_forum_id'] ) ) {
     
    11761094    public function updated_messages( $messages ) {
    11771095        global $post_ID;
    1178 
    1179         if ( $this->bail() ) {
    1180             return $messages;
    1181         }
    11821096
    11831097        // URL for the current topic
     
    12691183 * @uses BBP_Forums_Admin
    12701184 */
    1271 function bbp_admin_topics() {
     1185function bbp_admin_topics( $current_screen ) {
     1186
     1187    // Bail if not a forum screen
     1188    if ( empty( $current_screen->post_type ) || ( bbp_get_topic_post_type() !== $current_screen->post_type ) ) {
     1189        return;
     1190    }
     1191
     1192    // Init the topics admin
    12721193    bbpress()->admin->topics = new BBP_Topics_Admin();
    12731194}
Note: See TracChangeset for help on using the changeset viewer.