/** * Register member types. * * If the field type is set and has options. These options will dynamically build the member type * Use the name to set options into the xProfile Field Admin UI eg: Has CF * * @since 1.0.0 */ function cfbgr_register_member_types() { $saved_option = (int) bp_get_option('cfbgr_xfield_id', 0); if (empty($saved_option)) { return; } $field = xprofile_get_field($saved_option); // This case means the option was not deleted when it oughts to be if (empty($field->type_obj) || !is_a($field->type_obj, 'CF_BG_Member_Type_Field_Type')) { bp_delete_option('cfbgr_xfield_id'); return; } // Object cache this field buddypress()->groups->restrictions->member_type_field = $field; $options = $field->get_children(true); if (!is_array($options)) { return; } foreach ($options as $member_type) { if (empty($member_type->name)) { continue; } bp_register_member_type(sanitize_key($member_type->name), array('labels' => array('name' => $member_type->name))); } }
/** * @ticket BP6996 */ public function test_should_contain_member_type_classes() { buddypress()->members->types = array(); bp_register_member_type('foo'); bp_register_member_type('bar'); $u = $this->factory->user->create(); bp_set_member_type($u, 'bar'); if (bp_has_members(array('include' => array($u)))) { while (bp_members()) { bp_the_member(); $found = bp_get_member_class(); } } global $members_template; unset($members_template); buddypress()->members->types = array(); $this->assertContains('member-type-bar', $found); $this->assertNotContains('member-type-foo', $found); }
/** * Register all active member types * */ public function register_member_type() { //$this->register_post_type(); $is_root_blog = bp_is_root_blog(); //if we are not on the main bp site, switch to it before registering member type if (!$is_root_blog) { switch_to_blog(bp_get_root_blog_id()); } //get all posts in memeber type post type $post_ids = $this->get_active_member_types(); // get_posts( array( 'post_type'=> bp_member_type_generator()->get_post_type(), 'posts_per_page'=> -1, 'post_status'=> 'publish' ) ); //update meta cache to avoid multiple db calls update_meta_cache('post', $post_ids); //build to register the memebr type $member_types = array(); foreach ($post_ids as $post_id) { $is_active = get_post_meta($post_id, '_bp_member_type_is_active', true); $name = get_post_meta($post_id, '_bp_member_type_name', true); if (!$is_active || !$name) { continue; //if not active or no unique key, do not register } $enable_directory = get_post_meta($post_id, '_bp_member_type_enable_directory', true); $directory_slug = get_post_meta($post_id, '_bp_member_type_directory_slug', true); $has_dir = false; if ($enable_directory) { if ($directory_slug) { $has_dir = $directory_slug; } else { $has_dir = true; } } $member_types[$name] = array('labels' => array('name' => get_post_meta($post_id, '_bp_member_type_label_name', true), 'singular_name' => get_post_meta($post_id, '_bp_member_type_label_singular_name', true)), 'has_directory' => $has_dir); } foreach ($member_types as $member_type => $args) { bp_register_member_type($member_type, $args); } if (!$is_root_blog) { restore_current_blog(); } }
/** * @group member_types * @ticket BP5192 */ public function test_member_type_null_should_be_respected() { $g = $this->factory->xprofile_group->create(); $f1 = $this->factory->xprofile_field->create(array('field_group_id' => $g)); $f2 = $this->factory->xprofile_field->create(array('field_group_id' => $g)); bp_register_member_type('foo'); bp_register_member_type('bar'); $field1 = new BP_XProfile_Field($f1); $field1->set_member_types(array('foo')); $found_groups = BP_XProfile_Group::get(array('member_type' => array('null'), 'fetch_fields' => true)); // The groups aren't indexed, so we have to go looking for it. foreach ($found_groups as $fg) { if ($g == $fg->id) { $the_group = $fg; } } $this->assertNotContains($f1, wp_list_pluck($the_group->fields, 'id')); $this->assertContains($f2, wp_list_pluck($the_group->fields, 'id')); }
public function test_get_member_type_label_order() { // Should be alphabetical, with the null option last. bp_register_member_type('aaa', array('labels' => array('name' => 'AAA'))); bp_register_member_type('zzz', array('labels' => array('name' => 'ZZZ'))); $this->field->set_member_types(array('aaa', 'zzz', 'null')); $expected = '(Member types: AAA, ZZZ, Users with no member type)'; $this->assertSame($expected, $this->field->get_member_type_label()); }
/** * @group cache * @group member_types */ public function test_member_type_should_be_prefetched_into_cache_during_user_query() { bp_register_member_type('foo'); bp_register_member_type('bar'); $users = $this->factory->user->create_many(4); bp_set_member_type($users[0], 'foo'); bp_set_member_type($users[1], 'bar'); bp_set_member_type($users[2], 'foo'); $q = new BP_User_Query(array('include' => $users)); $this->assertSame(array('foo'), wp_cache_get($users[0], 'bp_member_member_type')); $this->assertSame(array('bar'), wp_cache_get($users[1], 'bp_member_member_type')); $this->assertSame(array('foo'), wp_cache_get($users[2], 'bp_member_member_type')); $this->assertSame('', wp_cache_get($users[3], 'bp_member_member_type')); }
/** * @group BP6138 */ public function test_bp_has_member_type_should_return_true_on_success() { $u1 = $this->factory->user->create(); bp_register_member_type('foo'); bp_register_member_type('bar'); bp_set_member_type($u1, 'foo'); bp_set_member_type($u1, 'bar', true); $this->assertTrue(bp_has_member_type($u1, 'foo')); $types = bp_get_member_type($u1, false); $this->assertEqualSets(array('bar', 'foo'), $types); }
/** * @group bp_has_members * @ticket BP6286 */ public function test_bp_has_members_should_infer_member_type_from_get_param_comma_sep() { bp_register_member_type('foo'); bp_register_member_type('bar'); bp_register_member_type('baz'); $users = $this->factory->user->create_many(4); bp_set_member_type($users[0], 'foo'); bp_set_member_type($users[1], 'bar'); bp_set_member_type($users[2], 'baz'); global $members_template; $old_members_template = $members_template; $old_get = $_GET; $_GET['member_type'] = 'foo,bar'; bp_has_members(); $members = is_array($members_template->members) ? array_values($members_template->members) : array(); $member_ids = wp_list_pluck($members, 'ID'); $this->assertEqualSets(array($users[0], $users[1]), $member_ids); $GLOBALS['members_template'] = $old_members_template; }
public function test_bp_get_member_type_should_not_return_unregistered_types() { $u1 = $this->factory->user->create(); bp_register_member_type('foo'); bp_set_member_type($u1, 'foo'); // Directly set a type that hasn't been registered. bp_set_object_terms($u1, 'ugh', bp_get_member_type_tax_name(), true); $type = bp_get_member_type($u1, false); $this->assertEquals(array('foo'), $type); }
/** * @ticket BP6286 * @group member_types */ public function test_member_directory_should_404_for_member_types_that_have_no_directory() { bp_register_member_type('foo', array('has_directory' => false)); $this->go_to(bp_get_members_directory_permalink() . 'type/foo/'); $this->assertTrue(is_404()); }
/** * Register all active member types * */ public function register_member_type() { //$this->register_post_type(); $is_root_blog = bp_is_root_blog(); //if we are not on the main bp site, switch to it before registering member type if (!$is_root_blog) { switch_to_blog(bp_get_root_blog_id()); } //get all posts in memeber type post type $post_ids = bmt_get_active_member_types(); //update meta cache to avoid multiple db calls update_meta_cache('post', $post_ids); //build to register the memebr type $member_types = array(); foreach ($post_ids as $post_id) { $name = strtolower(get_post_meta($post_id, '_bp_member_type_label_singular_name', true)); $name = str_replace(array(' ', ','), array('-', '-'), $name); $enable_directory = get_post_meta($post_id, '_bp_member_type_enable_directory', true); $has_dir = false; if ($enable_directory) { $has_dir = true; } $member_types[$name] = array('labels' => array('name' => get_post_meta($post_id, '_bp_member_type_label_name', true), 'singular_name' => $name), 'has_directory' => $has_dir); } foreach ($member_types as $member_type => $args) { bp_register_member_type($member_type, $args); } if (!$is_root_blog) { restore_current_blog(); } }
/** * @ticket BP6840 */ public function test_successful_format() { bp_register_member_type('foo', array('has_directory' => true)); $expected = bp_get_members_directory_permalink() . 'type/foo/'; $this->assertSame($expected, bp_get_member_type_directory_permalink('foo')); }