Skip to:
Content

BuddyPress.org

Changeset 10457


Ignore:
Timestamp:
01/19/2016 07:55:22 PM (9 years ago)
Author:
imath
Message:

Make sure notifications are marked as read when loading new mentions from the activity directory.

When a user has new mentions, the mentions tab of the activity directory displays the count of the new mantions available. When clicking on this tab, we need to make sure the corresponding notification entries are marked as read by the Notifications component.

Fixes #6687

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-activity/bp-activity-functions.php

    r10455 r10457  
    134134    bp_delete_user_meta( $user_id, 'bp_new_mention_count' );
    135135    bp_delete_user_meta( $user_id, 'bp_new_mentions'      );
     136
     137    /**
     138     * Fires once mentions has been reset for a given user.
     139     *
     140     * @since  2.5.0
     141     *
     142     * @param  int $user_id The id of the user whose unread mentions are being reset.
     143     */
     144    do_action( 'bp_activity_clear_new_mentions', $user_id );
    136145}
    137146
  • trunk/src/bp-activity/bp-activity-notifications.php

    r10417 r10457  
    500500 *
    501501 * @since 1.5.0
    502  *
     502 * @since 2.5.0 Add the $user_id parameter
     503 *
     504 * @param int $user_id The id of the user whose notifications are marked as read.
    503505 * @uses bp_notifications_mark_all_notifications_by_type()
    504506 */
    505 function bp_activity_remove_screen_notifications() {
     507function bp_activity_remove_screen_notifications( $user_id = 0 ) {
    506508    if ( ! bp_is_active( 'notifications' ) ) {
    507509        return;
    508510    }
    509511
    510     // Only mark read if you're looking at your own mentions.
    511     if ( ! bp_is_my_profile() ) {
     512    // Only mark read if the current user is looking at his own mentions.
     513    if ( empty( $user_id ) || (int) $user_id !== (int) bp_loggedin_user_id() ) {
    512514        return;
    513515    }
    514516
    515     bp_notifications_mark_notifications_by_type( bp_loggedin_user_id(), buddypress()->activity->id, 'new_at_mention' );
    516 }
    517 add_action( 'bp_activity_screen_mentions', 'bp_activity_remove_screen_notifications' );
     517    bp_notifications_mark_notifications_by_type( $user_id, buddypress()->activity->id, 'new_at_mention' );
     518}
     519add_action( 'bp_activity_clear_new_mentions', 'bp_activity_remove_screen_notifications', 10, 1 );
    518520
    519521/**
  • trunk/tests/phpunit/testcases/activity/notifications.php

    r9819 r10457  
    243243
    244244    /**
     245     * @group bp_activity_remove_screen_notifications
     246     * @group mentions
     247     * @ticket BP6687
     248     */
     249    public function test_bp_activity_remove_screen_notifications_on_new_mentions_cleared() {
     250        $this->create_notifications();
     251
     252        $notifications = BP_Notifications_Notification::get( array(
     253            'item_id' => $this->a1,
     254        ) );
     255
     256        // Double check it's there
     257        $this->assertEquals( array( $this->a1 ), wp_list_pluck( $notifications, 'item_id' ) );
     258        $this->assertEquals( 1, bp_get_total_mention_count_for_user( $this->u1 ) );
     259
     260        // Clear notifications for $this->u1
     261        bp_activity_clear_new_mentions( $this->u1 );
     262
     263        $notifications = BP_Notifications_Notification::get( array(
     264            'item_id' => $this->a1,
     265        ) );
     266
     267        $this->assertEmpty( $notifications, 'Notifications should be cleared when new mention metas are removed' );
     268        $this->assertEmpty( bp_get_total_mention_count_for_user( $this->u1 ) );
     269    }
     270
     271    /**
    245272     * Creates two notifications for $u1, one of which is for mentions
    246273     */
Note: See TracChangeset for help on using the changeset viewer.