Skip to:
Content

BuddyPress.org

Changeset 13528


Ignore:
Timestamp:
07/27/2023 10:46:04 AM (2 years ago)
Author:
imath
Message:

Prevent potential errors in bp_get_the_profile_field_ids()

In case this function is used inside an xProfile group loop having no attached profile fields, instead of generating a notice error, let's simply return an empty string.

Props shawfactor

Fixes #8789
Closes https://github.com/buddypress/buddypress/pull/140

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-xprofile/bp-xprofile-template.php

    r13503 r13528  
    474474
    475475        $field_ids = array();
    476         foreach ( $profile_template->groups as $group ) {
    477             if ( ! empty( $group->fields ) ) {
    478                 $field_ids = array_merge( $field_ids, wp_list_pluck( $group->fields, 'id' ) );
     476
     477        if ( isset( $profile_template->groups ) && $profile_template->groups ) {
     478            foreach ( $profile_template->groups as $group ) {
     479                if ( ! empty( $group->fields ) ) {
     480                    $field_ids = array_merge( $field_ids, wp_list_pluck( $group->fields, 'id' ) );
     481                }
    479482            }
    480         }
    481 
    482         $field_ids = implode( ',', wp_parse_id_list( $field_ids ) );
     483
     484            $field_ids = implode( ',', wp_parse_id_list( $field_ids ) );
     485        } else {
     486            $field_ids = '';
     487        }
    483488
    484489        /**
  • trunk/tests/phpunit/testcases/xprofile/template.php

    r13358 r13528  
    178178        $profile_template = $reset_profile_template;
    179179    }
     180
     181    /**
     182     * @group bp_get_the_profile_field_ids
     183     * @group bp_has_profile
     184     */
     185    public function test_bp_get_the_profile_field_ids() {
     186        global $profile_template;
     187        $reset_profile_template = $profile_template;
     188
     189        $group     = self::factory()->xprofile_group->create();
     190        $fields_in = array(
     191            self::factory()->xprofile_field->create(
     192                array(
     193                    'field_group_id' => $group,
     194                )
     195            ),
     196            self::factory()->xprofile_field->create(
     197                array(
     198                    'field_group_id' => $group,
     199                )
     200            )
     201        );
     202
     203        bp_has_profile( array( 'profile_group_id' => $group ) );
     204        $this->assertSame( bp_get_the_profile_field_ids(), implode( ',', $fields_in ) );
     205
     206        foreach ( $fields_in as $field_in_id ) {
     207            xprofile_delete_field( $field_in_id );
     208        }
     209
     210        xprofile_delete_field_group( $group );
     211
     212        $profile_template = $reset_profile_template;
     213    }
     214
     215    /**
     216     * @group bp_get_the_profile_field_ids
     217     */
     218    public function test_bp_get_the_profile_field_ids_no_group() {
     219        global $profile_template;
     220        $reset_profile_template = $profile_template;
     221
     222        $profile_template = new stdClass();
     223
     224        $this->assertEquals( '', bp_get_the_profile_field_ids() );
     225
     226        $profile_template->groups = array();
     227
     228        $this->assertEquals( '', bp_get_the_profile_field_ids() );
     229
     230        $profile_template = $reset_profile_template;
     231    }
    180232}
Note: See TracChangeset for help on using the changeset viewer.