BBP_Topics_Admin::toggle_topic()
Toggle topic
Description
Handles the admin-side opening/closing, sticking/unsticking and spamming/unspamming of topics
Source
File: bp-forums/admin/topics.php
public function toggle_topic() {
if ( $this->bail() ) return;
// Only proceed if GET is a topic toggle action
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' ) ) && !empty( $_GET['topic_id'] ) ) {
$action = $_GET['action']; // What action is taking place?
$topic_id = (int) $_GET['topic_id']; // What's the topic id?
$success = false; // Flag
$post_data = array( 'ID' => $topic_id ); // Prelim array
$topic = bbp_get_topic( $topic_id );
// Bail if topic is missing
if ( empty( $topic ) )
wp_die( __( 'The discussion was not found!', 'buddyboss' ) );
if ( !current_user_can( 'moderate', $topic->ID ) ) // What is the user doing here?
wp_die( __( 'You do not have the permission to do that!', 'buddyboss' ) );
switch ( $action ) {
case 'bbp_toggle_topic_close' :
check_admin_referer( 'close-topic_' . $topic_id );
$is_open = bbp_is_topic_open( $topic_id );
$message = true === $is_open ? 'closed' : 'opened';
$success = true === $is_open ? bbp_close_topic( $topic_id ) : bbp_open_topic( $topic_id );
break;
case 'bbp_toggle_topic_stick' :
check_admin_referer( 'stick-topic_' . $topic_id );
$is_sticky = bbp_is_topic_sticky( $topic_id );
$is_super = false === $is_sticky && !empty( $_GET['super'] ) && ( "1" === $_GET['super'] ) ? true : false;
$message = true === $is_sticky ? 'unsticked' : 'sticked';
$message = true === $is_super ? 'super_sticked' : $message;
$success = true === $is_sticky ? bbp_unstick_topic( $topic_id ) : bbp_stick_topic( $topic_id, $is_super );
break;
case 'bbp_toggle_topic_spam' :
check_admin_referer( 'spam-topic_' . $topic_id );
$is_spam = bbp_is_topic_spam( $topic_id );
$message = true === $is_spam ? 'unspammed' : 'spammed';
$success = true === $is_spam ? bbp_unspam_topic( $topic_id ) : bbp_spam_topic( $topic_id );
break;
}
$message = array( 'bbp_topic_toggle_notice' => $message, 'topic_id' => $topic->ID );
if ( false === $success || is_wp_error( $success ) )
$message['failed'] = '1';
// Do additional topic toggle actions (admin side)
do_action( 'bbp_toggle_topic_admin', $success, $post_data, $action, $message );
// Redirect back to the topic
$redirect = add_query_arg( $message, remove_query_arg( array( 'action', 'topic_id' ) ) );
wp_safe_redirect( $redirect );
// For good measure
exit();
}
}
Changelog
| Version | Description |
|---|---|
| bbPress (r2727) | Introduced. |
Questions?
We're always happy to help with code or other questions you might have! Search our developer docs, contact support, or connect with our sales team.