Skip to:
Content

BuddyPress.org

Changeset 8965


Ignore:
Timestamp:
08/26/2014 08:53:24 PM (11 years ago)
Author:
imath
Message:

In {{{bp_blogs_add_user_to_blog
()}}} function make sure getting user roles returns an array

On multisite configs, when a member registers, he is not assigned to any blog and has no role.
When activating the user from the Manage signups screen, getting his role in bp_blogs_add_user_to_blog() was returning an empty string causing a notice error when trying to get the keys of the "capabilities" usermeta.
To avoid this, we now make sure this usermeta is an array.

Fixes #5834

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-blogs/bp-blogs-functions.php

    r8945 r8965  
    860860        // Get user capabilities
    861861        $key        = $wpdb->get_blog_prefix( $blog_id ). 'capabilities';
    862         $user_roles = array_keys( bp_get_user_meta( $user_id, $key, true ) );
     862        $user_roles = array_keys( (array) bp_get_user_meta( $user_id, $key, true ) );
    863863
    864864        // User has roles so lets
  • trunk/tests/phpunit/testcases/members/class-bp-signup.php

    r8958 r8965  
    211211        $this->assertEquals( array( $s2 ), wp_list_pluck( $ss['signups'], 'signup_id' ) );
    212212    }
     213
     214    /**
     215     * @group activate
     216     */
     217    public function test_activate_user_accounts() {
     218        $signups = array();
     219
     220        $signups['accountone'] = $this->factory->signup->create( array(
     221            'user_login'     => 'accountone',
     222            'user_email'     => 'accountone@example.com',
     223            'activation_key' => 'activationkeyone',
     224        ) );
     225
     226        $signups['accounttwo'] = $this->factory->signup->create( array(
     227            'user_login'     => 'accounttwo',
     228            'user_email'     => 'accounttwo@example.com',
     229            'activation_key' => 'activationkeytwo',
     230        ) );
     231
     232        $signups['accountthree'] = $this->factory->signup->create( array(
     233            'user_login'     => 'accountthree',
     234            'user_email'     => 'accountthree@example.com',
     235            'activation_key' => 'activationkeythree',
     236        ) );
     237
     238        $results = BP_Signup::activate( $signups );
     239        $this->assertNotEmpty( $results['activated'] );
     240
     241        $users = array();
     242
     243        foreach ( $signups as $login => $signup_id  ) {
     244            $users[ $login ] = get_user_by( 'login', $login );
     245        }
     246
     247        $this->assertEqualSets( $results['activated'], wp_list_pluck( $users, 'ID' ) );
     248    }
     249
     250    /**
     251     * @group activate
     252     */
     253    public function test_activate_user_accounts_with_blogs() {
     254        global $wpdb, $current_site;
     255
     256        if ( ! is_multisite() ) {
     257            return;
     258        }
     259
     260        $signups = array();
     261
     262        $signups['blogone'] = $this->factory->signup->create( array(
     263            'user_login'     => 'blogone',
     264            'user_email'     => 'blogone@example.com',
     265            'domain'         => $current_site->domain,
     266            'path'           => '/blogone/',
     267            'title'          => 'Blog One',
     268            'activation_key' => 'activationkeyblogone',
     269        ) );
     270
     271        $signups['blogtwo'] = $this->factory->signup->create( array(
     272            'user_login'     => 'blogtwo',
     273            'user_email'     => 'blogtwo@example.com',
     274            'domain'         => '',
     275            'path'           => '',
     276            'title'          => '',
     277            'activation_key' => 'activationkeyblogtwo',
     278        ) );
     279
     280        $signups['blogthree'] = $this->factory->signup->create( array(
     281            'user_login'     => 'blogthree',
     282            'user_email'     => 'blogthree@example.com',
     283            'domain'         => $current_site->domain,
     284            'path'           => '/blogthree/',
     285            'title'          => 'Blog Three',
     286            'activation_key' => 'activationkeyblogthree',
     287        ) );
     288
     289        // Neutralize db errors
     290        $suppress = $wpdb->suppress_errors();
     291
     292        $results = BP_Signup::activate( $signups );
     293
     294        $wpdb->suppress_errors( $suppress );
     295
     296        $this->assertNotEmpty( $results['activated'] );
     297
     298        $users  = array();
     299
     300        foreach ( $signups as $login => $signup_id  ) {
     301            $users[ $login ] = get_user_by( 'login', $login );
     302        }
     303
     304        $this->assertEqualSets( $results['activated'], wp_list_pluck( $users, 'ID' ) );
     305
     306        $blogs = array();
     307
     308        foreach ( $users as $path => $user  ) {
     309            $blogs[ $path ] = get_active_blog_for_user( $user->ID );
     310        }
     311
     312        $blogs = array_filter( $blogs );
     313        $blogs = array_map( 'basename', wp_list_pluck( $blogs, 'path' ) );
     314
     315        $this->assertEqualSets( $blogs, array_keys( $blogs ) );
     316    }
    213317}
Note: See TracChangeset for help on using the changeset viewer.