<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[BuddyPress][10457] trunk: Make sure notifications are marked as read when loading new mentions from the activity directory.</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta" style="font-size: 105%">
<dt style="float: left; width: 6em; font-weight: bold">Revision</dt> <dd><a style="font-weight: bold" href="http://buddypress.trac.wordpress.org/changeset/10457">10457</a><script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","description":"Review this Commit","action":{"@type":"ViewAction","url":"http://buddypress.trac.wordpress.org/changeset/10457","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>imath</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2016-01-19 19:55:22 +0000 (Tue, 19 Jan 2016)</dd>
</dl>

<pre style='padding-left: 1em; margin: 2em 0; border-left: 2px solid #ccc; line-height: 1.25; font-size: 105%; font-family: sans-serif'>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 <a href="http://buddypress.trac.wordpress.org/ticket/6687">#6687</a></pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunksrcbpactivitybpactivityfunctionsphp">trunk/src/bp-activity/bp-activity-functions.php</a></li>
<li><a href="#trunksrcbpactivitybpactivitynotificationsphp">trunk/src/bp-activity/bp-activity-notifications.php</a></li>
<li><a href="#trunktestsphpunittestcasesactivitynotificationsphp">trunk/tests/phpunit/testcases/activity/notifications.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunksrcbpactivitybpactivityfunctionsphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/bp-activity/bp-activity-functions.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/bp-activity/bp-activity-functions.php   2016-01-19 19:22:54 UTC (rev 10456)
+++ trunk/src/bp-activity/bp-activity-functions.php     2016-01-19 19:55:22 UTC (rev 10457)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -133,6 +133,15 @@
</span><span class="cx" style="display: block; padding: 0 10px"> function bp_activity_clear_new_mentions( $user_id ) {
</span><span class="cx" style="display: block; padding: 0 10px">        bp_delete_user_meta( $user_id, 'bp_new_mention_count' );
</span><span class="cx" style="display: block; padding: 0 10px">        bp_delete_user_meta( $user_id, 'bp_new_mentions'      );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+       /**
+        * Fires once mentions has been reset for a given user.
+        *
+        * @since  2.5.0
+        *
+        * @param  int $user_id The id of the user whose unread mentions are being reset.
+        */
+       do_action( 'bp_activity_clear_new_mentions', $user_id );
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span></span></pre></div>
<a id="trunksrcbpactivitybpactivitynotificationsphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/bp-activity/bp-activity-notifications.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/bp-activity/bp-activity-notifications.php       2016-01-19 19:22:54 UTC (rev 10456)
+++ trunk/src/bp-activity/bp-activity-notifications.php 2016-01-19 19:55:22 UTC (rev 10457)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -499,22 +499,24 @@
</span><span class="cx" style="display: block; padding: 0 10px">  * Mark at-mention notifications as read when users visit their Mentions page.
</span><span class="cx" style="display: block; padding: 0 10px">  *
</span><span class="cx" style="display: block; padding: 0 10px">  * @since 1.5.0
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * @since 2.5.0 Add the $user_id parameter
</ins><span class="cx" style="display: block; padding: 0 10px">  *
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * @param int $user_id The id of the user whose notifications are marked as read.
</ins><span class="cx" style="display: block; padding: 0 10px">  * @uses bp_notifications_mark_all_notifications_by_type()
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-function bp_activity_remove_screen_notifications() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+function bp_activity_remove_screen_notifications( $user_id = 0 ) {
</ins><span class="cx" style="display: block; padding: 0 10px">         if ( ! bp_is_active( 'notifications' ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                return;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        // Only mark read if you're looking at your own mentions.
-       if ( ! bp_is_my_profile() ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ // Only mark read if the current user is looking at his own mentions.
+       if ( empty( $user_id ) || (int) $user_id !== (int) bp_loggedin_user_id() ) {
</ins><span class="cx" style="display: block; padding: 0 10px">                 return;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        bp_notifications_mark_notifications_by_type( bp_loggedin_user_id(), buddypress()->activity->id, 'new_at_mention' );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ bp_notifications_mark_notifications_by_type( $user_id, buddypress()->activity->id, 'new_at_mention' );
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-add_action( 'bp_activity_screen_mentions', 'bp_activity_remove_screen_notifications' );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+add_action( 'bp_activity_clear_new_mentions', 'bp_activity_remove_screen_notifications', 10, 1 );
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="cx" style="display: block; padding: 0 10px">  * Mark at-mention notification as read when user visits the activity with the mention.
</span></span></pre></div>
<a id="trunktestsphpunittestcasesactivitynotificationsphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/phpunit/testcases/activity/notifications.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/phpunit/testcases/activity/notifications.php  2016-01-19 19:22:54 UTC (rev 10456)
+++ trunk/tests/phpunit/testcases/activity/notifications.php    2016-01-19 19:55:22 UTC (rev 10457)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -242,6 +242,33 @@
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        /**
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         * @group bp_activity_remove_screen_notifications
+        * @group mentions
+        * @ticket BP6687
+        */
+       public function test_bp_activity_remove_screen_notifications_on_new_mentions_cleared() {
+               $this->create_notifications();
+
+               $notifications = BP_Notifications_Notification::get( array(
+                       'item_id' => $this->a1,
+               ) );
+
+               // Double check it's there
+               $this->assertEquals( array( $this->a1 ), wp_list_pluck( $notifications, 'item_id' ) );
+               $this->assertEquals( 1, bp_get_total_mention_count_for_user( $this->u1 ) );
+
+               // Clear notifications for $this->u1
+               bp_activity_clear_new_mentions( $this->u1 );
+
+               $notifications = BP_Notifications_Notification::get( array(
+                       'item_id' => $this->a1,
+               ) );
+
+               $this->assertEmpty( $notifications, 'Notifications should be cleared when new mention metas are removed' );
+               $this->assertEmpty( bp_get_total_mention_count_for_user( $this->u1 ) );
+       }
+
+       /**
</ins><span class="cx" style="display: block; padding: 0 10px">          * Creates two notifications for $u1, one of which is for mentions
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        protected function create_notifications() {
</span></span></pre>
</div>
</div>

</body>
</html>