Skip to:
Content

bbPress.org

Ticket #3349: 3349.01.patch

File 3349.01.patch, 9.0 KB (added by r-a-y, 6 months ago)
  • src/includes/common/functions.php

     
    13571357        return bbp_notify_topic_subscribers( $reply_id, $topic_id, $forum_id, $anonymous_data, $reply_author );
    13581358}
    13591359
     1360/**
     1361 * Sends emails for moderated forum posts to moderators
     1362 *
     1363 * @since 2.7.x bbPress (rXXX)
     1364 *
     1365 * @param  int  $post_id bbPress topic or reply ID
     1366 * @return bool True on success, false on failure
     1367 */
     1368function bbp_notify_forum_moderators( $post_id = 0 ) {
     1369        // Bail if importing
     1370        if ( defined( 'WP_IMPORTING' ) && WP_IMPORTING ) {
     1371                return false;
     1372        }
     1373
     1374        // If post isn't pending, bail
     1375        if ( bbp_get_pending_status_id() !== get_post_status( $post_id ) ) {
     1376                return false;
     1377        }
     1378
     1379        // Check if this is a bbPress topic or reply
     1380        if ( ! bbp_is_topic( $post_id ) && ! bbp_is_reply( $post_id ) ) {
     1381                return false;
     1382        }
     1383
     1384        // Determine bbPress type
     1385        if ( bbp_is_reply( $post_id ) ) {
     1386                $type        = 'reply';
     1387                $forum_id    = bbp_get_reply_forum_id( $post_id );
     1388                $author_name = bbp_get_reply_author_display_name( $post_id );
     1389                $content     = bbp_get_reply_content( $post_id );
     1390                $title       = bbp_get_reply_topic_title( $post_id );
     1391                $url         = bbp_get_reply_url( $post_id );
     1392        } else {
     1393                $type        = 'topic';
     1394                $forum_id    = bbp_get_topic_forum_id( $post_id );
     1395                $author_name = bbp_get_topic_author_display_name( $post_id );
     1396                $content     = bbp_get_topic_content( $post_id );
     1397                $title       = bbp_get_topic_title( $post_id );
     1398                $url         = bbp_get_topic_permalink( $post_id );
     1399        }
     1400
     1401        // Get moderator user IDs
     1402        $user_ids = bbp_get_moderator_ids( $forum_id );
     1403
     1404        // Remove author from the list
     1405        $author_key = array_search( (int) get_post( $post_id )->post_author, $user_ids, true );
     1406        if ( false !== $author_key ) {
     1407                unset( $user_ids[ $author_key ] );
     1408        }
     1409
     1410        /**
     1411         * User IDs filter to send moderation emails to.
     1412         *
     1413         * @since 2.7.x
     1414         *
     1415         * @param array $user_ids Array of user IDs
     1416         * @param int   $forum_id Forum ID
     1417         */
     1418        $user_ids = (array) apply_filters( 'bbp_forum_moderation_user_ids', $user_ids, $forum_id );
     1419
     1420        // Bail if no one to notify
     1421        if ( empty( $user_ids ) ) {
     1422                return false;
     1423        }
     1424
     1425        // Get email addresses, bail if empty
     1426        $email_addresses = bbp_get_email_addresses_from_user_ids( $user_ids );
     1427        if ( empty( $email_addresses ) ) {
     1428                return false;
     1429        }
     1430
     1431        /** Mail ******************************************************************/
     1432
     1433        // Remove content filters for email display usage
     1434        bbp_remove_all_filters( "bbp_get_{$type}_content" );
     1435        bbp_remove_all_filters( "bbp_get_{$type}_title" );
     1436        bbp_remove_all_filters( 'the_title' );
     1437
     1438        // Email variables
     1439        $blog_name   = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES );
     1440        $title       = wp_specialchars_decode( strip_tags( $title ), ENT_QUOTES );
     1441        $author_name = wp_specialchars_decode( strip_tags( $author_name ), ENT_QUOTES );
     1442        $forum_name  = wp_specialchars_decode( strip_tags( bbp_get_forum_title( $forum_id ) ), ENT_QUOTES );
     1443        $content     = wp_specialchars_decode( strip_tags( $content ), ENT_QUOTES );
     1444        $url         = bbp_add_view_all( $url, true );
     1445
     1446        $message = sprintf( esc_html__( '%1$s wrote:
     1447
     1448%2$s
     1449
     1450-----------
     1451
     1452To approve, trash or mark this post as spam, click here:
     1453%3$s
     1454
     1455You are receiving this email because you are a moderator for the %4$s forum.', 'bbpress' ),
     1456
     1457                $author_name,
     1458                $content,
     1459                $url,
     1460                $forum_name
     1461        );
     1462
     1463        /**
     1464         * Filters email message for moderation email.
     1465         *
     1466         * @since 2.7.0
     1467         *
     1468         * @param string $message  Email content
     1469         * @param int    $post_id  Moderated post ID
     1470         * @param int    $forum_id Forum ID containing the moderated post.
     1471         */
     1472        $message = apply_filters( 'bbp_forum_moderation_mail_message', $message, $post_id, $forum_id );
     1473        if ( empty( $message ) ) {
     1474                return;
     1475        }
     1476
     1477        /* translators: bbPress moderation email subject. 1: Site title, 2: Topic title, 3: Forum title */
     1478        $subject = sprintf( __( '[%1$s] Please moderate: "%2$s" from the forum "%3$s"', 'bbpress' ), $blog_name, $title, $forum_name );
     1479
     1480        /**
     1481         * Filters email subject for moderation email.
     1482         *
     1483         * @since 2.7.0
     1484         *
     1485         * @param string $title    Email subject
     1486         * @param int    $post_id  Moderated post ID
     1487         * @param int    $forum_id Forum ID containing the moderated post
     1488         */
     1489        $subject = apply_filters( 'bbp_forum_moderation_mail_subject', $subject, $post_id, $forum_id );
     1490        if ( empty( $subject ) ) {
     1491                return;
     1492        }
     1493
     1494        /** Headers ***************************************************************/
     1495
     1496        // Default bbPress X-header
     1497        $headers = array( bbp_get_email_header() );
     1498
     1499        // Get the noreply@ address
     1500        $no_reply = bbp_get_do_not_reply_address();
     1501
     1502        // Setup "From" email address
     1503        $from_email = apply_filters( 'bbp_moderation_from_email', $no_reply );
     1504
     1505        // Setup the From header
     1506        $headers[] = 'From: ' . get_bloginfo( 'name' ) . ' <' . $from_email . '>';
     1507
     1508        // Loop through addresses
     1509        foreach ( (array) $email_addresses as $address ) {
     1510                $headers[] = 'Bcc: ' . $address;
     1511        }
     1512
     1513        /** Send it ***************************************************************/
     1514
     1515        /**
     1516         * Filters mail headers for the email sent to moderators.
     1517         *
     1518         * @since 2.7.0
     1519         *
     1520         * @param array $headers Email headers
     1521         */
     1522        $headers = apply_filters( 'bbp_moderation_mail_headers', $headers  );
     1523
     1524        /**
     1525         * Filters "To" email address for the email sent to moderators.
     1526         *
     1527         * @since 2.7.0
     1528         *
     1529         * @param string $email Email address. Defaults to no-reply email address.
     1530         */
     1531        $to_email = apply_filters( 'bbp_moderation_to_email', $no_reply );
     1532
     1533
     1534        /**
     1535         * Hook to do something before email is sent to moderators.
     1536         *
     1537         * @since 2.7.0
     1538         *
     1539         * @param int   $post_id  Moderated post ID
     1540         * @param int   $forum_id Forum ID containing moderated post
     1541         * @param array $user_ids User IDs to send email to.
     1542         */
     1543        do_action( 'bbp_pre_notify_forum_moderators', $post_id, $forum_id, $user_ids );
     1544
     1545        // Send notification email
     1546        wp_mail( $to_email, $subject, $message, $headers );
     1547
     1548        /**
     1549         * Hook to do something after email is sent to moderators.
     1550         *
     1551         * @since 2.7.0
     1552         *
     1553         * @param int   $post_id  Moderated post ID
     1554         * @param int   $forum_id Forum ID containing moderated post
     1555         * @param array $user_ids User IDs to send email to.
     1556         */
     1557        do_action( 'bbp_post_notify_forum_moderators', $post_id, $forum_id, $user_ids );
     1558
     1559        // Restore previously removed filters
     1560        bbp_restore_all_filters( "bbp_get_{$type}_content" );
     1561        bbp_restore_all_filters( "bbp_get_{$type}_title" );
     1562        bbp_restore_all_filters( 'the_title' );
     1563
     1564        return true;
     1565}
     1566
    13601567/**
    13611568 * Return an array of user email addresses from an array of user IDs
    13621569 *
  • src/includes/extend/buddypress/functions.php

     
    2020add_action( 'load-settings_page_bbpress', 'bbp_maybe_create_group_forum_root' );
    2121add_action( 'bbp_delete_forum',           'bbp_maybe_delete_group_forum_root' );
    2222
     23// Moderation emails
     24add_filter( 'bbp_forum_moderation_user_ids', 'bbp_filter_forum_moderation_user_ids', 10, 2 );
     25
    2326/** BuddyPress Helpers ********************************************************/
    2427
    2528/**
     
    636639        return (bool) apply_filters( 'bbp_is_forum_group_forum', $retval, $forum_id, $group_ids );
    637640}
    638641
     642/**
     643 * Add group moderators to moderation email list.
     644 *
     645 * @since 2.7.0 bbPress (rXXX)
     646 *
     647 * @param array $user_ids User IDs to send emails to.
     648 * @param int   $forum_id Forum ID containing the moderated post.
     649 */
     650function bbp_filter_forum_moderation_user_ids( $user_ids, $forum_id ) {
     651        // Bail if not a BP group forum or groups component is inactive
     652        if ( ! bbp_is_forum_group_forum( $forum_id ) || ! bp_is_active( 'groups' ) ) {
     653                return $user_ids;
     654        }
     655
     656        // bbPress doesn't support multiple forums per group yet
     657        $group_id = current( bbp_get_forum_group_ids( $forum_id ) );
     658        if ( empty( $group_id ) ) {
     659                return $user_ids;
     660        }
     661
     662        // Fetch group moderators
     663        $mod_ids = wp_list_pluck( groups_get_group_mods( $group_id ), 'user_id' );
     664        if ( empty( $mod_ids ) ) {
     665                return $user_ids;
     666        }
     667
     668        // Merge mod user ids and return
     669        $user_ids = array_merge( $user_ids, $mod_ids );
     670        return array_unique( $user_ids );
     671}
     672
    639673/*** Group Member Status ******************************************************/
    640674
    641675/**
  • src/includes/replies/functions.php

     
    450450                                // Update the pre_spammed_replies post meta
    451451                                update_post_meta( $topic_id, '_bbp_pre_spammed_replies', $pre_spammed_replies );
    452452                        }
     453
     454                /** Pending ***********************************************************/
     455
     456                // If reply is pending, perform some actions.
     457                } elseif ( $reply_status === bbp_get_pending_status_id() ) {
     458
     459                        // Send email to moderators.
     460                        bbp_notify_forum_moderators( $reply_id );
    453461                }
    454462
    455463                /** Update counts, etc... *********************************************/