Ticket #8582: 8582.6.patch
File 8582.6.patch, 71.3 KB (added by , 22 months ago) |
---|
-
src/bp-core/admin/bp-core-admin-settings.php
diff --git src/bp-core/admin/bp-core-admin-settings.php src/bp-core/admin/bp-core-admin-settings.php index b37b914ff..acd0361d4 100644
function bp_admin_setting_callback_members_invitations() { 203 203 do_action( 'bp_admin_settings_after_members_invitations' ); 204 204 } 205 205 206 /** 207 * Allow new users to request membership to the network. 208 * 209 * @since 10.0.0 210 */ 211 function bp_admin_setting_callback_membership_requests() { 212 ?> 213 <input id="bp-enable-membership-requests" name="bp-enable-membership-requests" type="checkbox" value="1" <?php checked( bp_get_membership_requests_required( 'raw' ) ); ?> <?php if ( bp_get_signup_allowed() ) { echo 'disabled="disabled"'; } ?> /> 214 <label for="bp-enable-membership-requests"><?php esc_html_e( 'Allow visitors to request site membership. If enabled, an administrator must approve each new site membership request.', 'buddypress' ); ?></label> 215 <?php if ( bp_get_signup_allowed() ) : ?> 216 <p class="description"><?php esc_html_e( 'Public registration is currently enabled. If you wish to require approval for new memberships, disable public registration and enable the membership requests feature.', 'buddypress' ); ?></p> 217 <?php endif; ?> 218 <?php 219 /** 220 * Fires after the output of the membership requests settings section. 221 * 222 * @since 10.0.0 223 */ 224 do_action( 'bp_admin_settings_after_membership_requests' ); 225 } 226 206 227 /** XProfile ******************************************************************/ 207 228 208 229 /** -
src/bp-core/bp-core-functions.php
diff --git src/bp-core/bp-core-functions.php src/bp-core/bp-core-functions.php index 3dbc32f11..b140fbf6d 100644
function bp_core_replace_tokens_in_text( $text, $tokens ) { 3800 3800 * Get a list of emails for populating the email post type. 3801 3801 * 3802 3802 * @since 2.5.1 3803 * @since 10.0.0 Added members-membership-request and 3804 * members-membership-request-rejected email types. 3803 3805 * 3804 3806 * @return array 3805 3807 */ … … function bp_email_get_schema() { 3960 3962 /* translators: do not remove {} brackets or translate its contents. */ 3961 3963 'post_excerpt' => __( "{{inviter.name}} has invited you to join the site \"{{site.name}}\".\n\n{{usermessage}}\n\nTo accept your invitation, visit: {{{invite.accept_url}}}\n\nTo learn more about the site, visit: {{{site.url}}}.\nTo view {{inviter.name}}'s profile, visit: {{{inviter.url}}}", 'buddypress' ), 3962 3964 ), 3965 'members-membership-request' => array( 3966 /* translators: do not remove {} brackets or translate its contents. */ 3967 'post_title' => __( '{{requesting-user.user_login}} would like to join {{site.name}}', 'buddypress' ), 3968 /* translators: do not remove {} brackets or translate its contents. */ 3969 'post_content' => __( "{{requesting-user.user_login}} would like to join the site: "{{site.name}}".\n\n<a href=\"{{{manage.url}}}\">Manage the request</a>.", 'buddypress' ), 3970 /* translators: do not remove {} brackets or translate its contents. */ 3971 'post_excerpt' => __( "{{requesting-user.user_login}} would like to join the site \"{{site.name}}\".\n\nTo manage the request, visit: {{{manage.url}}}.", 'buddypress' ), 3972 ), 3973 'members-membership-request-rejected' => array( 3974 /* translators: do not remove {} brackets or translate its contents. */ 3975 'post_title' => __( 'Your request to join {{site.name}} has been declined', 'buddypress' ), 3976 /* translators: do not remove {} brackets or translate its contents. */ 3977 'post_content' => __( "Sorry, your request to join the site "{{site.name}}" has been declined.", 'buddypress' ), 3978 /* translators: do not remove {} brackets or translate its contents. */ 3979 'post_excerpt' => __( "Sorry, your request to join the site \"{{site.name}}\" has been declined.", 'buddypress' ), 3980 ), 3963 3981 ) ); 3964 3982 } 3965 3983 … … function bp_email_get_type_schema( $field = 'description' ) { 4132 4150 ), 4133 4151 ); 4134 4152 4153 $members_membership_request= array( 4154 'description' => __( 'Someone has requested membership on this site.', 'buddypress' ), 4155 'named_salutation' => true, 4156 'unsubscribe' => array( 4157 'meta_key' => 'notification_members_membership_request', 4158 'message' => __( 'You will no longer receive emails when people submit requests to join this site.', 'buddypress' ), 4159 ), 4160 ); 4161 4162 $members_membership_request_rejected= array( 4163 'description' => __( 'A site membership request has been rejected.', 'buddypress' ), 4164 'named_salutation' => false, 4165 'unsubscribe' => false, 4166 ); 4167 4135 4168 $types = array( 4136 'activity-comment' => $activity_comment, 4137 'activity-comment-author' => $activity_comment_author, 4138 'activity-at-message' => $activity_at_message, 4139 'groups-at-message' => $groups_at_message, 4140 'core-user-registration' => $core_user_registration, 4141 'core-user-registration-with-blog' => $core_user_registration_with_blog, 4142 'friends-request' => $friends_request, 4143 'friends-request-accepted' => $friends_request_accepted, 4144 'groups-details-updated' => $groups_details_updated, 4145 'groups-invitation' => $groups_invitation, 4146 'groups-member-promoted' => $groups_member_promoted, 4147 'groups-membership-request' => $groups_membership_request, 4148 'messages-unread' => $messages_unread, 4149 'settings-verify-email-change' => $settings_verify_email_change, 4150 'groups-membership-request-accepted' => $groups_membership_request_accepted, 4151 'groups-membership-request-rejected' => $groups_membership_request_rejected, 4152 'core-user-activation' => $core_user_activation, 4153 'bp-members-invitation' => $members_invitation, 4169 'activity-comment' => $activity_comment, 4170 'activity-comment-author' => $activity_comment_author, 4171 'activity-at-message' => $activity_at_message, 4172 'groups-at-message' => $groups_at_message, 4173 'core-user-registration' => $core_user_registration, 4174 'core-user-registration-with-blog' => $core_user_registration_with_blog, 4175 'friends-request' => $friends_request, 4176 'friends-request-accepted' => $friends_request_accepted, 4177 'groups-details-updated' => $groups_details_updated, 4178 'groups-invitation' => $groups_invitation, 4179 'groups-member-promoted' => $groups_member_promoted, 4180 'groups-membership-request' => $groups_membership_request, 4181 'messages-unread' => $messages_unread, 4182 'settings-verify-email-change' => $settings_verify_email_change, 4183 'groups-membership-request-accepted' => $groups_membership_request_accepted, 4184 'groups-membership-request-rejected' => $groups_membership_request_rejected, 4185 'core-user-activation' => $core_user_activation, 4186 'bp-members-invitation' => $members_invitation, 4187 'members-membership-request' => $members_membership_request, 4188 'members-membership-request-rejected' => $members_membership_request_rejected, 4154 4189 ); 4155 4190 4156 4191 if ( $field !== 'all' ) { -
src/bp-core/bp-core-template.php
diff --git src/bp-core/bp-core-template.php src/bp-core/bp-core-template.php index efb251957..87a16b7a6 100644
function bp_get_title_parts( $seplocation = 'right' ) { 3192 3192 3193 3193 // Sign up page. 3194 3194 } elseif ( bp_is_register_page() ) { 3195 $bp_title_parts = array( __( 'Create an Account', 'buddypress' ) ); 3195 if ( bp_get_membership_requests_required() ) { 3196 $bp_title_parts = array( __( 'Request Membership', 'buddypress' ) ); 3197 } else { 3198 $bp_title_parts = array( __( 'Create an Account', 'buddypress' ) ); 3199 } 3196 3200 3197 3201 // Activation page. 3198 3202 } elseif ( bp_is_activation_page() ) { -
src/bp-core/bp-core-update.php
diff --git src/bp-core/bp-core-update.php src/bp-core/bp-core-update.php index 03710213c..6468ace39 100644
function bp_version_updater() { 278 278 if ( $raw_db_version < 12850 ) { 279 279 bp_update_to_8_0(); 280 280 } 281 282 // Version 10.0.0. 283 if ( $raw_db_version < 13150 ) { 284 bp_update_to_10_0(); 285 } 286 281 287 } 282 288 283 289 /* All done! *************************************************************/ … … function bp_core_get_8_0_upgrade_email_schema( $emails ) { 704 710 return $new_emails; 705 711 } 706 712 713 /** 714 * 10.0.0 update routine. 715 * 716 * - Install new BP Emails for membership requests. 717 * 718 * @since 10.0.0 719 */ 720 function bp_update_to_10_0() { 721 722 // Install membership request emails. 723 add_filter( 'bp_email_get_schema', 'bp_core_get_10_0_upgrade_email_schema' ); 724 725 bp_core_install_emails(); 726 727 remove_filter( 'bp_email_get_schema', 'bp_core_get_10_0_upgrade_email_schema' ); 728 } 729 730 /** 731 * Select only the emails that need to be installed with version 10.0. 732 * 733 * @since 10.0.0 734 * 735 * @param array $emails The array of emails schema. 736 */ 737 function bp_core_get_10_0_upgrade_email_schema( $emails ) { 738 $new_emails = array(); 739 740 if ( isset( $emails['members-membership-request'] ) ) { 741 $new_emails['members-membership-request'] = $emails['members-membership-request']; 742 } 743 744 if ( isset( $emails['members-membership-request-rejected'] ) ) { 745 $new_emails['members-membership-request-rejected'] = $emails['members-membership-request-rejected']; 746 } 747 748 return $new_emails; 749 } 750 707 751 /** 708 752 * Updates the component field for new_members type. 709 753 * -
src/bp-core/classes/class-bp-admin.php
diff --git src/bp-core/classes/class-bp-admin.php src/bp-core/classes/class-bp-admin.php index ee80328cc..ebe217a22 100644
class BP_Admin { 417 417 register_setting( 'buddypress', 'bp-enable-members-invitations', 'intval' ); 418 418 } 419 419 420 // Membership requests. 421 if ( bp_is_active( 'members', 'membership_requests' ) ) { 422 add_settings_field( 'bp-enable-membership-requests', __( 'Membership Requests', 'buddypress' ), 'bp_admin_setting_callback_membership_requests', 'buddypress', 'bp_members' ); 423 register_setting( 'buddypress', 'bp-enable-membership-requests', 'intval' ); 424 } 425 420 426 /* XProfile Section **************************************************/ 421 427 422 428 if ( bp_is_active( 'xprofile' ) ) { -
src/bp-core/classes/class-bp-invitation-manager.php
diff --git src/bp-core/classes/class-bp-invitation-manager.php src/bp-core/classes/class-bp-invitation-manager.php index d92a76b7a..718384e7d 100644
abstract class BP_Invitation_Manager { 227 227 * @type int $item_id ID associated with the invitation and class. 228 228 * @type int $secondary_item_id secondary ID associated with the 229 229 * invitation and class. 230 * @type string $type @TODO. < missing description.230 * @type string $type Type of record this is: 'invite' or 'request'. 231 231 * @type string $content Extra information provided by the requester 232 232 * or inviter. 233 233 * @type string $date_modified Date the invitation was last modified. -
src/bp-members/bp-members-functions.php
diff --git src/bp-members/bp-members-functions.php src/bp-members/bp-members-functions.php index 93fd7cafd..141c545fa 100644
function bp_core_signup_send_validation_email( $user_id, $user_email, $key, $sal 2388 2388 bp_send_email( 'core-user-registration', $to, $args ); 2389 2389 2390 2390 // Record that the activation email has been sent. 2391 $signups = BP_Signup::get( 2392 array( 2393 'activation_key' => $key, 2394 ) 2395 ); 2391 $signup = bp_members_get_signup_by( 'activation_key', $key ); 2396 2392 2397 if ( ! empty( $signups['signups'] ) ) { 2398 foreach ( $signups['signups'] as $signup ) { 2399 $meta = array( 2400 'sent_date' => current_time( 'mysql', true ), 2401 'count_sent' => $signup->count_sent + 1 2402 ); 2393 if ( $signup ) { 2394 $meta = array( 2395 'sent_date' => current_time( 'mysql', true ), 2396 'count_sent' => $signup->count_sent + 1 2397 ); 2403 2398 2404 BP_Signup::update( array( 2405 'signup_id' => $signup->id, 2406 'meta' => $meta, 2407 ) ); 2408 } 2399 BP_Signup::update( array( 2400 'signup_id' => $signup->id, 2401 'meta' => $meta, 2402 ) ); 2409 2403 } 2410 2404 } 2411 2405 … … function bp_core_signup_disable_inactive( $user = null, $username = '', $passwor 2450 2444 } 2451 2445 2452 2446 // Unactivated user account found! 2453 // Set up the feedback message. 2454 $signup_id = $signup['signups'][0]->signup_id; 2447 /* 2448 * Don't allow users to resend their own activation email 2449 * when membership requests are enabled. 2450 */ 2451 if ( bp_get_membership_requests_required() ) { 2452 return new WP_Error( 'bp_account_not_activated', __( '<strong>Error</strong>: Your membership request has not yet been approved.', 'buddypress' ) ); 2453 } else { 2454 // Set up the feedback message. 2455 $signup_id = $signup['signups'][0]->signup_id; 2455 2456 2456 $resend_url_params = array(2457 'action' => 'bp-resend-activation',2458 'id' => $signup_id,2459 );2457 $resend_url_params = array( 2458 'action' => 'bp-resend-activation', 2459 'id' => $signup_id, 2460 ); 2460 2461 2461 $resend_url = wp_nonce_url(2462 add_query_arg( $resend_url_params, wp_login_url() ),2463 'bp-resend-activation'2464 );2462 $resend_url = wp_nonce_url( 2463 add_query_arg( $resend_url_params, wp_login_url() ), 2464 'bp-resend-activation' 2465 ); 2465 2466 2466 $resend_string = '<br /><br />';2467 $resend_string = '<br /><br />'; 2467 2468 2468 /* translators: %s: the activation url */2469 $resend_string .= sprintf( __( 'If you have not received an email yet, <a href="%s">click here to resend it</a>.', 'buddypress' ), esc_url( $resend_url ) );2469 /* translators: %s: the activation url */ 2470 $resend_string .= sprintf( __( 'If you have not received an email yet, <a href="%s">click here to resend it</a>.', 'buddypress' ), esc_url( $resend_url ) ); 2470 2471 2471 return new WP_Error( 'bp_account_not_activated', __( '<strong>Error</strong>: Your account has not been activated. Check your email for the activation link.', 'buddypress' ) . $resend_string ); 2472 return new WP_Error( 'bp_account_not_activated', __( '<strong>Error</strong>: Your account has not been activated. Check your email for the activation link.', 'buddypress' ) . $resend_string ); 2473 } 2472 2474 } 2473 2475 add_filter( 'authenticate', 'bp_core_signup_disable_inactive', 30, 3 ); 2474 2476 … … function bp_get_members_invitation_from_request() { 3694 3696 */ 3695 3697 return apply_filters( 'bp_get_members_invitation_from_request', $invite ); 3696 3698 } 3699 3700 /** 3701 * Get WP_User object corresponding to a record in the signups table. 3702 * 3703 * @since 10.0.0 3704 * 3705 * @param string $field Which fields to search by. Possible values are 3706 * activation_key, user_email, id. 3707 * @param string $value Value to search by. 3708 * @return bool|BP_Signup $signup Found signup, returns first found 3709 * if more than one is found. 3710 */ 3711 function bp_members_get_signup_by( $field = 'activation_key', $value ) { 3712 switch ( $field ) { 3713 case 'activation_key': 3714 case 'user_email': 3715 $key = $field; 3716 break; 3717 3718 case 'id': 3719 default: 3720 $key = 'include'; 3721 break; 3722 } 3723 3724 $signups = BP_Signup::get( 3725 array( 3726 $key => $value, 3727 ) 3728 ); 3729 3730 if ( ! empty( $signups['signups'] ) ) { 3731 $signup = current( $signups['signups'] ); 3732 } else { 3733 $signup = false; 3734 } 3735 3736 return $signup; 3737 } -
src/bp-members/bp-members-invitations.php
diff --git src/bp-members/bp-members-invitations.php src/bp-members/bp-members-invitations.php index 73f50e09b..7e95c791d 100644
function bp_members_invitations_delete_optedout_invites( $optout ) { 183 183 ); 184 184 } 185 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 // If pending invitations exist, send the verification mail. 216 if ( $invites ) { 217 $send = true; 218 } 219 return $send; 220 } 221 add_filter( 'bp_members_membership_requests_bypass_manual_approval', 'bp_members_invitations_maybe_bypass_request_approval', 10, 2 ); -
new file src/bp-members/bp-members-membership-requests.php
diff --git src/bp-members/bp-members-membership-requests.php src/bp-members/bp-members-membership-requests.php new file mode 100644 index 000000000..2f217db7b
- + 1 <?php 2 /** 3 * BuddyPress Membership Requests 4 * 5 * @package BuddyPress 6 * @subpackage MembersMembershipRequest 7 * @since 10.0.0 8 */ 9 10 // Exit if accessed directly. 11 defined( 'ABSPATH' ) || exit; 12 13 /** 14 * When a user creates a membership request, 15 * prevent the sending of the activation email so that 16 * the site admins can send it manually. 17 * 18 * @since 10.0.0 19 * 20 * @param bool $send Whether or not to send the activation key. 21 * @param int $user_id User ID to send activation key to. 22 * @param string $user_email User email to send activation key to. 23 * @param string $activation_key Activation key to be sent. 24 * @param array $usermeta Miscellaneous metadata about the user (blog-specific 25 * signup data, xprofile data, etc). 26 * @return bool Whether or not to send the activation key. 27 */ 28 function bp_members_membership_requests_cancel_activation_email( $send, $user_id = 0, $user_email = '', $activation_key = '', $usermeta = array() ) { 29 30 $details = array( 31 'user_id' => $user_id, 32 'user_email' => $user_email, 33 'activation_key' => $activation_key, 34 'usermeta' => $usermeta, 35 ); 36 37 /** 38 * Allow some membership requests to be approved immediately. 39 * For example, you might want to approve all requests 40 * coming from users with certain email address domains. 41 * If `true` is returned the activation email will be sent to the user. 42 * 43 * @since 10.0.0 44 * 45 * @param bool $send Whether or not this membership request should be approved 46 * immediately and the activation email sent. 47 * Default is `false` meaning that the request should be 48 * manually approved by a site admin. 49 * @param array $details The details of the request. 50 */ 51 $send = apply_filters( 'bp_members_membership_requests_bypass_manual_approval', false, $details ); 52 53 // If the registration process has been interrupted, this is a new membership request. 54 if ( ! $send ) { 55 $signup = bp_members_get_signup_by( 'activation_key', $activation_key ); 56 57 /** 58 * Fires when a site membership request has been created and is pending. 59 * 60 * @since 10.0.0 61 * 62 * @param BP_Signup $signup The signup object that has been created. 63 * @param array $details The details of the request. 64 */ 65 do_action( 'bp_members_membership_request_submitted', $signup, $details ); 66 } 67 68 return $send; 69 } 70 add_filter( 'bp_core_signup_send_activation_key', 'bp_members_membership_requests_cancel_activation_email', 10, 5 ); 71 72 73 /** 74 * Notifications 75 *********************************************************************/ 76 77 /** 78 * Notify site admins about a new membership request. 79 * 80 * @since 10.0.0 81 * 82 * @param BP_Signup $signup The signup object that has been created. 83 */ 84 function bp_members_membership_requests_notify_site_admins( $signup ) { 85 86 // Notify all site admins so the request can be handled. 87 $admins_query = new WP_User_Query( array( 88 'role' => 'administrator', 89 'fields' => 'ids' 90 ) ); 91 $admin_ids = $admins_query->get_results(); 92 93 foreach ( $admin_ids as $admin_id ) { 94 // Trigger a BuddyPress Notification. 95 if ( bp_is_active( 'notifications' ) ) { 96 bp_notifications_add_notification( array( 97 'user_id' => $admin_id, 98 'item_id' => $signup->signup_id, 99 'component_name' => buddypress()->members->id, 100 'component_action' => 'membership_request_submitted', 101 'date_notified' => bp_core_current_time(), 102 'is_new' => 1, 103 ) ); 104 } 105 106 // Bail if member opted out of receiving this email. 107 if ( 'no' === bp_get_user_meta( $admin_id, 'notification_members_membership_request', true ) ) { 108 return; 109 } 110 111 $unsubscribe_args = array( 112 'user_id' => $admin_id, 113 'notification_type' => 'members-membership-request', 114 ); 115 $manage_url = add_query_arg( array( 116 'mod_req' => 1, 117 'page' => 'bp-signups', 118 'signup_id' => $signup->signup_id, 119 'action' => 'resend', 120 ), bp_get_admin_url( 'users.php' ) ); 121 $args = array( 122 'tokens' => array( 123 'admin.id' => $admin_id, 124 'manage.url' => esc_url_raw( $manage_url ), 125 'requesting-user.user_login' => esc_html( $signup->user_login ), 126 'unsubscribe' => esc_url( bp_email_get_unsubscribe_link( $unsubscribe_args ) ), 127 ), 128 ); 129 bp_send_email( 'members-membership-request', (int) $admin_id, $args ); 130 } 131 132 } 133 add_action( 'bp_members_membership_request_submitted', 'bp_members_membership_requests_notify_site_admins' ); 134 135 /** 136 * Send a message to the requesting user when his or her 137 * site membership request has been rejected. 138 * 139 * @since 10.0.0 140 * 141 * @param array $signup_ids Array of pending IDs to delete. 142 */ 143 function bp_members_membership_requests_send_rejection_mail( $signup_ids ) { 144 $signups = BP_Signup::get( 145 array( 146 'include' => $signup_ids, 147 ) 148 ); 149 if ( empty( $signups['signups'] ) ) { 150 return; 151 } 152 foreach ( $signups['signups'] as $signup ) { 153 if ( ! empty( $signup->user_email ) ) { 154 bp_send_email( 'members-membership-request-rejected', $signup->user_email ); 155 } 156 } 157 } 158 add_action( 'bp_core_signup_before_delete', 'bp_members_membership_requests_send_rejection_mail' ); 159 160 /** 161 * When a request is approved, activated or deleted, 162 * delete the associated notifications. 163 * 164 * @since 10.0.0 165 * 166 * @param array $signup_ids Array of changing signup IDs. 167 */ 168 function bp_members_membership_requests_delete_notifications_on_change( $signup_ids ) { 169 foreach ( $signup_ids as $signup_id ) { 170 BP_Notifications_Notification::delete( 171 array( 172 'item_id' => $signup_id, 173 'component_action' => 'membership_request_submitted', 174 ) 175 ); 176 } 177 } 178 add_action( 'bp_core_signup_after_resend', 'bp_members_membership_requests_delete_notifications_on_change' ); 179 add_action( 'bp_core_signup_after_activate', 'bp_members_membership_requests_delete_notifications_on_change' ); 180 add_action( 'bp_core_signup_after_delete', 'bp_members_membership_requests_delete_notifications_on_change' ); 181 182 /** 183 * In the Nouveau template pack, when membership requests are required, 184 * change registration form submit button label to "Submit Request". 185 * 186 * @since 10.0.0 187 * 188 * @return string $retval the HTML for the request membership link. 189 */ 190 function bp_members_membership_requests_filter_complete_signup_button( $buttons ) { 191 192 $buttons['register']['attributes']['value'] = __( 'Submit Request', 'buddypress' ); 193 return $buttons; 194 } 195 add_filter( 'bp_nouveau_get_submit_button', 'bp_members_membership_requests_filter_complete_signup_button' ); 196 197 198 /** 199 * Administration: Change certain behavior and labels 200 * on the WP Admin > Users > Manage Signups screen. 201 *********************************************************************/ 202 203 /** 204 * Filter the actions available on the signups list table. 205 * 206 * @since 10.0.0 207 * 208 * @param array $actions Array of actions and corresponding links. 209 * @param object $signup_object The signup data object. 210 */ 211 function bp_members_membership_requests_filter_signup_row_actions( $actions, $signup_object ) { 212 213 // Rename the "email" resend option when membership requests are active. 214 $email_link = add_query_arg( 215 array( 216 'page' => 'bp-signups', 217 'signup_id' => $signup_object->id, 218 'action' => 'resend', 219 ), 220 bp_get_admin_url( 'users.php' ) 221 ); 222 223 $resend_label = ( 0 === $signup_object->count_sent ) ? __( 'Approve Request', 'buddypress' ) : __( 'Resend Approval', 'buddypress' ); 224 225 $actions['resend'] = sprintf( '<a href="%1$s">%2$s</a>', esc_url( $email_link ), $resend_label ); 226 227 // Add a link to view profile info when membership requests and xprofile are active. 228 if ( bp_is_active( 'xprofile' ) ) { 229 $profile_link = add_query_arg( 230 array( 231 'page' => 'bp-signups#TB_inline', 232 'inlineId' => 'signup-info-modal-' . $signup_object->id, 233 ), 234 bp_get_admin_url( 'users.php' ) 235 ); 236 237 $actions['profile'] = sprintf( '<a href="%1$s" class="thickbox">%2$s</a>', esc_url( $profile_link ), __( 'Profile Info', 'buddypress' ) ); 238 } 239 240 return $actions; 241 } 242 add_filter( 'bp_members_ms_signup_row_actions', 'bp_members_membership_requests_filter_signup_row_actions', 10, 2 ); 243 244 /** 245 * Filter the bulk actions available on the signups list table. 246 * 247 * @since 10.0.0 248 * 249 * @param array $actions Array of actions and corresponding links. 250 */ 251 function bp_members_membership_requests_filter_signup_bulk_actions( $actions ) { 252 // Rename the "email" resend option when membership requests are active. 253 $actions['resend'] = _x( 'Approve', 'Pending signup action', 'buddypress' ); 254 return $actions; 255 } 256 add_filter( 'bp_members_ms_signup_bulk_actions', 'bp_members_membership_requests_filter_signup_bulk_actions' ); 257 258 /** 259 * Filter the "Last Sent" column header on the pending users table. 260 * 261 * @since 10.0.0 262 * 263 * @param array $value Array of columns to display. 264 */ 265 function bp_members_membership_requests_filter_signup_table_date_sent_header( $columns ) { 266 $columns['date_sent'] = __( 'Approved', 'buddypress' ); 267 return $columns; 268 } 269 add_filter( 'bp_members_signup_columns', 'bp_members_membership_requests_filter_signup_table_date_sent_header' ); 270 add_filter( 'bp_members_ms_signup_columns', 'bp_members_membership_requests_filter_signup_table_date_sent_header' ); 271 272 /** 273 * Filter the "Last Sent" column message on the pending users table. 274 * 275 * @since 10.0.0 276 * 277 * @param string $message "Not yet sent" message. 278 * @param object|null $signup Signup object instance. 279 */ 280 function bp_members_membership_requests_filter_signup_table_unsent_message( $message, $signup ) { 281 if ( 0 === $signup->count_sent ) { 282 $message = __( 'Not yet approved', 'buddypress' ); 283 } 284 return $message; 285 } 286 add_filter( 'bp_members_signup_date_sent_unsent_message', 'bp_members_membership_requests_filter_signup_table_unsent_message', 10, 2 ); 287 add_filter( 'bp_members_ms_signup_date_sent_unsent_message', 'bp_members_membership_requests_filter_signup_table_unsent_message', 10, 2 ); 288 289 /** 290 * Filter/add "Request Membership" links in the following locations: 291 * BP login widget 292 * sidebar register link 293 * WP Toolbar 294 * WP login form 295 *********************************************************************/ 296 297 /** 298 * Add "Request Membership" link to Widget login form. 299 * 300 * @since 10.0.0 301 * 302 * @return string $retval the HTML for the request membership link. 303 */ 304 function bp_members_membership_requests_add_link_to_widget_login_form() { 305 ?> 306 <span class="bp-login-widget-request-membership-link"><a href="<?php echo esc_url( bp_get_signup_page() ); ?>"><?php esc_html_e( 'Request Membership', 'buddypress' ); ?></a></span> 307 <?php 308 } 309 add_action( 'bp_login_widget_form', 'bp_members_membership_requests_add_link_to_widget_login_form' ); 310 311 /** 312 * Filter the "Register" link from `wp_register()` as used in 313 * `sidebar.php` and the WP Core meta widget. 314 * 315 * @since 10.0.0 316 * 317 * @param string $link The HTML code for the link to the Registration or Admin page. 318 */ 319 function bp_members_membership_requests_filter_sidebar_register_link( $link ) { 320 // $link should be an empty string when public registration is disabled. 321 if ( ! is_user_logged_in() && empty( $link ) ) { 322 // @TODO: How can we know what before and after tags should be? 323 $link = '<li><a href="' . esc_url( wp_registration_url() ) . '">' . __( 'Request Membership' ) . '</a><li>'; 324 } 325 return $link; 326 } 327 add_filter( 'register', 'bp_members_membership_requests_filter_sidebar_register_link' ); 328 329 /** 330 * Add a "Request Membership" link to the WP Toolbar. 331 * Priority 21 should place it just after the "Log In" link. 332 * 333 * @since 10.0.0 334 * 335 * @param WP_Admin_Bar $wp_admin_bar WP_Admin_Bar instance, passed by reference 336 */ 337 function bp_members_membership_requests_add_toolbar_link( $wp_admin_bar ) { 338 if ( is_user_logged_in() ) { 339 return; 340 } 341 342 $args = array( 343 'id' => 'bp-request-membership', 344 'title' => __( 'Request Membership' ), 345 'href' => wp_registration_url(), 346 'meta' => array( 347 'class' => 'buddypress-request-membership', 348 'title' => __( 'Request Membership' ) 349 ), 350 ); 351 $wp_admin_bar->add_node( $args ); 352 } 353 add_action( 'admin_bar_menu', 'bp_members_membership_requests_add_toolbar_link', 21 ); 354 355 /** 356 * Add a "Request Membership" link to the WP Login form. 357 * 358 * @since 10.0.0 359 * 360 * @param string $link HTML link to the home URL of the current site. 361 */ 362 function bp_members_membership_requests_add_link_wp_login( $link ) { 363 return $link . ' | ' . '<a href="' . esc_url( wp_registration_url() ) . '">' . __( 'Request Membership' ) . '</a>'; 364 } 365 add_action( 'login_site_html_link', 'bp_members_membership_requests_add_link_wp_login' ); -
new file src/bp-members/bp-members-membership-requests.php.rej
diff --git src/bp-members/bp-members-membership-requests.php.rej src/bp-members/bp-members-membership-requests.php.rej new file mode 100644 index 000000000..133644cdd
- + 1 *************** 2 *** 0 **** 3 --- 1,174 ---- 4 + <?php 5 + /** 6 + * BuddyPress Membership Requests 7 + * 8 + * @package BuddyPress 9 + * @subpackage MembersMembershipRequest 10 + * @since 10.0.0 11 + */ 12 + 13 + // Exit if accessed directly. 14 + defined( 'ABSPATH' ) || exit; 15 + 16 + /** 17 + * When a user creates a network membership request, 18 + * prevent the sending of the activation email so that 19 + * the site admins can send it later. 20 + * 21 + * @since 10.0.0 22 + * 23 + * @param bool $send Whether or not to send the activation key. 24 + * @param int $user_id User ID to send activation key to. 25 + * @param string $user_email User email to send activation key to. 26 + * @param string $activation_key Activation key to be sent. 27 + * @param array $usermeta Miscellaneous metadata about the user (blog-specific 28 + * signup data, xprofile data, etc). 29 + * @return bool Whether or not to send the activation key. 30 + */ 31 + function bp_members_membership_requests_cancel_activation_email( $send, $user_id = 0, $user_email = '', $activation_key = '', $usermeta = array() ) { 32 + 33 + if ( bp_get_membership_requests_required() ) { 34 + $details = array( 35 + 'user_id' => $user_id, 36 + 'user_email' => $user_email, 37 + 'activation_key' => $activation_key, 38 + 'usermeta' => $usermeta, 39 + ); 40 + 41 + /** 42 + * Allow some membership requests to be approved immediately. 43 + * For example, you might want to approve all requests 44 + * coming from users with certain email address domains. 45 + * If `true` is returned the activation email will be sent to the user. 46 + * 47 + * @since 10.0.0 48 + * 49 + * @param bool $send Whether or not this membership request should be approved 50 + * immediately and the activation email sent. 51 + * Default is `false` meaning that the request should be 52 + * manually approved by a site admin. 53 + * @param array $details The details of the request. 54 + */ 55 + $send = apply_filters( 'bp_members_membership_requests_bypass_manual_approval', false, $details ); 56 + 57 + // If the registration process has been interrupted, this is a new membership request. 58 + if ( ! $send ) { 59 + $signup = bp_members_get_signup_by( 'activation_key', $activation_key ); 60 + 61 + /** 62 + * Fires when a site membership request has been created and is pending. 63 + * 64 + * @since 10.0.0 65 + * 66 + * @param BP_Signup $signup The signup object that has been created. 67 + * @param array $details The details of the request. 68 + */ 69 + do_action( 'bp_members_membership_request_submitted', $signup, $details ); 70 + } 71 + } 72 + 73 + return $send; 74 + } 75 + add_filter( 'bp_core_signup_send_activation_key', 'bp_members_membership_requests_cancel_activation_email', 10, 5 ); 76 + 77 + 78 + /** 79 + * Notify site admins about a new membership request. 80 + * 81 + * @since 10.0.0 82 + * 83 + * @param BP_Signup $signup The signup object that has been created. 84 + */ 85 + function bp_members_membership_requests_notify_site_admins( $signup ) { 86 + // Why not just using get_option( 'admin_email' ) ? 87 + $admin_ids = get_users( 88 + array( 89 + 'fields' => 'ids', 90 + 'role' => 'administrator', 91 + ) 92 + ); 93 + 94 + foreach ( $admin_ids as $admin_id ) { 95 + // Trigger a BuddyPress Notification. 96 + if ( bp_is_active( 'notifications' ) ) { 97 + bp_notifications_add_notification( 98 + array( 99 + 'user_id' => $admin_id, 100 + 'item_id' => $signup->signup_id, 101 + 'component_name' => buddypress()->members->id, 102 + 'component_action' => 'membership_request_submitted', 103 + 'date_notified' => bp_core_current_time(), 104 + 'is_new' => 1, 105 + ) 106 + ); 107 + } 108 + 109 + // Bail if member opted out of receiving this email. 110 + if ( 'no' === bp_get_user_meta( $admin_id, 'notification_members_membership_request', true ) ) { 111 + return; 112 + } 113 + 114 + $unsubscribe_args = array( 115 + 'user_id' => $admin_id, 116 + 'notification_type' => 'members-membership-request', 117 + ); 118 + 119 + $manage_url = add_query_arg( 120 + array( 121 + 'mod_req' => 1, 122 + 'page' => 'bp-signups', 123 + 'signup_id' => $signup->signup_id, 124 + 'action' => 'resend', 125 + ), 126 + bp_get_admin_url( 'users.php' ) 127 + ); 128 + 129 + $args = array( 130 + 'tokens' => array( 131 + 'admin.id' => $admin_id, 132 + 'manage.url' => esc_url_raw( $manage_url ), 133 + 'requesting-user.user_login' => esc_html( $signup->user_login ), 134 + 'unsubscribe' => esc_url( bp_email_get_unsubscribe_link( $unsubscribe_args ) ), 135 + ), 136 + ); 137 + 138 + bp_send_email( 'members-membership-request', (int) $admin_id, $args ); 139 + } 140 + } 141 + add_action( 'bp_members_membership_request_submitted', 'bp_members_membership_requests_notify_site_admins' ); 142 + 143 + /** 144 + * Add "Request Membership" link to Widget login form. 145 + * 146 + * @since 10.0.0 147 + * 148 + * @return string $retval the HTML for the request membership link. 149 + */ 150 + function bp_members_membership_requests_add_link_to_widget_login_form() { 151 + if ( ! bp_get_membership_requests_required() ) { 152 + return; 153 + } 154 + ?> 155 + <span class="bp-login-widget-request-membership-link"> 156 + <a href="<?php echo esc_url( bp_get_signup_page() ); ?>"><?php esc_html_e( 'Request Membership', 'buddypress' ); ?></a> 157 + </span> 158 + <?php 159 + } 160 + add_action( 'bp_login_widget_form', 'bp_members_membership_requests_add_link_to_widget_login_form' ); 161 + 162 + /** 163 + * In the Nouveau template pack, when membership requests are required, 164 + * change registration form submit button label to "Submit Request". 165 + * 166 + * @since 10.0.0 167 + * 168 + * @return string $retval the HTML for the request membership link. 169 + */ 170 + function bp_members_membership_requests_filter_complete_signup_button( $buttons ) { 171 + if ( bp_get_membership_requests_required() ) { 172 + $buttons['register']['attributes']['value'] = __( 'Submit Request', 'buddypress' ); 173 + } 174 + 175 + return $buttons; 176 + } 177 + add_filter( 'bp_nouveau_get_submit_button', 'bp_members_membership_requests_filter_complete_signup_button' ); -
src/bp-members/bp-members-notifications.php
diff --git src/bp-members/bp-members-notifications.php src/bp-members/bp-members-notifications.php index 93cee7b89..34c2677e9 100644
function members_format_notifications( $action, $item_id, $secondary_item_id, $t 61 61 } 62 62 } 63 63 break; 64 65 case 'membership_request_submitted': 66 // $item_id is the id of the signup, not the user ID. 67 $signup = new BP_Signup( $item_id ); 68 69 // Set up the string and the filter. 70 if ( (int) $total_items > 1 ) { 71 $link = bp_get_notifications_permalink(); 72 $amount = 'multiple'; 73 74 $text = sprintf( __( '%d people have requested site membership.', 'buddypress' ), (int) $total_items ); 75 } else { 76 $link = add_query_arg( array( 77 'mod_req' => 1, 78 'page' => 'bp-signups', 79 'signup_id' => $item_id, 80 'action' => 'resend', 81 ), bp_get_admin_url( 'users.php' ) ); 82 $amount = 'single'; 83 84 /* translators: %s: new user name */ 85 $text = sprintf( __( '%s has requested site membership.', 'buddypress' ), esc_html( $signup->user_login ) ); 86 } 87 break; 64 88 } 65 89 66 90 // Return either an HTML link or an array, depending on the requested format. … … function bp_members_mark_read_accepted_invitation_notification() { 167 191 'is_new' => false, 168 192 ), 169 193 array( 170 'user_id' => bp_loggedin_user_id(), 171 'item_id' => bp_displayed_user_id(), 194 'user_id' => bp_loggedin_user_id(), 195 'item_id' => bp_displayed_user_id(), 196 'component_action' => 'accepted_invitation', 172 197 ) 173 198 ); 174 199 } 175 200 add_action( 'bp_screens', 'bp_members_mark_read_accepted_invitation_notification' ); 176 201 202 /** 203 * Mark new membership request notifications as read when user visits Manage BP Signups screen. 204 * 205 * @since 10.0.0 206 */ 207 function bp_members_mark_read_submitted_membership_request_notification() { 208 if ( ! wp_doing_ajax() && 'users_page_bp-signups' === get_current_screen()->base && ! empty( $_GET['mod_req'] ) && ! empty( $_GET['signup_id'] ) ) { 209 // Mark all notifications about this request as read. 210 BP_Notifications_Notification::update( 211 array( 212 'is_new' => false, 213 ), 214 array( 215 'item_id' => $_GET['signup_id'], 216 'component_action' => 'membership_request_submitted', 217 ) 218 ); 219 } 220 } 221 add_action( 'admin_footer', 'bp_members_mark_read_submitted_membership_request_notification' ); 222 177 223 /** 178 224 * Add Members-related settings to the Settings > Notifications page. 179 225 * … … add_action( 'bp_screens', 'bp_members_mark_read_accepted_invitation_notification 181 227 */ 182 228 function members_screen_notification_settings() { 183 229 184 // Bail early if invitations a re not allowed--they are the only members notification so far.185 if ( ! bp_get_members_invitations_allowed () ) {230 // Bail early if invitations and requests are not allowed--they are the only members notification so far. 231 if ( ! bp_get_members_invitations_allowed() && ( ! bp_get_membership_requests_required() || ! user_can( bp_displayed_user_id(), 'bp_moderate' ) ) ) { 186 232 return; 187 233 } 188 189 if ( ! $allow_acceptance_emails = bp_get_user_meta( bp_displayed_user_id(), 'notification_members_invitation_accepted', true ) ) {190 $allow_acceptance_emails = 'yes';191 }192 234 ?> 193 235 194 236 <table class="notification-settings" id="members-notification-settings"> … … function members_screen_notification_settings() { 202 244 </thead> 203 245 204 246 <tbody> 205 <tr id="members-notification-settings-invitation_accepted">206 <td></td>207 <td><?php _ex( 'Someone accepts your membership invitation', 'Member settings on notification settings page', 'buddypress' ) ?></td>208 <td class="yes"><input type="radio" name="notifications[notification_members_invitation_accepted]" id="notification-members-invitation-accepted-yes" value="yes" <?php checked( $allow_acceptance_emails, 'yes', true ) ?>/><label for="notification-members-invitation-accepted-yes" class="bp-screen-reader-text"><?php209 /* translators: accessibility text */210 _e( 'Yes, send email', 'buddypress' );211 ?></label></td>212 <td class="no"><input type="radio" name="notifications[notification_members_invitation_accepted]" id="notification-members-invitation-accepted-no" value="no" <?php checked( $allow_acceptance_emails, 'no', true ) ?>/><label for="notification-members-invitation-accepted-no" class="bp-screen-reader-text"><?php213 /* translators: accessibility text */214 _e( 'No, do not send email', 'buddypress' );215 ?></label></td>216 </tr>217 247 218 248 <?php 249 if ( bp_get_members_invitations_allowed() ) : 250 if ( ! $allow_acceptance_emails = bp_get_user_meta( bp_displayed_user_id(), 'notification_members_invitation_accepted', true ) ) { 251 $allow_acceptance_emails = 'yes'; 252 } 253 ?> 254 <tr id="members-notification-settings-invitation_accepted"> 255 <td></td> 256 <td><?php echo esc_html_x( 'Someone accepts your membership invitation', 'Member settings on notification settings page', 'buddypress' ); ?></td> 257 <td class="yes"><input type="radio" name="notifications[notification_members_invitation_accepted]" id="notification-members-invitation-accepted-yes" value="yes" <?php checked( $allow_acceptance_emails, 'yes', true ) ?>/><label for="notification-members-invitation-accepted-yes" class="bp-screen-reader-text"><?php 258 /* translators: accessibility text */ 259 esc_html_e( 'Yes, send email', 'buddypress' ); 260 ?></label></td> 261 <td class="no"><input type="radio" name="notifications[notification_members_invitation_accepted]" id="notification-members-invitation-accepted-no" value="no" <?php checked( $allow_acceptance_emails, 'no', true ) ?>/><label for="notification-members-invitation-accepted-no" class="bp-screen-reader-text"><?php 262 /* translators: accessibility text */ 263 esc_html_e( 'No, do not send email', 'buddypress' ); 264 ?></label></td> 265 </tr> 266 <?php 267 endif; 268 269 if ( bp_get_membership_requests_required() && user_can( bp_displayed_user_id(), 'bp_moderate' ) ) : 270 if ( ! $allow_request_emails = bp_get_user_meta( bp_displayed_user_id(), 'notification_members_membership_request', true ) ) { 271 $allow_request_emails = 'yes'; 272 } 273 ?> 274 <tr id="members-notification-settings-submitted_membership_request"> 275 <td></td> 276 <td><?php echo esc_html_x( 'Someone has requested site membership', 'Member settings on notification settings page', 'buddypress' ) ?></td> 277 <td class="yes"><input type="radio" name="notifications[notification_members_membership_request]" id="notification-members-submitted_membership_request-yes" value="yes" <?php checked( $allow_request_emails, 'yes', true ) ?>/><label for="notification-members-submitted_membership_request-yes" class="bp-screen-reader-text"><?php 278 /* translators: accessibility text */ 279 esc_html_e( 'Yes, send email', 'buddypress' ); 280 ?></label></td> 281 <td class="no"><input type="radio" name="notifications[notification_members_membership_request]" id="notification-members-submitted_membership_request-no" value="no" <?php checked( $allow_request_emails, 'no', true ) ?>/><label for="notification-members-submitted_membership_request-no" class="bp-screen-reader-text"><?php 282 /* translators: accessibility text */ 283 esc_html_e( 'No, do not send email', 'buddypress' ); 284 ?></label></td> 285 </tr> 286 <?php 287 endif; 219 288 220 289 /** 221 290 * Fires after the last table row on the members notification screen. -
src/bp-members/bp-members-template.php
diff --git src/bp-members/bp-members-template.php src/bp-members/bp-members-template.php index 39cfd6e65..0cf357023 100644
function bp_get_members_invitations_allowed() { 2925 2925 return apply_filters( 'bp_get_members_invitations_allowed', bp_is_active( 'members', 'invitations' ) && (bool) bp_get_option( 'bp-enable-members-invitations' ) ); 2926 2926 } 2927 2927 2928 /** 2929 * Are membership requests required for joining this site? 2930 * 2931 * @since 10.0.0 2932 * 2933 * @param bool $context "raw" to fetch value from database, 2934 * "site" to take "anyone can register" setting into account. 2935 * @return bool 2936 */ 2937 function bp_get_membership_requests_required( $context = 'site' ) { 2938 if ( 'raw' === $context ) { 2939 $retval = bp_is_active( 'members', 'membership_requests' ) && (bool) bp_get_option( 'bp-enable-membership-requests' ); 2940 } else { 2941 $retval = bp_is_active( 'members', 'membership_requests' ) && ! bp_get_signup_allowed() && (bool) bp_get_option( 'bp-enable-membership-requests' ); 2942 } 2943 2944 /** 2945 * Filters whether or not prospective members may submit network membership requests. 2946 * 2947 * @since 10.0.0 2948 * 2949 * @param bool $retval Whether or not membership requests are required. 2950 * @param bool $retval Whether this is the value stored in the database ('raw') 2951 * or whether the site's "anyone can register" setting is 2952 * being considered ('site' or anything else). 2953 */ 2954 return apply_filters( 'bp_get_membership_requests_required', $retval, $context ); 2955 } 2956 2928 2957 /** 2929 2958 * Should the system create and allow access 2930 2959 * to the Register and Activate pages? … … function bp_get_members_invitations_allowed() { 2934 2963 * @return bool 2935 2964 */ 2936 2965 function bp_allow_access_to_registration_pages() { 2937 $retval = bp_get_signup_allowed() || bp_get_members_invitations_allowed() ;2966 $retval = bp_get_signup_allowed() || bp_get_members_invitations_allowed() || bp_get_membership_requests_required(); 2938 2967 2939 2968 /** 2940 2969 * Filters whether or not the system should create and allow access -
src/bp-members/classes/class-bp-members-admin.php
diff --git src/bp-members/classes/class-bp-members-admin.php src/bp-members/classes/class-bp-members-admin.php index 19ec1946b..39717d179 100644
class BP_Members_Admin { 501 501 // Only show sign-ups where they belong. 502 502 if ( ( ! bp_is_network_activated() && ! is_network_admin() ) || ( is_network_admin() && bp_is_network_activated() ) ) { 503 503 504 $signups_menu_label = __( 'Manage Signups', 'buddypress' ); 505 506 if ( bp_get_membership_requests_required() ) { 507 $signups_menu_label = __( 'Manage Pending Memberships', 'buddypress' ); 508 } 509 504 510 // Manage signups. 505 511 $hooks['signups'] = $this->signups_page = add_users_page( 506 __( 'Manage Signups', 'buddypress' ),507 __( 'Manage Signups', 'buddypress' ),512 $signups_menu_label, 513 $signups_menu_label, 508 514 $this->capability, 509 515 'bp-signups', 510 516 array( $this, 'signups_admin' ) … … class BP_Members_Admin { 1691 1697 '<p>' . __( 'Using the search form, you can find pending accounts more easily. The Username and Email fields will be included in the search.', 'buddypress' ) . '</p>' 1692 1698 ) ); 1693 1699 1700 $signup_help_content = '<p>' . __( 'Hovering over a row in the pending accounts list will display action links that allow you to manage pending accounts. You can perform the following actions:', 'buddypress' ) . '</p>'; 1701 1702 if ( bp_get_membership_requests_required() ) { 1703 $signup_help_content .= '<ul><li>' . __( '"Activate" will activate the user immediately without requiring that they validate their email.', 'buddypress' ) .'</li>' . 1704 '<li>' . __( '"Approve Request"/"Resend Apprival" takes you to the confirmation screen before being able to send the activation link to the desired pending request. You can only send the activation email once per day.', 'buddypress' ) . '</li>'; 1705 1706 if ( bp_is_active( 'xprofile' ) ) { 1707 $signup_help_content .= '<li>' . __( '"Profile Info" will display extended profile information for the request.', 'buddypress' ) . '</li>'; 1708 } 1709 1710 $signup_help_content .= '<li>' . __( '"Delete" allows you to delete a pending account from your site. You will be asked to confirm this deletion.', 'buddypress' ) . '</li></ul>'; 1711 } else { 1712 $signup_help_content .= '<ul><li>' . __( '"Email" takes you to the confirmation screen before being able to send the activation link to the desired pending account. You can only send the activation email once per day.', 'buddypress' ) . '</li>' . 1713 '<li>' . __( '"Delete" allows you to delete a pending account from your site. You will be asked to confirm this deletion.', 'buddypress' ) . '</li></ul>'; 1714 } 1715 1716 $signup_help_content .= '<p>' . __( 'By clicking on a Username you will be able to activate a pending account from the confirmation screen.', 'buddypress' ) . '</p>' . 1717 '<p>' . __( 'Bulk actions allow you to perform these 3 actions for the selected rows.', 'buddypress' ) . '</p>'; 1718 1694 1719 get_current_screen()->add_help_tab( array( 1695 1720 'id' => 'bp-signups-actions', 1696 1721 'title' => __( 'Actions', 'buddypress' ), 1697 'content' => 1698 '<p>' . __( 'Hovering over a row in the pending accounts list will display action links that allow you to manage pending accounts. You can perform the following actions:', 'buddypress' ) . '</p>' . 1699 '<ul><li>' . __( '"Email" takes you to the confirmation screen before being able to send the activation link to the desired pending account. You can only send the activation email once per day.', 'buddypress' ) . '</li>' . 1700 '<li>' . __( '"Delete" allows you to delete a pending account from your site. You will be asked to confirm this deletion.', 'buddypress' ) . '</li></ul>' . 1701 '<p>' . __( 'By clicking on a Username you will be able to activate a pending account from the confirmation screen.', 'buddypress' ) . '</p>' . 1702 '<p>' . __( 'Bulk actions allow you to perform these 3 actions for the selected rows.', 'buddypress' ) . '</p>' 1722 'content' => $signup_help_content 1703 1723 ) ); 1704 1724 1705 1725 // Help panel - sidebar links. … … class BP_Members_Admin { 2186 2206 ) ); 2187 2207 2188 2208 $signups = $signups_query['signups']; 2189 $signup_ids = wp_list_pluck( $signups, ' signup_id' );2209 $signup_ids = wp_list_pluck( $signups, 'id' ); 2190 2210 2191 2211 // Set up strings. 2192 2212 switch ( $action ) { … … class BP_Members_Admin { 2209 2229 break; 2210 2230 2211 2231 case 'resend' : 2212 $header_text = __( 'Resend Activation Emails', 'buddypress' ); 2213 if ( 1 == count( $signup_ids ) ) { 2214 $helper_text = __( 'You are about to resend an activation email to the following account:', 'buddypress' ); 2232 2233 if ( bp_get_membership_requests_required() ) { 2234 $header_text = __( 'Approve Membership Requests', 'buddypress' ); 2235 if ( 1 === count( $signup_ids ) ) { 2236 $helper_text = __( 'You are about to send an approval email to the following user:', 'buddypress' ); 2237 } else { 2238 $helper_text = __( 'You are about to send approval emails to the following users:', 'buddypress' ); 2239 } 2215 2240 } else { 2216 $helper_text = __( 'You are about to resend an activation email to the following accounts:', 'buddypress' ); 2241 $header_text = __( 'Resend Activation Emails', 'buddypress' ); 2242 if ( 1 === count( $signup_ids ) ) { 2243 $helper_text = __( 'You are about to resend an activation email to the following account:', 'buddypress' ); 2244 } else { 2245 $helper_text = __( 'You are about to resend an activation email to the following accounts:', 'buddypress' ); 2246 } 2217 2247 } 2218 2248 break; 2249 2219 2250 } 2220 2251 2221 2252 // These arguments are added to all URLs. … … class BP_Members_Admin { 2244 2275 2245 2276 // Prefetch registration field data. 2246 2277 $fdata = array(); 2247 if ( 'activate' === $action && bp_is_active( 'xprofile') ) {2278 if ( bp_is_active( 'xprofile' ) && ( 'activate' == $action || ( 'resend' == $action && bp_get_membership_requests_required() ) ) ) { 2248 2279 $field_groups = bp_xprofile_get_groups( array( 2249 2280 'exclude_fields' => 1, 2250 2281 'update_meta_cache' => false, … … class BP_Members_Admin { 2268 2299 2269 2300 <ol class="bp-signups-list"> 2270 2301 <?php foreach ( $signups as $signup ) : 2271 $last_notified = mysql2date( 'Y/m/d g:i:s a', $signup->date_sent ); 2302 if ( $signup->count_sent > 0 ) { 2303 $last_notified = mysql2date( 'Y/m/d g:i:s a', $signup->date_sent ); 2304 } else { 2305 $last_notified = __( 'Not yet notified', 'buddypress' ); 2306 } 2272 2307 $profile_field_ids = array(); 2273 2308 2274 2309 // Get all xprofile field IDs except field 1. … … class BP_Members_Admin { 2280 2315 <li> 2281 2316 <strong><?php echo esc_html( $signup->user_login ) ?></strong> 2282 2317 2283 <?php if ( 'activate' == $action ) : ?>2318 <?php if ( 'activate' == $action || ( 'resend' == $action && bp_get_membership_requests_required() ) ) : ?> 2284 2319 <table class="wp-list-table widefat fixed striped"> 2285 2320 <tbody> 2286 2321 <tr> -
src/bp-members/classes/class-bp-members-component.php
diff --git src/bp-members/classes/class-bp-members-component.php src/bp-members/classes/class-bp-members-component.php index 432e3ecce..e247fa54b 100644
class BP_Members_Component extends BP_Component { 40 40 array( 41 41 'adminbar_myaccount_order' => 20, 42 42 'search_query_arg' => 'members_search', 43 'features' => array( 'invitations' )43 'features' => array( 'invitations', 'membership_requests' ) 44 44 ) 45 45 ); 46 46 } … … class BP_Members_Component extends BP_Component { 74 74 $includes[] = 'activity'; 75 75 } 76 76 77 if ( bp_is_active( 'members', 'membership_requests' ) && (bool) bp_get_option( 'bp-enable-membership-requests' ) ) { 78 $includes[] = 'membership-requests'; 79 } 80 77 81 // Include these only if in admin. 78 82 if ( is_admin() ) { 79 83 $includes[] = 'admin'; -
src/bp-members/classes/class-bp-members-list-table.php
diff --git src/bp-members/classes/class-bp-members-list-table.php src/bp-members/classes/class-bp-members-list-table.php index 8e7733b47..d9922b1fe 100644
class BP_Members_List_Table extends WP_Users_List_Table { 113 113 114 114 // Reset the screen id. 115 115 $this->screen->id = $reset_screen_id; 116 117 // Use thickbox to display the extended profile information. 118 if ( bp_is_active( 'xprofile' ) ) { 119 add_thickbox(); 120 } 116 121 } 117 122 118 123 /** … … class BP_Members_List_Table extends WP_Users_List_Table { 138 143 */ 139 144 public function get_columns() { 140 145 141 /** 142 * Filters the single site Members signup columns. 143 * 144 * @since 2.0.0 145 * 146 * @param array $value Array of columns to display. 147 */ 148 return apply_filters( 'bp_members_signup_columns', array( 146 $columns = array( 149 147 'cb' => '<input type="checkbox" />', 150 148 'username' => __( 'Username', 'buddypress' ), 151 149 'name' => __( 'Name', 'buddypress' ), … … class BP_Members_List_Table extends WP_Users_List_Table { 153 151 'registered' => __( 'Registered', 'buddypress' ), 154 152 'date_sent' => __( 'Last Sent', 'buddypress' ), 155 153 'count_sent' => __( 'Emails Sent', 'buddypress' ) 156 ) ); 154 ); 155 156 /** 157 * Filters the single site Members signup columns. 158 * 159 * @since 2.0.0 160 * 161 * @param array $value Array of columns to display. 162 */ 163 return apply_filters( 'bp_members_signup_columns', $columns ); 157 164 } 158 165 159 166 /** … … class BP_Members_List_Table extends WP_Users_List_Table { 171 178 $actions['delete'] = __( 'Delete', 'buddypress' ); 172 179 } 173 180 174 return $actions; 181 /** 182 * Filters the bulk actions for signups. 183 * 184 * @since 10.0.0 185 * 186 * @param array $actions Array of actions and corresponding labels. 187 */ 188 return apply_filters( 'bp_members_ms_signup_bulk_actions', $actions ); 175 189 } 176 190 177 191 /** … … class BP_Members_List_Table extends WP_Users_List_Table { 183 197 */ 184 198 public function no_items() { 185 199 186 if ( bp_get_signup_allowed() ) {200 if ( bp_get_signup_allowed() || bp_get_membership_requests_required() ) { 187 201 esc_html_e( 'No pending accounts found.', 'buddypress' ); 188 202 } else { 189 203 $link = false; … … class BP_Members_List_Table extends WP_Users_List_Table { 342 356 */ 343 357 public function column_name( $signup_object = null ) { 344 358 echo esc_html( $signup_object->user_name ); 359 360 // Insert the extended profile modal content required by thickbox. 361 if ( ! bp_is_active( 'xprofile' ) ) { 362 return; 363 } 364 365 $profile_field_ids = array(); 366 367 // Prefetch registration field data. 368 $fdata = array(); 369 $field_groups = bp_xprofile_get_groups( array( 370 'exclude_fields' => 1, 371 'update_meta_cache' => false, 372 'fetch_fields' => true, 373 ) ); 374 375 foreach( $field_groups as $fg ) { 376 foreach( $fg->fields as $f ) { 377 $fdata[ $f->id ] = $f->name; 378 } 379 } 380 381 // Get all xprofile field IDs except field 1. 382 if ( ! empty( $signup_object->meta['profile_field_ids'] ) ) { 383 $profile_field_ids = array_flip( explode( ',', $signup_object->meta['profile_field_ids'] ) ); 384 unset( $profile_field_ids[1] ); 385 } 386 ?> 387 <div id="signup-info-modal-<?php echo $signup_object->id; ?>" style="display:none;"> 388 <h1><?php printf( esc_html__( '%1$s (%2$s)', 'buddypress' ), esc_html( $signup_object->user_name ), esc_html( $signup_object->user_email ) ); ?></h1> 389 <h2><?php echo esc_html__( 'Extended Profile Information', 'buddypress' ); ?></h2> 390 391 <table class="signup-profile-data-drawer wp-list-table widefat fixed striped"> 392 <?php if ( 1 <= count( $profile_field_ids ) ): foreach ( $profile_field_ids as $pid => $noop ) : 393 $field_value = isset( $signup_object->meta[ "field_{$pid}" ] ) ? $signup_object->meta[ "field_{$pid}" ] : ''; ?> 394 <tr> 395 <td class="column-fields"><?php echo esc_html( $fdata[ $pid ] ); ?></td> 396 <td><?php echo $this->format_xprofile_field_for_display( $field_value ); ?></td> 397 </tr> 398 <?php endforeach; else: ?> 399 <tr> 400 <td><?php esc_html_e( 'There is no additional information to display.', 'buddypress' ); ?></td> 401 </tr> 402 <?php endif; ?> 403 </table> 404 </div> 405 <?php 345 406 } 346 407 347 408 /** … … class BP_Members_List_Table extends WP_Users_List_Table { 374 435 * @param object|null $signup_object The signup data object. 375 436 */ 376 437 public function column_date_sent( $signup_object = null ) { 377 echo mysql2date( 'Y/m/d', $signup_object->date_sent ); 438 if ( $signup_object->count_sent > 0 ) { 439 echo mysql2date( 'Y/m/d', $signup_object->date_sent ); 440 } else { 441 $message = __( 'Not yet notified', 'buddypress' ); 442 443 /** 444 * Filters the "not yet sent" message for "Last Sent" 445 * column in Manage Signups list table. 446 * 447 * @since 10.0.0 448 * 449 * @param string $message "Not yet sent" message. 450 * @param object|null $signup_object Signup object instance. 451 */ 452 $message = apply_filters( 'bp_members_signup_date_sent_unsent_message', $message, $signup_object ); 453 454 echo esc_html( $message ); 455 } 378 456 } 379 457 380 458 /** 381 * Display number of time an activation email has been sent.459 * Display number of times an activation email has been sent. 382 460 * 383 461 * @since 2.0.0 384 462 * … … class BP_Members_List_Table extends WP_Users_List_Table { 409 487 */ 410 488 return apply_filters( 'bp_members_signup_custom_column', '', $column_name, $signup_object ); 411 489 } 490 491 /** 492 * Formats a signup's xprofile field data for display. 493 * 494 * Operates recursively on arrays, which are then imploded with commas. 495 * 496 * @since 10.0.0 497 * @see BP_Members_Admin::format_xprofile_field_for_display() 498 * 499 * @param string|array $value Field value. 500 * @return string 501 */ 502 protected function format_xprofile_field_for_display( $value ) { 503 if ( is_array( $value ) ) { 504 $value = array_map( array( $this, 'format_xprofile_field_for_display' ), $value ); 505 $value = implode( ', ', $value ); 506 } else { 507 $value = stripslashes( $value ); 508 $value = esc_html( $value ); 509 } 510 511 return $value; 512 } 412 513 } -
src/bp-members/classes/class-bp-members-ms-list-table.php
diff --git src/bp-members/classes/class-bp-members-ms-list-table.php src/bp-members/classes/class-bp-members-ms-list-table.php index b8e86f906..662146c78 100644
class BP_Members_MS_List_Table extends WP_MS_Users_List_Table { 114 114 115 115 // Reset the screen id. 116 116 $this->screen->id = $reset_screen_id; 117 118 // Use thickbox to display the extended profile information. 119 if ( bp_is_active( 'xprofile' ) ) { 120 add_thickbox(); 121 } 117 122 } 118 123 119 124 /** … … class BP_Members_MS_List_Table extends WP_MS_Users_List_Table { 125 130 */ 126 131 public function get_columns() { 127 132 128 /** 129 * Filters the multisite Members signup columns. 130 * 131 * @since 2.0.0 132 * 133 * @param array $value Array of columns to display. 134 */ 135 return apply_filters( 'bp_members_ms_signup_columns', array( 133 $columns = array( 136 134 'cb' => '<input type="checkbox" />', 137 135 'username' => __( 'Username', 'buddypress' ), 138 136 'name' => __( 'Name', 'buddypress' ), … … class BP_Members_MS_List_Table extends WP_MS_Users_List_Table { 140 138 'registered' => __( 'Registered', 'buddypress' ), 141 139 'date_sent' => __( 'Last Sent', 'buddypress' ), 142 140 'count_sent' => __( 'Emails Sent', 'buddypress' ) 143 ) ); 141 ); 142 143 /** 144 * Filters the multisite Members signup columns. 145 * 146 * @since 2.0.0 147 * 148 * @param array $value Array of columns to display. 149 */ 150 return apply_filters( 'bp_members_ms_signup_columns', $columns ); 144 151 } 145 152 146 153 /** … … class BP_Members_MS_List_Table extends WP_MS_Users_List_Table { 158 165 $actions['delete'] = __( 'Delete', 'buddypress' ); 159 166 } 160 167 161 return $actions; 168 /** 169 * Filters the bulk actions for signups. 170 * 171 * @since 10.0.0 172 * 173 * @param array $actions Array of actions and corresponding labels. 174 */ 175 return apply_filters( 'bp_members_ms_signup_bulk_actions', $actions ); 162 176 } 163 177 164 178 /** … … class BP_Members_MS_List_Table extends WP_MS_Users_List_Table { 169 183 * @since 2.0.0 170 184 */ 171 185 public function no_items() { 172 if ( bp_get_signup_allowed() ) {186 if ( bp_get_signup_allowed() || bp_get_membership_requests_required() ) { 173 187 esc_html_e( 'No pending accounts found.', 'buddypress' ); 174 188 } else { 175 189 $link = false; … … class BP_Members_MS_List_Table extends WP_MS_Users_List_Table { 328 342 */ 329 343 public function column_name( $signup_object = null ) { 330 344 echo esc_html( $signup_object->user_name ); 345 346 // Insert the extended profile modal content required by thickbox. 347 if ( ! bp_is_active( 'xprofile' ) ) { 348 return; 349 } 350 351 $profile_field_ids = array(); 352 353 // Prefetch registration field data. 354 $fdata = array(); 355 $field_groups = bp_xprofile_get_groups( array( 356 'exclude_fields' => 1, 357 'update_meta_cache' => false, 358 'fetch_fields' => true, 359 ) ); 360 361 foreach( $field_groups as $fg ) { 362 foreach( $fg->fields as $f ) { 363 $fdata[ $f->id ] = $f->name; 364 } 365 } 366 367 // Get all xprofile field IDs except field 1. 368 if ( ! empty( $signup_object->meta['profile_field_ids'] ) ) { 369 $profile_field_ids = array_flip( explode( ',', $signup_object->meta['profile_field_ids'] ) ); 370 unset( $profile_field_ids[1] ); 371 } 372 ?> 373 <div id="signup-info-modal-<?php echo $signup_object->id; ?>" style="display:none;"> 374 <h1><?php printf( esc_html__( '%1$s (%2$s)', 'buddypress' ), esc_html( $signup_object->user_name ), esc_html( $signup_object->user_email ) ); ?></h1> 375 <h2><?php echo esc_html__( 'Extended Profile Information', 'buddypress' ); ?></h2> 376 377 <table class="signup-profile-data-drawer wp-list-table widefat fixed striped"> 378 <?php if ( 1 <= count( $profile_field_ids ) ): foreach ( $profile_field_ids as $pid => $noop ) : 379 $field_value = isset( $signup_object->meta[ "field_{$pid}" ] ) ? $signup_object->meta[ "field_{$pid}" ] : ''; ?> 380 <tr> 381 <td class="column-fields"><?php echo esc_html( $fdata[ $pid ] ); ?></td> 382 <td><?php echo $this->format_xprofile_field_for_display( $field_value ); ?></td> 383 </tr> 384 <?php endforeach;else: ?> 385 <tr> 386 <td><?php esc_html_e( 'There is no additional information to display.', 'buddypress' ); ?></td> 387 </tr> 388 <?php endif; ?> 389 </table> 390 </div> 391 <?php 331 392 } 332 393 333 394 /** … … class BP_Members_MS_List_Table extends WP_MS_Users_List_Table { 376 437 $date = 'Y/m/d \<\b\r \/\> g:i:s a'; 377 438 } 378 439 379 echo mysql2date( $date, $signup_object->date_sent ); 440 if ( $signup_object->count_sent > 0 ) { 441 echo mysql2date( $date, $signup_object->date_sent ); 442 } else { 443 $message = __( 'Not yet notified', 'buddypress' ); 444 445 /** 446 * Filters the "not yet sent" message for "Last Sent" 447 * column in Manage Signups list table. 448 * 449 * @since 10.0.0 450 * 451 * @param string $message "Not yet sent" message. 452 * @param object|null $signup_object Signup object instance. 453 */ 454 $message = apply_filters( 'bp_members_ms_signup_date_sent_unsent_message', $message, $signup_object ); 455 456 echo esc_html( $message ); 457 } 380 458 } 381 459 382 460 /** … … class BP_Members_MS_List_Table extends WP_MS_Users_List_Table { 411 489 */ 412 490 return apply_filters( 'bp_members_ms_signup_custom_column', '', $column_name, $signup_object ); 413 491 } 492 493 /** 494 * Formats a signup's xprofile field data for display. 495 * 496 * Operates recursively on arrays, which are then imploded with commas. 497 * 498 * @since 10.0.0 499 * @see BP_Members_Admin::format_xprofile_field_for_display() 500 * 501 * @param string|array $value Field value. 502 * @return string 503 */ 504 protected function format_xprofile_field_for_display( $value ) { 505 if ( is_array( $value ) ) { 506 $value = array_map( array( $this, 'format_xprofile_field_for_display' ), $value ); 507 $value = implode( ', ', $value ); 508 } else { 509 $value = stripslashes( $value ); 510 $value = esc_html( $value ); 511 } 512 513 return $value; 514 } 414 515 } -
src/bp-members/classes/class-bp-registration-theme-compat.php
diff --git src/bp-members/classes/class-bp-registration-theme-compat.php src/bp-members/classes/class-bp-registration-theme-compat.php index 6a942a58b..f4e3e6855 100644
class BP_Registration_Theme_Compat { 97 97 public function dummy_post() { 98 98 // Registration page. 99 99 if ( bp_is_register_page() ) { 100 $title = __( 'Create an Account', 'buddypress' ); 100 if ( bp_get_membership_requests_required() ) { 101 $title = __( 'Request Membership', 'buddypress' ); 102 } else { 103 $title = __( 'Create an Account', 'buddypress' ); 104 } 101 105 102 106 if ( 'completed-confirmation' == bp_get_current_signup_step() ) { 103 $title = __( 'Check Your Email To Activate Your Account!', 'buddypress' ); 107 if ( bp_get_membership_requests_required() ) { 108 $title = __( 'Your Membership Request has been submitted.', 'buddypress' ); 109 } else { 110 $title = __( 'Check Your Email To Activate Your Account!', 'buddypress' ); 111 } 104 112 } 105 113 106 114 // Activation page. -
src/bp-members/classes/class-bp-signup.php
diff --git src/bp-members/classes/class-bp-signup.php src/bp-members/classes/class-bp-signup.php index 9de2af9fe..76b2022d0 100644
class BP_Signup { 214 214 $this->date_sent = $signup->registered; 215 215 } 216 216 217 // How many times has the activation email been sent? 218 if ( isset( $this->meta['count_sent'] ) ) { 219 $this->count_sent = absint( $this->meta['count_sent'] ); 220 } else { 221 /** 222 * Meta will not be set if this is a pre-10.0 signup. 223 * In this case, we assume that the count is 1. 224 */ 225 $this->count_sent = 1; 226 } 227 217 228 /** 218 229 * Calculate a diff between now & last time 219 230 * an activation link has been resent. … … class BP_Signup { 226 237 * Set a boolean to track whether an activation link 227 238 * was sent in the last day. 228 239 */ 229 $this->recently_sent = ( $diff < 1 * DAY_IN_SECONDS );240 $this->recently_sent = $this->count_sent && ( $diff < 1 * DAY_IN_SECONDS ); 230 241 231 // How many times has the activation email been sent?232 if ( isset( $this->meta['count_sent'] ) ) {233 $this->count_sent = absint( $this->meta['count_sent'] );234 } else {235 $this->count_sent = 0;236 }237 242 } 238 243 239 244 /** Static Methods *******************************************************/ -
src/bp-members/screens/register.php
diff --git src/bp-members/screens/register.php src/bp-members/screens/register.php index 77929c442..40dd280dc 100644
function bp_core_screen_signup() { 61 61 } 62 62 } 63 63 64 if ( ! bp_get_signup_allowed() && ! $active_invite ) { 64 $requests_enabled = bp_get_membership_requests_required(); 65 66 if ( ! bp_get_signup_allowed() && ! $active_invite && ! $requests_enabled ) { 65 67 $bp->signup->step = 'registration-disabled'; 66 68 // If the signup page is submitted, validate and save. 67 69 } elseif ( isset( $_POST['signup_submit'] ) && bp_verify_nonce_request( 'bp_new_signup' ) ) { -
src/bp-templates/bp-legacy/buddypress/members/register.php
diff --git src/bp-templates/bp-legacy/buddypress/members/register.php src/bp-templates/bp-legacy/buddypress/members/register.php index d263470f2..dd6365b45 100644
351 351 * 352 352 * @since 1.1.0 353 353 */ 354 do_action( 'bp_before_registration_submit_buttons' ); ?> 354 do_action( 'bp_before_registration_submit_buttons' ); 355 356 if ( bp_get_membership_requests_required() ) { 357 $button_text = __( 'Submit Request', 'buddypress' ); 358 } else { 359 $button_text = __( 'Complete Sign Up', 'buddypress' ); 360 } 361 ?> 355 362 356 363 <div class="submit"> 357 <input type="submit" name="signup_submit" id="signup_submit" value="<?php e sc_attr_e( 'Complete Sign Up', 'buddypress'); ?>" />364 <input type="submit" name="signup_submit" id="signup_submit" value="<?php echo esc_attr( $button_text ); ?>" /> 358 365 </div> 359 366 360 367 <?php … … 390 397 do_action( 'bp_before_registration_confirmed' ); ?> 391 398 392 399 <div id="template-notices" role="alert" aria-atomic="true"> 393 <?php if ( bp_registration_needs_activation() ) : ?> 400 <?php if ( bp_get_membership_requests_required() ) : ?> 401 <p><?php _e( 'You have successfully submitted your membership request! Our site moderators will review your submission and send you an activation email if your request is approved.', 'buddypress' ); ?></p> 402 <?php elseif ( bp_registration_needs_activation() ) : ?> 394 403 <p><?php _e( 'You have successfully created your account! To begin using this site you will need to activate your account via the email we have just sent to your address.', 'buddypress' ); ?></p> 395 404 <?php else : ?> 396 405 <p><?php _e( 'You have successfully created your account! Please log in using the username and password you have just created.', 'buddypress' ); ?></p> -
src/bp-templates/bp-nouveau/includes/functions.php
diff --git src/bp-templates/bp-nouveau/includes/functions.php src/bp-templates/bp-nouveau/includes/functions.php index 3d85eace9..5faa6b0f9 100644
function bp_nouveau_get_user_feedback( $feedback_id = '' ) { 1122 1122 /* 1123 1123 * Adjust some messages to the context. 1124 1124 */ 1125 if ( 'completed-confirmation' === $feedback_id && bp_registration_needs_activation() ) { 1125 if ( 'completed-confirmation' === $feedback_id && bp_get_membership_requests_required() ) { 1126 $feedback_messages['completed-confirmation']['message'] = __( 'You have successfully submitted your membership request! Our site moderators will review your submission and send you an activation email if your request is approved.', 'buddypress' ); 1127 } elseif ( 'completed-confirmation' === $feedback_id && bp_registration_needs_activation() ) { 1126 1128 $feedback_messages['completed-confirmation']['message'] = __( 'You have successfully created your account! To begin using this site you will need to activate your account via the email we have just sent to your address.', 'buddypress' ); 1127 1129 } elseif ( 'member-notifications-none' === $feedback_id ) { 1128 1130 $is_myprofile = bp_is_my_profile(); -
src/class-buddypress.php
diff --git src/class-buddypress.php src/class-buddypress.php index e8f2a9797..f34d7ad99 100644
class BuddyPress { 350 350 /** Versions */ 351 351 352 352 $this->version = '10.0.0-alpha'; 353 $this->db_version = 1 2850;353 $this->db_version = 13150; 354 354 355 355 /** Loading */ 356 356