Skip to:
Content

bbPress.org


Ignore:
Timestamp:
04/12/2017 09:30:50 PM (8 years ago)
Author:
johnjamesjacoby
Message:

Admin: Update row action toggle methods to be a bit more flexible.

This should improve support for custom toggle actions in wp-admin.

File:
1 edited

Legend:

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

    r6272 r6397  
    396396    public function toggle_forum() {
    397397
    398         // Only proceed if GET is a forum toggle action
    399         if ( bbp_is_get_request() && ! empty( $_GET['forum_id'] ) && ! empty( $_GET['action'] ) && in_array( $_GET['action'], array( 'bbp_toggle_forum_close' ) ) ) {
    400             $action    = $_GET['action'];            // What action is taking place?
    401             $forum_id  = (int) $_GET['forum_id'];    // What's the forum id?
    402             $success   = false;                      // Flag
    403             $post_data = array( 'ID' => $forum_id ); // Prelim array
    404             $forum     = bbp_get_forum( $forum_id );
    405 
    406             // Bail if forum is missing
    407             if ( empty( $forum ) ) {
    408                 wp_die( __( 'The forum was not found.', 'bbpress' ) );
    409             }
    410 
    411             // What is the user doing here?
    412             if ( ! current_user_can( 'keep_gate', $forum->ID ) ) {
    413                 wp_die( __( 'You do not have permission to do that.', 'bbpress' ) );
    414             }
    415 
    416             switch ( $action ) {
    417                 case 'bbp_toggle_forum_close' :
    418                     check_admin_referer( 'close-forum_' . $forum_id );
    419 
    420                     $is_open = bbp_is_forum_open( $forum_id );
    421                     $message = ( true === $is_open )
    422                         ? 'closed'
    423                         : 'opened';
    424                     $success = ( true === $is_open )
    425                         ? bbp_close_forum( $forum_id )
    426                         : bbp_open_forum( $forum_id );
    427 
    428                     break;
    429             }
    430 
    431             $message = array( 'bbp_forum_toggle_notice' => $message, 'forum_id' => $forum->ID );
    432 
    433             if ( false === $success || is_wp_error( $success ) ) {
    434                 $message['failed'] = '1';
    435             }
    436 
    437             // Do additional forum toggle actions (admin side)
    438             do_action( 'bbp_toggle_forum_admin', $success, $post_data, $action, $message );
    439 
    440             // Redirect back to the forum
    441             $redirect = add_query_arg( $message, remove_query_arg( array( 'action', 'forum_id' ) ) );
    442             bbp_redirect( $redirect );
    443         }
     398        // Bail if not a forum toggle action
     399        if ( ! bbp_is_get_request() || empty( $_GET['action'] ) || empty( $_GET['forum_id'] ) ) {
     400            return;
     401        }
     402
     403        // Bail if not an allowed action
     404        $action = sanitize_key( $_GET['action'] );
     405        if ( empty( $action ) || ! in_array( $action, $this->get_allowed_action_toggles(), true ) ) {
     406            return;
     407        }
     408
     409        // Bail if forum is missing
     410        $forum_id = bbp_get_forum_id( $_GET['forum_id'] );
     411        if ( ! bbp_get_forum( $forum_id ) ) {
     412            wp_die( __( 'The forum was not found.', 'bbpress' ) );
     413        }
     414
     415        // What is the user doing here?
     416        if ( ! current_user_can( 'keep_gate', $forum_id ) ) {
     417            wp_die( __( 'You do not have permission to do that.', 'bbpress' ) );
     418        }
     419
     420        // Defaults
     421        $post_data = array( 'ID' => $forum_id );
     422        $message   = '';
     423        $success   = false;
     424
     425        switch ( $action ) {
     426            case 'bbp_toggle_forum_close' :
     427                check_admin_referer( 'close-forum_' . $forum_id );
     428
     429                $is_open = bbp_is_forum_open( $forum_id );
     430                $message = ( true === $is_open )
     431                    ? 'closed'
     432                    : 'opened';
     433                $success = ( true === $is_open )
     434                    ? bbp_close_forum( $forum_id )
     435                    : bbp_open_forum( $forum_id );
     436
     437                break;
     438        }
     439
     440        // Setup the message
     441        $retval = array(
     442            'bbp_forum_toggle_notice' => $message,
     443            'forum_id'                => $forum_id
     444        );
     445
     446        // Prepare for failure
     447        if ( false === $success || is_wp_error( $success ) ) {
     448            $retval['failed'] = '1';
     449        }
     450
     451        // Filter all message args
     452        $retval = apply_filters( 'bbp_toggle_forum_action_admin', $retval, $forum_id, $action );
     453
     454        // Do additional forum toggle actions (admin side)
     455        do_action( 'bbp_toggle_forum_admin', $success, $post_data, $action, $retval );
     456
     457        // Redirect back to the forum
     458        $redirect = add_query_arg( $retval, remove_query_arg( array( 'action', 'forum_id' ) ) );
     459        bbp_redirect( $redirect );
    444460    }
    445461
     
    460476    public function toggle_forum_notice() {
    461477
    462         // Only proceed if GET is a forum toggle action
    463         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'] ) ) {
    464             $notice     = $_GET['bbp_forum_toggle_notice'];         // Which notice?
    465             $forum_id   = (int) $_GET['forum_id'];                  // What's the forum id?
    466             $is_failure = ! empty( $_GET['failed'] ) ? true : false; // Was that a failure?
    467 
    468             // Bail if no forum_id or notice
    469             if ( empty( $notice ) || empty( $forum_id ) ) {
    470                 return;
    471             }
    472 
    473             // Bail if forum is missing
    474             $forum = bbp_get_forum( $forum_id );
    475             if ( empty( $forum ) ) {
    476                 return;
    477             }
    478 
    479             $forum_title = bbp_get_forum_title( $forum->ID );
    480 
    481             switch ( $notice ) {
    482                 case 'opened' :
    483                     $message = ( $is_failure === true )
    484                         ? sprintf( __( 'There was a problem opening the forum "%1$s".', 'bbpress' ), $forum_title )
    485                         : sprintf( __( 'Forum "%1$s" successfully opened.',             'bbpress' ), $forum_title );
    486                     break;
    487 
    488                 case 'closed' :
    489                     $message = ( $is_failure === true )
    490                         ? sprintf( __( 'There was a problem closing the forum "%1$s".', 'bbpress' ), $forum_title )
    491                         : sprintf( __( 'Forum "%1$s" successfully closed.',             'bbpress' ), $forum_title );
    492                     break;
    493             }
    494 
    495             // Do additional forum toggle notice filters (admin side)
    496             $message = apply_filters( 'bbp_toggle_forum_notice_admin', $message, $forum->ID, $notice, $is_failure );
    497 
    498             ?>
    499 
    500             <div id="message" class="<?php echo $is_failure === true ? 'error' : 'updated'; ?> fade">
    501                 <p style="line-height: 150%"><?php echo esc_html( $message ); ?></p>
    502             </div>
    503 
    504             <?php
    505         }
     478        // Bail if missing topic toggle action
     479        if ( ! bbp_is_get_request() || empty( $_GET['forum_id'] ) || empty( $_GET['bbp_forum_toggle_notice'] ) ) {
     480            return;
     481        }
     482
     483        // Bail if not an allowed notice
     484        $notice = sanitize_key( $_GET['bbp_forum_toggle_notice'] );
     485        if ( empty( $notice ) || ! in_array( $notice, $this->get_allowed_notice_toggles(), true ) ) {
     486            return;
     487        }
     488
     489        // Bail if no forum_id or notice
     490        $forum_id = bbp_get_forum_id( $_GET['forum_id'] );
     491        if ( empty( $forum_id ) ) {
     492            return;
     493        }
     494
     495        // Bail if forum is missing
     496        if ( ! bbp_get_forum( $forum_id ) ) {
     497            return;
     498        }
     499
     500        // Use the title in the responses
     501        $forum_title = bbp_get_forum_title( $forum_id );
     502        $is_failure  = ! empty( $_GET['failed'] );
     503        $message     = '';
     504
     505        switch ( $notice ) {
     506            case 'opened' :
     507                $message = ( $is_failure === true )
     508                    ? sprintf( __( 'There was a problem opening the forum "%1$s".', 'bbpress' ), $forum_title )
     509                    : sprintf( __( 'Forum "%1$s" successfully opened.',             'bbpress' ), $forum_title );
     510                break;
     511
     512            case 'closed' :
     513                $message = ( $is_failure === true )
     514                    ? sprintf( __( 'There was a problem closing the forum "%1$s".', 'bbpress' ), $forum_title )
     515                    : sprintf( __( 'Forum "%1$s" successfully closed.',             'bbpress' ), $forum_title );
     516                break;
     517        }
     518
     519        // Do additional forum toggle notice filters (admin side)
     520        $message = apply_filters( 'bbp_toggle_forum_notice_admin', $message, $forum_id, $notice, $is_failure );
     521        $class   = ( $is_failure === true )
     522            ? 'error'
     523            : 'updated';
     524
     525        ?>
     526
     527        <div id="message" class="<?php echo esc_html( $class ); ?> fade">
     528            <p style="line-height: 150%"><?php echo esc_html( $message ); ?></p>
     529        </div>
     530
     531        <?php
     532    }
     533
     534    /**
     535     * Returns an array of notice toggles
     536     *
     537     * @since 2.6.0 bbPress (r6396)
     538     *
     539     * @return array
     540     */
     541    private function get_allowed_notice_toggles() {
     542        return apply_filters( 'bbp_admin_forums_allowed_notice_toggles', array(
     543            'opened',
     544            'closed'
     545        ) );
     546    }
     547
     548    /**
     549     * Returns an array of notice toggles
     550     *
     551     * @since 2.6.0 bbPress (r6396)
     552     *
     553     * @return array
     554     */
     555    private function get_allowed_action_toggles() {
     556        return apply_filters( 'bbp_admin_forums_allowed_action_toggles', array(
     557            'bbp_toggle_forum_close'
     558        ) );
    506559    }
    507560
     
    625678
    626679            // Show the 'close' and 'open' link on published, private, hidden and closed posts only
    627             if ( in_array( $forum->post_status, array( bbp_get_public_status_id(), bbp_get_private_status_id(), bbp_get_hidden_status_id(), bbp_get_closed_status_id() ) ) ) {
     680            if ( in_array( $forum->post_status, array( bbp_get_public_status_id(), bbp_get_private_status_id(), bbp_get_hidden_status_id(), bbp_get_closed_status_id() ), true ) ) {
    628681                $close_uri = wp_nonce_url( add_query_arg( array( 'forum_id' => $forum->ID, 'action' => 'bbp_toggle_forum_close' ), remove_query_arg( array( 'bbp_forum_toggle_notice', 'forum_id', 'failed', 'super' ) ) ), 'close-forum_' . $forum->ID );
    629682                if ( bbp_is_forum_open( $forum->ID ) ) {
Note: See TracChangeset for help on using the changeset viewer.