/** * Update Attached list of media ids for an activity * * @param int $activity_id * @param array $media_ids * @return array */ function mpp_activity_update_attached_media_ids($activity_id, $media_ids) { foreach ($media_ids as $media_id) { bp_activity_add_meta($activity_id, '_mpp_attached_media_id', $media_id); } return $media_ids; }
function vortex_add_meta($post_id, $key, $value, $unique) { $bbp = vortex_is_buddypress($post_id); if ($bbp) { return bp_activity_add_meta($post_id, $key, $value, $unique); } else { return add_post_meta($post_id, $key, $value, $unique); } }
/** * Update entity custom fields */ public function updateCustomFields($identifier, $likes, $dislikes, $url = '') { global $wpdb; $likebtn_entities = _likebtn_get_entities(true, true); preg_match("/^(.*)_(\\d+)\$/", $identifier, $identifier_parts); list($entity_name, $entity_id) = $this->parseIdentifier($identifier); $likes_minus_dislikes = null; if ($likes !== null && $dislikes !== null) { $likes_minus_dislikes = $likes - $dislikes; } $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') { if ($likes !== null) { if (count(get_comment_meta($entity_id, LIKEBTN_META_KEY_LIKES)) > 1) { delete_comment_meta($entity_id, LIKEBTN_META_KEY_LIKES); add_comment_meta($entity_id, LIKEBTN_META_KEY_LIKES, $likes, true); } else { update_comment_meta($entity_id, LIKEBTN_META_KEY_LIKES, $likes); } } if ($dislikes !== null) { if (count(get_comment_meta($entity_id, LIKEBTN_META_KEY_DISLIKES)) > 1) { delete_comment_meta($entity_id, LIKEBTN_META_KEY_DISLIKES); add_comment_meta($entity_id, LIKEBTN_META_KEY_DISLIKES, $dislikes, true); } else { update_comment_meta($entity_id, LIKEBTN_META_KEY_DISLIKES, $dislikes); } } if ($likes_minus_dislikes !== null) { if (count(get_comment_meta($entity_id, LIKEBTN_META_KEY_LIKES_MINUS_DISLIKES)) > 1) { delete_comment_meta($entity_id, LIKEBTN_META_KEY_LIKES_MINUS_DISLIKES); add_comment_meta($entity_id, LIKEBTN_META_KEY_LIKES_MINUS_DISLIKES, $likes_minus_dislikes, true); } else { update_comment_meta($entity_id, LIKEBTN_META_KEY_LIKES_MINUS_DISLIKES, $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; } // BuddyPress Activity /*$bp_activity_list = bp_activity_get(array( 'show_hidden' => true, 'spam' => 'all', //'in' => array((int)$entity_id) ));*/ $bp_activity = $wpdb->get_row("\n SELECT id\n FROM " . $wpdb->prefix . "bp_activity\n WHERE id = {$entity_id}\n "); if (!empty($bp_activity)) { if ($likes !== null) { if (count(bp_activity_get_meta($entity_id, LIKEBTN_META_KEY_LIKES)) > 1) { bp_activity_delete_meta($entity_id, LIKEBTN_META_KEY_LIKES); bp_activity_add_meta($entity_id, LIKEBTN_META_KEY_LIKES, $likes, true); } else { bp_activity_update_meta($entity_id, LIKEBTN_META_KEY_LIKES, $likes); } } if ($dislikes !== null) { if (count(bp_activity_get_meta($entity_id, LIKEBTN_META_KEY_DISLIKES)) > 1) { bp_activity_delete_meta($entity_id, LIKEBTN_META_KEY_DISLIKES); bp_activity_add_meta($entity_id, LIKEBTN_META_KEY_DISLIKES, $dislikes, true); } else { bp_activity_update_meta($entity_id, LIKEBTN_META_KEY_DISLIKES, $dislikes); } } if ($likes_minus_dislikes !== null) { if (count(bp_activity_get_meta($entity_id, LIKEBTN_META_KEY_LIKES_MINUS_DISLIKES)) > 1) { bp_activity_delete_meta($entity_id, LIKEBTN_META_KEY_LIKES_MINUS_DISLIKES); bp_activity_add_meta($entity_id, LIKEBTN_META_KEY_LIKES_MINUS_DISLIKES, $likes_minus_dislikes, true); } else { bp_activity_update_meta($entity_id, LIKEBTN_META_KEY_LIKES_MINUS_DISLIKES, $likes_minus_dislikes); } } $entity_updated = true; } break; case LIKEBTN_ENTITY_BP_MEMBER: // BuddyPress Member Profile $entity_updated = _likebtn_save_bp_member_votes($entity_id, $likes, $dislikes, $likes_minus_dislikes); break; case LIKEBTN_ENTITY_BBP_USER: // bbPress Member Profile $entity_updated = _likebtn_save_user_votes($entity_id, $likes, $dislikes, $likes_minus_dislikes); break; case LIKEBTN_ENTITY_USER: // BuddyPress Member Profile $entity_updated = _likebtn_save_bp_member_votes($entity_id, $likes, $dislikes, $likes_minus_dislikes); // General user and bbPress Member Profile $entity_updated = $entity_updated || _likebtn_save_user_votes($entity_id, $likes, $dislikes, $likes_minus_dislikes); 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') { if ($likes !== null) { if (count(get_post_meta($entity_id, LIKEBTN_META_KEY_LIKES)) > 1) { delete_post_meta($entity_id, LIKEBTN_META_KEY_LIKES); add_post_meta($entity_id, LIKEBTN_META_KEY_LIKES, $likes, true); } else { update_post_meta($entity_id, LIKEBTN_META_KEY_LIKES, $likes); } } if ($dislikes !== null) { if (count(get_post_meta($entity_id, LIKEBTN_META_KEY_DISLIKES)) > 1) { delete_post_meta($entity_id, LIKEBTN_META_KEY_DISLIKES); add_post_meta($entity_id, LIKEBTN_META_KEY_DISLIKES, $dislikes, true); } else { update_post_meta($entity_id, LIKEBTN_META_KEY_DISLIKES, $dislikes); } } if ($likes_minus_dislikes !== null) { if (count(get_post_meta($entity_id, LIKEBTN_META_KEY_LIKES_MINUS_DISLIKES)) > 1) { delete_post_meta($entity_id, LIKEBTN_META_KEY_LIKES_MINUS_DISLIKES); add_post_meta($entity_id, LIKEBTN_META_KEY_LIKES_MINUS_DISLIKES, $likes_minus_dislikes, true); } else { update_post_meta($entity_id, LIKEBTN_META_KEY_LIKES_MINUS_DISLIKES, $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) { if ($likes === null || $dislikes === null) { if ($item_db) { if ($likes === null) { $likes = $item_db->likes; } if ($dislikes === null) { $dislikes = $item_db->dislikes; } } } if ($likes !== null && $dislikes !== null) { $likes_minus_dislikes = $likes - $dislikes; } $item_data = array('identifier' => $identifier, 'likes' => $likes, 'dislikes' => $dislikes, 'likes_minus_dislikes' => $likes_minus_dislikes, 'identifier_hash' => md5($identifier)); if ($url) { $item_data['url'] = $url; } $update_where = array('identifier' => $item_data['identifier']); $update_result = $wpdb->update($wpdb->prefix . LIKEBTN_TABLE_ITEM, $item_data, $update_where); if ($update_result) { $entity_updated = true; } else { $insert_result = $wpdb->insert($wpdb->prefix . LIKEBTN_TABLE_ITEM, $item_data); if ($insert_result) { $entity_updated = true; } } } return $entity_updated; }
/** * @group bp_has_activities * @group cache */ public function test_bp_has_activities_with_update_meta_cache_true() { $now = time(); $a1 = $this->factory->activity->create(array('content' => 'Life Rules', 'recorded_time' => date('Y-m-d H:i:s', $now))); $a2 = $this->factory->activity->create(array('content' => 'Life Drools', 'recorded_time' => date('Y-m-d H:i:s', $now - 100))); bp_activity_add_meta($a1, 'foo', 'bar'); bp_activity_add_meta($a2, 'foo1', 'bar2'); // prime bp_has_activities(array('update_meta_cache' => true)); $this->assertNotEmpty(wp_cache_get($a1, 'activity_meta')); $this->assertNotEmpty(wp_cache_get($a2, 'activity_meta')); }
/** * @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')); }
/** * @group activitymeta * @group bp_activity_add_meta */ public function test_bp_activity_add_meta_existing_not_unique() { $a = $this->factory->activity->create(); bp_activity_add_meta($a, 'foo', 'bar'); $this->assertNotEmpty(bp_activity_add_meta($a, 'foo', 'baz')); }