Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
11/08/2022 06:27:01 AM (4 years ago)
Author:
imath
Message:

xProfile: allow the loop to fetch fields from multiple fields group

You can now pass an array of fields group ID into the $profile_group_id
parameter.

Props boonebgorges, espellcaste

Closes https://github.com/buddypress/buddypress/pull/30
Fixes #4075

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/testcases/xprofile/class-bp-xprofile-group.php

    r12317 r13358  
    132132
    133133        /**
     134         * @group get_xprofile_groups
     135         * @group BP4075
     136         */
     137        public function test_get_specific_xprofile_groups() {
     138                $g1 = self::factory()->xprofile_group->create();
     139                $g2 = self::factory()->xprofile_group->create();
     140                $g3 = self::factory()->xprofile_group->create();
     141                $e1 = [ $g1, $g2 ];
     142
     143                // Comma-separated list of profile group ids.
     144                $groups1 = BP_XProfile_Group::get( [ 'profile_group_id' => join( ',', $e1 ) ] );
     145
     146                $this->assertSame( $e1, array_map( 'absint', wp_list_pluck( $groups1, 'id' ) ) );
     147
     148                // Array of profile group ids.
     149                $groups2 = BP_XProfile_Group::get( [ 'profile_group_id' => $e1 ] );
     150
     151                $this->assertSame( $e1, array_map( 'absint', wp_list_pluck( $groups2, 'id' ) ) );
     152        }
     153
     154        /**
    134155         * @group member_types
    135156         * @ticket BP5192
     
    444465
    445466        /**
    446          * @group BP7435
    447          * @group cache
    448          */
    449         public function test_group_ids_query_should_be_cached() {
    450                 global $wpdb;
    451 
    452                 $group_ids   = array( 1 ); // Default group.
     467         * @group BP4075
     468         */
     469        public function test_group_ids_query() {
     470                $g1 = self::factory()->xprofile_group->create();
     471                $g2 = self::factory()->xprofile_group->create();
     472
     473                $group_ids   = [ 1 ]; // Default group.
    453474                $group_ids[] = self::factory()->xprofile_group->create();
    454475                $group_ids[] = self::factory()->xprofile_group->create();
    455476                $group_ids[] = self::factory()->xprofile_group->create();
    456 
    457                 $params_1 = array(
    458                         'exclude_groups' => false,
    459                 );
    460 
    461                 $params_2 = array(
    462                         'exclude_groups' => array( 0 ),
    463                 );
     477                $group_ids[] = $g1;
     478                $group_ids[] = $g2;
     479
     480                $found_1 = BP_XProfile_Group::get_group_ids();
     481                $this->assertEqualSets( $group_ids, $found_1 );
     482
     483                $found_2 = BP_XProfile_Group::get_group_ids( [ 'profile_group_id' => $g1 ] );
     484                $this->assertCount( 1, $found_2 );
     485                $this->assertSame( [ $g1 ], $found_2 );
     486
     487                $found_3 = BP_XProfile_Group::get_group_ids( [ 'profile_group_id' => [ $g1 ] ] );
     488                $this->assertCount( 1, $found_3 );
     489                $this->assertSame( [ $g1 ], $found_3 );
     490
     491                $found_4 = BP_XProfile_Group::get_group_ids( [ 'profile_group_id' => [ $g2 ] ] );
     492                $this->assertCount( 1, $found_4 );
     493                $this->assertSame( [ $g2 ], $found_4 );
     494
     495                $found_5 = BP_XProfile_Group::get_group_ids( [ 'profile_group_id' => [ $g1, $g2 ] ] );
     496                $this->assertCount( 2, $found_5 );
     497                $this->assertSame( [ $g1, $g2 ], $found_5 );
     498
     499                $found_6 = BP_XProfile_Group::get_group_ids( [ 'profile_group_id' => join( ',', [ $g1, $g2 ] ) ] );
     500                $this->assertCount( 2, $found_6 );
     501                $this->assertSame( [ $g1, $g2 ], $found_6 );
     502
     503                $found_7 = BP_XProfile_Group::get_group_ids( [ 'profile_group_id' => true ] );
     504                $this->assertEqualSets( $group_ids, $found_7 );
     505        }
     506
     507        /**
     508         * @group BP7435
     509         * @group cache
     510         */
     511        public function test_group_ids_query_should_be_cached() {
     512                global $wpdb;
     513
     514                $group_ids   = array( 1 ); // Default group.
     515                $g1          = self::factory()->xprofile_group->create();
     516                $g2          = self::factory()->xprofile_group->create();
     517                $group_ids[] = self::factory()->xprofile_group->create();
     518                $group_ids[] = self::factory()->xprofile_group->create();
     519                $group_ids[] = self::factory()->xprofile_group->create();
     520                $group_ids[] = $g1;
     521                $group_ids[] = $g2;
     522
     523                $params_1 = [ 'exclude_groups' => false ];
    464524
    465525                // Prime cache.
     
    469529                $num_queries = $wpdb->num_queries;
    470530
    471                 $found_1 = BP_XProfile_Group::get_group_ids( $params_1 );
    472                 $this->assertEqualSets( $group_ids, $found_1 );
     531                $found_2 = BP_XProfile_Group::get_group_ids( $params_1 );
     532                $this->assertEqualSets( $group_ids, $found_2 );
    473533                $this->assertSame( $num_queries, $wpdb->num_queries );
    474534
    475535                // Different parameters should trigger a cache miss.
    476                 $found_2 = BP_XProfile_Group::get_group_ids( $params_2 );
    477                 $this->assertEqualSets( $group_ids, $found_2 );
     536                $found_3 = BP_XProfile_Group::get_group_ids( [ 'exclude_groups' => [ 0 ] ] );
     537                $this->assertEqualSets( $group_ids, $found_3 );
     538                $this->assertNotSame( $num_queries, $wpdb->num_queries );
     539
     540                // Again, different parameters should trigger a cache miss.
     541                $found_4 = BP_XProfile_Group::get_group_ids( [ 'profile_group_id' => [ $g1, $g2 ] ] );
     542                $this->assertEqualSets( [ $g1, $g2 ], $found_4 );
    478543                $this->assertNotSame( $num_queries, $wpdb->num_queries );
    479544        }
Note: See TracChangeset for help on using the changeset viewer.