Skip to:
Content

BuddyPress.org

Ticket #5097: 5097.01.patch

File 5097.01.patch, 4.4 KB (added by r-a-y, 12 years ago)
  • bp-activity/bp-activity-actions.php

    function bp_activity_setup_akismet() { 
    645645        // Instantiate Akismet for BuddyPress
    646646        $bp->activity->akismet = new BP_Akismet();
    647647}
     648
     649/**
     650 * Deletes all associated activity comments and related meta entries for
     651 * deleted activity items.
     652 *
     653 * @since BuddyPress (1.9)
     654 *
     655 * @param array $activity_ids The activity IDs that were deleted.
     656 */
     657function bp_activity_delete_activity_comments_and_meta( $activity_ids = array() ) {
     658        global $wpdb;
     659
     660        $bp = buddypress();
     661
     662        $activity_ids                = wp_parse_id_list( $activity_ids );
     663        $activity_ids_comma          = implode( ',', $activity_ids );
     664        $activity_comments_where_sql = "WHERE type = 'activity_comment' AND item_id IN ({$activity_ids_comma})";
     665
     666        // Fetch the activity comment IDs for our deleted activity items
     667        $activity_comment_ids = $wpdb->get_col( "SELECT id FROM {$bp->activity->table_name} {$activity_comments_where_sql}" );
     668
     669        // We have activity comments!
     670        if ( ! empty( $activity_comment_ids ) ) {
     671                // Delete activity comments
     672                $wpdb->query( "DELETE FROM {$bp->activity->table_name} {$activity_comments_where_sql}" );
     673
     674                // Merge activity IDs with activity comment IDs
     675                $activity_ids = array_merge( $activity_ids, $activity_comment_ids );
     676        }
     677
     678        // Delete all activity meta entries for activity items and activity comments
     679        BP_Activity_Activity::delete_activity_meta_entries( $activity_ids );
     680}
     681add_action( 'bp_activity_deleted_activities', 'bp_activity_delete_activity_comments_and_meta', 20 );
  • bp-activity/bp-activity-classes.php

    class BP_Activity_Activity { 
    456456                if ( !$wpdb->query( "DELETE FROM {$bp->activity->table_name} {$where_sql}" ) )
    457457                        return false;
    458458
    459                 if ( $activity_ids ) {
    460                         BP_Activity_Activity::delete_activity_item_comments( $activity_ids );
    461                         BP_Activity_Activity::delete_activity_meta_entries( $activity_ids );
    462 
    463                         return $activity_ids;
    464                 }
    465 
    466459                return $activity_ids;
    467460        }
    468461
  • tests/testcases/activity/functions.php

    class BP_Tests_Activity_Functions extends BP_UnitTestCase { 
    3434                $this->assertEquals( bp_activity_thumbnail_content_images( $post_content ), '<img src="http://example.com/foo.jpg" width="40" height="40" alt="Thumbnail" class="align-left thumbnail" /> Awesome.' );
    3535        }
    3636
     37        /**
     38         * @group delete
     39         */
     40        public function test_delete_activity_and_meta() {
     41                // create an activity update
     42                $parent_activity = $this->factory->activity->create( array(
     43                        'type' => 'activity_update',
     44                ) );
     45
     46                // create some activity comments
     47                $comment_one = $this->factory->activity->create( array(
     48                        'type'              => 'activity_comment',
     49                        'item_id'           => $parent_activity,
     50                        'secondary_item_id' => $parent_activity,
     51                ) );
     52
     53                $comment_two = $this->factory->activity->create( array(
     54                        'type'              => 'activity_comment',
     55                        'item_id'           => $parent_activity,
     56                        'secondary_item_id' => $parent_activity,
     57                ) );
     58
     59                // add some meta to the activity items
     60                bp_activity_update_meta( $parent_activity, 'foo', 'bar' );
     61                bp_activity_update_meta( $comment_one,     'foo', 'bar' );
     62                bp_activity_update_meta( $comment_two,     'foo', 'bar' );
     63
     64                // now delete the parent activity item
     65                // this should hopefully delete the associated comments and meta entries
     66                bp_activity_delete( array(
     67                        'id' => $parent_activity
     68                ) );
     69
     70                // now fetch the deleted activity entries
     71                $get = bp_activity_get( array(
     72                        'in'               => array( $parent_activity, $comment_one, $comment_two ),
     73                        'display_comments' => 'stream'
     74                ) );
     75
     76                // activities should equal zero
     77                $this->assertEquals( 0, $get['total'] );
     78
     79                // now fetch activity meta for the deleted activity entries
     80                $m1 = bp_activity_get_meta( $parent_activity );
     81                $m2 = bp_activity_get_meta( $comment_one );
     82                $m3 = bp_activity_get_meta( $comment_two );
     83
     84                // test if activity meta entries still exist
     85                $this->assertEquals( false, $m1 );
     86                $this->assertEquals( false, $m2 );
     87                $this->assertEquals( false, $m3 );
     88        }
    3789}