Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
10/17/2013 07:00:46 PM (12 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-templates/bp-legacy/buddypress-functions.php

    r7430 r7442  
    907907        return;
    908908
     909    $group_id = (int) $_POST['group_id'];
     910    $friend_id = (int) $_POST['friend_id'];
     911
    909912    if ( 'invite' == $_POST['friend_action'] ) {
    910         if ( ! groups_invite_user( array( 'user_id' => $_POST['friend_id'], 'group_id' => $_POST['group_id'] ) ) )
     913        $group = groups_get_group( $group_id );
     914
     915        // Users who have previously requested membership do not need
     916        // another invitation created for them
     917        if ( BP_Groups_Member::check_for_membership_request( $friend_id, $group_id ) ) {
     918            $user_status = 'is_pending';
     919
     920        // Create the user invitation
     921        } else if ( groups_invite_user( array( 'user_id' => $friend_id, 'group_id' => $group_id ) ) ) {
     922            $user_status = 'is_invited';
     923
     924        // Miscellaneous failure
     925        } else {
    911926            return;
    912 
    913         $user = new BP_Core_User( $_POST['friend_id'] );
     927        }
     928
     929        $user = new BP_Core_User( $friend_id );
    914930
    915931        echo '<li id="uid-' . $user->id . '">';
     
    920936                <a class="button remove" href="' . wp_nonce_url( bp_loggedin_user_domain() . bp_get_groups_slug() . '/' . $_POST['group_id'] . '/invites/remove/' . $user->id, 'groups_invite_uninvite_user' ) . '" id="uid-' . esc_attr( $user->id ) . '">' . __( 'Remove Invite', 'buddypress' ) . '</a>
    921937              </div>';
     938
     939        if ( 'is_pending' == $user_status ) {
     940            echo '<p class="description">' . sprintf( __( '%s has previously requested to join this group. Sending an invitation will automatically add the member to the group.', 'buddypress' ), $user->user_link ) . '</p>';
     941        }
     942
    922943        echo '</li>';
    923944        exit;
    924945
    925946    } elseif ( 'uninvite' == $_POST['friend_action'] ) {
    926         if ( ! groups_uninvite_user( $_POST['friend_id'], $_POST['group_id'] ) )
     947        // Users who have previously requested membership should not
     948        // have their requests deleted on the "uninvite" action
     949        if ( BP_Groups_Member::check_for_membership_request( $friend_id, $group_id ) ) {
    927950            return;
     951        }
     952
     953        // Remove the unsent invitation
     954        if ( ! groups_uninvite_user( $friend_id, $group_id ) ) {
     955            return;
     956        }
    928957
    929958        exit;
     
    10561085
    10571086        } elseif ( 'private' == $group->status ) {
    1058             check_ajax_referer( 'groups_request_membership' );
    1059 
    1060             if ( ! groups_send_membership_request( bp_loggedin_user_id(), $group->id ) ) {
    1061                 _e( 'Error requesting membership', 'buddypress' );
     1087
     1088            // If the user has already been invited, then this is
     1089            // an Accept Invitation button
     1090            if ( groups_check_user_has_invite( bp_loggedin_user_id(), $group->id ) ) {
     1091                check_ajax_referer( 'groups_accept_invite' );
     1092
     1093                if ( ! groups_accept_invite( bp_loggedin_user_id(), $group->id ) ) {
     1094                    _e( 'Error requesting membership', 'buddypress' );
     1095                } else {
     1096                    echo '<a id="group-' . esc_attr( $group->id ) . '" class="leave-group" rel="leave" title="' . __( 'Leave Group', 'buddypress' ) . '" href="' . wp_nonce_url( bp_get_group_permalink( $group ) . 'leave-group', 'groups_leave_group' ) . '">' . __( 'Leave Group', 'buddypress' ) . '</a>';
     1097                }
     1098
     1099            // Otherwise, it's a Request Membership button
    10621100            } else {
    1063                 echo '<a id="group-' . esc_attr( $group->id ) . '" class="membership-requested" rel="membership-requested" title="' . __( 'Membership Requested', 'buddypress' ) . '" href="' . bp_get_group_permalink( $group ) . '">' . __( 'Membership Requested', 'buddypress' ) . '</a>';
     1101                check_ajax_referer( 'groups_request_membership' );
     1102
     1103                if ( ! groups_send_membership_request( bp_loggedin_user_id(), $group->id ) ) {
     1104                    _e( 'Error requesting membership', 'buddypress' );
     1105                } else {
     1106                    echo '<a id="group-' . esc_attr( $group->id ) . '" class="membership-requested" rel="membership-requested" title="' . __( 'Membership Requested', 'buddypress' ) . '" href="' . bp_get_group_permalink( $group ) . '">' . __( 'Membership Requested', 'buddypress' ) . '</a>';
     1107                }
    10641108            }
    10651109        }
Note: See TracChangeset for help on using the changeset viewer.