[ Index ] |
PHP Cross Reference of BuddyPress |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * BuddyPress Membersip Invitations 4 * 5 * @package BuddyPress 6 * @subpackage MembersInvitations 7 * @since 8.0.0 8 */ 9 10 // Exit if accessed directly. 11 defined( 'ABSPATH' ) || exit; 12 13 /** 14 * Set up the displayed user's Members Invitations nav. 15 * 16 * @since 8.0.0 17 */ 18 function bp_members_invitations_setup_nav() { 19 if ( ! bp_get_members_invitations_allowed() ) { 20 return; 21 } 22 23 $user_has_access = bp_user_has_access(); 24 $default_subnav_slug = ( bp_is_my_profile() && bp_user_can( bp_displayed_user_id(), 'bp_members_invitations_view_send_screen' ) ) ? 'send-invites' : 'list-invites'; 25 26 /* Add 'Invitations' to the main user profile navigation */ 27 bp_core_new_nav_item( 28 array( 29 'name' => __( 'Invitations', 'buddypress' ), 30 'slug' => bp_get_members_invitations_slug(), 31 'position' => 80, 32 'screen_function' => 'members_screen_send_invites', 33 'default_subnav_slug' => $default_subnav_slug, 34 'show_for_displayed_user' => $user_has_access && bp_user_can( bp_displayed_user_id(), 'bp_members_invitations_view_screens' ) 35 ) 36 ); 37 38 $parent_link = trailingslashit( bp_displayed_user_domain() . bp_get_members_invitations_slug() ); 39 40 /* Create two subnav items for community invitations */ 41 bp_core_new_subnav_item( 42 array( 43 'name' => __( 'Send Invites', 'buddypress' ), 44 'slug' => 'send-invites', 45 'parent_slug' => bp_get_members_invitations_slug(), 46 'parent_url' => $parent_link, 47 'screen_function' => 'members_screen_send_invites', 48 'position' => 10, 49 'user_has_access' => $user_has_access && bp_is_my_profile() && bp_user_can( bp_displayed_user_id(), 'bp_members_invitations_view_send_screen' ) 50 ) 51 ); 52 53 bp_core_new_subnav_item( 54 array( 55 'name' => __( 'Pending Invites', 'buddypress' ), 56 'slug' => 'list-invites', 57 'parent_slug' => bp_get_members_invitations_slug(), 58 'parent_url' => $parent_link, 59 'screen_function' => 'members_screen_list_sent_invites', 60 'position' => 20, 61 'user_has_access' => $user_has_access && bp_user_can( bp_displayed_user_id(), 'bp_members_invitations_view_screens' ) 62 ) 63 ); 64 } 65 add_action( 'bp_setup_nav', 'bp_members_invitations_setup_nav' ); 66 67 /** 68 * When a user joins the network via an invitation, skip sending the activation email. 69 * 70 * @since 8.0.0 71 * 72 * @param bool $send Whether or not to send the activation key. 73 * @param int $user_id User ID to send activation key to. 74 * @param string $user_email User email to send activation key to. 75 * 76 * @return bool Whether or not to send the activation key. 77 */ 78 function bp_members_invitations_cancel_activation_email( $send, $user_id = 0, $user_email = '' ) { 79 $invite = bp_members_invitations_get_invites( 80 array( 81 'invitee_email' => $user_email, 82 'invite_sent' => 'sent', 83 ) 84 ); 85 86 if ( $invite ) { 87 $send = false; 88 } 89 90 return $send; 91 } 92 add_filter( 'bp_core_signup_send_activation_key', 'bp_members_invitations_cancel_activation_email', 10, 3 ); 93 94 /** 95 * When a user joins the network via an invitation: 96 * - mark all invitations and requests as accepted 97 * - activate the user upon signup 98 * 99 * @since 8.0.0 100 * 101 * @global BuddyPress $bp The one true BuddyPress instance. 102 * 103 * @param bool|WP_Error $user_id True on success, WP_Error on failure. 104 */ 105 function bp_members_invitations_complete_signup( $user_id ) { 106 $bp = buddypress(); 107 108 if ( ! $user_id ) { 109 return; 110 } 111 112 // Check to see if this signup is the result of a valid invitation. 113 $invite = bp_get_members_invitation_from_request(); 114 if ( ! $invite->id ) { 115 return; 116 } 117 118 // Accept the invitation. 119 $invites_class = new BP_Members_Invitation_Manager(); 120 $args = array( 121 'id' => $invite->id, 122 ); 123 $invites_class->accept_invitation( $args ); 124 125 // User has already verified their email by responding to the invitation, so we can activate. 126 $key = bp_get_user_meta( $user_id, 'activation_key', true ); 127 if ( $key ) { 128 $redirect = bp_get_activation_page(); 129 130 /** 131 * Filters the activation signup. 132 * 133 * @since 1.1.0 134 * 135 * @param bool|int $value Value returned by activation. 136 * Integer on success, boolean on failure. 137 */ 138 $user = apply_filters( 'bp_core_activate_account', bp_core_activate_signup( $key ) ); 139 140 // If there were errors, add a message and redirect. 141 if ( ! empty( $user->errors ) ) { 142 /** 143 * Filter here to redirect the User to a different URL than the activation page. 144 * 145 * @since 10.0.0 146 * 147 * @param string $redirect The URL to use to redirect the user. 148 * @param WP_Error $user The WP Error object. 149 */ 150 $redirect = apply_filters( 'bp_members_invitations_activation_errored_redirect', $redirect, $user ); 151 152 bp_core_add_message( $user->get_error_message(), 'error' ); 153 bp_core_redirect( $redirect ); 154 } 155 156 /** 157 * Filter here to redirect the User to a different URL than the activation page. 158 * 159 * @since 10.0.0 160 * 161 * @param string $redirect The URL to use to redirect the user. 162 */ 163 $redirect = apply_filters( 'bp_members_invitations_activation_successed_redirect', $redirect ); 164 165 bp_core_add_message( __( 'Your account is now active!', 'buddypress' ) ); 166 bp_core_redirect( add_query_arg( 'activated', '1', $redirect ) ); 167 } 168 } 169 add_action( 'bp_core_signup_user', 'bp_members_invitations_complete_signup' ); 170 171 /** 172 * Delete site membership invitations when an opt-out request is saved. 173 * 174 * @since 8.0.0 175 * 176 * @param BP_Optout $optout Characteristics of the opt-out just saved. 177 */ 178 function bp_members_invitations_delete_optedout_invites( $optout ) { 179 bp_members_invitations_delete_invites( 180 array( 181 'invitee_email' => $optout->email_address, 182 ) 183 ); 184 } 185 add_action( 'bp_optout_after_save', 'bp_members_invitations_delete_optedout_invites' ); 186 187 /** 188 * If a user submits a site membership request, but there's a 189 * sent invitation to her, bypass the manual approval of the request. 190 * 191 * @since 10.0.0 192 * 193 * @param bool $send Whether or not this membership request should be approved 194 * immediately and the activation email sent. 195 * Default is `false` meaning that the request should be 196 * manually approved by a site admin. 197 * @param array $details The details of the request. 198 */ 199 function bp_members_invitations_maybe_bypass_request_approval( $send, $details ) { 200 if ( ! bp_get_members_invitations_allowed() ) { 201 return $send; 202 } 203 204 // We'll need the prospective user's email address. 205 if ( empty( $details['user_email'] ) ) { 206 return $send; 207 } 208 209 $invites = bp_members_invitations_get_invites( 210 array( 211 'invitee_email' => $details['user_email'], 212 'invite_sent' => 'sent' 213 ) 214 ); 215 216 // If pending invitations exist, send the verification mail. 217 if ( $invites ) { 218 $send = true; 219 } 220 221 return $send; 222 } 223 add_filter( 'bp_members_membership_requests_bypass_manual_approval', 'bp_members_invitations_maybe_bypass_request_approval', 10, 2 ); 224 add_filter( 'bp_members_membership_requests_bypass_manual_approval_multisite', 'bp_members_invitations_maybe_bypass_request_approval', 10, 2 );
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Thu Nov 21 01:00:57 2024 | Cross-referenced by PHPXref 0.7.1 |