| 363 | |
| 364 | /** |
| 365 | * Add Spam, Unspam, Unapprove, Approve to the list of valid topic actions. |
| 366 | * |
| 367 | * @param array $actions List of topic actions. |
| 368 | * @return array Filtered list of actions. |
| 369 | */ |
| 370 | public function get_toggle_topic_actions( $actions ) { |
| 371 | $actions = array_merge( $actions, array( |
| 372 | 'wporg_bbp_spam_topic', |
| 373 | 'wporg_bbp_unspam_topic', |
| 374 | 'wporg_bbp_unapprove_topic', |
| 375 | 'wporg_bbp_approve_topic', |
| 376 | ) ); |
| 377 | |
| 378 | return $actions; |
| 379 | } |
| 380 | |
| 381 | /** |
| 382 | * Add Spam, Unspam, Unapprove, Approve to the list of valid reply actions. |
| 383 | * |
| 384 | * @param array $actions List of reply actions. |
| 385 | * @return array Filtered list of actions. |
| 386 | */ |
| 387 | public function get_toggle_reply_actions( $actions ) { |
| 388 | $actions = array_merge( $actions, array( |
| 389 | 'wporg_bbp_spam_reply', |
| 390 | 'wporg_bbp_unspam_reply', |
| 391 | 'wporg_bbp_unapprove_reply', |
| 392 | 'wporg_bbp_approve_reply', |
| 393 | ) ); |
| 394 | |
| 395 | return $actions; |
| 396 | } |
| 397 | |
| 398 | /** |
| 399 | * Handle Spam, Unspam, Unapprove, Approve topic actions. |
| 400 | * |
| 401 | * By default, bbPress treats them as toggles, which may cause conflicts if |
| 402 | * the same action is performed twice by different moderators. |
| 403 | * |
| 404 | * @param array $retval { |
| 405 | * @type int $status Result of the action. |
| 406 | * @type string $message Message displayed in case of an error. |
| 407 | * @type string $redirect_to URL to redirect to. |
| 408 | * @type bool $view_all Whether to append 'view=all' to the URL. |
| 409 | * } |
| 410 | * @param array $r Parsed arguments. |
| 411 | * @param array $args Raw arguments. |
| 412 | * @return array |
| 413 | */ |
| 414 | public function handle_topic_actions( $retval, $r, $args ) { |
| 415 | $nonce_suffix = bbp_get_topic_post_type() . '_' . (int) $r['id']; |
| 416 | |
| 417 | switch ( $r['action'] ) { |
| 418 | case 'wporg_bbp_spam_topic': |
| 419 | check_ajax_referer( "spam-{$nonce_suffix}" ); |
| 420 | |
| 421 | if ( ! bbp_is_topic_spam( $r['id'] ) ) { |
| 422 | $retval['status'] = bbp_spam_topic( $r['id'] ); |
| 423 | $retval['message'] = __( '<strong>ERROR</strong>: There was a problem marking the topic as spam.', 'wporg-forums' ); |
| 424 | } |
| 425 | $retval['view_all'] = true; |
| 426 | |
| 427 | break; |
| 428 | |
| 429 | case 'wporg_bbp_unspam_topic': |
| 430 | check_ajax_referer( "spam-{$nonce_suffix}" ); |
| 431 | |
| 432 | if ( bbp_is_topic_spam( $r['id'] ) ) { |
| 433 | $retval['status'] = bbp_unspam_topic( $r['id'] ); |
| 434 | $retval['message'] = __( '<strong>ERROR</strong>: There was a problem unmarking the topic as spam.', 'wporg-forums' ); |
| 435 | } |
| 436 | $retval['view_all'] = false; |
| 437 | |
| 438 | break; |
| 439 | |
| 440 | case 'wporg_bbp_unapprove_topic': |
| 441 | check_ajax_referer( "approve-{$nonce_suffix}" ); |
| 442 | |
| 443 | if ( ! bbp_is_topic_pending( $r['id'] ) ) { |
| 444 | $retval['status'] = bbp_unapprove_topic( $r['id'] ); |
| 445 | $retval['message'] = __( '<strong>ERROR</strong>: There was a problem unapproving the topic.', 'wporg-forums' ); |
| 446 | } |
| 447 | $retval['view_all'] = true; |
| 448 | |
| 449 | break; |
| 450 | |
| 451 | case 'wporg_bbp_approve_topic': |
| 452 | check_ajax_referer( "approve-{$nonce_suffix}" ); |
| 453 | |
| 454 | if ( bbp_is_topic_pending( $r['id'] ) ) { |
| 455 | $retval['status'] = bbp_approve_topic( $r['id'] ); |
| 456 | $retval['message'] = __( '<strong>ERROR</strong>: There was a problem approving the topic.', 'wporg-forums' ); |
| 457 | } |
| 458 | $retval['view_all'] = false; |
| 459 | |
| 460 | break; |
| 461 | } |
| 462 | |
| 463 | // Add 'view=all' if needed |
| 464 | if ( ! empty( $retval['view_all'] ) ) { |
| 465 | $retval['redirect_to'] = bbp_add_view_all( $retval['redirect_to'], true ); |
| 466 | } |
| 467 | |
| 468 | return $retval; |
| 469 | } |
| 470 | |
| 471 | /** |
| 472 | * Handle Spam, Unspam, Unapprove, Approve reply actions. |
| 473 | * |
| 474 | * By default, bbPress treats them as toggles, which may cause conflicts if |
| 475 | * the same action is performed twice by different moderators. |
| 476 | * |
| 477 | * @param array $retval { |
| 478 | * @type int $status Result of the action. |
| 479 | * @type string $message Message displayed in case of an error. |
| 480 | * @type string $redirect_to URL to redirect to. |
| 481 | * @type bool $view_all Whether to append 'view=all' to the URL. |
| 482 | * } |
| 483 | * @param array $r Parsed arguments. |
| 484 | * @param array $args Raw arguments. |
| 485 | * @return array |
| 486 | */ |
| 487 | public function handle_reply_actions( $retval, $r, $args ) { |
| 488 | $nonce_suffix = bbp_get_reply_post_type() . '_' . (int) $r['id']; |
| 489 | |
| 490 | switch ( $r['action'] ) { |
| 491 | case 'wporg_bbp_spam_reply': |
| 492 | check_ajax_referer( "spam-{$nonce_suffix}" ); |
| 493 | |
| 494 | if ( ! bbp_is_reply_spam( $r['id'] ) ) { |
| 495 | $retval['status'] = bbp_spam_reply( $r['id'] ); |
| 496 | $retval['message'] = __( '<strong>ERROR</strong>: There was a problem marking the reply as spam.', 'wporg-forums' ); |
| 497 | } |
| 498 | $retval['view_all'] = true; |
| 499 | |
| 500 | break; |
| 501 | |
| 502 | case 'wporg_bbp_unspam_reply': |
| 503 | check_ajax_referer( "spam-{$nonce_suffix}" ); |
| 504 | |
| 505 | if ( bbp_is_reply_spam( $r['id'] ) ) { |
| 506 | $retval['status'] = bbp_unspam_reply( $r['id'] ); |
| 507 | $retval['message'] = __( '<strong>ERROR</strong>: There was a problem unmarking the reply as spam.', 'wporg-forums' ); |
| 508 | } |
| 509 | $retval['view_all'] = false; |
| 510 | |
| 511 | break; |
| 512 | |
| 513 | case 'wporg_bbp_unapprove_reply': |
| 514 | check_ajax_referer( "approve-{$nonce_suffix}" ); |
| 515 | |
| 516 | if ( ! bbp_is_reply_pending( $r['id'] ) ) { |
| 517 | $retval['status'] = bbp_unapprove_reply( $r['id'] ); |
| 518 | $retval['message'] = __( '<strong>ERROR</strong>: There was a problem unapproving the reply.', 'wporg-forums' ); |
| 519 | } |
| 520 | $retval['view_all'] = true; |
| 521 | |
| 522 | break; |
| 523 | |
| 524 | case 'wporg_bbp_approve_reply': |
| 525 | check_ajax_referer( "approve-{$nonce_suffix}" ); |
| 526 | |
| 527 | if ( bbp_is_reply_pending( $r['id'] ) ) { |
| 528 | $retval['status'] = bbp_approve_reply( $r['id'] ); |
| 529 | $retval['message'] = __( '<strong>ERROR</strong>: There was a problem approving the reply.', 'wporg-forums' ); |
| 530 | } |
| 531 | $retval['view_all'] = false; |
| 532 | |
| 533 | break; |
| 534 | } |
| 535 | |
| 536 | // Add 'view=all' if needed |
| 537 | if ( ! empty( $retval['view_all'] ) ) { |
| 538 | $retval['redirect_to'] = bbp_add_view_all( $retval['redirect_to'], true ); |
| 539 | } |
| 540 | |
| 541 | return $retval; |
| 542 | } |
| 543 | |
| 544 | /** |
| 545 | * Convert Spam/Unspam, Unapprove/Approve toggle links to explicit actions. |
| 546 | * |
| 547 | * @param string $link Link HTML. |
| 548 | * @param array $r Parsed arguments. |
| 549 | * @param array $args Raw arguments. |
| 550 | * @return string Filtered link. |
| 551 | */ |
| 552 | public function convert_toggles_to_actions( $link, $r, $args ) { |
| 553 | if ( false !== strpos( $link, 'bbp_toggle_topic_spam' ) ) { |
| 554 | $action = ( bbp_is_topic_spam( $r['id'] ) ) ? 'wporg_bbp_unspam_topic' : 'wporg_bbp_spam_topic'; |
| 555 | $link = str_replace( 'bbp_toggle_topic_spam', $action, $link ); |
| 556 | |
| 557 | } elseif ( false !== strpos( $link, 'bbp_toggle_topic_approve' ) ) { |
| 558 | $action = ( bbp_is_topic_pending( $r['id'] ) ) ? 'wporg_bbp_approve_topic' : 'wporg_bbp_unapprove_topic'; |
| 559 | $link = str_replace( 'bbp_toggle_topic_approve', $action, $link ); |
| 560 | |
| 561 | } elseif ( false !== strpos( $link, 'bbp_toggle_reply_spam' ) ) { |
| 562 | $action = ( bbp_is_reply_spam( $r['id'] ) ) ? 'wporg_bbp_unspam_reply' : 'wporg_bbp_spam_reply'; |
| 563 | $link = str_replace( 'bbp_toggle_reply_spam', $action, $link ); |
| 564 | |
| 565 | } elseif ( false !== strpos( $link, 'bbp_toggle_reply_approve' ) ) { |
| 566 | $action = ( bbp_is_reply_pending( $r['id'] ) ) ? 'wporg_bbp_approve_reply' : 'wporg_bbp_unapprove_reply'; |
| 567 | $link = str_replace( 'bbp_toggle_reply_approve', $action, $link ); |
| 568 | |
| 569 | } |
| 570 | |
| 571 | return $link; |
| 572 | } |