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/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.