[buddypress-trac] [BuddyPress Trac] #7766: comments auto-created by new_blog_post activity replies do not respect post comment_status

buddypress-trac noreply at wordpress.org
Wed Apr 25 18:25:52 UTC 2018


#7766: comments auto-created by new_blog_post activity replies do not respect post
comment_status
--------------------------+-----------------------------
 Reporter:  cyclic        |      Owner:  (none)
     Type:  defect (bug)  |     Status:  new
 Priority:  normal        |  Milestone:  Awaiting Review
Component:  Blogs         |    Version:  2.9.4
 Severity:  normal        |   Keywords:
--------------------------+-----------------------------
 In a multisite BuddyPress install with the `bp-disable-blogforum-comments`
 option off, users can reply to new_blog_post activities which causes a WP
 comment to be created on the original post. Specifically,
 `bp_blogs_sync_add_from_activity_comment()` runs on the
 `bp_activity_comment_posted` hook and calls `wp_insert_comment()` with
 `'comment_approved' => 1` - and apparently never checks whether comments
 are allowed on the post in question.

 This fixes the problem by removing that action if comments are disabled on
 the post:


 {{{

 /**
  * BuddyPress does not consider whether post comments are enabled when
 users reply to a post activity.
  * Remove the action responsible for posting the comment unless comments
 are enabled.
  *
  * @param int    $comment_id      The activity ID for the posted activity
 comment.
  * @param array  $params          Parameters for the activity comment.
  * @param object $parent_activity Parameters of the parent activity item
 (in this case, the blog post).
  */
 function hcommons_constrain_activity_comments( $comment_id, $r, $activity
 ) {
         switch_to_blog( $activity->item_id );

         // BP filters comments_open to prevent comments on its own post
 types.
         // Disable it for `new_blog_post` activities.
         if ( 'new_blog_post' === $activity->type ) {
                 remove_filter( 'comments_open', 'bp_comments_open', 10, 2
 );
         }

         if ( ! comments_open( $activity->secondary_item_id ) ) {
                 remove_action( 'bp_activity_comment_posted',
 'bp_blogs_sync_add_from_activity_comment', 10, 3 );
         }

         restore_current_blog();
 }
 // Priority 5 to run before bp_blogs_sync_add_from_activity_comment()
 add_action( 'bp_activity_comment_posted',
 'hcommons_constrain_activity_comments', 5, 3 );
 }}}

 I wasn't sure the best place to put this, but it seems like
 `bp_blogs_sync_add_from_activity_comment()` should check `comments_open()`
 before calling `wp_insert_comment()`. If you agree let me know and I'll
 submit a patch.

 P.S. I had to filter `bp_comments_open()` here because it returns false
 incorrectly in some activity feeds (where is_buddypress() is true but the
 post in question isn't in fact a BP post type). I just removed that filter
 since in this case I know every post is a regular WP post and not a BP
 post type, but is that a separate multisite bug that requires its own
 `bp_force_comment_status` filter? I get the impression I might be abusing
 `comments_open()` as it seems to be intended only for post templates but I
 couldn't find a better method.

-- 
Ticket URL: <https://buddypress.trac.wordpress.org/ticket/7766>
BuddyPress Trac <http://buddypress.org/>
BuddyPress Trac


More information about the buddypress-trac mailing list