Skip to:
Content

BuddyPress.org

Ticket #6687: 6687.02.patch

File 6687.02.patch, 3.6 KB (added by imath, 9 years ago)
  • src/bp-activity/bp-activity-functions.php

    diff --git src/bp-activity/bp-activity-functions.php src/bp-activity/bp-activity-functions.php
    index 2ca8d9f..cb550c7 100644
    function bp_activity_find_mentions( $content ) { 
    133133function bp_activity_clear_new_mentions( $user_id ) {
    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
    138147/**
  • src/bp-activity/bp-activity-notifications.php

    diff --git src/bp-activity/bp-activity-notifications.php src/bp-activity/bp-activity-notifications.php
    index 7fb5e92..beafe35 100644
    add_action( 'bp_activity_sent_mention_email', 'bp_activity_at_mention_add_notifi 
    499499 * Mark at-mention notifications as read when users visit their Mentions page.
    500500 *
    501501 * @since 1.5.0
     502 * @since 2.5.0 Add the $user_id parameter
    502503 *
     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' );
     517        bp_notifications_mark_notifications_by_type( $user_id, buddypress()->activity->id, 'new_at_mention' );
    516518}
    517 add_action( 'bp_activity_screen_mentions', 'bp_activity_remove_screen_notifications' );
     519add_action( 'bp_activity_clear_new_mentions', 'bp_activity_remove_screen_notifications', 10, 1 );
    518520
    519521/**
    520522 * Mark at-mention notification as read when user visits the activity with the mention.
  • tests/phpunit/testcases/activity/notifications.php

    diff --git tests/phpunit/testcases/activity/notifications.php tests/phpunit/testcases/activity/notifications.php
    index 43d22f8..0604d0b 100644
    class BP_Tests_Activity_Notifications extends BP_UnitTestCase { 
    242242        }
    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         */
    247274        protected function create_notifications() {