Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
05/21/2016 02:16:38 AM (9 years ago)
Author:
boonebgorges
Message:

Introduce caching for group memberships.

The new system works like this: The bp_groups_memberships_for_user cache
group stores arrays of membership IDs for individual users. The
bp_groups_memberships cache group stores data about individual memberships.
The new function bp_get_user_groups() populates a user's group memberships
from these caches, and filters them as requested in the function parameters.
Then, the various groups_is_user_*() functions use bp_get_user_groups()
instead of direct, uncached database queries to fetch their data.

In addition, the get_group_extras() method of BP_Groups_Group can now be
greatly simplified, since all necessary pre-fetching of current-user group
memberships happens via the bp_get_user_groups() cache.

Props boonebgorges, dcavins.
See #6327.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/testcases/groups/functions/groupsIsUser.php

    r9819 r10794  
    5555        ) );
    5656
    57         $this->assertEquals( true, groups_is_user_admin( self::$user, self::$groups[1] ) );
     57        $this->assertNotEmpty( groups_is_user_admin( self::$user, self::$groups[1] ) );
    5858    }
    5959
     
    7777        ) );
    7878
    79         $this->assertEquals( true, groups_is_user_mod( self::$user, self::$groups[1] ) );
     79        $this->assertNotEmpty( groups_is_user_mod( self::$user, self::$groups[1] ) );
    8080    }
    8181
     
    108108        $this->add_user_to_group( self::$user, self::$groups[1] );
    109109
    110         $this->assertEquals( true, groups_is_user_member( self::$user, self::$groups[1] ) );
     110        $this->assertNotEmpty( groups_is_user_member( self::$user, self::$groups[1] ) );
     111    }
     112
     113    public function test_groups_is_user_member_should_return_true_for_admin() {
     114        $this->add_user_to_group( self::$user, self::$groups[1], array(
     115            'is_admin' => true,
     116        ) );
     117
     118        $this->assertNotEmpty( groups_is_user_member( self::$user, self::$groups[1] ) );
     119    }
     120
     121    public function test_groups_is_user_member_should_return_true_for_mod() {
     122        $this->add_user_to_group( self::$user, self::$groups[1], array(
     123            'is_mod' => true,
     124        ) );
     125
     126        $this->assertNotEmpty( groups_is_user_member( self::$user, self::$groups[1] ) );
    111127    }
    112128
     
    144160        $m->ban();
    145161
    146         $this->assertEquals( true, groups_is_user_banned( self::$user, self::$groups[1] ) );
     162        $this->assertNotEmpty( groups_is_user_banned( self::$user, self::$groups[1] ) );
     163    }
     164
     165    public function test_groups_is_user_invited_should_return_false_for_confirmed_member() {
     166        $this->add_user_to_group( self::$user, self::$groups[1] );
     167        $this->assertEquals( false, groups_is_user_invited( self::$user, self::$groups[1] ) );
     168    }
     169
     170    public function test_groups_is_user_invited_should_return_false_for_uninvited_member() {
     171        $this->assertEquals( false, groups_is_user_invited( self::$user, self::$groups[1] ) );
     172    }
     173
     174    public function test_groups_is_user_invited_should_return_true_for_invited_member() {
     175        $i = groups_invite_user( array(
     176            'user_id' => self::$user,
     177            'group_id' => self::$groups[1],
     178            'inviter_id' => 123,
     179        ) );
     180
     181        // Send invite.
     182        $m = new BP_Groups_Member( self::$user, self::$groups[1] );
     183        $m->invite_sent = 1;
     184        $m->save();
     185
     186        $this->assertNotEmpty( groups_is_user_invited( self::$user, self::$groups[1] ) );
     187    }
     188
     189    public function test_groups_is_user_pending_should_return_false_for_pending_member() {
     190        groups_invite_user( array(
     191            'user_id' => self::$user,
     192            'group_id' => self::$groups[1],
     193            'inviter_id' => 123,
     194        ) );
     195
     196        // Send invite.
     197        $m = new BP_Groups_Member( self::$user, self::$groups[1] );
     198        $m->invite_sent = 1;
     199        $m->save();
     200
     201        $this->assertEquals( false, groups_is_user_pending( self::$user, self::$groups[1] ) );
     202    }
     203
     204    public function test_groups_is_user_pending_should_return_false_for_member_with_no_request() {
     205        $this->assertEquals( false, groups_is_user_pending( self::$user, self::$groups[1] ) );
     206    }
     207
     208    public function test_groups_is_user_pending_should_return_true_for_pending_member() {
     209
     210        $m                = new BP_Groups_Member;
     211        $m->group_id      = self::$groups[1];
     212        $m->user_id       = self::$user;
     213        $m->inviter_id    = 0;
     214        $m->is_admin      = 0;
     215        $m->user_title    = '';
     216        $m->date_modified = bp_core_current_time();
     217        $m->is_confirmed  = 0;
     218        $m->comments      = 'request';
     219        $m->save();
     220
     221        $this->assertNotEmpty( groups_is_user_pending( self::$user, self::$groups[1] ) );
    147222    }
    148223}
Note: See TracChangeset for help on using the changeset viewer.