Skip to:
Content

BuddyPress.org

Changeset 8044


Ignore:
Timestamp:
03/05/2014 02:37:27 PM (12 years ago)
Author:
boonebgorges
Message:

Introduce 'inviter_id' and 'invite_sent' params to BP_Group_Member_Query

These additional parameters make it possible to use BP_Group_Member_Query for
unconfirmed group memberships, as in the case of invitations and requests. This
will allow it to be swapped for the internals of bp_group_has_members(). See

Props dcavins for an initial patch

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/bp-groups/bp-groups-classes.php

    r8008 r8044  
    14481448 * Query for the members of a group.
    14491449 *
     1450 * Special notes about the group members data schema:
     1451 * - *Members* are entries with is_confirmed = 1
     1452 * - *Pending requests* are entries with is_confirmed = 0 and inviter_id = 0
     1453 * - *Pending and sent invitations* are entries with is_confirmed = 0 and
     1454 *   inviter_id != 0 and invite_sent = 1
     1455 * - *Pending and unsent invitations* are entries with is_confirmed = 0 and
     1456 *   inviter_id != 0 and invite_sent = 0
     1457 *
    14501458 * @since BuddyPress (1.8.0)
    14511459 *
     
    15151523                        'group_role'   => array( 'member' ),
    15161524                        'is_confirmed' => true,
     1525                        'invite_sent'  => null,
     1526                        'inviter_id'   => null,
    15171527                        'type'         => 'last_joined',
    15181528                ) );
     
    15631573                $is_confirmed = ! empty( $this->query_vars['is_confirmed'] ) ? 1 : 0;
    15641574                $sql['where'][] = $wpdb->prepare( "is_confirmed = %d", $is_confirmed );
     1575
     1576                // invite_sent
     1577                if ( ! is_null( $this->query_vars['invite_sent'] ) ) {
     1578                        $invite_sent = ! empty( $this->query_vars['invite_sent'] ) ? 1 : 0;
     1579                        $sql['where'][] = $wpdb->prepare( "invite_sent = %d", $invite_sent );
     1580                }
     1581
     1582                // inviter_id
     1583                if ( ! is_null( $this->query_vars['inviter_id'] ) ) {
     1584                        $inviter_id = $this->query_vars['inviter_id'];
     1585
     1586                        // Empty: inviter_id = 0. (pass false, 0, or empty array)
     1587                        if ( empty( $inviter_id ) ) {
     1588                                $sql['where'][] = "inviter_id = 0";
     1589
     1590                        // The string 'any' matches any non-zero value (inviter_id != 0)
     1591                        } else if ( 'any' === $inviter_id ) {
     1592                                $sql['where'][] = "inviter_id != 0";
     1593
     1594                        // Assume that a list of inviter IDs has been passed
     1595                        } else {
     1596                                // Parse and sanitize
     1597                                $inviter_ids = wp_parse_id_list( $inviter_id );
     1598                                if ( ! empty( $inviter_ids ) ) {
     1599                                        $inviter_ids_sql = implode( ',', $inviter_ids );
     1600                                        $sql['where'][] = "inviter_id IN ({$inviter_ids_sql})";
     1601                                }
     1602                        }
     1603                }
    15651604
    15661605                // Role information is stored as follows: admins have
  • trunk/tests/testcases/groups/class-bp-group-member-query.php

    r7948 r8044  
    423423                $this->assertEquals( array( $u1, $u3, $u2 ), $ids );
    424424        }
     425
     426        /**
     427         * @group invite_sent
     428         */
     429        public function test_with_invite_sent_true() {
     430                $g = $this->factory->group->create();
     431                $u1 = $this->create_user();
     432                $u2 = $this->create_user();
     433                $time = time();
     434
     435                $this->add_user_to_group( $u1, $g, array(
     436                        'date_modified' => gmdate( 'Y-m-d H:i:s', $time - 100 ),
     437                        'is_confirmed' => 0,
     438                        'invite_sent' => 0,
     439                ) );
     440
     441                $this->add_user_to_group( $u2, $g, array(
     442                        'date_modified' => gmdate( 'Y-m-d H:i:s', $time - 100 ),
     443                        'is_confirmed' => 0,
     444                        'invite_sent' => 1,
     445                ) );
     446
     447                $query_members = new BP_Group_Member_Query( array(
     448                        'group_id' => $g,
     449                        'is_confirmed' => false,
     450                        'invite_sent' => true,
     451                ) );
     452
     453                $ids = wp_parse_id_list( array_keys( $query_members->results ) );
     454                $this->assertEquals( array( $u2 ), $ids );
     455        }
     456
     457        /**
     458         * @group invite_sent
     459         */
     460        public function test_with_invite_sent_false() {
     461                $g = $this->factory->group->create();
     462                $u1 = $this->create_user();
     463                $u2 = $this->create_user();
     464                $time = time();
     465
     466                $this->add_user_to_group( $u1, $g, array(
     467                        'date_modified' => gmdate( 'Y-m-d H:i:s', $time - 100 ),
     468                        'is_confirmed' => 0,
     469                        'invite_sent' => 0,
     470                ) );
     471
     472                $this->add_user_to_group( $u2, $g, array(
     473                        'date_modified' => gmdate( 'Y-m-d H:i:s', $time - 100 ),
     474                        'is_confirmed' => 0,
     475                        'invite_sent' => 1,
     476                ) );
     477
     478                $query_members = new BP_Group_Member_Query( array(
     479                        'group_id' => $g,
     480                        'is_confirmed' => false,
     481                        'invite_sent' => false,
     482                ) );
     483
     484                $ids = wp_parse_id_list( array_keys( $query_members->results ) );
     485                $this->assertEquals( array( $u1 ), $ids );
     486        }
     487
     488        /**
     489         * @group inviter_id
     490         */
     491        public function test_with_inviter_id_false() {
     492                $g = $this->factory->group->create();
     493                $u1 = $this->create_user();
     494                $u2 = $this->create_user();
     495                $time = time();
     496
     497                $this->add_user_to_group( $u1, $g, array(
     498                        'date_modified' => gmdate( 'Y-m-d H:i:s', $time - 100 ),
     499                        'inviter_id' => 0,
     500                ) );
     501
     502                $this->add_user_to_group( $u2, $g, array(
     503                        'date_modified' => gmdate( 'Y-m-d H:i:s', $time - 100 ),
     504                        'inviter_id' => 1,
     505                ) );
     506
     507                $query_members = new BP_Group_Member_Query( array(
     508                        'group_id' => $g,
     509                        'inviter_id' => false,
     510                ) );
     511
     512                $ids = wp_parse_id_list( array_keys( $query_members->results ) );
     513                $this->assertEquals( array( $u1 ), $ids );
     514        }
     515
     516        /**
     517         * @group inviter_id
     518         */
     519        public function test_with_inviter_id_specific() {
     520                $g = $this->factory->group->create();
     521                $u1 = $this->create_user();
     522                $u2 = $this->create_user();
     523                $u3 = $this->create_user();
     524                $u4 = $this->create_user();
     525                $time = time();
     526
     527                $this->add_user_to_group( $u1, $g, array(
     528                        'date_modified' => gmdate( 'Y-m-d H:i:s', $time - 100 ),
     529                        'inviter_id' => 0,
     530                ) );
     531
     532                $this->add_user_to_group( $u2, $g, array(
     533                        'date_modified' => gmdate( 'Y-m-d H:i:s', $time - 200 ),
     534                        'inviter_id' => 1,
     535                ) );
     536
     537                $this->add_user_to_group( $u3, $g, array(
     538                        'date_modified' => gmdate( 'Y-m-d H:i:s', $time - 300 ),
     539                        'inviter_id' => 6,
     540                ) );
     541
     542                $this->add_user_to_group( $u4, $g, array(
     543                        'date_modified' => gmdate( 'Y-m-d H:i:s', $time - 400 ),
     544                        'inviter_id' => 2,
     545                ) );
     546
     547                $query_members = new BP_Group_Member_Query( array(
     548                        'group_id' => $g,
     549                        'inviter_id' => array( 2, 6 ),
     550                ) );
     551
     552                $ids = wp_parse_id_list( array_keys( $query_members->results ) );
     553                $this->assertEquals( array( $u3, $u4 ), $ids );
     554        }
     555
     556        /**
     557         * @group inviter_id
     558         */
     559        public function test_with_inviter_id_any() {
     560                $g = $this->factory->group->create();
     561                $u1 = $this->create_user();
     562                $u2 = $this->create_user();
     563                $u3 = $this->create_user();
     564                $u4 = $this->create_user();
     565                $time = time();
     566
     567                $this->add_user_to_group( $u1, $g, array(
     568                        'date_modified' => gmdate( 'Y-m-d H:i:s', $time - 100 ),
     569                        'inviter_id' => 0,
     570                ) );
     571
     572                $this->add_user_to_group( $u2, $g, array(
     573                        'date_modified' => gmdate( 'Y-m-d H:i:s', $time - 200 ),
     574                        'inviter_id' => 1,
     575                ) );
     576
     577                $this->add_user_to_group( $u3, $g, array(
     578                        'date_modified' => gmdate( 'Y-m-d H:i:s', $time - 300 ),
     579                        'inviter_id' => 6,
     580                ) );
     581
     582                $this->add_user_to_group( $u4, $g, array(
     583                        'date_modified' => gmdate( 'Y-m-d H:i:s', $time - 400 ),
     584                        'inviter_id' => 2,
     585                ) );
     586
     587                $query_members = new BP_Group_Member_Query( array(
     588                        'group_id' => $g,
     589                        'inviter_id' => 'any',
     590                ) );
     591
     592                $ids = wp_parse_id_list( array_keys( $query_members->results ) );
     593                $this->assertEquals( array( $u2, $u3, $u4 ), $ids );
     594        }
    425595}
Note: See TracChangeset for help on using the changeset viewer.