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