Skip to:
Content

BuddyPress.org

Changeset 10544


Ignore:
Timestamp:
02/07/2016 04:47:35 PM (4 years ago)
Author:
imath
Message:

Post Type Activities: generalize the Blogs component "post" comment synchronization feature to any post type.

As soon as the Blogs component is active and activity comments about Post Type activities are not disallowed, a new comment added to a post type will generate an activity comment about the corresponding Post Type Activity and vice versa.

Deprecate the Blogs component functions previously used to track the "post" post type in favor of the Activity component functions introduced in r10543.

Only load the Blogs component activity functions if the Activity component is active.

Make sure a synchronized activity comment marked as spam is also marking as spam the corresponding post type comment.

NB: some unit tests will temporarly fail after this commit. Next commit will fix the failing tests.

Props shanebp, r-a-y.

See #6482
Fixes #6793

Location:
trunk/src
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-activity/bp-activity-actions.php

    r10543 r10544  
    952952    remove_filter( 'bp_akismet_get_activity_types', $comment_akismet_history );
    953953}
     954add_action( 'transition_comment_status', 'bp_activity_transition_post_type_comment_status', 10, 3 );
  • trunk/src/bp-activity/bp-activity-functions.php

    r10543 r10544  
    24832483    return $activity_id;
    24842484}
     2485add_action( 'comment_post', 'bp_activity_post_type_comment', 10, 2 );
     2486add_action( 'edit_comment', 'bp_activity_post_type_comment', 10    );
    24852487
    24862488/**
     
    25482550    return $deleted;
    25492551}
     2552add_action( 'delete_comment', 'bp_activity_post_type_remove_comment', 10, 1 );
    25502553
    25512554/**
  • trunk/src/bp-blogs/bp-blogs-activity.php

    r10417 r10544  
    1919 */
    2020function bp_blogs_register_activity_actions() {
    21     $bp = buddypress();
    22 
    23     // Bail if activity is not active.
    24     if ( ! bp_is_active( 'activity' ) ) {
    25         return false;
    26     }
    27 
    2821    if ( is_multisite() ) {
    2922        bp_activity_set_action(
    30             $bp->blogs->id,
     23            buddypress()->blogs->id,
    3124            'new_blog',
    3225            __( 'New site created', 'buddypress' ),
     
    3831    }
    3932
    40     // Only add the comment type if the 'post' post type is trackable.
    41     if ( post_type_supports( 'post', 'buddypress-activity' ) ) {
    42         bp_activity_set_action(
    43             $bp->blogs->id,
    44             'new_blog_comment',
    45             __( 'New post comment posted', 'buddypress' ),
    46             'bp_blogs_format_activity_action_new_blog_comment',
    47             __( 'Comments', 'buddypress' ),
    48             array( 'activity', 'member' ),
    49             10
    50         );
    51     }
    52 
    5333    /**
    5434     * Fires after the registry of the default blog component activity actions.
     
    5939}
    6040add_action( 'bp_register_activity_actions', 'bp_blogs_register_activity_actions' );
     41
     42/**
     43 * Set up the tracking arguments for the 'post' post type.
     44 *
     45 * @since 2.5.0 This was moved out of the BP_Blogs_Component class.
     46 *
     47 * @see bp_activity_get_post_type_tracking_args() for information on parameters.
     48 *
     49 * @param object|null $params    Tracking arguments.
     50 * @param string|int  $post_type Post type to track.
     51 * @return object
     52 */
     53function bp_blogs_register_post_tracking_args( $params = null, $post_type = 0 ) {
     54
     55    /**
     56     * Filters the post types to track for the Blogs component.
     57     *
     58     * @since 1.5.0
     59     * @deprecated 2.3.0
     60     *
     61     * Make sure plugins still using 'bp_blogs_record_post_post_types'
     62     * to track their post types will generate new_blog_post activities
     63     * See https://buddypress.trac.wordpress.org/ticket/6306
     64     *
     65     * @param array $value Array of post types to track.
     66     */
     67    $post_types = apply_filters( 'bp_blogs_record_post_post_types', array( 'post' ) );
     68    $post_types_array = array_flip( $post_types );
     69
     70    if ( ! isset( $post_types_array[ $post_type ] ) ) {
     71        return $params;
     72    }
     73
     74    // Set specific params for the 'post' post type.
     75    $params->component_id    = buddypress()->blogs->id;
     76    $params->action_id       = 'new_blog_post';
     77    $params->admin_filter    = __( 'New post published', 'buddypress' );
     78    $params->format_callback = 'bp_blogs_format_activity_action_new_blog_post';
     79    $params->front_filter    = __( 'Posts', 'buddypress' );
     80    $params->contexts        = array( 'activity', 'member' );
     81    $params->position        = 5;
     82
     83    if ( post_type_supports( $post_type, 'comments' ) ) {
     84        $params->comment_action_id = 'new_blog_comment';
     85
     86        /**
     87         * Filters the post types to track for the Blogs component.
     88         *
     89         * @since 1.5.0
     90         * @deprecated 2.5.0
     91         *
     92         * Make sure plugins still using 'bp_blogs_record_comment_post_types'
     93         * to track comment about their post types will generate new_blog_comment activities
     94         * See https://buddypress.trac.wordpress.org/ticket/6306
     95         *
     96         * @param array $value Array of post types to track.
     97         */
     98        $comment_post_types = apply_filters( 'bp_blogs_record_comment_post_types', array( 'post' ) );
     99        $comment_post_types_array = array_flip( $comment_post_types );
     100
     101        if ( isset( $comment_post_types_array[ $post_type ] ) ) {
     102            $params->comments_tracking = new stdClass();
     103            $params->comments_tracking->component_id    = buddypress()->blogs->id;
     104            $params->comments_tracking->action_id       = 'new_blog_comment';
     105            $params->comments_tracking->admin_filter    = __( 'New post comment posted', 'buddypress' );
     106            $params->comments_tracking->format_callback = 'bp_blogs_format_activity_action_new_blog_comment';
     107            $params->comments_tracking->front_filter    = __( 'Comments', 'buddypress' );
     108            $params->comments_tracking->contexts        = array( 'activity', 'member' );
     109            $params->comments_tracking->position        = 10;
     110        }
     111    }
     112
     113    return $params;
     114}
     115add_filter( 'bp_activity_get_post_type_tracking_args', 'bp_blogs_register_post_tracking_args', 10, 2 );
    61116
    62117/**
     
    219274 */
    220275function bp_blogs_format_activity_action_new_blog_comment( $action, $activity ) {
    221     $blog_url  = bp_blogs_get_blogmeta( $activity->item_id, 'url' );
    222     $blog_name = bp_blogs_get_blogmeta( $activity->item_id, 'name' );
     276    /**
     277     * When the comment is published we are faking an activity object
     278     * to which we add 4 properties :
     279     * - the post url
     280     * - the post title
     281     * - the blog url
     282     * - the blog name
     283     * This is done to build the 'post link' part of the activity
     284     * action string.
     285     * NB: in this case the activity has not yet been created.
     286     */
     287
     288    $blog_url = false;
     289
     290    // Try to get the blog url from the activity object
     291    if ( isset( $activity->blog_url ) ) {
     292        $blog_url = $activity->blog_url;
     293    } else {
     294        $blog_url = bp_blogs_get_blogmeta( $activity->item_id, 'url' );
     295    }
     296
     297    $blog_name = false;
     298
     299    // Try to get the blog name from the activity object
     300    if ( isset( $activity->blog_name ) ) {
     301        $blog_name = $activity->blog_name;
     302    } else {
     303        $blog_name = bp_blogs_get_blogmeta( $activity->item_id, 'name' );
     304    }
    223305
    224306    if ( empty( $blog_url ) || empty( $blog_name ) ) {
     
    230312    }
    231313
    232     $post_url   = bp_activity_get_meta( $activity->id, 'post_url' );
    233     $post_title = bp_activity_get_meta( $activity->id, 'post_title' );
     314    $post_url = false;
     315
     316    // Try to get the post url from the activity object
     317    if ( isset( $activity->post_url ) ) {
     318        $post_url = $activity->post_url;
     319
     320    /**
     321     * The post_url property is not set, we need to build the url
     322     * thanks to the post id which is also saved as the secondary
     323     * item id property of the activity object.
     324     */
     325    } elseif ( ! empty( $activity->id ) ) {
     326        $post_url = bp_activity_get_meta( $activity->id, 'post_url' );
     327    }
     328
     329    $post_title = false;
     330
     331    // Should be the case when the comment has just been published
     332    if ( isset( $activity->post_title ) ) {
     333        $post_title = $activity->post_title;
     334
     335    // If activity already exists try to get the post title from activity meta
     336    } elseif ( ! empty( $activity->id ) ) {
     337        $post_title = bp_activity_get_meta( $activity->id, 'post_title' );
     338    }
    234339
    235340    // Should only be empty at the time of post creation.
     
    334439 */
    335440function bp_blogs_record_activity( $args = '' ) {
    336 
    337     // Bail if activity is not active.
    338     if ( ! bp_is_active( 'activity' ) ) {
    339         return false;
    340     }
    341 
    342     $bp = buddypress();
    343 
    344441    $defaults = array(
    345442        'user_id'           => bp_loggedin_user_id(),
     
    347444        'content'           => '',
    348445        'primary_link'      => '',
    349         'component'         => $bp->blogs->id,
     446        'component'         => buddypress()->blogs->id,
    350447        'type'              => false,
    351448        'item_id'           => false,
     
    411508 */
    412509function bp_blogs_delete_activity( $args = '' ) {
    413 
    414     // Bail if activity is not active.
    415     if ( ! bp_is_active( 'activity' ) ) {
    416         return false;
    417     }
    418 
    419510    $r = bp_parse_args( $args, array(
    420511        'item_id'           => false,
     
    523614 * Note: This is only a one-way sync - activity comments -> blog comment.
    524615 *
    525  * For blog post -> activity comment, see {@link bp_blogs_record_comment()}.
     616 * For blog post -> activity comment, see {@link bp_activity_post_type_comment()}.
    526617 *
    527618 * @since 2.0.0
     619 * @since 2.5.0 Allow custom post types to sync their comments with activity ones
    528620 *
    529621 * @param int    $comment_id      The activity ID for the posted activity comment.
     
    532624 */
    533625function bp_blogs_sync_add_from_activity_comment( $comment_id, $params, $parent_activity ) {
    534     // If parent activity isn't a blog post, stop now!
    535     if ( $parent_activity->type != 'new_blog_post' ) {
     626    // if parent activity isn't a post type having the buddypress-activity support, stop now!
     627    if ( ! bp_activity_type_supports( $parent_activity->type, 'post-type-comment-tracking' ) ) {
    536628        return;
    537629    }
     
    549641    }
    550642
     643    // Get associated post type and set default comment parent
     644    $post_type      = bp_activity_post_type_get_tracking_arg( $parent_activity->type, 'post_type' );
     645    $comment_parent = 0;
     646
    551647    // See if a parent WP comment ID exists.
    552     if ( ! empty( $params['parent_id'] ) ) {
    553         $comment_parent = bp_activity_get_meta( $params['parent_id'], 'bp_blogs_post_comment_id' );
    554     } else {
    555         $comment_parent = 0;
     648    if ( ! empty( $params['parent_id'] ) && ! empty( $post_type ) ) {
     649        $comment_parent = bp_activity_get_meta( $params['parent_id'], "bp_blogs_{$post_type}_comment_id" );
    556650    }
    557651
     
    566660        'comment_parent'       => (int) $comment_parent,
    567661        'user_id'              => $params['user_id'],
    568 
    569         // Commenting these out for now
    570         // 'comment_author_IP'    => '127.0.0.1',
    571         // 'comment_agent'        => '', .
    572662        'comment_approved'     => 1
    573663    );
    574664
    575665    // Prevent separate activity entry being made.
    576     remove_action( 'comment_post', 'bp_blogs_record_comment', 10, 2 );
     666    remove_action( 'comment_post', 'bp_activity_post_type_comment', 10, 2 );
    577667
    578668    // Handle multisite.
     
    590680
    591681    // Add meta to activity comment.
    592     bp_activity_update_meta( $comment_id, 'bp_blogs_post_comment_id', $post_comment_id );
     682    if ( ! empty( $post_type ) ) {
     683        bp_activity_update_meta( $comment_id, "bp_blogs_{$post_type}_comment_id", $post_comment_id );
     684    }
    593685
    594686    // Resave activity comment with WP comment permalink.
     
    617709
    618710    // Add the comment hook back.
    619     add_action( 'comment_post', 'bp_blogs_record_comment', 10, 2 );
     711    add_action( 'comment_post', 'bp_activity_post_type_comment', 10, 2 );
    620712
    621713    /**
     
    641733 *
    642734 * @since 2.0.0
     735 * @since 2.5.0 Add the $delected parameter
    643736 *
    644737 * @param bool $retval             Whether BuddyPress should continue or not.
    645738 * @param int  $parent_activity_id The parent activity ID for the activity comment.
    646739 * @param int  $activity_id        The activity ID for the pending deleted activity comment.
     740 * @param bool $deleted            Whether the comment was deleted or not.
    647741 * @return bool
    648742 */
    649 function bp_blogs_sync_delete_from_activity_comment( $retval, $parent_activity_id, $activity_id ) {
     743function bp_blogs_sync_delete_from_activity_comment( $retval, $parent_activity_id, $activity_id, &$deleted ) {
    650744    // Check if parent activity is a blog post.
    651745    $parent_activity = new BP_Activity_Activity( $parent_activity_id );
    652     if ( 'new_blog_post' != $parent_activity->type ) {
     746
     747    // if parent activity isn't a post type having the buddypress-activity support, stop now!
     748    if ( ! bp_activity_type_supports( $parent_activity->type, 'post-type-comment-tracking' ) ) {
    653749        return $retval;
    654750    }
     
    658754        'in'               => $activity_id,
    659755        'display_comments' => 'stream',
     756        'spam'             => 'all',
    660757    ) );
    661758
     
    678775    BP_Activity_Activity::rebuild_activity_comment_tree( $parent_activity_id );
    679776
     777    // Avoid the error message although the comments were successfully deleted
     778    $deleted = true;
     779
    680780    // We're overriding the default bp_activity_delete_comment() functionality
    681781    // so we need to return false.
    682782    return false;
    683783}
    684 add_filter( 'bp_activity_delete_comment_pre', 'bp_blogs_sync_delete_from_activity_comment', 10, 3 );
     784add_filter( 'bp_activity_delete_comment_pre', 'bp_blogs_sync_delete_from_activity_comment', 10, 4 );
    685785
    686786/**
     
    692792 */
    693793function bp_blogs_sync_activity_edit_to_post_comment( BP_Activity_Activity $activity ) {
    694     // Not an activity comment? stop now!
    695     if ( 'activity_comment' !== $activity->type ) {
    696         return;
    697     }
    698 
    699794    // This is a new entry, so stop!
    700795    // We only want edits!
    701     if ( empty( $activity->id ) ) {
     796    if ( empty( $activity->id ) || bp_disable_blogforum_comments() ) {
    702797        return;
    703798    }
    704799
    705     // Prevent recursion.
    706     remove_action( 'bp_activity_before_save', 'bp_blogs_sync_activity_edit_to_post_comment', 20 );
     800    // fetch parent activity item
     801    $parent_activity = new BP_Activity_Activity( $activity->item_id );
     802
     803    // if parent activity isn't a post type having the buddypress-activity support for comments, stop now!
     804    if ( ! bp_activity_type_supports( $parent_activity->type, 'post-type-comment-tracking' ) ) {
     805        return;
     806    }
     807
     808    $post_type = bp_activity_post_type_get_tracking_arg( $parent_activity->type, 'post_type' );
     809
     810    // No associated post type for this activity comment, stop.
     811    if ( ! $post_type ) {
     812        return;
     813    }
    707814
    708815    // Try to see if a corresponding blog comment exists.
    709     $post_comment_id = bp_activity_get_meta( $activity->id, 'bp_blogs_post_comment_id' );
     816    $post_comment_id = bp_activity_get_meta( $activity->id, "bp_blogs_{$post_type}_comment_id" );
    710817
    711818    if ( empty( $post_comment_id ) ) {
     
    713820    }
    714821
    715     // Fetch parent activity item.
    716     $parent_activity = new BP_Activity_Activity( $activity->item_id );
    717 
    718     // Sanity check.
    719     if ( 'new_blog_post' !== $parent_activity->type ) {
    720         return;
    721     }
    722 
    723822    // Handle multisite.
    724823    switch_to_blog( $parent_activity->item_id );
    725824
    726     // Update the blog post comment.
    727     wp_update_comment( array(
    728         'comment_ID'      => $post_comment_id,
    729         'comment_content' => $activity->content
    730     ) );
     825    // Get the comment status
     826    $post_comment_status = wp_get_comment_status( $post_comment_id );
     827    $old_comment_status  = $post_comment_status;
     828
     829    // No need to edit the activity, as it's the activity who's updating the comment
     830    remove_action( 'transition_comment_status',     'bp_activity_transition_post_type_comment_status', 10, 3 );
     831    remove_action( 'bp_activity_post_type_comment', 'bp_blogs_comment_sync_activity_comment',          10, 4 );
     832
     833    if ( 1 === (int) $activity->is_spam && 'spam' !== $post_comment_status ) {
     834        wp_spam_comment( $post_comment_id );
     835    } elseif ( ! $activity->is_spam ) {
     836        if ( 'spam' === $post_comment_status  ) {
     837            wp_unspam_comment( $post_comment_id );
     838        } elseif ( 'trash' === $post_comment_status ) {
     839            wp_untrash_comment( $post_comment_id );
     840        } else {
     841            // Update the blog post comment.
     842            wp_update_comment( array(
     843                'comment_ID'       => $post_comment_id,
     844                'comment_content'  => $activity->content,
     845            ) );
     846        }
     847    }
     848
     849    // Restore actions
     850    add_action( 'transition_comment_status',     'bp_activity_transition_post_type_comment_status', 10, 3 );
     851    add_action( 'bp_activity_post_type_comment', 'bp_blogs_comment_sync_activity_comment',          10, 4 );
    731852
    732853    restore_current_blog();
     
    770891 * both old-style and new-style activity comments.
    771892 *
    772  * This implementation involves filtering the activity queries directly, and
    773  * should be considered a stopgap. The proper solution would involve enabling
    774  * multiple query condition clauses, connected by an OR, in the bp_has_activities()
    775  * API.
    776  *
    777893 * @since 2.1.0
     894 * @since 2.5.0 Used for any synced Post type comments, in wp-admin or front-end contexts.
    778895 *
    779896 * @param array $args Arguments passed from bp_parse_args() in bp_has_activities().
     
    784901    $bp = buddypress();
    785902
    786     // Bail if this is not a 'new_blog_comment' query.
    787     if ( 'new_blog_comment' !== $args['action'] ) {
     903    // If activity comments are disabled for blog posts, stop now!
     904    if ( bp_disable_blogforum_comments() ) {
    788905        return $args;
    789906    }
    790907
     908    // Get the associated post type
     909    $post_type = bp_activity_post_type_get_tracking_arg( $args['action'], 'post_type' );
     910
     911    // Bail if this is not an activity associated with a post type
     912    if ( empty( $post_type ) ) {
     913        return $args;
     914    }
     915
     916    // Bail if this is an activity about posts and not comments
     917    if ( bp_activity_post_type_get_tracking_arg( $args['action'], 'comment_action_id' ) ) {
     918        return $args;
     919    }
     920
    791921    // Comment synced ?
    792     $activity_ids = $wpdb->get_col( $wpdb->prepare( "SELECT activity_id FROM {$bp->activity->table_name_meta} WHERE meta_key = %s", 'bp_blogs_post_comment_id' ) );
     922    $activity_ids = $wpdb->get_col( $wpdb->prepare( "SELECT activity_id FROM {$bp->activity->table_name_meta} WHERE meta_key = %s", "bp_blogs_{$post_type}_comment_id" ) );
    793923
    794924    if ( empty( $activity_ids ) ) {
     
    799929    $filter_query = array();
    800930
    801     if ( 'null' === $args['scope'] ) {
     931    if ( ! isset( $args['scope'] ) || 'null' === $args['scope'] ) {
    802932        $args['scope'] = '';
    803933    } elseif ( 'just-me' === $args['scope'] ) {
     
    832962    // Finally reset the action.
    833963    $args['action'] = '';
     964    $args['type']   = '';
    834965
    835966    // Return the original arguments.
    836967    return $args;
    837968}
    838 add_filter( 'bp_after_has_activities_parse_args', 'bp_blogs_new_blog_comment_query_backpat' );
     969add_filter( 'bp_after_has_activities_parse_args',                'bp_blogs_new_blog_comment_query_backpat' );
     970add_filter( 'bp_activity_list_table_filter_activity_type_items', 'bp_blogs_new_blog_comment_query_backpat' );
    839971
    840972/**
     
    858990    }
    859991
    860     // Parent not a blog post? stop now!
    861     if ( 'new_blog_post' !== $activity->type ) {
     992    // The activity type does not support comments or replies ? stop now!
     993    if ( ! bp_activity_type_supports( $activity->type, 'post-type-comment-reply' ) ) {
    862994        return;
    863995    }
     
    9361068 */
    9371069function bp_blogs_disable_activity_commenting( $retval ) {
     1070    global $activities_template;
     1071
    9381072    // If activity commenting is disabled, return current value.
     1073    if ( bp_disable_blogforum_comments() || ! isset( $activities_template->in_the_loop ) ) {
     1074        return $retval;
     1075    }
     1076
     1077    $type = bp_get_activity_type();
     1078
     1079    // It's a post type supporting comment tracking.
     1080    if ( bp_activity_type_supports( $type, 'post-type-comment-tracking' ) ) {
     1081        // The activity type is supporting comments or replies
     1082        if ( bp_activity_type_supports( $type, 'post-type-comment-reply' ) ) {
     1083            // Setup some globals we'll need to reference later.
     1084            bp_blogs_setup_activity_loop_globals( $activities_template->activity );
     1085
     1086            // If comments are closed for the WP blog post, we should disable
     1087            // activity comments for this activity entry.
     1088            if ( empty( buddypress()->blogs->allow_comments[ bp_get_activity_id() ] ) ) {
     1089                $retval = false;
     1090            }
     1091        // The activity type does not support comments or replies
     1092        } else {
     1093            $retval = false;
     1094        }
     1095    }
     1096
     1097    return $retval;
     1098}
     1099add_filter( 'bp_activity_can_comment', 'bp_blogs_disable_activity_commenting' );
     1100
     1101/**
     1102 * Limit the display of post type synced comments.
     1103 *
     1104 * @since  2.5.0
     1105 *
     1106 * When viewing the synced comments in stream mode, this prevents comments to
     1107 * be displayed twice, and avoids a Javascript error as the form to add replies
     1108 * is not available.
     1109 *
     1110 * @param  int $retval  The comment count for the activity.
     1111 * @return int          The comment count, or 0 to hide activity comment replies.
     1112 */
     1113function bp_blogs_post_type_comments_avoid_duplicates( $retval ) {
     1114    /**
     1115     * Only limit the display when Post type comments are synced with
     1116     * activity comments.
     1117     */
    9391118    if ( bp_disable_blogforum_comments() ) {
    9401119        return $retval;
    9411120    }
    9421121
    943     // Activity commenting is enabled for blog posts.
    944     switch ( bp_get_activity_action_name() ) {
    945 
    946         // We still have to disable activity commenting for 'new_blog_comment' items
    947         // commenting should only be done on the parent 'new_blog_post' item.
    948         case 'new_blog_comment' :
    949             $retval = false;
    950 
    951             break;
    952 
    953         // Check if commenting is disabled for the WP blog post
    954         // we should extrapolate this and automate this for plugins... or not.
    955         case 'new_blog_post' :
    956             global $activities_template;
    957 
    958             // Setup some globals we'll need to reference later.
    959             bp_blogs_setup_activity_loop_globals( $activities_template->activity );
    960 
    961             // If comments are closed for the WP blog post, we should disable
    962             // activity comments for this activity entry.
    963             if ( empty( buddypress()->blogs->allow_comments[bp_get_activity_id()] ) ) {
    964                 $retval = false;
    965             }
    966 
    967             break;
     1122    if ( 'activity_comment' !== bp_get_activity_type() ) {
     1123        return $retval;
     1124    }
     1125
     1126    // Check the parent activity
     1127    $parent_activity = new BP_Activity_Activity( bp_get_activity_item_id() );
     1128
     1129    if ( isset( $parent_activity->type ) && bp_activity_post_type_get_tracking_arg( $parent_activity->type, 'post_type' ) ) {
     1130        $retval = 0;
    9681131    }
    9691132
    9701133    return $retval;
    9711134}
    972 add_filter( 'bp_activity_can_comment', 'bp_blogs_disable_activity_commenting' );
     1135add_filter( 'bp_activity_get_comment_count', 'bp_blogs_post_type_comments_avoid_duplicates' );
    9731136
    9741137/**
     
    10581221    }
    10591222
    1060     $blog_comment_id = bp_activity_get_meta( $activity->id, 'bp_blogs_post_comment_id' );
    1061 
    1062     if ( ! empty( $blog_comment_id ) ) {
     1223    if ( bp_disable_blogforum_comments() ) {
     1224        return $retval;
     1225    }
     1226
     1227    $parent_activity = new BP_Activity_Activity( $activity->item_id );
     1228
     1229    if ( isset( $parent_activity->type ) && bp_activity_post_type_get_tracking_arg( $parent_activity->type, 'post_type' ) ) {
    10631230        $retval = $activity->primary_link;
    10641231    }
     
    10841251    }
    10851252
    1086     $blog_comment_id = bp_activity_get_meta( $activity->id, 'bp_blogs_post_comment_id' );
     1253    if ( bp_disable_blogforum_comments() ) {
     1254        return $retval;
     1255    }
     1256
     1257    $parent_activity = new BP_Activity_Activity( $activity->item_id );
     1258
     1259    if ( ! isset( $parent_activity->type ) ) {
     1260        return $retval;
     1261    }
     1262
     1263    $post_type = bp_activity_post_type_get_tracking_arg( $parent_activity->type, 'post_type' );
     1264
     1265    if ( ! $post_type ) {
     1266        return $retval;
     1267    }
     1268
     1269    $blog_comment_id = bp_activity_get_meta( $activity->id, "bp_blogs_{$post_type}_comment_id" );
    10871270
    10881271    if ( ! empty( $blog_comment_id ) ) {
    1089         // Fetch the parent blog post activity item.
    1090         $parent_blog_post_activity = new BP_Activity_Activity( $activity->item_id );
    1091 
    1092         // Fake a 'new_blog_comment' activity object.
    1093         $object = $activity;
    1094 
    1095         // Override 'item_id' to use blog ID.
    1096         $object->item_id = $parent_blog_post_activity->item_id;
    1097 
    1098         // Override 'secondary_item_id' to use comment ID.
    1099         $object->secondary_item_id = $blog_comment_id;
    1100 
    1101         // Now format the activity action using the 'new_blog_comment' action callback.
    1102         $retval = bp_blogs_format_activity_action_new_blog_comment( '', $object );
     1272        $bp = buddypress();
     1273
     1274        // Check if a comment action id is set for the parent activity
     1275        $comment_action_id = bp_activity_post_type_get_tracking_arg( $parent_activity->type, 'comment_action_id' );
     1276
     1277        // Use the action string callback for the activity type
     1278        if ( ! empty( $comment_action_id ) ) {
     1279            // Fake a 'new_{post_type}_comment' by cloning the activity object.
     1280            $object = clone $activity;
     1281
     1282            // Set the type of the activity to be a comment about a post type
     1283            $object->type = $comment_action_id;
     1284
     1285            // Use the blog ID as the item_id.
     1286            $object->item_id = $parent_activity->item_id;
     1287
     1288            // Use comment ID as the secondary_item_id.
     1289            $object->secondary_item_id = $blog_comment_id;
     1290
     1291            // Get the format callback for this activity comment
     1292            $format_callback = bp_activity_post_type_get_tracking_arg( $comment_action_id, 'format_callback' );
     1293
     1294            // now format the activity action using the 'new_{post_type}_comment' action callback
     1295            if ( is_callable( $format_callback ) ) {
     1296                $retval = call_user_func_array( $format_callback, array( '', $object ) );
     1297            }
     1298        }
    11031299    }
    11041300
  • trunk/src/bp-blogs/bp-blogs-filters.php

    r10374 r10544  
    6262
    6363/**
    64  * Check whether the current post can be published.
     64 * Check whether the current activity about a post or a comment can be published.
    6565 *
    6666 * Abstracted from the deprecated `bp_blogs_record_post()`.
     
    122122}
    123123add_filter( 'bp_activity_post_pre_publish', 'bp_blogs_post_pre_publish', 10, 4 );
     124add_filter( 'bp_activity_post_pre_comment', 'bp_blogs_post_pre_publish', 10, 4 );
  • trunk/src/bp-blogs/bp-blogs-functions.php

    r10426 r10544  
    478478 *
    479479 * @since 2.2.0
    480  *
    481  * @param WP_Post              $post     Post object.
    482  * @param BP_Activity_Activity $activity Activity object.
    483  */
    484 function bp_blogs_update_post_activity_meta( $post, $activity ) {
    485     if ( empty( $activity->id ) || 'post' != $post->post_type ) {
     480 * @since 2.5.0 Add the post type tracking args object parameter
     481 *
     482 * @param WP_Post              $post                 Post object.
     483 * @param BP_Activity_Activity $activity             Activity object.
     484 * @param object               $activity_post_object The post type tracking args object.
     485 */
     486function bp_blogs_update_post_activity_meta( $post, $activity, $activity_post_object ) {
     487    if ( empty( $activity->id ) || empty( $activity_post_object->action_id ) ) {
    486488        return;
    487489    }
     
    492494        bp_activity_update_meta( $activity->id, 'post_title', $post->post_title );
    493495
    494         // Now update activity meta for post comments... sigh.
    495         add_filter( 'comments_clauses', 'bp_blogs_comments_clauses_select_by_id' );
    496         $comments = get_comments( array( 'post_id' => $post->ID ) );
    497         remove_filter( 'comments_clauses', 'bp_blogs_comments_clauses_select_by_id' );
    498 
    499         if ( ! empty( $comments ) ) {
    500             $activity_ids = array();
    501             $comment_ids  = wp_list_pluck( $comments, 'comment_ID' );
    502 
    503             // Set up activity args.
    504             $args = array(
    505                 'update_meta_cache' => false,
    506                 'show_hidden'       => true,
    507                 'per_page'          => 99999,
    508             );
    509 
    510             // Query for old-style "new_blog_comment" activity items.
    511             $args['filter'] = array(
    512                 'object'       => buddypress()->blogs->id,
    513                 'action'       => 'new_blog_comment',
    514                 'secondary_id' => implode( ',', $comment_ids ),
    515             );
    516 
    517             $activities = bp_activity_get( $args );
    518             if ( ! empty( $activities['activities'] ) ) {
    519                 $activity_ids = (array) wp_list_pluck( $activities['activities'], 'id' );
     496        if ( ! empty( $activity_post_object->comments_tracking->action_id ) ) {
     497            // Now update activity meta for post comments... sigh.
     498            add_filter( 'comments_clauses', 'bp_blogs_comments_clauses_select_by_id' );
     499            $comments = get_comments( array( 'post_id' => $post->ID ) );
     500            remove_filter( 'comments_clauses', 'bp_blogs_comments_clauses_select_by_id' );
     501
     502            if ( ! empty( $comments ) ) {
     503                $activity_ids = array();
     504                $comment_ids  = wp_list_pluck( $comments, 'comment_ID' );
     505
     506                // Set up activity args.
     507                $args = array(
     508                    'update_meta_cache' => false,
     509                    'show_hidden'       => true,
     510                    'per_page'          => 99999,
     511                );
     512
     513                // Query for old-style "new_blog_comment" activity items.
     514                $args['filter'] = array(
     515                    'object'       => $activity_post_object->comments_tracking->component_id,
     516                    'action'       => $activity_post_object->comments_tracking->action_id,
     517                    'secondary_id' => implode( ',', $comment_ids ),
     518                );
     519
     520                $activities = bp_activity_get( $args );
     521                if ( ! empty( $activities['activities'] ) ) {
     522                    $activity_ids = (array) wp_list_pluck( $activities['activities'], 'id' );
     523                }
     524
     525                // Query for activity comments connected to a blog post.
     526                unset( $args['filter'] );
     527                $args['meta_query'] = array( array(
     528                    'key'     => 'bp_blogs_' . $post->post_type . '_comment_id',
     529                    'value'   => $comment_ids,
     530                    'compare' => 'IN',
     531                ) );
     532                $args['type'] = 'activity_comment';
     533                $args['display_comments'] = 'stream';
     534
     535                $activities = bp_activity_get( $args );
     536                if ( ! empty( $activities['activities'] ) ) {
     537                    $activity_ids = array_merge( $activity_ids, (array) wp_list_pluck( $activities['activities'], 'id' ) );
     538                }
     539
     540                // Update activity meta for all found activity items.
     541                if ( ! empty( $activity_ids ) ) {
     542                    foreach ( $activity_ids as $aid ) {
     543                        bp_activity_update_meta( $aid, 'post_title', $post->post_title );
     544                    }
     545                }
     546
     547                unset( $activities, $activity_ids, $comment_ids, $comments );
    520548            }
    521 
    522             // Query for activity comments connected to a blog post.
    523             unset( $args['filter'] );
    524             $args['meta_query'] = array( array(
    525                 'key'     => 'bp_blogs_post_comment_id',
    526                 'value'   => $comment_ids,
    527                 'compare' => 'IN',
    528             ) );
    529             $args['type'] = 'activity_comment';
    530             $args['display_comments'] = 'stream';
    531 
    532             $activities = bp_activity_get( $args );
    533             if ( ! empty( $activities['activities'] ) ) {
    534                 $activity_ids = array_merge( $activity_ids, (array) wp_list_pluck( $activities['activities'], 'id' ) );
    535             }
    536 
    537             // Update activity meta for all found activity items.
    538             if ( ! empty( $activity_ids ) ) {
    539                 foreach ( $activity_ids as $aid ) {
    540                     bp_activity_update_meta( $aid, 'post_title', $post->post_title );
    541                 }
    542             }
    543 
    544             unset( $activities, $activity_ids, $comment_ids, $comments );
    545549        }
    546550    }
     
    553557    }
    554558}
    555 add_action( 'bp_activity_post_type_updated', 'bp_blogs_update_post_activity_meta', 10, 2 );
    556 
    557 /**
    558  * Record a new blog comment in the BuddyPress activity stream.
    559  *
    560  * Only posts the item if blog is public and post is not password-protected.
    561  *
    562  * @param int         $comment_id  ID of the comment being recorded.
    563  * @param bool|string $is_approved Optional. The $is_approved value passed to
    564  *                                 the 'comment_post' action. Default: true.
    565  * @return bool|object Returns false on failure, the comment object on success.
    566  */
    567 function bp_blogs_record_comment( $comment_id, $is_approved = true ) {
    568     // Bail if activity component is not active.
    569     if ( ! bp_is_active( 'activity' ) ) {
    570         return;
    571     }
    572 
    573     // Get the users comment.
    574     $recorded_comment = get_comment( $comment_id );
    575 
    576     // Don't record activity if the comment hasn't been approved.
    577     if ( empty( $is_approved ) )
     559add_action( 'bp_activity_post_type_updated', 'bp_blogs_update_post_activity_meta', 10, 3 );
     560
     561/**
     562 * Update Activity and blogs meta and eventually sync comment with activity comment
     563 *
     564 * @since  2.5.0
     565 *
     566 * @param  int|bool   $activity_id          ID of recorded activity, or false if sync is active.
     567 * @param  WP_Comment $comment              The comment object.
     568 * @param  array      $activity_args        Array of activity arguments.
     569 * @param  object     $activity_post_object The post type tracking args object.
     570 * @return int|bool   Returns false if no activity, the activity id otherwise.
     571 */
     572function bp_blogs_comment_sync_activity_comment( &$activity_id, $comment = null, $activity_args = array(), $activity_post_object = null ) {
     573    if ( empty( $activity_args ) || empty( $comment->post->ID ) || empty( $activity_post_object->comment_action_id ) ) {
    578574        return false;
    579 
    580     // Don't record activity if no email address has been included.
    581     if ( empty( $recorded_comment->comment_author_email ) )
    582         return false;
    583 
    584     // Don't record activity if the comment has already been marked as spam.
    585     if ( 'spam' === $is_approved )
    586         return false;
    587 
    588     // Get the user by the comment author email.
    589     $user = get_user_by( 'email', $recorded_comment->comment_author_email );
    590 
    591     // If user isn't registered, don't record activity.
    592     if ( empty( $user ) )
    593         return false;
    594 
    595     // Get the user_id.
    596     $user_id = (int) $user->ID;
    597 
    598     // Get blog and post data.
     575    }
     576
     577    // Set the current blog id.
    599578    $blog_id = get_current_blog_id();
    600579
    601     // If blog is not trackable, do not record the activity.
    602     if ( ! bp_blogs_is_blog_trackable( $blog_id, $user_id ) )
    603         return false;
    604 
    605     $recorded_comment->post = get_post( $recorded_comment->comment_post_ID );
    606 
    607     if ( empty( $recorded_comment->post ) || is_wp_error( $recorded_comment->post ) )
    608         return false;
    609 
    610     // If this is a password protected post, don't record the comment.
    611     if ( !empty( $recorded_comment->post->post_password ) )
    612         return false;
    613 
    614     // Don't record activity if the comment's associated post isn't a WordPress Post.
    615     if ( !in_array( $recorded_comment->post->post_type, apply_filters( 'bp_blogs_record_comment_post_types', array( 'post' ) ) ) )
    616         return false;
    617 
    618     $is_blog_public = apply_filters( 'bp_is_blog_public', (int)get_blog_option( $blog_id, 'blog_public' ) );
    619 
    620     // If blog is public allow activity to be posted.
    621     if ( $is_blog_public ) {
    622 
    623         // Get activity related links.
    624         $post_permalink = get_permalink( $recorded_comment->comment_post_ID );
    625         $comment_link   = get_comment_link( $recorded_comment->comment_ID );
    626 
    627         // Setup activity args.
    628         $args = array();
    629 
    630         $args['user_id']       = $user_id;
    631         $args['content']       = apply_filters_ref_array( 'bp_blogs_activity_new_comment_content', array( $recorded_comment->comment_content, &$recorded_comment, $comment_link ) );
    632         $args['primary_link']  = apply_filters_ref_array( 'bp_blogs_activity_new_comment_primary_link', array( $comment_link,     &$recorded_comment ) );
    633         $args['recorded_time'] = $recorded_comment->comment_date_gmt;
    634 
    635         // Setup some different activity args depending if activity commenting is
    636         // enabled or not.
    637         // if cannot comment, record separate activity entry
    638         // this is the old way of doing things.
    639         if ( bp_disable_blogforum_comments() ) {
    640             $args['type']              = 'new_blog_comment';
    641             $args['item_id']           = $blog_id;
    642             $args['secondary_item_id'] = $comment_id;
    643 
    644             // Record the activity entry.
    645             $activity_id = bp_blogs_record_activity( $args );
    646 
    647             // Add some post info in activity meta.
    648             bp_activity_update_meta( $activity_id, 'post_title', $recorded_comment->post->post_title );
    649             bp_activity_update_meta( $activity_id, 'post_url',   add_query_arg( 'p', $recorded_comment->post->ID, home_url( '/' ) ) );
    650 
    651         // Record comment as BP activity comment under the parent 'new_blog_post'
    652         // activity item.
    653         } else {
    654             // This is a comment edit
    655             // check to see if corresponding activity entry already exists.
    656             if ( ! empty( $_REQUEST['action'] ) ) {
    657                 $existing_activity_id = get_comment_meta( $comment_id, 'bp_activity_comment_id', true );
    658 
    659                 if ( ! empty( $existing_activity_id ) ) {
    660                     $args['id'] = $existing_activity_id;
    661                 }
     580    // These activity metadatas are used to build the new_blog_comment action string
     581    if ( ! empty( $activity_id ) && ! empty( $activity_args['item_id'] ) && 'new_blog_comment' === $activity_post_object->comment_action_id ) {
     582        // add some post info in activity meta
     583        bp_activity_update_meta( $activity_id, 'post_title', $comment->post->post_title );
     584        bp_activity_update_meta( $activity_id, 'post_url',   esc_url_raw( add_query_arg( 'p', $comment->post->ID, home_url( '/' ) ) ) );
     585    }
     586
     587    // Sync comment - activity comment
     588    if ( ! bp_disable_blogforum_comments() ) {
     589
     590        if ( ! empty( $_REQUEST['action'] ) ) {
     591            $existing_activity_id = get_comment_meta( $comment->comment_ID, 'bp_activity_comment_id', true );
     592
     593            if ( ! empty( $existing_activity_id ) ) {
     594                $activity_args['id'] = $existing_activity_id;
    662595            }
    663 
    664             // Find the parent 'new_blog_post' activity entry.
     596        }
     597
     598        if ( empty( $activity_post_object ) ) {
     599            $activity_post_object = bp_activity_get_post_type_tracking_args( $comment->post->post_type );
     600        }
     601
     602        if ( isset( $activity_post_object->action_id ) && isset( $activity_post_object->component_id ) ) {
     603            // find the parent 'new_post_type' activity entry
    665604            $parent_activity_id = bp_activity_get_activity_id( array(
    666                 'component'         => 'blogs',
    667                 'type'              => 'new_blog_post',
     605                'component'         => $activity_post_object->component_id,
     606                'type'              => $activity_post_object->action_id,
    668607                'item_id'           => $blog_id,
    669                 'secondary_item_id' => $recorded_comment->comment_post_ID
     608                'secondary_item_id' => $comment->comment_post_ID
    670609            ) );
    671610
    672611            // Try to create a new activity item for the parent blog post.
    673612            if ( empty( $parent_activity_id ) ) {
    674                 $parent_activity_id = bp_activity_post_type_publish( $recorded_comment->comment_post_ID, $recorded_comment->post );
     613                $parent_activity_id = bp_activity_post_type_publish( $comment->post->ID, $comment->post );
    675614            }
    676 
    677             // We found the parent activity entry
    678             // so let's go ahead and reconfigure some activity args.
    679             if ( ! empty( $parent_activity_id ) ) {
    680                 // Set the 'item_id' with the parent activity entry ID.
    681                 $args['item_id'] = $parent_activity_id;
    682 
    683                 // Now see if the WP parent comment has a BP activity ID.
    684                 $comment_parent = 0;
    685                 if ( ! empty( $recorded_comment->comment_parent ) ) {
    686                     $comment_parent = get_comment_meta( $recorded_comment->comment_parent, 'bp_activity_comment_id', true );
    687                 }
    688 
    689                 // WP parent comment does not have a BP activity ID
    690                 // so set to 'new_blog_post' activity ID.
    691                 if ( empty( $comment_parent ) ) {
    692                     $comment_parent = $parent_activity_id;
    693                 }
    694 
    695                 $args['secondary_item_id'] = $comment_parent;
    696                 $args['component']         = 'activity';
    697                 $args['type']              = 'activity_comment';
    698 
    699             // Could not find corresponding parent activity entry
    700             // so wipe out $args array.
    701             } else {
    702                 $args = array();
     615        }
     616
     617        // we found the parent activity entry
     618        // so let's go ahead and reconfigure some activity args
     619        if ( ! empty( $parent_activity_id ) ) {
     620            // set the parent activity entry ID
     621            $activity_args['activity_id'] = $parent_activity_id;
     622
     623            // now see if the WP parent comment has a BP activity ID
     624            $comment_parent = 0;
     625            if ( ! empty( $comment->comment_parent ) ) {
     626                $comment_parent = get_comment_meta( $comment->comment_parent, 'bp_activity_comment_id', true );
    703627            }
    704628
    705             // Record in activity streams.
    706             if ( ! empty( $args ) ) {
    707                 // @todo should we use bp_activity_new_comment()? that function will also send
    708                 // an email to people in the activity comment thread.
    709                 //
    710                 // What if a site already has some comment email notification plugin setup?
    711                 // this is why I decided to go with bp_activity_add() to avoid any conflict
    712                 // with existing comment email notification plugins.
    713                 $comment_activity_id = bp_activity_add( $args );
    714 
    715                 if ( empty( $args['id'] ) ) {
    716                     // Add meta to activity comment.
    717                     bp_activity_update_meta( $comment_activity_id, 'bp_blogs_post_comment_id', $comment_id );
    718                     bp_activity_update_meta( $comment_activity_id, 'post_title', $recorded_comment->post->post_title );
    719                     bp_activity_update_meta( $comment_activity_id, 'post_url', add_query_arg( 'p', $recorded_comment->post->ID, home_url( '/' ) ) );
    720 
    721                     // Add meta to comment.
    722                     add_comment_meta( $comment_id, 'bp_activity_comment_id', $comment_activity_id );
     629            // WP parent comment does not have a BP activity ID
     630            // so set to 'new_' . post_type activity ID
     631            if ( empty( $comment_parent ) ) {
     632                $comment_parent = $parent_activity_id;
     633            }
     634
     635            $activity_args['parent_id']         = $comment_parent;
     636            $activity_args['skip_notification'] = true;
     637
     638        // could not find corresponding parent activity entry
     639        // so wipe out $args array
     640        } else {
     641            $activity_args = array();
     642        }
     643
     644        // Record in activity streams
     645        if ( ! empty( $activity_args ) ) {
     646            $activity_id = bp_activity_new_comment( $activity_args );
     647
     648            if ( empty( $activity_args['id'] ) ) {
     649                // The activity metadata to inform about the corresponding comment ID
     650                bp_activity_update_meta( $activity_id, "bp_blogs_{$comment->post->post_type}_comment_id", $comment->comment_ID );
     651
     652                // The comment metadata to inform about the corresponding activity ID
     653                add_comment_meta( $comment->comment_ID, 'bp_activity_comment_id', $activity_id );
     654
     655                // These activity metadatas are used to build the new_blog_comment action string
     656                if ( 'new_blog_comment' === $activity_post_object->comment_action_id ) {
     657                    bp_activity_update_meta( $activity_id, 'post_title', $comment->post->post_title );
     658                    bp_activity_update_meta( $activity_id, 'post_url', esc_url_raw( add_query_arg( 'p', $comment->post->ID, home_url( '/' ) ) ) );
    723659                }
    724660            }
    725661        }
    726 
    727         // Update the blogs last active date.
    728         bp_blogs_update_blogmeta( $blog_id, 'last_activity', bp_core_current_time() );
    729     }
    730 
    731     return $recorded_comment;
    732 }
    733 add_action( 'comment_post', 'bp_blogs_record_comment', 10, 2 );
    734 add_action( 'edit_comment', 'bp_blogs_record_comment', 10    );
     662    }
     663
     664    // Update the blogs last active date
     665    bp_blogs_update_blogmeta( $blog_id, 'last_activity', bp_core_current_time() );
     666
     667    if ( 'new_blog_comment' === $activity_post_object->comment_action_id ) {
     668        /**
     669         * Fires after BuddyPress has recorded metadata about a published blog post comment.
     670         *
     671         * @since 2.5.0
     672         *
     673         * @param int     $value    Comment ID of the blog post comment being recorded.
     674         * @param WP_Post $post  WP_Comment object for the current blog post.
     675         * @param string  $value ID of the user associated with the current blog post comment.
     676         */
     677        do_action( 'bp_blogs_new_blog_comment', $comment->comment_ID, $comment, bp_loggedin_user_id() );
     678    }
     679
     680    return $activity_id;
     681}
     682add_action( 'bp_activity_post_type_comment', 'bp_blogs_comment_sync_activity_comment', 10, 4 );
    735683
    736684/**
     
    985933
    986934/**
    987  * Remove a blog comment activity item from the activity stream.
    988  *
    989  * @param int $comment_id ID of the comment to be removed.
    990  */
    991 function bp_blogs_remove_comment( $comment_id ) {
    992     global $wpdb;
    993 
    994     // Activity comments are disabled for blog posts
    995     // which means that individual activity items exist for blog comments.
    996     if ( bp_disable_blogforum_comments() ) {
    997         // Delete the individual activity stream item.
    998         bp_blogs_delete_activity( array(
    999             'item_id'           => $wpdb->blogid,
    1000             'secondary_item_id' => $comment_id,
    1001             'type'              => 'new_blog_comment'
    1002         ) );
    1003 
    1004     // Activity comments are enabled for blog posts
    1005     // remove the associated activity item.
    1006     } else {
    1007         // Get associated activity ID from comment meta.
     935 * Remove a synced activity comment from the activity stream.
     936 *
     937 * @since 2.5.0
     938 *
     939 * @param bool   $deleted              True when a comment post type activity was successfully removed.
     940 * @param int    $comment_id           ID of the comment to be removed.
     941 * @param object $activity_post_object The post type tracking args object.
     942 * @param string $activity_type        The post type comment activity type.
     943 *
     944 * @return bool True on success. False on error.
     945 */
     946function bp_blogs_post_type_remove_comment( $deleted, $comment_id, $activity_post_object, $activity_type = '' ) {
     947    // Remove synced activity comments, if needed.
     948    if ( ! bp_disable_blogforum_comments() ) {
     949        // Get associated activity ID from comment meta
    1008950        $activity_id = get_comment_meta( $comment_id, 'bp_activity_comment_id', true );
    1009951
    1010         // Delete the associated activity comment.
    1011         //
    1012         // Also removes child post comments and associated activity comments.
    1013         if ( ! empty( $activity_id ) && bp_is_active( 'activity' ) ) {
    1014             // Fetch the activity comments for the activity item.
     952        /**
     953         * Delete the associated activity comment & also remove
     954         * child post comments and associated activity comments.
     955         */
     956        if ( ! empty( $activity_id ) ) {
     957            // fetch the activity comments for the activity item
    1015958            $activity = bp_activity_get( array(
    1016959                'in'               => $activity_id,
     
    1019962            ) );
    1020963
    1021             // Get all activity comment IDs for the pending deleted item.
     964            // get all activity comment IDs for the pending deleted item
    1022965            if ( ! empty( $activity['activities'] ) ) {
    1023966                $activity_ids   = bp_activity_recurse_comments_activity_ids( $activity );
    1024967                $activity_ids[] = $activity_id;
    1025968
    1026                 // Delete activity items.
     969                // delete activity items
    1027970                foreach ( $activity_ids as $activity_id ) {
    1028971                    bp_activity_delete( array(
     
    1031974                }
    1032975
    1033                 // Remove associated blog comments.
     976                // remove associated blog comments
    1034977                bp_blogs_remove_associated_blog_comments( $activity_ids );
    1035978
    1036                 // Rebuild activity comment tree.
     979                // rebuild activity comment tree
    1037980                BP_Activity_Activity::rebuild_activity_comment_tree( $activity['activities'][0]->item_id );
     981
     982                // Set the result
     983                $deleted = true;
    1038984            }
    1039985        }
    1040986    }
    1041987
    1042     /**
    1043      * Fires after a blog comment activity item was removed from activity stream.
    1044      *
    1045      * @since 1.0.0
    1046      *
    1047      * @param int $blogid     Item ID for the blog associated with the removed comment.
    1048      * @param int $comment_id ID of the comment being removed.
    1049      * @param int $value      ID of the current logged in user.
    1050      */
    1051     do_action( 'bp_blogs_remove_comment', $wpdb->blogid, $comment_id, bp_loggedin_user_id() );
    1052 }
    1053 add_action( 'delete_comment', 'bp_blogs_remove_comment' );
     988    // Backcompat for comments about the 'post' post type.
     989    if ( 'new_blog_comment' === $activity_type ) {
     990        /**
     991         * Fires after a blog comment activity item was removed from activity stream.
     992         *
     993         * @since 1.0.0
     994         *
     995         * @param int $value      ID for the blog associated with the removed comment.
     996         * @param int $comment_id ID of the comment being removed.
     997         * @param int $value      ID of the current logged in user.
     998         */
     999        do_action( 'bp_blogs_remove_comment', get_current_blog_id(), $comment_id, bp_loggedin_user_id() );
     1000    }
     1001
     1002    return $deleted;
     1003}
     1004add_action( 'bp_activity_post_type_remove_comment', 'bp_blogs_post_type_remove_comment', 10, 4 );
    10541005
    10551006/**
     
    10581009 * @since 2.0.0
    10591010 *
    1060  * @see bp_blogs_remove_comment()
     1011 * @see bp_blogs_remove_synced_comment()
    10611012 * @see bp_blogs_sync_delete_from_activity_comment()
    10621013 *
     
    10951046
    10961047/**
    1097  * When a blog comment status transition occurs, update the relevant activity's status.
    1098  *
    1099  * @since 1.6.0
    1100  *
    1101  * @param string $new_status New comment status.
    1102  * @param string $old_status Previous comment status.
    1103  * @param object $comment    Comment data.
    1104  */
    1105 function bp_blogs_transition_activity_status( $new_status, $old_status, $comment ) {
    1106 
    1107     // Check the Activity component is active.
    1108     if ( ! bp_is_active( 'activity' ) )
    1109         return;
    1110 
    1111     /**
    1112      * Activity currently doesn't have any concept of a trash, or an unapproved/approved state.
    1113      *
    1114      * If a blog comment transitions to a "delete" or "hold" status, delete the activity item.
    1115      * If a blog comment transitions to trashed, or spammed, mark the activity as spam.
    1116      * If a blog comment transitions to approved (and the activity exists), mark the activity as ham.
    1117      * If a blog comment transitions to unapproved (and the activity exists), mark the activity as spam.
    1118      * Otherwise, record the comment into the activity stream.
    1119      */
    1120 
    1121     // This clause was moved in from bp_blogs_remove_comment() in BuddyPress 1.6. It handles delete/hold.
    1122     if ( in_array( $new_status, array( 'delete', 'hold' ) ) ) {
    1123         return bp_blogs_remove_comment( $comment->comment_ID );
    1124 
    1125     // These clauses handle trash, spam, and un-spams.
    1126     } elseif ( in_array( $new_status, array( 'trash', 'spam', 'unapproved' ) ) ) {
    1127         $action = 'spam_activity';
    1128     } elseif ( 'approved' == $new_status ) {
    1129         $action = 'ham_activity';
    1130     }
    1131 
    1132     // Get the activity.
    1133     if ( bp_disable_blogforum_comments() ) {
    1134         $activity_id = bp_activity_get_activity_id( array(
    1135             'component'         => buddypress()->blogs->id,
    1136             'item_id'           => get_current_blog_id(),
    1137             'secondary_item_id' => $comment->comment_ID,
    1138             'type'              => 'new_blog_comment'
    1139         ) );
    1140     } else {
    1141         $activity_id = get_comment_meta( $comment->comment_ID, 'bp_activity_comment_id', true );
    1142     }
    1143 
    1144     // Check activity item exists.
    1145     if ( empty( $activity_id ) ) {
    1146         // If no activity exists, but the comment has been approved, record it into the activity table.
    1147         if ( 'approved' == $new_status ) {
    1148             return bp_blogs_record_comment( $comment->comment_ID, true );
    1149         }
    1150 
    1151         return;
    1152     }
    1153 
    1154     // Create an activity object.
    1155     $activity = new BP_Activity_Activity( $activity_id );
    1156     if ( empty( $activity->component ) )
    1157         return;
    1158 
    1159     // Spam/ham the activity if it's not already in that state.
    1160     if ( 'spam_activity' == $action && ! $activity->is_spam ) {
    1161         bp_activity_mark_as_spam( $activity );
    1162     } elseif ( 'ham_activity' == $action) {
    1163         bp_activity_mark_as_ham( $activity );
    1164     }
    1165 
    1166     // Add "new_blog_comment" to the whitelisted activity types, so that the activity's Akismet history is generated.
    1167     $comment_akismet_history = create_function( '$t', '$t[] = "new_blog_comment"; return $t;' );
    1168     add_filter( 'bp_akismet_get_activity_types', $comment_akismet_history );
    1169 
    1170     // Save the updated activity.
    1171     $activity->save();
    1172 
    1173     // Remove the "new_blog_comment" activity type whitelist so we don't break anything.
    1174     remove_filter( 'bp_akismet_get_activity_types', $comment_akismet_history );
    1175 }
    1176 add_action( 'transition_comment_status', 'bp_blogs_transition_activity_status', 10, 3 );
    1177 
    1178 /**
    11791048 * Get the total number of blogs being tracked by BuddyPress.
    11801049 *
  • trunk/src/bp-blogs/classes/class-bp-blogs-component.php

    r10517 r10544  
    107107            }
    108108        }
    109 
    110         // Filter the generic track parameters for the 'post' post type.
    111         add_filter( 'bp_activity_get_post_type_tracking_args', array( $this, 'post_tracking_args' ), 10, 2 );
    112109    }
    113110
     
    129126            'template',
    130127            'filters',
    131             'activity',
    132128            'functions',
    133129        );
     130
     131        if ( bp_is_active( 'activity' ) ) {
     132            $includes[] = 'activity';
     133        }
    134134
    135135        if ( is_multisite() ) {
     
    301301        parent::setup_cache_groups();
    302302    }
    303 
    304     /**
    305      * Set up the tracking arguments for the 'post' post type.
    306      *
    307      * @since 2.2.0
    308      *
    309      * @see bp_activity_get_post_type_tracking_args() for information on parameters.
    310      *
    311      * @param object|null $params    Tracking arguments.
    312      * @param string|int  $post_type Post type to track.
    313      * @return object
    314      */
    315     public function post_tracking_args( $params = null, $post_type = 0 ) {
    316 
    317         /**
    318          * Filters the post types to track for the Blogs component.
    319          *
    320          * @since 1.5.0
    321          * @deprecated 2.3.0
    322          *
    323          * Make sure plugins still using 'bp_blogs_record_post_post_types'
    324          * to track their post types will generate new_blog_post activities
    325          * See https://buddypress.trac.wordpress.org/ticket/6306
    326          *
    327          * @param array $value Array of post types to track.
    328          */
    329         $post_types = apply_filters( 'bp_blogs_record_post_post_types', array( 'post' ) );
    330         $post_types_array = array_flip( $post_types );
    331 
    332         if ( ! isset( $post_types_array[ $post_type ] ) ) {
    333             return $params;
    334         }
    335 
    336         // Set specific params for the 'post' post type.
    337         $params->component_id    = $this->id;
    338         $params->action_id       = 'new_blog_post';
    339         $params->admin_filter    = __( 'New post published', 'buddypress' );
    340         $params->format_callback = 'bp_blogs_format_activity_action_new_blog_post';
    341         $params->front_filter    = __( 'Posts', 'buddypress' );
    342         $params->contexts        = array( 'activity', 'member' );
    343         $params->position        = 5;
    344 
    345         return $params;
    346     }
    347303}
  • trunk/src/bp-core/deprecated/1.6.php

    r10108 r10544  
    8585/**
    8686 * @deprecated 1.6.0
    87  * @deprecated No longer used; see bp_blogs_transition_activity_status()
     87 * @deprecated No longer used; see bp_activity_transition_post_type_comment_status()
    8888 */
    8989function bp_blogs_manage_comment( $comment_id, $comment_status ) {
  • trunk/src/bp-core/deprecated/2.5.php

    r10540 r10544  
    874874}
    875875add_action( 'bp_send_email_success', 'bp_core_deprecated_email_actions', 20, 2 );
     876
     877/**
     878 * When a blog comment status transition occurs, update the relevant activity's status.
     879 *
     880 * @since 1.6.0
     881 * @deprecated 2.5.0
     882 *
     883 * @param string $new_status New comment status.
     884 * @param string $old_status Previous comment status.
     885 * @param object $comment Comment data.
     886 */
     887function bp_blogs_transition_activity_status( $new_status, $old_status, $comment ) {
     888    _deprecated_function( __FUNCTION__, '2.5.0', 'bp_activity_transition_post_type_comment_status()' );
     889    bp_activity_transition_post_type_comment_status( $new_status, $old_status, $comment );
     890}
     891
     892/**
     893 * Record a new blog comment in the BuddyPress activity stream.
     894 *
     895 * Only posts the item if blog is public and post is not password-protected.
     896 *
     897 * @deprecated 2.5.0
     898 *
     899 * @param int $comment_id ID of the comment being recorded.
     900 * @param bool|string $is_approved Optional. The $is_approved value passed to
     901 *        the 'comment_post' action. Default: true.
     902 * @return bool|object Returns false on failure, the comment object on success.
     903 */
     904function bp_blogs_record_comment( $comment_id, $is_approved = true ) {
     905    _deprecated_function( __FUNCTION__, '2.5.0', 'bp_activity_post_type_comment()' );
     906    bp_activity_post_type_comment( $comment_id, $is_approved );
     907}
     908
     909/**
     910 * Remove a blog comment activity item from the activity stream.
     911 *
     912 * @deprecated 2.5.0
     913 *
     914 * @param int $comment_id ID of the comment to be removed.
     915 */
     916function bp_blogs_remove_comment( $comment_id ) {
     917    _deprecated_function( __FUNCTION__, '2.5.0', 'bp_activity_post_type_remove_comment()' );
     918    bp_activity_post_type_remove_comment( $comment_id );
     919}
Note: See TracChangeset for help on using the changeset viewer.