Skip to:
Content

bbPress.org

Changeset 7109


Ignore:
Timestamp:
06/09/2020 02:51:52 AM (4 years ago)
Author:
johnjamesjacoby
Message:

BuddyPress: Mark all replies when marking topic notifications as read.

This commit fixes a regression - introduced in r6845 - that was causing marking topic notifications as read to fail. It fixes it by looping through all replies to a topic and attempting to mark them all individually. It is not a particularly optimized approach, but it does resolve the regression in such a way that accounts for both topic IDs and reply IDs.

In branches/2.6, for 2.6.6.

Fixes #3213.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2.6/src/includes/extend/buddypress/notifications.php

    r7097 r7109  
    9393        $filter = 'bbp_single_new_subscription_notification';
    9494        $text   = ! empty( $secondary_item_id )
    95             ? sprintf( esc_html__( 'You have %d new reply to %2$s from %3$s', 'bbpress' ), $action_item_count, $topic_title, bp_core_get_user_displayname( $secondary_item_id ) )
    96             : sprintf( esc_html__( 'You have %d new reply to %s',             'bbpress' ), $action_item_count, $topic_title );
     95            ? sprintf( esc_html__( 'You have %1$d new reply to %2$s from %3$s', 'bbpress' ), $action_item_count, $topic_title, bp_core_get_user_displayname( $secondary_item_id ) )
     96            : sprintf( esc_html__( 'You have %1$d new reply to %2$s',           'bbpress' ), $action_item_count, $topic_title );
    9797    }
    9898
     
    155155    // Notify the topic author if not the current reply author
    156156    if ( $author_id !== $topic_author_id ) {
    157         $args['secondary_item_id'] = $secondary_item_id ;
     157        $args['secondary_item_id'] = $secondary_item_id;
    158158
    159159        bp_notifications_add_notification( $args );
     
    190190    // Get required data
    191191    $user_id  = bp_loggedin_user_id();
    192     $topic_id = intval( $_GET['topic_id'] );
     192    $topic_id = absint( $_GET['topic_id'] );
     193
     194    // By default, Redirect to this topic ID
     195    $redirect_id = $topic_id;
    193196
    194197    // Check nonce
     
    204207    if ( ! bbp_has_errors() ) {
    205208
    206         // Attempt to clear notifications for the current user from this topic
    207         $success = bp_notifications_mark_notifications_by_item_id( $user_id, $topic_id, bbp_get_component_name(), 'bbp_new_reply' );
     209        // Get these once
     210        $post_type = bbp_get_reply_post_type();
     211        $component = bbp_get_component_name();
     212
     213        // Attempt to clear notifications for this topic
     214        $marked    = bp_notifications_mark_notifications_by_item_id( $user_id, $topic_id, $component, 'bbp_new_reply' );
     215
     216        // Get all reply IDs for the topic
     217        $replies   = bbp_get_all_child_ids( $topic_id, $post_type );
     218
     219        // If topic has replies
     220        if ( ! empty( $replies ) ) {
     221
     222            // Loop through each reply and attempt to mark it
     223            foreach ( $replies as $reply_id ) {
     224
     225                // Attempt to mark notification for this reply ID
     226                $marked = bp_notifications_mark_notifications_by_item_id( $user_id, $reply_id, $component, 'bbp_new_reply' );
     227
     228                // If marked, redirect to this reply ID
     229                if ( ! empty( $marked ) ) {
     230                    $redirect_id = $reply_id;
     231                }
     232            }
     233        }
    208234
    209235        // Do additional subscriptions actions
    210         do_action( 'bbp_notifications_handler', $success, $user_id, $topic_id, $action );
     236        do_action( 'bbp_notifications_handler', $marked, $user_id, $topic_id, $action );
    211237    }
    212238
    213239    // Redirect to the topic
    214     $redirect = bbp_get_reply_url( $topic_id );
     240    $redirect = bbp_get_reply_url( $redirect_id );
    215241
    216242    // Redirect
Note: See TracChangeset for help on using the changeset viewer.