function bp_media_upgrade_to_2_2() { global $wpdb; remove_filter('bp_activity_get_user_join_filter', 'bp_media_activity_query_filter', 10); /* @var $wpdb wpdb */ $media_files = new WP_Query(array('post_type' => 'bp_media', 'posts_per_page' => -1)); $media_files = $media_files->posts; $wall_posts_album_ids = array(); if (is_array($media_files) && count($media_files)) { foreach ($media_files as $media_file) { $attachment_id = get_post_meta($media_file->ID, 'bp_media_child_attachment', true); $child_activity = get_post_meta($media_file->ID, 'bp_media_child_activity', true); update_post_meta($attachment_id, 'bp_media_child_activity', $child_activity); $attachment = get_post($attachment_id, ARRAY_A); if (isset($wall_posts_album_ids[$media_file->post_author])) { $wall_posts_id = $wall_posts_album_ids[$media_file->post_author]; } else { $wall_posts_id = $wpdb->get_var("SELECT ID FROM {$wpdb->posts} WHERE post_title = 'Wall Posts' AND post_author = '" . $media_file->post_author . "' AND post_type='bp_media_album'"); if ($wall_posts_id == null) { $album = new BP_Media_Album(); $album->add_album('Wall Posts', $media_file->post_author); $wall_posts_id = $album->get_id(); } if (!$wall_posts_id) { continue; //This condition should never be encountered } $wall_posts_album_ids[$media_file->post_author] = $wall_posts_id; } $attachment['post_parent'] = $wall_posts_id; wp_update_post($attachment); update_post_meta($attachment_id, 'bp-media-key', $media_file->post_author); $activity = bp_activity_get(array('in' => intval($child_activity))); if (isset($activity['activities'][0]->id)) { $activity = $activity['activities'][0]; } $bp_media = new BP_Media_Host_Wordpress($attachment_id); $args = array('content' => $bp_media->get_media_activity_content(), 'id' => $child_activity, 'type' => 'media_upload', 'action' => apply_filters('bp_media_added_media', sprintf(__('%1$s added a %2$s', 'bp-media'), bp_core_get_userlink($media_file->post_author), '<a href="' . $bp_media->get_url() . '">' . $bp_media->get_media_activity_type() . '</a>')), 'primary_link' => $bp_media->get_url(), 'item_id' => $attachment_id, 'recorded_time' => $activity->date_recorded); $act_id = bp_media_record_activity($args); bp_activity_delete_meta($child_activity, 'bp_media_parent_post'); wp_delete_post($media_file->ID); } } update_option('bp_media_db_version', BP_MEDIA_DB_VERSION); add_action('admin_notices', 'bp_media_database_updated_notice'); wp_cache_flush(); }
/** * Delete old spam activity meta data. * * This is done as a clean-up mechanism, as _bp_akismet_submission meta can * grow to be quite large. * * @since 1.6.0 * * @global wpdb $wpdb WordPress database object. */ function bp_activity_akismet_delete_old_metadata() { global $wpdb; $bp = buddypress(); /** * Filters the threshold for how many days old Akismet metadata needs to be before being automatically deleted. * * @since 1.6.0 * * @param integer 15 How many days old metadata needs to be. */ $interval = apply_filters('bp_activity_akismet_delete_meta_interval', 15); // Enforce a minimum of 1 day. $interval = max(1, absint($interval)); // _bp_akismet_submission meta values are large, so expire them after $interval days regardless of the activity status $sql = $wpdb->prepare("SELECT a.id FROM {$bp->activity->table_name} a LEFT JOIN {$bp->activity->table_name_meta} m ON a.id = m.activity_id WHERE m.meta_key = %s AND DATE_SUB(%s, INTERVAL {$interval} DAY) > a.date_recorded LIMIT 10000", '_bp_akismet_submission', current_time('mysql', 1)); $activity_ids = $wpdb->get_col($sql); if (!empty($activity_ids)) { foreach ($activity_ids as $activity_id) { bp_activity_delete_meta($activity_id, '_bp_akismet_submission'); } } }
/** * Update entity custom fields */ public function deleteCustomFields($identifier) { global $wpdb; $likebtn_entities = _likebtn_get_entities(true, true); list($entity_name, $entity_id) = $this->parseIdentifier($identifier); $entity_updated = false; if (array_key_exists($entity_name, $likebtn_entities) && is_numeric($entity_id)) { // set Custom fields switch ($entity_name) { case LIKEBTN_ENTITY_COMMENT: // Comment $comment = get_comment($entity_id); // check if post exists and is not revision if (!empty($comment) && $comment->comment_type != 'revision') { delete_comment_meta($entity_id, LIKEBTN_META_KEY_LIKES); delete_comment_meta($entity_id, LIKEBTN_META_KEY_DISLIKES); delete_comment_meta($entity_id, LIKEBTN_META_KEY_LIKES_MINUS_DISLIKES); $entity_updated = true; } break; case LIKEBTN_ENTITY_BP_ACTIVITY_POST: case LIKEBTN_ENTITY_BP_ACTIVITY_UPDATE: case LIKEBTN_ENTITY_BP_ACTIVITY_COMMENT: case LIKEBTN_ENTITY_BP_ACTIVITY_TOPIC: if (!_likebtn_is_bp_active()) { break; } $bp_activity = $wpdb->get_row("\n SELECT id\n FROM " . $wpdb->prefix . "bp_activity\n WHERE id = {$entity_id}\n "); if (!empty($bp_activity)) { bp_activity_delete_meta($entity_id, LIKEBTN_META_KEY_LIKES); bp_activity_delete_meta($entity_id, LIKEBTN_META_KEY_DISLIKES); bp_activity_delete_meta($entity_id, LIKEBTN_META_KEY_LIKES_MINUS_DISLIKES); $entity_updated = true; } break; case LIKEBTN_ENTITY_BP_MEMBER: // BuddyPress Member Profile _likebtn_delete_bp_member_votes($entity_id); $entity_updated = true; break; case LIKEBTN_ENTITY_BBP_USER: // bbPress Member Profile _likebtn_delete_user_votes($entity_id); $entity_updated = true; break; case LIKEBTN_ENTITY_USER: // BuddyPress Member Profile $entity_updated = _likebtn_delete_bp_member_votes($entity_id); // General user and bbPress Member Profile $entity_updated = $entity_updated || _likebtn_delete_user_votes($entity_id); break; default: // Post $post = get_post($entity_id); // check if post exists and is not revision if (!empty($post) && !empty($post->post_type) && $post->post_type != 'revision') { delete_post_meta($entity_id, LIKEBTN_META_KEY_LIKES); delete_post_meta($entity_id, LIKEBTN_META_KEY_DISLIKES); delete_post_meta($entity_id, LIKEBTN_META_KEY_LIKES_MINUS_DISLIKES); $entity_updated = true; } break; } } // Check custom item $item_db = $wpdb->get_row($wpdb->prepare("SELECT likes, dislikes\n FROM " . $wpdb->prefix . LIKEBTN_TABLE_ITEM . "\n WHERE identifier = %s", $identifier)); // Custom identifier if ($item_db || !$entity_updated) { $where = array('identifier' => $identifier); $result = $wpdb->delete($wpdb->prefix . LIKEBTN_TABLE_ITEM, $where); if ($result) { $entity_updated = true; } } return $entity_updated; }
/** * In case of a reshare delete, reset some activity metas * * @package BP Reshare * @since 1.0 * * @param integer $activity_id the reshared activity id * @param integer $user_id the user id * @uses bp_activity_get_meta() to get some meta infos about the activity * @uses bp_activity_delete_meta() to delete some meta infos for the activity * @uses bp_activity_update_meta() to save some meta infos for the activity * @return boolean true */ function buddyreshare_reset_metas($activity_id = 0, $user_id = 0) { if (empty($activity_id) || empty($user_id)) { return false; } $count = bp_activity_get_meta($activity_id, 'reshared_count'); $count = $count - 1; $reshared_by = bp_activity_get_meta($activity_id, 'reshared_by'); if ($count == 0) { // if count is null, then we can delete all metas ! bp_activity_delete_meta($activity_id, 'reshared_count'); bp_activity_delete_meta($activity_id, 'reshared_by'); } else { foreach ($reshared_by as $key => $val) { if ($user_id == $val) { unset($reshared_by[$key]); } } bp_activity_update_meta($activity_id, 'reshared_count', $count); bp_activity_update_meta($activity_id, 'reshared_by', $reshared_by); } return true; }
/** * Delete the meta entries associated with a set of activity items. * * @since 1.2.0 * * @param array $activity_ids Activity IDs whose meta should be deleted. * @return bool True on success. */ public static function delete_activity_meta_entries($activity_ids = array()) { $activity_ids = wp_parse_id_list($activity_ids); foreach ($activity_ids as $activity_id) { bp_activity_delete_meta($activity_id); } return true; }
/** * Update activity meta * * @since 1.2.0 * * @param int $activity_id * @param string $meta_key * @param string $meta_value * * @global object $nxtdb * @global object $bp BuddyPress global settings * @uses maybe_serialize() * @uses bp_activity_delete_meta() * @uses nxt_cache_set() * * @return bool True on success, false on failure */ function bp_activity_update_meta($activity_id, $meta_key, $meta_value) { global $nxtdb, $bp; // Make sure activity_id is valid if (!is_numeric($activity_id)) { return false; } // Sanitize key $meta_key = preg_replace('|[^a-z0-9_]|i', '', $meta_key); // Sanitize value if (is_string($meta_value)) { $meta_value = stripslashes($nxtdb->escape($meta_value)); } // Maybe, just maybe... serialize $meta_value = maybe_serialize($meta_value); // If value is empty, delete the meta key if (empty($meta_value)) { return bp_activity_delete_meta($activity_id, $meta_key); } // See if meta key exists for activity_id $cur = $nxtdb->get_row($nxtdb->prepare("SELECT * FROM {$bp->activity->table_name_meta} WHERE activity_id = %d AND meta_key = %s", $activity_id, $meta_key)); // Meta key does not exist so INSERT if (empty($cur)) { $nxtdb->query($nxtdb->prepare("INSERT INTO {$bp->activity->table_name_meta} ( activity_id, meta_key, meta_value ) VALUES ( %d, %s, %s )", $activity_id, $meta_key, $meta_value)); } else { if ($cur->meta_value != $meta_value) { $nxtdb->query($nxtdb->prepare("UPDATE {$bp->activity->table_name_meta} SET meta_value = %s WHERE activity_id = %d AND meta_key = %s", $meta_value, $activity_id, $meta_key)); } else { return false; } } // Set cache nxt_cache_set('bp_activity_meta_' . $meta_key . '_' . $activity_id, $meta_value, 'bp'); // Victory is ours! return true; }
/** * bp_like_remove_user_like() * * Registers that the user has unliked a given item. * */ function bp_like_remove_user_like($item_id = '', $type = 'activity') { global $bp; if (!$item_id) { return false; } if (!isset($user_id)) { $user_id = $bp->loggedin_user->id; } if ($user_id == 0) { echo bp_like_get_text('must_be_logged_in'); return false; } if ($type == 'activity') { /* Remove this from the users liked activities. */ $user_likes = get_user_meta($user_id, 'bp_liked_activities', true); unset($user_likes[$item_id]); update_user_meta($user_id, 'bp_liked_activities', $user_likes); /* Update the total number of users who have liked this activity. */ $users_who_like = bp_activity_get_meta($item_id, 'liked_count', true); unset($users_who_like[$user_id]); /* If nobody likes the activity, delete the meta for it to save space, otherwise, update the meta */ if (empty($users_who_like)) { bp_activity_delete_meta($item_id, 'liked_count'); } else { bp_activity_update_meta($item_id, 'liked_count', $users_who_like); } $liked_count = count($users_who_like); /* Remove the update on the users profile from when they liked the activity. */ $update_id = bp_activity_get_activity_id(array('item_id' => $item_id, 'component' => 'bp-like', 'type' => 'activity_liked', 'user_id' => $user_id)); bp_activity_delete(array('id' => $update_id, 'item_id' => $item_id, 'component' => 'bp-like', 'type' => 'activity_liked', 'user_id' => $user_id)); } elseif ($type == 'blogpost') { /* Remove this from the users liked activities. */ $user_likes = get_user_meta($user_id, 'bp_liked_blogposts', true); unset($user_likes[$item_id]); update_user_meta($user_id, 'bp_liked_blogposts', $user_likes); /* Update the total number of users who have liked this blog post. */ $users_who_like = get_post_meta($item_id, 'liked_count', true); unset($users_who_like[$user_id]); /* If nobody likes the blog post, delete the meta for it to save space, otherwise, update the meta */ if (empty($users_who_like)) { delete_post_meta($item_id, 'liked_count'); } else { update_post_meta($item_id, 'liked_count', $users_who_like); } $liked_count = count($users_who_like); /* Remove the update on the users profile from when they liked the activity. */ $update_id = bp_activity_get_activity_id(array('item_id' => $item_id, 'component' => 'bp-like', 'type' => 'blogpost_liked', 'user_id' => $user_id)); bp_activity_delete(array('id' => $update_id, 'item_id' => $item_id, 'component' => 'bp-like', 'type' => 'blogpost_liked', 'user_id' => $user_id)); } echo bp_like_get_text('like'); if ($liked_count) { echo ' (' . $liked_count . ')'; } }
/** * Deletes old spam activity meta data, as _bp_akismet_submission meta can be large. * * @global object $bp BuddyPress global settings * @global wpdb $wpdb WordPress database object * @since BuddyPress (1.6) */ function bp_activity_akismet_delete_old_metadata() { global $bp, $wpdb; $interval = apply_filters('bp_activity_akismet_delete_meta_interval', 15); // Enforce a minimum of 1 day $interval = max(1, absint($interval)); // _bp_akismet_submission meta values are large, so expire them after $interval days regardless of the activity status $sql = $wpdb->prepare("SELECT a.id FROM {$bp->activity->table_name} a LEFT JOIN {$bp->activity->table_name_meta} m ON a.id = m.activity_id WHERE m.meta_key = %s AND DATE_SUB(%s, INTERVAL {$interval} DAY) > a.date_recorded LIMIT 10000", '_bp_akismet_submission', current_time('mysql', 1)); $activity_ids = $wpdb->get_col($sql); if (!empty($activity_ids)) { foreach ($activity_ids as $activity_id) { bp_activity_delete_meta($activity_id, '_bp_akismet_submission'); } } }
/** * @ticket BP7237 * @ticket BP6643 */ public function test_query_cache_should_be_invalidated_by_activitymeta_delete() { global $wpdb; $activities = $this->factory->activity->create_many(2); bp_activity_add_meta($activities[0], 'foo', 'bar'); bp_activity_add_meta($activities[1], 'foo', 'bar'); $activity_args = array('meta_query' => array(array('key' => 'foo', 'value' => 'bar'))); $q1 = bp_activity_get($activity_args); $this->assertEqualSets(array($activities[0], $activities[1]), wp_list_pluck($q1['activities'], 'id')); bp_activity_delete_meta($activities[1], 'foo', 'bar'); $q2 = bp_activity_get($activity_args); $this->assertEqualSets(array($activities[0]), wp_list_pluck($q2['activities'], 'id')); }
/** * Updates a blog post's activity meta entry during a post edit. * * @since BuddyPress (2.2.0) * * @param WP_Post $post Post object. * @param BP_Activity_Activity $activity Activity object. */ function bp_blogs_update_post_activity_meta($post, $activity) { if (empty($activity->id) || 'post' != $post->post_type) { return; } // Update post title in activity meta. $existing_title = bp_activity_get_meta($activity->id, 'post_title'); if ($post->post_title !== $existing_title) { bp_activity_update_meta($activity->id, 'post_title', $post->post_title); // Now update activity meta for post comments... sigh. add_filter('comments_clauses', 'bp_blogs_comments_clauses_select_by_id'); $comments = get_comments(array('post_id' => $post->ID)); remove_filter('comments_clauses', 'bp_blogs_comments_clauses_select_by_id'); if (!empty($comments)) { $activity_ids = array(); $comment_ids = wp_list_pluck($comments, 'comment_ID'); // Set up activity args. $args = array('update_meta_cache' => false, 'show_hidden' => true, 'per_page' => 99999); // Query for old-style "new_blog_comment" activity items. $args['filter'] = array('object' => buddypress()->blogs->id, 'action' => 'new_blog_comment', 'secondary_id' => implode(',', $comment_ids)); $activities = bp_activity_get($args); if (!empty($activities['activities'])) { $activity_ids = (array) wp_list_pluck($activities['activities'], 'id'); } // Query for activity comments connected to a blog post. unset($args['filter']); $args['meta_query'] = array(array('key' => 'bp_blogs_post_comment_id', 'value' => $comment_ids, 'compare' => 'IN')); $args['type'] = 'activity_comment'; $args['display_comments'] = 'stream'; $activities = bp_activity_get($args); if (!empty($activities['activities'])) { $activity_ids = array_merge($activity_ids, (array) wp_list_pluck($activities['activities'], 'id')); } // Update activity meta for all found activity items. if (!empty($activity_ids)) { foreach ($activity_ids as $aid) { bp_activity_update_meta($aid, 'post_title', $post->post_title); } } unset($activities, $activity_ids, $comment_ids, $comments); } } // Add post comment status to activity meta if closed. if ('closed' == $post->comment_status) { bp_activity_update_meta($activity->id, 'post_comment_status', $post->comment_status); } else { bp_activity_delete_meta($activity->id, 'post_comment_status'); } }
function mpp_activity_delete_associated_comment_id($activity_id) { return bp_activity_delete_meta($activity_id, '_mpp_comment_id'); }
/** * @group activitymeta * @group bp_activity_delete_meta */ public function test_bp_activity_delete_meta_with_delete_all() { // With no meta key, don't delete for all items - just delete // all for a single item $a1 = $this->factory->activity->create(); $a2 = $this->factory->activity->create(); bp_activity_update_meta($a1, 'foo', 'bar'); bp_activity_update_meta($a1, 'foo1', 'bar1'); bp_activity_update_meta($a2, 'foo', 'bar'); bp_activity_update_meta($a2, 'foo1', 'bar1'); $this->assertTrue(bp_activity_delete_meta($a1, 'foo', '', true)); $this->assertSame('', bp_activity_get_meta($a1, 'foo')); $this->assertSame('', bp_activity_get_meta($a2, 'foo')); $this->assertSame('bar1', bp_activity_get_meta($a1, 'foo1')); $this->assertSame('bar1', bp_activity_get_meta($a2, 'foo1')); }
function bp_activity_update_meta( $activity_id, $meta_key, $meta_value ) { global $wpdb, $bp; if ( !is_numeric( $activity_id ) ) return false; $meta_key = preg_replace( '|[^a-z0-9_]|i', '', $meta_key ); if ( is_string( $meta_value ) ) $meta_value = stripslashes( $wpdb->escape( $meta_value ) ); $meta_value = maybe_serialize( $meta_value ); if ( empty( $meta_value ) ) { return bp_activity_delete_meta( $activity_id, $meta_key ); } $cur = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$bp->activity->table_name_meta} WHERE activity_id = %d AND meta_key = %s", $activity_id, $meta_key ) ); if ( !$cur ) { $wpdb->query( $wpdb->prepare( "INSERT INTO {$bp->activity->table_name_meta} ( activity_id, meta_key, meta_value ) VALUES ( %d, %s, %s )", $activity_id, $meta_key, $meta_value ) ); } else if ( $cur->meta_value != $meta_value ) { $wpdb->query( $wpdb->prepare( "UPDATE {$bp->activity->table_name_meta} SET meta_value = %s WHERE activity_id = %d AND meta_key = %s", $meta_value, $activity_id, $meta_key ) ); } else { return false; } wp_cache_set( 'bp_activity_meta_' . $meta_key . '_' . $activity_id, $meta_value, 'bp' ); return true; }
/** * Updates a blog post's corresponding activity entry during a post edit. * * @since BuddyPress (2.0.0) * * @see bp_blogs_catch_transition_post_status() * * @param WP_Post $post */ function bp_blogs_update_post($post) { if (!bp_is_active('activity')) { return; } $activity_id = bp_activity_get_activity_id(array('component' => buddypress()->blogs->id, 'item_id' => get_current_blog_id(), 'secondary_item_id' => $post->ID, 'type' => 'new_blog_post')); // activity ID doesn't exist, so stop! if (empty($activity_id)) { return; } // update the activity entry $activity = new BP_Activity_Activity($activity_id); if (!empty($post->post_content)) { // Make sure to update the thumbnail image $post_content = bp_activity_thumbnail_content_images($post->post_content, $activity->primary_link, (array) $activity); // Make sure to apply the blop post excerpt $activity->content = apply_filters('bp_blogs_record_activity_content', bp_create_excerpt($post_content), $post_content, (array) $activity); } // Save the updated activity $activity->save(); // update post title in activity meta $existing_title = bp_activity_get_meta($activity_id, 'post_title'); if ($post->post_title !== $existing_title) { bp_activity_update_meta($activity_id, 'post_title', $post->post_title); // now update activity meta for post comments... sigh add_filter('comments_clauses', 'bp_blogs_comments_clauses_select_by_id'); $comments = get_comments(array('post_id' => $post->ID)); remove_filter('comments_clauses', 'bp_blogs_comments_clauses_select_by_id'); if (!empty($comments)) { $activity_ids = array(); $comment_ids = wp_list_pluck($comments, 'comment_ID'); // setup activity args $args = array('update_meta_cache' => false, 'show_hidden' => true, 'per_page' => 99999); // query for old-style "new_blog_comment" activity items $args['filter'] = array('object' => buddypress()->blogs->id, 'action' => 'new_blog_comment', 'secondary_id' => implode(',', $comment_ids)); $activities = bp_activity_get($args); if (!empty($activities['activities'])) { $activity_ids = (array) wp_list_pluck($activities['activities'], 'id'); } // query for activity comments connected to a blog post unset($args['filter']); $args['meta_query'] = array(array('key' => 'bp_blogs_post_comment_id', 'value' => $comment_ids, 'compare' => 'IN')); $args['type'] = 'activity_comment'; $args['display_comments'] = 'stream'; $activities = bp_activity_get($args); if (!empty($activities['activities'])) { $activity_ids = array_merge($activity_ids, (array) wp_list_pluck($activities['activities'], 'id')); } // update activity meta for all found activity items if (!empty($activity_ids)) { foreach ($activity_ids as $aid) { bp_activity_update_meta($aid, 'post_title', $post->post_title); } } unset($activities, $activity_ids, $comment_ids, $comments); } } // add post comment status to activity meta if closed if ('closed' == $post->comment_status) { bp_activity_update_meta($activity_id, 'post_comment_status', $post->comment_status); } else { bp_activity_delete_meta($activity_id, 'post_comment_status'); } }
/** * Delet MediaPress activity type * @param type $activity_id * @return type */ function mpp_activity_delete_activity_type($activity_id) { return bp_activity_delete_meta($activity_id, '_mpp_activity_type'); }