Ticket #6057: 6057.02.patch
File 6057.02.patch, 34.6 KB (added by , 9 years ago) |
---|
-
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..be15f5b 100644
To view and respond to the message, log in and visit: %3$s 181 181 function bp_activity_new_comment_notification( $comment_id = 0, $commenter_id = 0, $params = array() ) { 182 182 183 183 // Set some default parameters. 184 $activity_id = 0; 185 $parent_id = 0; 186 187 extract( $params ); 188 189 $original_activity = new BP_Activity_Activity( $activity_id ); 190 191 if ( $original_activity->user_id != $commenter_id && 'no' != bp_get_user_meta( $original_activity->user_id, 'notification_activity_new_reply', true ) ) { 192 $poster_name = bp_core_get_user_displayname( $commenter_id ); 193 $thread_link = bp_activity_get_permalink( $activity_id ); 194 $settings_slug = function_exists( 'bp_get_settings_slug' ) ? bp_get_settings_slug() : 'settings'; 195 $settings_link = bp_core_get_user_domain( $original_activity->user_id ) . $settings_slug . '/notifications/'; 196 197 $poster_name = stripslashes( $poster_name ); 198 $content = bp_activity_filter_kses( stripslashes($content) ); 199 200 // Set up and send the message. 201 $ud = bp_core_get_core_userdata( $original_activity->user_id ); 202 $to = $ud->user_email; 203 $subject = bp_get_email_subject( array( 'text' => sprintf( __( '%s replied to one of your updates', 'buddypress' ), $poster_name ) ) ); 204 $message = sprintf( __( 184 $reply = (object) wp_parse_args( $params, array( 185 'activity_id' => 0, 186 'parent_id' => 0, 187 ) ); 188 189 $original_activity = new BP_Activity_Activity( $reply->activity_id ); 190 191 if ( $original_activity->user_id != $commenter_id ) { 192 // Send an email if the user has not disabled it 193 if ( 'no' != bp_get_user_meta( $original_activity->user_id, 'notification_activity_new_reply', true ) ) { 194 $poster_name = bp_core_get_user_displayname( $commenter_id ); 195 $thread_link = bp_activity_get_permalink( $reply->activity_id ); 196 $settings_slug = function_exists( 'bp_get_settings_slug' ) ? bp_get_settings_slug() : 'settings'; 197 $settings_link = bp_core_get_user_domain( $original_activity->user_id ) . $settings_slug . '/notifications/'; 198 199 $poster_name = stripslashes( $poster_name ); 200 $content = bp_activity_filter_kses( stripslashes( $reply->content ) ); 201 202 // Set up and send the message 203 $ud = bp_core_get_core_userdata( $original_activity->user_id ); 204 $to = $ud->user_email; 205 $subject = bp_get_email_subject( array( 'text' => sprintf( __( '%s replied to one of your updates', 'buddypress' ), $poster_name ) ) ); 206 $message = sprintf( __( 205 207 '%1$s replied to one of your updates: 206 208 207 209 "%2$s" … … To view your original update and all comments, log in and visit: %3$s 211 213 --------------------- 212 214 ', 'buddypress' ), $poster_name, $content, $thread_link ); 213 215 214 // Only show the disable notifications line if the settings component is enabled. 215 if ( bp_is_active( 'settings' ) ) { 216 $message .= sprintf( __( 'To disable these notifications please log in and go to: %s', 'buddypress' ), $settings_link ); 217 } 218 219 /** 220 * Filters the user email that the new comment notification will be sent to. 221 * 222 * @since 1.2.0 223 * 224 * @param string $to User email the notification is being sent to. 225 */ 226 $to = apply_filters( 'bp_activity_new_comment_notification_to', $to ); 227 228 /** 229 * Filters the new comment notification subject that will be sent to user. 230 * 231 * @since 1.2.0 232 * 233 * @param string $subject Email notification subject text. 234 * @param string $poster_name Name of the person who made the comment. 235 */ 236 $subject = apply_filters( 'bp_activity_new_comment_notification_subject', $subject, $poster_name ); 237 238 /** 239 * Filters the new comment notification message that will be sent to user. 240 * 241 * @since 1.2.0 242 * 243 * @param string $message Email notification message text. 244 * @param string $poster_name Name of the person who made the comment. 245 * @param string $content Content of the comment. 246 * @param string $thread_link URL permalink for the activity thread. 247 * @param string $settings_link URL permalink for the user's notification settings area. 248 */ 249 $message = apply_filters( 'bp_activity_new_comment_notification_message', $message, $poster_name, $content, $thread_link, $settings_link ); 216 // Only show the disable notifications line if the settings component is enabled. 217 if ( bp_is_active( 'settings' ) ) { 218 $message .= sprintf( __( 'To disable these notifications please log in and go to: %s', 'buddypress' ), $settings_link ); 219 } 250 220 251 wp_mail( $to, $subject, $message ); 221 /** 222 * Filters the user email that the new comment notification will be sent to. 223 * 224 * @since 1.2.0 225 * 226 * @param string $to User email the notification is being sent to. 227 */ 228 $to = apply_filters( 'bp_activity_new_comment_notification_to', $to ); 229 230 /** 231 * Filters the new comment notification subject that will be sent to user. 232 * 233 * @since 1.2.0 234 * 235 * @param string $subject Email notification subject text. 236 * @param string $poster_name Name of the person who made the comment. 237 */ 238 $subject = apply_filters( 'bp_activity_new_comment_notification_subject', $subject, $poster_name ); 239 240 /** 241 * Filters the new comment notification message that will be sent to user. 242 * 243 * @since 1.2.0 244 * 245 * @param string $message Email notification message text. 246 * @param string $poster_name Name of the person who made the comment. 247 * @param string $content Content of the comment. 248 * @param string $thread_link URL permalink for the activity thread. 249 * @param string $settings_link URL permalink for the user's notification settings area. 250 */ 251 $message = apply_filters( 'bp_activity_new_comment_notification_message', $message, $poster_name, $content, $thread_link, $settings_link ); 252 253 wp_mail( $to, $subject, $message ); 254 255 /** 256 * Fires after the sending of a reply to an update email notification. 257 * 258 * @since 1.5.0 259 * 260 * @param int $user_id ID of the original activity item author. 261 * @param string $subject Email notification subject text. 262 * @param string $message Email notification message text. 263 * @param int $comment_id ID for the newly received comment. 264 * @param int $commenter_id ID of the user who made the comment. 265 * @param array $params Arguments used with the original activity comment. 266 */ 267 do_action( 'bp_activity_sent_reply_to_update_email', $original_activity->user_id, $subject, $message, $comment_id, $commenter_id, $params ); 268 } 252 269 253 270 /** 254 * Fires after the sending of a reply to an update email notification. 255 * 256 * @since 1.5.0 257 * 258 * @param int $user_id ID of the original activity item author. 259 * @param string $subject Email notification subject text. 260 * @param string $message Email notification message text. 261 * @param int $comment_id ID for the newly received comment. 262 * @param int $commenter_id ID of the user who made the comment. 263 * @param array $params Arguments used with the original activity comment. 264 */ 265 do_action( 'bp_activity_sent_reply_to_update_email', $original_activity->user_id, $subject, $message, $comment_id, $commenter_id, $params ); 271 * Trigger the 'update_reply' notification. 272 * 273 * @since 2.5.0 274 * 275 * @param BP_Activity_Activity $original_activity the original activity. 276 * @param int $comment_id ID for the newly received comment. 277 * @param int $commenter_id ID of the user who made the comment. 278 * @param object $reply Arguments used with the original activity comment. 279 */ 280 do_action( 'bp_activity_sent_reply_to_update_notification', $original_activity, $comment_id, $commenter_id, $reply ); 266 281 } 267 282 268 283 /* 269 284 * If this is a reply to another comment, send an email notification to the 270 285 * author of the immediate parent comment. 271 286 */ 272 if ( empty( $ parent_id ) || ( $activity_id == $parent_id ) ) {287 if ( empty( $reply->parent_id ) || ( $reply->activity_id == $reply->parent_id ) ) { 273 288 return false; 274 289 } 275 290 276 $parent_comment = new BP_Activity_Activity( $ parent_id );291 $parent_comment = new BP_Activity_Activity( $reply->parent_id ); 277 292 278 if ( $parent_comment->user_id != $commenter_id && $original_activity->user_id != $parent_comment->user_id && 'no' != bp_get_user_meta( $parent_comment->user_id, 'notification_activity_new_reply', true ) ) { 279 $poster_name = bp_core_get_user_displayname( $commenter_id ); 280 $thread_link = bp_activity_get_permalink( $activity_id ); 281 $settings_slug = function_exists( 'bp_get_settings_slug' ) ? bp_get_settings_slug() : 'settings'; 282 $settings_link = bp_core_get_user_domain( $parent_comment->user_id ) . $settings_slug . '/notifications/'; 293 if ( $parent_comment->user_id != $commenter_id && $original_activity->user_id != $parent_comment->user_id ) { 294 // Send an email if the user has not disabled it 295 if ( 'no' != bp_get_user_meta( $parent_comment->user_id, 'notification_activity_new_reply', true ) ) { 296 $poster_name = bp_core_get_user_displayname( $commenter_id ); 297 $thread_link = bp_activity_get_permalink( $reply->activity_id ); 298 $settings_slug = function_exists( 'bp_get_settings_slug' ) ? bp_get_settings_slug() : 'settings'; 299 $settings_link = bp_core_get_user_domain( $parent_comment->user_id ) . $settings_slug . '/notifications/'; 283 300 284 // Set up and send the message.285 $ud= bp_core_get_core_userdata( $parent_comment->user_id );286 $to= $ud->user_email;287 $subject = bp_get_email_subject( array( 'text' => sprintf( __( '%s replied to one of your comments', 'buddypress' ), $poster_name ) ) );301 // Set up and send the message 302 $ud = bp_core_get_core_userdata( $parent_comment->user_id ); 303 $to = $ud->user_email; 304 $subject = bp_get_email_subject( array( 'text' => sprintf( __( '%s replied to one of your comments', 'buddypress' ), $poster_name ) ) ); 288 305 289 $poster_name = stripslashes( $poster_name );290 $content = bp_activity_filter_kses( stripslashes( $content ) );306 $poster_name = stripslashes( $poster_name ); 307 $content = bp_activity_filter_kses( stripslashes( $reply->content ) ); 291 308 292 309 $message = sprintf( __( 293 310 '%1$s replied to one of your comments: … … To view the original activity, your comment and all replies, log in and visit: % 299 316 --------------------- 300 317 ', 'buddypress' ), $poster_name, $content, $thread_link ); 301 318 302 // Only show the disable notifications line if the settings component is enabled. 303 if ( bp_is_active( 'settings' ) ) { 304 $message .= sprintf( __( 'To disable these notifications please log in and go to: %s', 'buddypress' ), $settings_link ); 305 } 306 307 /** 308 * Filters the user email that the new comment reply notification will be sent to. 309 * 310 * @since 1.2.0 311 * 312 * @param string $to User email the notification is being sent to. 313 */ 314 $to = apply_filters( 'bp_activity_new_comment_notification_comment_author_to', $to ); 315 316 /** 317 * Filters the new comment reply notification subject that will be sent to user. 318 * 319 * @since 1.2.0 320 * 321 * @param string $subject Email notification subject text. 322 * @param string $poster_name Name of the person who made the comment reply. 323 */ 324 $subject = apply_filters( 'bp_activity_new_comment_notification_comment_author_subject', $subject, $poster_name ); 325 326 /** 327 * Filters the new comment reply notification message that will be sent to user. 328 * 329 * @since 1.2.0 330 * 331 * @param string $message Email notification message text. 332 * @param string $poster_name Name of the person who made the comment reply. 333 * @param string $content Content of the comment reply. 334 * @param string $settings_link URL permalink for the user's notification settings area. 335 * @param string $thread_link URL permalink for the activity thread. 336 */ 337 $message = apply_filters( 'bp_activity_new_comment_notification_comment_author_message', $message, $poster_name, $content, $settings_link, $thread_link ); 319 // Only show the disable notifications line if the settings component is enabled. 320 if ( bp_is_active( 'settings' ) ) { 321 $message .= sprintf( __( 'To disable these notifications please log in and go to: %s', 'buddypress' ), $settings_link ); 322 } 338 323 339 wp_mail( $to, $subject, $message ); 324 /** 325 * Filters the user email that the new comment reply notification will be sent to. 326 * 327 * @since 1.2.0 328 * 329 * @param string $to User email the notification is being sent to. 330 */ 331 $to = apply_filters( 'bp_activity_new_comment_notification_comment_author_to', $to ); 332 333 /** 334 * Filters the new comment reply notification subject that will be sent to user. 335 * 336 * @since 1.2.0 337 * 338 * @param string $subject Email notification subject text. 339 * @param string $poster_name Name of the person who made the comment reply. 340 */ 341 $subject = apply_filters( 'bp_activity_new_comment_notification_comment_author_subject', $subject, $poster_name ); 342 343 /** 344 * Filters the new comment reply notification message that will be sent to user. 345 * 346 * @since 1.2.0 347 * 348 * @param string $message Email notification message text. 349 * @param string $poster_name Name of the person who made the comment reply. 350 * @param string $content Content of the comment reply. 351 * @param string $settings_link URL permalink for the user's notification settings area. 352 * @param string $thread_link URL permalink for the activity thread. 353 */ 354 $message = apply_filters( 'bp_activity_new_comment_notification_comment_author_message', $message, $poster_name, $content, $settings_link, $thread_link ); 355 356 wp_mail( $to, $subject, $message ); 357 358 /** 359 * Fires after the sending of a reply to a reply email notification. 360 * 361 * @since 1.5.0 362 * 363 * @param int $user_id ID of the parent activity item author. 364 * @param string $subject Email notification subject text. 365 * @param string $message Email notification message text. 366 * @param int $comment_id ID for the newly received comment. 367 * @param int $commenter_id ID of the user who made the comment. 368 * @param array $params Arguments used with the original activity comment. 369 */ 370 do_action( 'bp_activity_sent_reply_to_reply_email', $parent_comment->user_id, $subject, $message, $comment_id, $commenter_id, $params ); 371 } 340 372 341 373 /** 342 * Fires after the sending of a reply to a reply email notification. 343 * 344 * @since 1.5.0 345 * 346 * @param int $user_id ID of the parent activity item author. 347 * @param string $subject Email notification subject text. 348 * @param string $message Email notification message text. 349 * @param int $comment_id ID for the newly received comment. 350 * @param int $commenter_id ID of the user who made the comment. 351 * @param array $params Arguments used with the original activity comment. 352 */ 353 do_action( 'bp_activity_sent_reply_to_reply_email', $parent_comment->user_id, $subject, $message, $comment_id, $commenter_id, $params ); 374 * Trigger the comment_reply notification. 375 * 376 * @since 2.5.0 377 * 378 * @param BP_Activity_Activity $parent_comment the parent activity. 379 * @param int $comment_id ID for the newly received comment. 380 * @param int $commenter_id ID of the user who made the comment. 381 * @param object $reply Arguments used with the original activity comment. 382 */ 383 do_action( 'bp_activity_sent_reply_to_reply_notification', $parent_comment, $comment_id, $commenter_id, $reply ); 354 384 } 355 385 } 356 386 … … add_action( 'bp_activity_comment_posted', 'bp_activity_new_comment_notification_ 389 419 * @return string $return Formatted @mention notification. 390 420 */ 391 421 function bp_activity_format_notifications( $action, $item_id, $secondary_item_id, $total_items, $format = 'string' ) { 422 $action_filter = $action; 423 $return = false; 424 $activity_id = $item_id; 425 $user_id = $secondary_item_id; 426 $user_fullname = bp_core_get_user_displayname( $user_id ); 392 427 393 428 switch ( $action ) { 394 429 case 'new_at_mention': 395 $activity_id = $item_id; 396 $poster_user_id = $secondary_item_id; 397 $at_mention_link = bp_loggedin_user_domain() . bp_get_activity_slug() . '/mentions/'; 398 $at_mention_title = sprintf( __( '@%s Mentions', 'buddypress' ), bp_get_loggedin_user_username() ); 399 $amount = 'single'; 430 $action_filter = 'at_mentions'; 431 $link = bp_loggedin_user_domain() . bp_get_activity_slug() . '/mentions/'; 432 $title = sprintf( __( '@%s Mentions', 'buddypress' ), bp_get_loggedin_user_username() ); 433 $amount = 'single'; 400 434 401 435 if ( (int) $total_items > 1 ) { 402 436 $text = sprintf( __( 'You have %1$d new mentions', 'buddypress' ), (int) $total_items ); 403 437 $amount = 'multiple'; 404 438 } else { 405 $user_fullname = bp_core_get_user_displayname( $poster_user_id );406 439 $text = sprintf( __( '%1$s mentioned you', 'buddypress' ), $user_fullname ); 407 440 } 408 441 break; 442 443 case 'update_reply': 444 $link = bp_get_notifications_permalink(); 445 $title = __( 'New Activity reply', 'buddypress' ); 446 $amount = 'single'; 447 448 if ( (int) $total_items > 1 ) { 449 $link = add_query_arg( 'type', $action, $link ); 450 $text = sprintf( __( 'You have %1$d new replies', 'buddypress' ), (int) $total_items ); 451 $amount = 'multiple'; 452 } else { 453 $link = bp_activity_get_permalink( $activity_id ); 454 $text = sprintf( __( '%1$s commented one of your updates', 'buddypress' ), $user_fullname ); 455 } 456 break; 457 458 case 'comment_reply': 459 $link = bp_get_notifications_permalink(); 460 $title = __( 'New Activity comment reply', 'buddypress' ); 461 $amount = 'single'; 462 463 if ( (int) $total_items > 1 ) { 464 $link = add_query_arg( 'type', $action, $link ); 465 $text = sprintf( __( 'You have %1$d new comment replies', 'buddypress' ), (int) $total_items ); 466 $amount = 'multiple'; 467 } else { 468 $link = bp_activity_get_permalink( $activity_id ); 469 $text = sprintf( __( '%1$s replied to one your activity comments', 'buddypress' ), $user_fullname ); 470 } 471 break; 409 472 } 410 473 411 474 if ( 'string' == $format ) { 412 475 413 476 /** 414 * Filters the @mentionnotification for the string format.477 * Filters the activity notification for the string format. 415 478 * 416 479 * This is a variable filter that is dependent on how many items 417 480 * need notified about. The two possible hooks are bp_activity_single_at_mentions_notification 418 481 * or bp_activity_multiple_at_mentions_notification. 419 482 * 420 483 * @since 1.5.0 484 * @since 2.5.0 use the $action_filter as a new dynamic portion of the filter name. 421 485 * 422 * @param string $string HTML anchor tag for the mention.423 * @param string $ at_mention_link The permalink for the mention.486 * @param string $string HTML anchor tag for the interaction. 487 * @param string $link The permalink for the interaction. 424 488 * @param int $total_items How many items being notified about. 425 489 * @param int $activity_id ID of the activity item being formatted. 426 * @param int $ poster_user_id ID of the user posting the mention.490 * @param int $user_id ID of the user who inited the interaction. 427 491 */ 428 $return = apply_filters( 'bp_activity_' . $amount . '_ at_mentions_notification', '<a href="' . esc_url( $at_mention_link ) . '" title="' . esc_attr( $at_mention_title ) . '">' . esc_html( $text ) . '</a>', $at_mention_link, (int) $total_items, $activity_id, $poster_user_id );492 $return = apply_filters( 'bp_activity_' . $amount . '_' . $action_filter . '_notification', '<a href="' . esc_url( $link ) . '" title="' . esc_attr( $title ) . '">' . esc_html( $text ) . '</a>', $link, (int) $total_items, $activity_id, $user_id ); 429 493 } else { 430 494 431 495 /** 432 * Filters the @mentionnotification for any non-string format.496 * Filters the activity notification for any non-string format. 433 497 * 434 498 * This is a variable filter that is dependent on how many items need notified about. 435 499 * The two possible hooks are bp_activity_single_at_mentions_notification 436 500 * or bp_activity_multiple_at_mentions_notification. 437 501 * 438 502 * @since 1.5.0 503 * @since 2.5.0 use the $action_filter as a new dynamic portion of the filter name. 439 504 * 440 * @param array $array Array holding the content and permalink for the mention notification.441 * @param string $ at_mention_link The permalink for the mention.505 * @param array $array Array holding the content and permalink for the interaction notification. 506 * @param string $link The permalink for the interaction. 442 507 * @param int $total_items How many items being notified about. 443 508 * @param int $activity_id ID of the activity item being formatted. 444 * @param int $ poster_user_id ID of the user posting the mention.509 * @param int $user_id ID of the user who inited the interaction. 445 510 */ 446 $return = apply_filters( 'bp_activity_' . $amount . '_ at_mentions_notification', array(511 $return = apply_filters( 'bp_activity_' . $amount . '_' . $action_filter . '_notification', array( 447 512 'text' => $text, 448 'link' => $ at_mention_link449 ), $ at_mention_link, (int) $total_items, $activity_id, $poster_user_id );513 'link' => $link 514 ), $link, (int) $total_items, $activity_id, $user_id ); 450 515 } 451 516 452 517 /** … … function bp_activity_format_notifications( $action, $item_id, $secondary_item_id 456 521 * 457 522 * @param string $action The type of activity item. 458 523 * @param int $item_id The activity ID. 459 * @param int $secondary_item_id @mention mentioner ID.524 * @param int $secondary_item_id The user ID who inited the interaction. 460 525 * @param int $total_items Total amount of items to format. 461 526 */ 462 527 do_action( 'activity_format_notifications', $action, $item_id, $secondary_item_id, $total_items ); … … function bp_activity_at_mention_add_notification( $activity, $subject, $message, 496 561 add_action( 'bp_activity_sent_mention_email', 'bp_activity_at_mention_add_notification', 10, 5 ); 497 562 498 563 /** 564 * Notify a member one of their activity received a reply. 565 * 566 * @since 2.5.0 567 * 568 * @param BP_Activity_Activity $activity the original activity. 569 * @param int $comment_id ID for the newly received comment. 570 * @param int $commenter_id ID of the user who made the comment. 571 * @param object $reply Arguments used with the original activity comment. 572 */ 573 function bp_activity_update_reply_add_notification( $activity, $comment_id, $commenter_id ) { 574 if ( bp_is_active( 'notifications' ) ) { 575 bp_notifications_add_notification( array( 576 'user_id' => $activity->user_id, 577 'item_id' => $activity->id, 578 'secondary_item_id' => $commenter_id, 579 'component_name' => buddypress()->activity->id, 580 'component_action' => 'update_reply', 581 'date_notified' => bp_core_current_time(), 582 'is_new' => 1, 583 ) ); 584 } 585 } 586 add_action( 'bp_activity_sent_reply_to_update_notification', 'bp_activity_update_reply_add_notification', 10, 3 ); 587 588 /** 589 * Notify a member one of their activity comment received a reply. 590 * 591 * @since 2.5.0 592 * 593 * @param BP_Activity_Activity $activity_comment the parent activity. 594 * @param int $comment_id ID for the newly received comment. 595 * @param int $commenter_id ID of the user who made the comment. 596 * @param object $reply Arguments used with the original activity comment. 597 */ 598 function bp_activity_comment_reply_add_notification( $activity_comment, $comment_id, $commenter_id ) { 599 if ( bp_is_active( 'notifications' ) ) { 600 bp_notifications_add_notification( array( 601 'user_id' => $activity_comment->user_id, 602 'item_id' => $activity_comment->item_id, 603 'secondary_item_id' => $commenter_id, 604 'component_name' => buddypress()->activity->id, 605 'component_action' => 'comment_reply', 606 'date_notified' => bp_core_current_time(), 607 'is_new' => 1, 608 ) ); 609 } 610 } 611 add_action( 'bp_activity_sent_reply_to_reply_notification', 'bp_activity_comment_reply_add_notification', 10, 3 ); 612 613 /** 499 614 * Mark at-mention notifications as read when users visit their Mentions page. 500 615 * 501 616 * @since 1.5.0 … … add_action( 'bp_activity_screen_mentions', 'bp_activity_remove_screen_notificati 520 635 * Mark at-mention notification as read when user visits the activity with the mention. 521 636 * 522 637 * @since 2.0.0 638 * @since 2.5.0 Mark notifications for 'update_reply' and 'comment_reply' actions 523 639 * 524 640 * @param BP_Activity_Activity $activity Activity object. 525 641 */ … … function bp_activity_remove_screen_notifications_single_activity_permalink( $act 532 648 return; 533 649 } 534 650 535 // Mark as read any notifications for the current user related to this activity item. 536 bp_notifications_mark_notifications_by_item_id( bp_loggedin_user_id(), $activity->id, buddypress()->activity->id, 'new_at_mention' ); 651 /** 652 * Filter here to add the notification actions to mark as read 653 * when the single activity is displayed. 654 * 655 * @since 2.5.0 656 * 657 * @param array $value List of notification actions to mark as read. 658 */ 659 $notification_actions = apply_filters( 'bp_activity_notification_actions_single_activity', array( 660 'new_at_mention', 661 'update_reply', 662 'comment_reply', 663 ) ); 664 665 $user_id = bp_loggedin_user_id(); 666 $component = buddypress()->activity->id; 667 668 foreach ( $notification_actions as $action ) { 669 // Mark as read any notifications for the current user related to this activity item. 670 bp_notifications_mark_notifications_by_item_id( $user_id, $activity->id, $component, $action ); 671 } 537 672 } 538 673 add_action( 'bp_activity_screen_single_activity_permalink', 'bp_activity_remove_screen_notifications_single_activity_permalink' ); 539 674 -
src/bp-notifications/bp-notifications-template.php
diff --git src/bp-notifications/bp-notifications-template.php src/bp-notifications/bp-notifications-template.php index f03f4f8..98c4f3f 100644
function bp_has_notifications( $args = '' ) { 512 512 $user_id = bp_loggedin_user_id(); 513 513 } 514 514 515 // Set the component action (by default false to get all actions) 516 $component_action = false; 517 518 if ( isset( $_REQUEST['type'] ) ) { 519 $component_action = sanitize_key( $_REQUEST['type'] ); 520 } 521 522 // Set the search terms (by default an empty string to get all notifications) 523 $search_terms = ''; 524 525 if ( isset( $_REQUEST['s'] ) ) { 526 $search_terms = stripslashes( $_REQUEST['s'] ); 527 } 528 515 529 // Parse the args. 516 530 $r = bp_parse_args( $args, array( 517 531 'id' => false, 518 532 'user_id' => $user_id, 519 533 'secondary_item_id' => false, 520 534 'component_name' => bp_notifications_get_registered_components(), 521 'component_action' => false,535 'component_action' => $component_action, 522 536 'is_new' => $is_new, 523 'search_terms' => isset( $_REQUEST['s'] ) ? stripslashes( $_REQUEST['s'] ) : '',537 'search_terms' => $search_terms, 524 538 'order_by' => 'date_notified', 525 539 'sort_order' => 'DESC', 526 540 'meta_query' => false, -
tests/phpunit/testcases/activity/notifications.php
diff --git tests/phpunit/testcases/activity/notifications.php tests/phpunit/testcases/activity/notifications.php index 43d22f8..4ed0068 100644
class BP_Tests_Activity_Notifications extends BP_UnitTestCase { 260 260 'content' => sprintf( 'Hello! @%s', $u2_mentionname ), 261 261 ) ); 262 262 } 263 264 /** 265 * @group bp_activity_new_comment_notification 266 */ 267 public function test_bp_activity_new_comment_notification() { 268 $this->activity_c_or_r_data = array(); 269 270 $a = $this->factory->activity->create( array( 271 'user_id' => $this->u1, 272 'component' => buddypress()->activity->id, 273 'type' => 'activity_update', 274 'content' => 'Please comment this activity.', 275 ) ); 276 277 add_action( 'bp_activity_sent_reply_to_update_email', array( $this, 'new_activity_comment_get_data' ), 10, 2 ); 278 add_action( 'bp_activity_sent_reply_to_reply_email', array( $this, 'new_activity_comment_get_data' ), 10, 2 ); 279 280 $c = bp_activity_new_comment( array( 281 'content' => 'this is the comment', 282 'user_id' => $this->u2, 283 'activity_id' => $a, // ID of the root activity item. 284 'parent_id' => false // ID of a parent comment (optional). 285 ) ); 286 287 $poster_name = bp_core_get_user_displayname( $this->u2 ); 288 $expected_c = bp_get_email_subject( array( 'text' => sprintf( __( '%s replied to one of your updates', 'buddypress' ), $poster_name ) ) ); 289 290 // Activity author should be notified 291 $this->assertTrue( 1 === count( $this->activity_c_or_r_data ) ); 292 $this->assertEquals( $expected_c, $this->activity_c_or_r_data['bp_activity_sent_reply_to_update_email'][1] ); 293 $this->assertEquals( $this->u1, $this->activity_c_or_r_data['bp_activity_sent_reply_to_update_email'][0] ); 294 295 // reset 296 $this->activity_c_or_r_data = array(); 297 298 $r = bp_activity_new_comment( array( 299 'content' => 'this is the comment', 300 'user_id' => $this->u1, 301 'activity_id' => $a, // ID of the root activity item. 302 'parent_id' => $c // ID of a parent comment (optional). 303 ) ); 304 305 $poster_name = bp_core_get_user_displayname( $this->u1 ); 306 $expected_r = bp_get_email_subject( array( 'text' => sprintf( __( '%s replied to one of your comments', 'buddypress' ), $poster_name ) ) ); 307 308 // Comment author should be notified 309 $this->assertTrue( 1 === count( $this->activity_c_or_r_data ) ); 310 $this->assertEquals( $expected_r, $this->activity_c_or_r_data['bp_activity_sent_reply_to_reply_email'][1] ); 311 $this->assertEquals( $this->u2, $this->activity_c_or_r_data['bp_activity_sent_reply_to_reply_email'][0] ); 312 313 $u3 = $this->factory->user->create(); 314 315 // reset 316 $this->activity_c_or_r_data = array(); 317 318 $r3 = bp_activity_new_comment( array( 319 'content' => 'this is a reply to a comment', 320 'user_id' => $u3, 321 'activity_id' => $a, // ID of the root activity item. 322 'parent_id' => $c // ID of a parent comment (optional). 323 ) ); 324 325 $poster_name = bp_core_get_user_displayname( $u3 ); 326 $expected_c3 = bp_get_email_subject( array( 'text' => sprintf( __( '%s replied to one of your updates', 'buddypress' ), $poster_name ) ) ); 327 $expected_r3 = bp_get_email_subject( array( 'text' => sprintf( __( '%s replied to one of your comments', 'buddypress' ), $poster_name ) ) ); 328 329 // Activity & Comment authors should be notified 330 $this->assertTrue( 2 === count( $this->activity_c_or_r_data ) ); 331 $this->assertEquals( $expected_c3, $this->activity_c_or_r_data['bp_activity_sent_reply_to_update_email'][1] ); 332 $this->assertEquals( $this->u1, $this->activity_c_or_r_data['bp_activity_sent_reply_to_update_email'][0] ); 333 $this->assertEquals( $expected_r3, $this->activity_c_or_r_data['bp_activity_sent_reply_to_reply_email'][1] ); 334 $this->assertEquals( $this->u2, $this->activity_c_or_r_data['bp_activity_sent_reply_to_reply_email'][0] ); 335 336 remove_action( 'bp_activity_sent_reply_to_reply_email', array( $this, 'new_activity_comment_get_data' ), 10, 2 ); 337 remove_action( 'bp_activity_sent_reply_to_update_email', array( $this, 'new_activity_comment_get_data' ), 10, 2 ); 338 } 339 340 public function new_activity_comment_get_data() { 341 $this->activity_c_or_r_data[ current_filter() ] = func_get_args(); 342 } 343 344 /** 345 * @group bp_activity_format_notifications 346 */ 347 public function test_bp_activity_format_notifications_new_at_mention() { 348 $this->test_format_filter = array(); 349 350 // Current user is $this->u1, so $this->u2 posted the mention 351 $a = $this->factory->activity->create( array( 352 'user_id' => $this->u2, 353 'component' => buddypress()->activity->id, 354 'type' => 'activity_update', 355 'content' => 'fake new_at_mention activity', 356 ) ); 357 358 add_filter( 'bp_activity_single_at_mentions_notification', array( $this, 'format_notification_filter' ), 10, 1 ); 359 add_filter( 'bp_activity_multiple_at_mentions_notification', array( $this, 'format_notification_filter' ), 10, 1 ); 360 361 $format_tests = array( 362 'array_single' => bp_activity_format_notifications( 'new_at_mention', $a, $this->u2, 1, 'array' ), 363 'string_single' => bp_activity_format_notifications( 'new_at_mention', $a, $this->u2, 1 ), 364 'array_multiple' => bp_activity_format_notifications( 'new_at_mention', $a, $this->u2, 2, 'array' ), 365 'string_multiple' => bp_activity_format_notifications( 'new_at_mention', $a, $this->u2, 2 ), 366 ); 367 368 remove_filter( 'bp_activity_single_at_mentions_notification', array( $this, 'format_notification_filter' ), 10, 1 ); 369 remove_filter( 'bp_activity_multiple_at_mentions_notification', array( $this, 'format_notification_filter' ), 10, 1 ); 370 371 $single = sprintf( __( '%1$s mentioned you', 'buddypress' ), bp_core_get_user_displayname( $this->u2 ) ); 372 $multiple = 'You have 2 new mentions'; 373 374 $this->assertContains( $single, $format_tests['string_single'] ); 375 $this->assertContains( $single, $format_tests['array_single']['text'] ); 376 $this->assertContains( $multiple, $format_tests['string_multiple'] ); 377 $this->assertContains( $multiple, $format_tests['array_multiple']['text'] ); 378 379 // Check filters 380 $this->assertTrue( 4 === count( $this->test_format_filter ) ); 381 } 382 383 public function format_notification_filter( $return ) { 384 $this->test_format_filter[] = current_filter(); 385 return $return; 386 } 387 388 /** 389 * @group bp_activity_update_reply_add_notification 390 * @group bp_activity_comment_reply_add_notification 391 */ 392 public function test_bp_activity_comment_add_notification() { 393 $a = $this->factory->activity->create( array( 394 'user_id' => $this->u1, 395 'component' => buddypress()->activity->id, 396 'type' => 'activity_update', 397 'content' => 'Please comment this activity.', 398 ) ); 399 400 $c = bp_activity_new_comment( array( 401 'content' => 'this is the comment', 402 'user_id' => $this->u2, 403 'activity_id' => $a, // ID of the root activity item. 404 'parent_id' => false // ID of a parent comment (optional). 405 ) ); 406 407 $u3 = $this->factory->user->create(); 408 409 $r3 = bp_activity_new_comment( array( 410 'content' => 'this is a reply to a comment', 411 'user_id' => $u3, 412 'activity_id' => $a, // ID of the root activity item. 413 'parent_id' => $c // ID of a parent comment (optional). 414 ) ); 415 416 $u1_notifications = BP_Notifications_Notification::get( array( 417 'user_id' => $this->u1, 418 ) ); 419 420 $expected_commenters = array( $this->u2, $u3 ); 421 $this->assertEquals( $expected_commenters, wp_list_pluck( $u1_notifications, 'secondary_item_id' ) ); 422 423 $u2_notifications = BP_Notifications_Notification::get( array( 424 'user_id' => $this->u2, 425 ) ); 426 427 $expected_commenter = array( $u3 ); 428 $this->assertEquals( $expected_commenter, wp_list_pluck( $u2_notifications, 'secondary_item_id' ) ); 429 } 263 430 }