Changeset 8747
- Timestamp:
- 08/01/2014 07:58:47 PM (10 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/bp-blogs/bp-blogs-activity.php
r8715 r8747 658 658 659 659 /** 660 * Filter 'new_blog_comment' bp_has_activities() loop to include new- and old-style blog activity comment items. 661 * 662 * In BuddyPress 2.0, the schema for storing activity items related to blog 663 * posts changed. Instead creating new top-level 'new_blog_comment' activity 664 * items, blog comments are recorded in the activity stream as comments on the 665 * 'new_blog_post' activity items corresponding to the parent post. This filter 666 * ensures that the 'new_blog_comment' filter in bp_has_activities() (which 667 * powers the 'Comments' filter in the activity directory dropdown) includes 668 * both old-style and new-style activity comments. 669 * 670 * This implementation involves filtering the activity queries directly, and 671 * should be considered a stopgap. The proper solution would involve enabling 672 * multiple query condition clauses, connected by an OR, in the bp_has_activities() 673 * API. 674 * 675 * @since BuddyPress (2.1.0) 676 * 677 * @param array $args Arguments passed from bp_parse_args() in bp_has_activities(). 678 * @return array $args 679 */ 680 function bp_blogs_new_blog_comment_query_backpat( $args ) { 681 // Bail if this is not a 'new_blog_comment' query 682 if ( 'new_blog_comment' !== $args['action'] ) { 683 return $args; 684 } 685 686 // display_comments=stream is required to show new-style 687 // 'activity_comment' items inline 688 $args['display_comments'] = 'stream'; 689 690 // For the remaining clauses, we filter the SQL query directly 691 add_filter( 'bp_activity_paged_activities_sql', '_bp_blogs_new_blog_comment_query_backpat_filter' ); 692 add_filter( 'bp_activity_total_activities_sql', '_bp_blogs_new_blog_comment_query_backpat_filter' ); 693 694 // Return the original arguments 695 return $args; 696 } 697 add_filter( 'bp_after_has_activities_parse_args', 'bp_blogs_new_blog_comment_query_backpat' ); 698 699 /** 700 * Filter activity SQL to include new- and old-style 'new_blog_comment' activity items. 701 * 702 * @since BuddyPress (2.1.0) 703 * 704 * @access private 705 * @see bp_blogs_new_blog_comment_query_backpat() 706 * 707 * @param string $query SQL query as assembled in BP_Activity_Activity::get(). 708 * @return string $query Modified SQL query. 709 */ 710 function _bp_blogs_new_blog_comment_query_backpat_filter( $query ) { 711 $bp = buddypress(); 712 713 // The query passed to the filter is for old-style 'new_blog_comment' 714 // items. We include new-style 'activity_comment' items by running a 715 // subquery inside of a large OR clause. 716 $activity_comment_subquery = "SELECT a.id FROM {$bp->activity->table_name} a INNER JOIN {$bp->activity->table_name_meta} am ON (a.id = am.activity_id) WHERE am.meta_key = 'bp_blogs_post_comment_id' AND a.type = 'activity_comment'"; 717 718 // WHERE ( [original WHERE clauses] OR a.id IN (activity_comment subquery) ) 719 $query = preg_replace( '|WHERE (.*?) ORDER|', 'WHERE ( ( $1 ) OR ( a.id IN ( ' . $activity_comment_subquery . ' ) ) ) ORDER', $query ); 720 721 // Don't run this on future queries 722 remove_filter( current_filter(), '_bp_blogs_new_blog_comment_query_backpat_filter' ); 723 724 return $query; 725 } 726 727 /** 660 728 * Utility function to set up some variables for use in the activity loop. 661 729 * -
trunk/tests/phpunit/testcases/activity/template.php
r8491 r8747 310 310 311 311 /** 312 * @group bp_has_activities 313 */ 314 public function test_bp_has_activities_with_type_new_blog_comments() { 315 add_filter( 'bp_disable_blogforum_comments', '__return_false' ); 316 317 $now = time(); 318 $a1 = $this->factory->activity->create( array( 319 'content' => 'Life Rules', 320 'component' => 'blogs', 321 'type' => 'new_blog_post', 322 'recorded_time' => date( 'Y-m-d H:i:s', $now ), 323 ) ); 324 $a2 = $this->factory->activity->create( array( 325 'content' => 'Life Drools', 326 'component' => 'blogs', 327 'type' => 'new_blog_comment', 328 'recorded_time' => date( 'Y-m-d H:i:s', $now - 100 ), 329 ) ); 330 331 // This one will show up in the stream because it's a comment 332 // on a blog post 333 $a3 = bp_activity_new_comment( array( 334 'activity_id' => $a1, 335 'content' => 'Candy is good', 336 'recorded_time' => date( 'Y-m-d H:i:s', $now - 200 ), 337 ) ); 338 339 $a4 = $this->factory->activity->create( array( 340 'content' => 'Life Rulez', 341 'component' => 'activity', 342 'type' => 'activity_update', 343 'recorded_time' => date( 'Y-m-d H:i:s', $now - 300 ), 344 ) ); 345 346 // This one should not show up in the stream because it's a 347 // comment on an activity item 348 $a5 = bp_activity_new_comment( array( 349 'activity_id' => $a4, 350 'content' => 'Candy is great', 351 'recorded_time' => date( 'Y-m-d H:i:s', $now - 400 ), 352 ) ); 353 global $activities_template; 354 355 // prime 356 bp_has_activities( array( 357 'component' => 'blogs', 358 'action' => 'new_blog_comment', 359 ) ); 360 361 $this->assertEquals( array( $a3, $a2 ), wp_parse_id_list( wp_list_pluck( $activities_template->activities, 'id' ) ) ); 362 363 // Clean up 364 $activities_template = null; 365 remove_filter( 'bp_disable_blogforum_comments', '__return_false' ); 366 } 367 368 /** 312 369 * @group bp_activity_can_comment_reply 313 370 */
Note: See TracChangeset
for help on using the changeset viewer.