| | 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 | } |