/** * @group bp_xprofile_update_meta_cache * @group bp_has_profile */ public function test_bp_has_profile_meta_cache_update_meta_cache_false() { $u = $this->factory->user->create(); $g = $this->factory->xprofile_group->create(); $f = $this->factory->xprofile_field->create(array('field_group_id' => $g)); $d = new BP_XProfile_ProfileData($f, $u); $d->user_id = $u; $d->field_id = $f; $d->value = 'foo'; $d->last_updated = bp_core_current_time(); $d->save(); bp_xprofile_add_meta($g, 'group', 'group_foo', 'group_bar'); bp_xprofile_add_meta($f, 'field', 'field_foo', 'field_bar'); bp_xprofile_add_meta($d->id, 'data', 'data_foo', 'data_bar'); // prime cache bp_has_profile(array('user_id' => $u, 'profile_group_id' => $g, 'update_meta_cache' => false)); $this->assertFalse(wp_cache_get($g, 'xprofile_group_meta')); $this->assertFalse(wp_cache_get($f, 'xprofile_field_meta')); $this->assertFalse(wp_cache_get($d->id, 'xprofile_data_meta')); }
/** * Helper function for handling xProfile Meta * * @since 1.0 * * @param int $object_id * @param string $object_type * @param string $meta_key * @param string $meta_value * */ private function __update_xprofile_meta($object_id, $object_type, $meta_key, $meta_value = '') { if (empty($meta_value) || !$meta_value) { bp_xprofile_delete_meta($object_id, $object_type, $meta_key); } elseif (!bp_xprofile_get_meta($object_id, $object_type, $meta_key)) { bp_xprofile_add_meta($object_id, $object_type, $meta_key, $meta_value); } else { bp_xprofile_update_meta($object_id, $object_type, $meta_key, $meta_value); } }
/** * @group xprofilemeta * @group bp_xprofile_add_meta */ public function test_bp_xprofile_add_meta_existing_not_unique() { $g = $this->factory->xprofile_group->create(); bp_xprofile_add_meta($g, 'group', 'foo', 'bar'); $this->assertNotEmpty(bp_xprofile_add_meta($g, 'group', 'foo', 'baz')); }
public function test_get_fields_for_member_type_should_accept_an_array_of_member_types() { $f2 = $this->factory->xprofile_field->create(array('field_group_id' => $this->field_group_id)); bp_xprofile_add_meta($this->field_id, 'field', 'member_type', 'foo'); bp_xprofile_add_meta($f2, 'field', 'member_type', 'bar'); $found = BP_XProfile_Field::get_fields_for_member_type(array('foo', 'bar')); $this->assertEqualSets(array(1, $this->field_id, $f2), array_keys($found)); }
/** * Sets the member types for this field. * * @since 2.4.0 * * @param array $member_types Array of member types. Can include 'null' (users with no type) in addition to any * registered types. * @param bool $append Whether to append to existing member types. If false, all existing member type * associations will be deleted before adding your `$member_types`. Default false. * * @return array Member types for the current field, after being saved. */ public function set_member_types($member_types, $append = false) { // Unset invalid member types. $types = array(); foreach ($member_types as $member_type) { // 'null' is a special case - it represents users without a type. if ('null' === $member_type || bp_get_member_type_object($member_type)) { $types[] = $member_type; } } // When `$append` is false, delete all existing types before adding new ones. if (!$append) { bp_xprofile_delete_meta($this->id, 'field', 'member_type'); /* * We interpret an empty array as disassociating the field from all types. This is * represented internally with the '_none' flag. */ if (empty($types)) { bp_xprofile_add_meta($this->id, 'field', 'member_type', '_none'); } } /* * Unrestricted fields are represented in the database as having no 'member_type'. * We detect whether a field is being set to unrestricted by checking whether the * list of types passed to the method is the same as the list of registered types, * plus the 'null' pseudo-type. */ $_rtypes = bp_get_member_types(); $rtypes = array_values($_rtypes); $rtypes[] = 'null'; sort($types); sort($rtypes); // Only save if this is a restricted field. if ($types !== $rtypes) { // Save new types. foreach ($types as $type) { bp_xprofile_add_meta($this->id, 'field', 'member_type', $type); } } // Reset internal cache of member types. $this->member_types = null; /** * Fires after a field's member types have been updated. * * @since 2.4.0 * * @param BP_XProfile_Field $this Field object. */ do_action('bp_xprofile_field_set_member_type', $this); // Refetch fresh items from the database. return $this->get_member_types(); }
function _likebtn_save_bp_member_votes($entity_id, $likes, $dislikes, $likes_minus_dislikes) { global $wpdb; if (!_likebtn_is_bp_active()) { return false; } $bp_xprofile = $wpdb->get_row("\n SELECT id\n FROM " . $wpdb->prefix . "bp_xprofile_data\n WHERE user_id = {$entity_id}\n "); if (!empty($bp_xprofile)) { if ($likes !== null) { if (count(bp_xprofile_get_meta($entity_id, LIKEBTN_BP_XPROFILE_OBJECT_TYPE, LIKEBTN_META_KEY_LIKES)) > 1) { bp_xprofile_delete_meta($entity_id, LIKEBTN_BP_XPROFILE_OBJECT_TYPE, LIKEBTN_META_KEY_LIKES); bp_xprofile_add_meta($entity_id, LIKEBTN_BP_XPROFILE_OBJECT_TYPE, LIKEBTN_META_KEY_LIKES, $likes, true); } else { bp_xprofile_update_meta($entity_id, LIKEBTN_BP_XPROFILE_OBJECT_TYPE, LIKEBTN_META_KEY_LIKES, $likes); } } if ($dislikes !== null) { if (count(bp_xprofile_get_meta($entity_id, LIKEBTN_BP_XPROFILE_OBJECT_TYPE, LIKEBTN_META_KEY_DISLIKES)) > 1) { bp_xprofile_delete_meta($entity_id, LIKEBTN_BP_XPROFILE_OBJECT_TYPE, LIKEBTN_META_KEY_DISLIKES); bp_xprofile_add_meta($entity_id, LIKEBTN_BP_XPROFILE_OBJECT_TYPE, LIKEBTN_META_KEY_DISLIKES, $dislikes, true); } else { bp_xprofile_update_meta($entity_id, LIKEBTN_BP_XPROFILE_OBJECT_TYPE, LIKEBTN_META_KEY_DISLIKES, $dislikes); } } if ($likes_minus_dislikes !== null) { if (count(bp_xprofile_get_meta($entity_id, LIKEBTN_BP_XPROFILE_OBJECT_TYPE, LIKEBTN_META_KEY_LIKES_MINUS_DISLIKES)) > 1) { bp_xprofile_delete_meta($entity_id, LIKEBTN_BP_XPROFILE_OBJECT_TYPE, LIKEBTN_META_KEY_LIKES_MINUS_DISLIKES); bp_xprofile_add_meta($entity_id, LIKEBTN_BP_XPROFILE_OBJECT_TYPE, LIKEBTN_META_KEY_LIKES_MINUS_DISLIKES, $likes_minus_dislikes, true); } else { bp_xprofile_update_meta($entity_id, LIKEBTN_BP_XPROFILE_OBJECT_TYPE, LIKEBTN_META_KEY_LIKES_MINUS_DISLIKES, $likes_minus_dislikes); } } return true; } return false; }
/** * Update a field's or group's member types meta value * * @since 1.0.0 * * @uses BP_XProfile_Field_For_Member_Types::get_xprofile_member_types() * @uses bp_xprofile_delete_meta() * @uses bp_xprofile_add_meta() * * @param int $object_id Field or group ID * @param string $meta_type Type of meta, either 'field' or 'group' * @param array $selected_types Selected member type names * @return bool Update success or failure */ public function update_xprofile_member_types($object_id, $meta_type, $selected_types) { $current_types = $this->get_xprofile_member_types($object_id, $meta_type); // Delete unselected types foreach ($current_types as $type) { if (!in_array($type, $selected_types)) { bp_xprofile_delete_meta($object_id, $meta_type, 'member-type', $type, false); } } // Add new selected types foreach ($selected_types as $type) { if (!in_array($type, $current_types)) { bp_xprofile_add_meta($object_id, $meta_type, 'member-type', $type, false); } } return true; }