Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
10/17/2013 07:00:46 PM (13 years ago)
Author:
boonebgorges
Message:

Improve UX flow around overlapping group invites and requests

This changeset introduces a number of improvements to the flow surrounding
invitations and membership requests to private groups:

  • When a user has previously requested membership in a group, add a note to that effect when the user is being invited to the group via the Send Invites interface.
  • When a user has previously requested membership in a group, automatically accept that invitation and add the user to the group when an invitation is sent by an existing group member.
  • When a user has previously been invited to a group, buttons in the group directory and in the group header should read Accept Invitation instead of Request Membership

The end result is a more logical user experience with regard to joining private
groups.

Fixes #5032

Props Mike_Cowobo

File:
1 edited

Legend:

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

    r7441 r7442  
    3232         */
    3333        public $is_member;
     34
     35        /**
     36         * Does the current user have an outstanding invitation to this group?
     37         *
     38         * @since BuddyPress (1.9.0)
     39         * @var bool
     40         */
     41        public $is_invited;
     42
     43        /**
     44         * Does the current user have a pending membership request to this group?
     45         *
     46         * @since BuddyPress (1.9.0)
     47         * @var bool
     48         */
     49        public $is_pending;
    3450
    3551        /**
     
    7389                        $this->total_member_count = groups_get_groupmeta( $this->id, 'total_member_count' );
    7490                        $this->is_member          = BP_Groups_Member::check_is_member( bp_loggedin_user_id(), $this->id );
     91                        $this->is_invited         = BP_Groups_Member::check_has_invite( bp_loggedin_user_id(), $this->id );
     92                        $this->is_pending         = BP_Groups_Member::check_for_membership_request( bp_loggedin_user_id(), $this->id );
    7593
    7694                        // If this is a private or hidden group, does the current user have access?
     
    828846                $group_ids = implode( ',', wp_parse_id_list( $group_ids ) );
    829847
    830                 // Fetch the logged in users status within each group
    831                 $user_status = $wpdb->get_col( $wpdb->prepare( "SELECT group_id FROM {$bp->groups->table_name_members} WHERE user_id = %d AND group_id IN ( {$group_ids} ) AND is_confirmed = 1 AND is_banned = 0", bp_loggedin_user_id() ) );
     848                // Fetch the logged-in user's status within each group
     849                $user_status = $wpdb->get_results( $wpdb->prepare( "SELECT group_id, is_confirmed, invite_sent FROM {$bp->groups->table_name_members} WHERE user_id = %d AND group_id IN ( {$group_ids} ) AND is_banned = 0", bp_loggedin_user_id() ) );
     850
    832851                for ( $i = 0, $count = count( $paged_groups ); $i < $count; ++$i ) {
    833852                        $paged_groups[$i]->is_member = false;
    834853
    835                         foreach ( (array) $user_status as $group_id ) {
    836                                 if ( $group_id == $paged_groups[$i]->id ) {
    837                                         $paged_groups[$i]->is_member = true;
     854                        foreach ( (array) $user_status as $group ) {
     855                                $is_member = $is_invited = $is_pending = false;
     856                                if ( $group->group_id == $paged_groups[ $i ]->id ) {
     857                                        // is_confirmed means the user is a member
     858                                        if ( $group->is_confirmed ) {
     859                                                $is_member = true;
     860
     861                                        // invite_sent means the user has been invited
     862                                        } else if ( $group->invite_sent ) {
     863                                                $is_invited = true;
     864
     865                                        // User has sent request, but has not been confirmed
     866                                        } else {
     867                                                $is_pending = true;
     868                                        }
    838869                                }
     870
     871                                $paged_groups[ $i ]->is_member = $is_member;
     872                                $paged_groups[ $i ]->is_invited = $is_invited;
     873                                $paged_groups[ $i ]->is_pending = $is_pending;
    839874                        }
    840875                }
Note: See TracChangeset for help on using the changeset viewer.