Changeset 11763 for trunk/src/bp-groups/bp-groups-screens.php
- Timestamp:
- 12/08/2017 12:22:09 AM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/bp-groups/bp-groups-screens.php
r11556 r11763 167 167 */ 168 168 bp_core_load_template( apply_filters( 'groups_template_group_home', 'groups/single/home' ) ); 169 }170 171 /**172 * This screen function handles actions related to group forums.173 *174 * @since 1.0.0175 */176 function groups_screen_group_forum() {177 178 if ( !bp_is_active( 'forums' ) || !bp_forums_is_installed_correctly() )179 return false;180 181 if ( bp_action_variable( 0 ) && !bp_is_action_variable( 'topic', 0 ) ) {182 bp_do_404();183 return;184 }185 186 $bp = buddypress();187 188 if ( !$bp->groups->current_group->user_has_access ) {189 bp_core_no_access();190 return;191 }192 193 if ( ! bp_is_single_item() )194 return false;195 196 // Fetch the details we need.197 $topic_slug = (string)bp_action_variable( 1 );198 $topic_id = bp_forums_get_topic_id_from_slug( $topic_slug );199 $forum_id = groups_get_groupmeta( $bp->groups->current_group->id, 'forum_id' );200 $user_is_banned = false;201 202 if ( !bp_current_user_can( 'bp_moderate' ) && groups_is_user_banned( bp_loggedin_user_id(), $bp->groups->current_group->id ) )203 $user_is_banned = true;204 205 if ( !empty( $topic_slug ) && !empty( $topic_id ) ) {206 207 // Posting a reply.208 if ( !$user_is_banned && !bp_action_variable( 2 ) && isset( $_POST['submit_reply'] ) ) {209 // Check the nonce.210 check_admin_referer( 'bp_forums_new_reply' );211 212 // Auto join this user if they are not yet a member of this group.213 if ( bp_groups_auto_join() && !bp_current_user_can( 'bp_moderate' ) && 'public' == $bp->groups->current_group->status && !groups_is_user_member( bp_loggedin_user_id(), $bp->groups->current_group->id ) ) {214 groups_join_group( $bp->groups->current_group->id, bp_loggedin_user_id() );215 }216 217 $topic_page = isset( $_GET['topic_page'] ) ? $_GET['topic_page'] : false;218 219 // Don't allow reply flooding.220 if ( bp_forums_reply_exists( $_POST['reply_text'], $topic_id, bp_loggedin_user_id() ) ) {221 bp_core_add_message( __( 'It looks like you\'ve already said that!', 'buddypress' ), 'error' );222 } else {223 if ( !$post_id = groups_new_group_forum_post( $_POST['reply_text'], $topic_id, $topic_page ) ) {224 bp_core_add_message( __( 'There was an error when replying to that topic', 'buddypress'), 'error' );225 } else {226 bp_core_add_message( __( 'Your reply was posted successfully', 'buddypress') );227 }228 }229 230 $query_vars = isset( $_SERVER['QUERY_STRING'] ) ? '?' . $_SERVER['QUERY_STRING'] : '';231 232 $redirect = bp_get_group_permalink( groups_get_current_group() ) . 'forum/topic/' . $topic_slug . '/' . $query_vars;233 234 if ( !empty( $post_id ) ) {235 $redirect .= '#post-' . $post_id;236 }237 238 bp_core_redirect( $redirect );239 }240 241 // Sticky a topic.242 elseif ( bp_is_action_variable( 'stick', 2 ) && ( bp_is_item_admin() || bp_is_item_mod() ) ) {243 // Check the nonce.244 check_admin_referer( 'bp_forums_stick_topic' );245 246 if ( !bp_forums_sticky_topic( array( 'topic_id' => $topic_id ) ) ) {247 bp_core_add_message( __( 'There was an error when making that topic a sticky', 'buddypress' ), 'error' );248 } else {249 bp_core_add_message( __( 'The topic was made sticky successfully', 'buddypress' ) );250 }251 252 /**253 * Fires after a group forum topic has been stickied.254 *255 * @since 1.1.0256 *257 * @param int $topic_id ID of the topic being stickied.258 */259 do_action( 'groups_stick_forum_topic', $topic_id );260 bp_core_redirect( wp_get_referer() );261 }262 263 // Un-Sticky a topic.264 elseif ( bp_is_action_variable( 'unstick', 2 ) && ( bp_is_item_admin() || bp_is_item_mod() ) ) {265 // Check the nonce.266 check_admin_referer( 'bp_forums_unstick_topic' );267 268 if ( !bp_forums_sticky_topic( array( 'topic_id' => $topic_id, 'mode' => 'unstick' ) ) ) {269 bp_core_add_message( __( 'There was an error when unsticking that topic', 'buddypress'), 'error' );270 } else {271 bp_core_add_message( __( 'The topic was unstuck successfully', 'buddypress') );272 }273 274 /**275 * Fires after a group forum topic has been un-stickied.276 *277 * @since 1.1.0278 *279 * @param int $topic_id ID of the topic being un-stickied.280 */281 do_action( 'groups_unstick_forum_topic', $topic_id );282 bp_core_redirect( wp_get_referer() );283 }284 285 // Close a topic.286 elseif ( bp_is_action_variable( 'close', 2 ) && ( bp_is_item_admin() || bp_is_item_mod() ) ) {287 // Check the nonce.288 check_admin_referer( 'bp_forums_close_topic' );289 290 if ( !bp_forums_openclose_topic( array( 'topic_id' => $topic_id ) ) ) {291 bp_core_add_message( __( 'There was an error when closing that topic', 'buddypress'), 'error' );292 } else {293 bp_core_add_message( __( 'The topic was closed successfully', 'buddypress') );294 }295 296 /**297 * Fires after a group forum topic has been closed.298 *299 * @since 1.1.0300 *301 * @param int $topic_id ID of the topic being closed.302 */303 do_action( 'groups_close_forum_topic', $topic_id );304 bp_core_redirect( wp_get_referer() );305 }306 307 // Open a topic.308 elseif ( bp_is_action_variable( 'open', 2 ) && ( bp_is_item_admin() || bp_is_item_mod() ) ) {309 // Check the nonce.310 check_admin_referer( 'bp_forums_open_topic' );311 312 if ( !bp_forums_openclose_topic( array( 'topic_id' => $topic_id, 'mode' => 'open' ) ) ) {313 bp_core_add_message( __( 'There was an error when opening that topic', 'buddypress'), 'error' );314 } else {315 bp_core_add_message( __( 'The topic was opened successfully', 'buddypress') );316 }317 318 /**319 * Fires after a group forum topic has been opened.320 *321 * @since 1.1.0322 *323 * @param int $topic_id ID of the topic being opened.324 */325 do_action( 'groups_open_forum_topic', $topic_id );326 bp_core_redirect( wp_get_referer() );327 }328 329 // Delete a topic.330 elseif ( empty( $user_is_banned ) && bp_is_action_variable( 'delete', 2 ) && !bp_action_variable( 3 ) ) {331 // Fetch the topic.332 $topic = bp_forums_get_topic_details( $topic_id );333 334 /* Check the logged in user can delete this topic */335 if ( ! bp_is_item_admin() && ! bp_is_item_mod() && ( (int) bp_loggedin_user_id() != (int) $topic->topic_poster ) ) {336 bp_core_redirect( wp_get_referer() );337 }338 339 // Check the nonce.340 check_admin_referer( 'bp_forums_delete_topic' );341 342 /**343 * Fires before a group forum topic is deleted.344 *345 * @since 1.5.0346 *347 * @param int $topic_id ID of the topic being deleted.348 */349 do_action( 'groups_before_delete_forum_topic', $topic_id );350 351 if ( !groups_delete_group_forum_topic( $topic_id ) ) {352 bp_core_add_message( __( 'There was an error deleting the topic', 'buddypress' ), 'error' );353 } else {354 bp_core_add_message( __( 'The topic was deleted successfully', 'buddypress' ) );355 }356 357 /**358 * Fires after a group forum topic has been deleted.359 *360 * @since 1.5.0361 *362 * @param int $topic_id ID of the topic being deleted.363 */364 do_action( 'groups_delete_forum_topic', $topic_id );365 bp_core_redirect( bp_get_group_permalink( groups_get_current_group() ) . 'forum/' );366 }367 368 // Editing a topic.369 elseif ( empty( $user_is_banned ) && bp_is_action_variable( 'edit', 2 ) && !bp_action_variable( 3 ) ) {370 // Fetch the topic.371 $topic = bp_forums_get_topic_details( $topic_id );372 373 // Check the logged in user can edit this topic.374 if ( ! bp_is_item_admin() && ! bp_is_item_mod() && ( (int) bp_loggedin_user_id() != (int) $topic->topic_poster ) ) {375 bp_core_redirect( wp_get_referer() );376 }377 378 if ( isset( $_POST['save_changes'] ) ) {379 // Check the nonce.380 check_admin_referer( 'bp_forums_edit_topic' );381 382 $topic_tags = !empty( $_POST['topic_tags'] ) ? $_POST['topic_tags'] : false;383 384 if ( !groups_update_group_forum_topic( $topic_id, $_POST['topic_title'], $_POST['topic_text'], $topic_tags ) ) {385 bp_core_add_message( __( 'There was an error when editing that topic', 'buddypress'), 'error' );386 } else {387 bp_core_add_message( __( 'The topic was edited successfully', 'buddypress') );388 }389 390 /**391 * Fires after a group forum topic has been edited.392 *393 * @since 1.1.0394 *395 * @param int $topic_id ID of the topic being edited.396 */397 do_action( 'groups_edit_forum_topic', $topic_id );398 bp_core_redirect( bp_get_group_permalink( groups_get_current_group() ) . 'forum/topic/' . $topic_slug . '/' );399 }400 401 /**402 * Filters the template to load for a topic edit page.403 *404 * @since 1.1.0405 *406 * @param string $value Path to a topic edit template.407 */408 bp_core_load_template( apply_filters( 'groups_template_group_forum_topic_edit', 'groups/single/home' ) );409 410 // Delete a post.411 } elseif ( empty( $user_is_banned ) && bp_is_action_variable( 'delete', 2 ) && $post_id = bp_action_variable( 4 ) ) {412 // Fetch the post.413 $post = bp_forums_get_post( $post_id );414 415 // Check the logged in user can edit this topic.416 if ( ! bp_is_item_admin() && ! bp_is_item_mod() && ( (int) bp_loggedin_user_id() != (int) $post->poster_id ) ) {417 bp_core_redirect( wp_get_referer() );418 }419 420 // Check the nonce.421 check_admin_referer( 'bp_forums_delete_post' );422 423 /**424 * Fires before the deletion of a group forum post.425 *426 * @since 1.5.0427 *428 * @param int $post_id ID of the forum post being deleted.429 */430 do_action( 'groups_before_delete_forum_post', $post_id );431 432 if ( !groups_delete_group_forum_post( $post_id ) ) {433 bp_core_add_message( __( 'There was an error deleting that post', 'buddypress'), 'error' );434 } else {435 bp_core_add_message( __( 'The post was deleted successfully', 'buddypress') );436 }437 438 /**439 * Fires after the deletion of a group forum post.440 *441 * @since 1.1.0442 *443 * @param int $post_id ID of the forum post being deleted.444 */445 do_action( 'groups_delete_forum_post', $post_id );446 bp_core_redirect( wp_get_referer() );447 448 // Editing a post.449 } elseif ( empty( $user_is_banned ) && bp_is_action_variable( 'edit', 2 ) && $post_id = bp_action_variable( 4 ) ) {450 451 // Fetch the post.452 $post = bp_forums_get_post( $post_id );453 454 // Check the logged in user can edit this topic.455 if ( ! bp_is_item_admin() && ! bp_is_item_mod() && ( (int) bp_loggedin_user_id() != (int) $post->poster_id ) ) {456 bp_core_redirect( wp_get_referer() );457 }458 459 if ( isset( $_POST['save_changes'] ) ) {460 // Check the nonce.461 check_admin_referer( 'bp_forums_edit_post' );462 463 $topic_page = isset( $_GET['topic_page'] ) ? $_GET['topic_page'] : false;464 465 if ( !$post_id = groups_update_group_forum_post( $post_id, $_POST['post_text'], $topic_id, $topic_page ) ) {466 bp_core_add_message( __( 'There was an error when editing that post', 'buddypress'), 'error' );467 } else {468 bp_core_add_message( __( 'The post was edited successfully', 'buddypress') );469 }470 471 if ( $_SERVER['QUERY_STRING'] ) {472 $query_vars = '?' . $_SERVER['QUERY_STRING'];473 }474 475 /**476 * Fires after the editing of a group forum post.477 *478 * @since 1.1.0479 *480 * @param int $post_id ID of the forum post being edited.481 */482 do_action( 'groups_edit_forum_post', $post_id );483 bp_core_redirect( bp_get_group_permalink( $bp->groups->current_group ) . 'forum/topic/' . $topic_slug . '/' . $query_vars . '#post-' . $post_id );484 }485 486 /** This filter is documented in bp-groups/bp-groups-screens.php */487 bp_core_load_template( apply_filters( 'groups_template_group_forum_topic_edit', 'groups/single/home' ) );488 489 // Standard topic display.490 } else {491 if ( !empty( $user_is_banned ) ) {492 bp_core_add_message( __( "You have been banned from this group.", 'buddypress' ) );493 }494 495 /**496 * Filters the template to load for a topic page.497 *498 * @since 1.1.0499 *500 * @param string $value Path to a topic template.501 */502 bp_core_load_template( apply_filters( 'groups_template_group_forum_topic', 'groups/single/home' ) );503 }504 505 // Forum topic does not exist.506 } elseif ( !empty( $topic_slug ) && empty( $topic_id ) ) {507 bp_do_404();508 return;509 510 } else {511 // Posting a topic.512 if ( isset( $_POST['submit_topic'] ) && bp_is_active( 'forums' ) ) {513 514 // Check the nonce.515 check_admin_referer( 'bp_forums_new_topic' );516 517 if ( $user_is_banned ) {518 $error_message = __( "You have been banned from this group.", 'buddypress' );519 520 } elseif ( bp_groups_auto_join() && !bp_current_user_can( 'bp_moderate' ) && 'public' == $bp->groups->current_group->status && !groups_is_user_member( bp_loggedin_user_id(), $bp->groups->current_group->id ) ) {521 // Auto join this user if they are not yet a member of this group.522 groups_join_group( $bp->groups->current_group->id, bp_loggedin_user_id() );523 }524 525 if ( empty( $_POST['topic_title'] ) ) {526 $error_message = __( 'Please provide a title for your forum topic.', 'buddypress' );527 } elseif ( empty( $_POST['topic_text'] ) ) {528 $error_message = __( 'Forum posts cannot be empty. Please enter some text.', 'buddypress' );529 }530 531 if ( empty( $forum_id ) ) {532 $error_message = __( 'This group does not have a forum setup yet.', 'buddypress' );533 }534 535 if ( isset( $error_message ) ) {536 bp_core_add_message( $error_message, 'error' );537 $redirect = bp_get_group_permalink( $bp->groups->current_group ) . 'forum';538 } else {539 if ( !$topic = groups_new_group_forum_topic( $_POST['topic_title'], $_POST['topic_text'], $_POST['topic_tags'], $forum_id ) ) {540 bp_core_add_message( __( 'There was an error when creating the topic', 'buddypress'), 'error' );541 $redirect = bp_get_group_permalink( $bp->groups->current_group ) . 'forum';542 } else {543 bp_core_add_message( __( 'The topic was created successfully', 'buddypress') );544 $redirect = bp_get_group_permalink( $bp->groups->current_group ) . 'forum/topic/' . $topic->topic_slug . '/';545 }546 }547 548 bp_core_redirect( $redirect );549 }550 551 /**552 * Fires at the end of the group forum screen loading process.553 *554 * @since 1.0.0555 *556 * @param int $topic_id ID of the topic being displayed.557 * @param int $forum_id ID of the forum being displayed.558 */559 do_action( 'groups_screen_group_forum', $topic_id, $forum_id );560 561 /**562 * Filters the template to load for a group forum page.563 *564 * @since 1.0.0565 *566 * @param string $value Path to a group forum template.567 */568 bp_core_load_template( apply_filters( 'groups_template_group_forum', 'groups/single/home' ) );569 }570 169 } 571 170
Note: See TracChangeset
for help on using the changeset viewer.