Skip to:
Content

bbPress.org


Ignore:
Timestamp:
12/27/2016 10:45:16 PM (9 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.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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}
Note: See TracChangeset for help on using the changeset viewer.