Skip to:
Content

bbPress.org


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