Skip to:
Content

BuddyPress.org

Changeset 8965


Ignore:
Timestamp:
08/26/2014 08:53:24 PM (12 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.