$user_id,
'user_email' => $user_email,
'activation_key' => $activation_key,
'usermeta' => $usermeta,
);
/**
* Allow some membership requests to be approved immediately.
* For example, you might want to approve all requests
* coming from users with certain email address domains.
* If `true` is returned the activation email will be sent to the user.
*
* @since 10.0.0
*
* @param bool $send Whether or not this membership request should be approved
* immediately and the activation email sent.
* Default is `false` meaning that the request should be
* manually approved by a site admin.
* @param array $details The details of the request.
*/
$send = apply_filters( 'bp_members_membership_requests_bypass_manual_approval', false, $details );
// If the registration process has been interrupted, this is a new membership request.
if ( ! $send ) {
$signup = bp_members_get_signup_by( 'activation_key', $activation_key );
/**
* Fires when a site membership request has been created and is pending.
*
* @since 10.0.0
*
* @param BP_Signup $signup The signup object that has been created.
* @param array $details The details of the request.
*/
do_action( 'bp_members_membership_request_submitted', $signup, $details );
}
return $send;
}
add_filter( 'bp_core_signup_send_activation_key', 'bp_members_membership_requests_cancel_activation_email', 10, 5 );
/**
* WP Multisite: When a user creates a membership request,
* prevent the sending of the activation email so that
* the site admins can send it manually.
*
* @since 10.0.0
*
* @param bool $send Whether or not to send the activation key.
* @param string $user_login User login name.
* @param string $user_email User email address.
* @param string $activation_key Activation key created in wpmu_signup_user().
* @param bool $is_signup_resend Is the site admin sending this email?
* @return bool Whether or not to send the activation key.
*/
function bp_members_membership_requests_cancel_activation_email_multisite( $send = true, $user_login = '', $user_email = '', $activation_key = '', $is_signup_resend = false ) {
$details = array(
'user_login' => $user_login,
'user_email' => $user_email,
'activation_key' => $activation_key,
'is_signup_resend' => $is_signup_resend,
);
// Allow the site admin to send/resend approval emails.
if ( $is_signup_resend ) {
$to_send = true;
} else {
$to_send = false;
}
/**
* Allow some membership requests to be approved immediately.
* For example, you might want to approve all requests
* coming from users with certain email address domains.
* If `true` is returned the activation email will be sent to the user.
*
* @since 10.0.0
*
* @param bool $to_send Whether or not this membership request should be approved
* immediately and the activation email sent.
* Default is `false` meaning that the request should be
* manually approved by a site admin.
* @param array $details The details of the request.
*/
$send = apply_filters( 'bp_members_membership_requests_bypass_manual_approval_multisite', $to_send, $details );
// If the registration process has been interrupted, this is a new membership request.
if ( ! $send ) {
$signup = bp_members_get_signup_by( 'activation_key', $activation_key );
/**
* Fires when a site membership request has been created and is pending.
*
* @since 10.0.0
*
* @param BP_Signup $signup The signup object that has been created.
* @param array $details The details of the request.
*/
do_action( 'bp_members_membership_request_submitted', $signup, $details );
}
return $send;
}
add_filter( 'bp_core_signup_send_activation_key_multisite', 'bp_members_membership_requests_cancel_activation_email_multisite', 10, 5 );
add_filter( 'bp_core_signup_send_activation_key_multisite_blog', 'bp_members_membership_requests_cancel_activation_email_multisite', 10, 5 );
/**
* Notifications
*********************************************************************/
/**
* Notify site admins about a new membership request.
*
* @since 10.0.0
*
* @param BP_Signup $signup The signup object that has been created.
*/
function bp_members_membership_requests_notify_site_admins( $signup ) {
if ( ! isset( $signup->signup_id ) ) {
return;
}
// Notify all site admins so the request can be handled.
$admin_ids = get_users(
array(
'fields' => 'ids',
'role' => 'administrator',
)
);
foreach ( $admin_ids as $admin_id ) {
// Trigger a BuddyPress Notification.
if ( bp_is_active( 'notifications' ) ) {
bp_notifications_add_notification(
array(
'user_id' => $admin_id,
'item_id' => $signup->signup_id,
'component_name' => buddypress()->members->id,
'component_action' => 'membership_request_submitted',
'date_notified' => bp_core_current_time(),
'is_new' => 1,
)
);
}
// Bail if member opted out of receiving this email.
if ( 'no' === bp_get_user_meta( $admin_id, 'notification_members_membership_request', true ) ) {
return;
}
$unsubscribe_args = array(
'user_id' => $admin_id,
'notification_type' => 'members-membership-request',
);
$manage_url = add_query_arg(
array(
'mod_req' => 1,
'page' => 'bp-signups',
'signup_id' => $signup->signup_id,
'action' => 'resend',
),
bp_get_admin_url( 'users.php' )
);
$args = array(
'tokens' => array(
'admin.id' => $admin_id,
'manage.url' => esc_url_raw( $manage_url ),
'requesting-user.user_login' => esc_html( $signup->user_login ),
'unsubscribe' => esc_url( bp_email_get_unsubscribe_link( $unsubscribe_args ) ),
),
);
bp_send_email( 'members-membership-request', (int) $admin_id, $args );
}
}
add_action( 'bp_members_membership_request_submitted', 'bp_members_membership_requests_notify_site_admins' );
/**
* Send a message to the requesting user when his or her
* site membership request has been rejected.
*
* @since 10.0.0
*
* @param array $signup_ids Array of pending IDs to delete.
*/
function bp_members_membership_requests_send_rejection_mail( $signup_ids ) {
$signups = BP_Signup::get(
array(
'include' => $signup_ids,
)
);
if ( empty( $signups['signups'] ) ) {
return;
}
foreach ( $signups['signups'] as $signup ) {
if ( ! empty( $signup->user_email ) ) {
bp_send_email( 'members-membership-request-rejected', $signup->user_email );
}
}
}
add_action( 'bp_core_signup_before_delete', 'bp_members_membership_requests_send_rejection_mail' );
/**
* When a request is approved, activated or deleted,
* delete the associated notifications.
*
* @since 10.0.0
*
* @param array $signup_ids Array of changing signup IDs.
*/
function bp_members_membership_requests_delete_notifications_on_change( $signup_ids ) {
foreach ( $signup_ids as $signup_id ) {
BP_Notifications_Notification::delete(
array(
'item_id' => $signup_id,
'component_action' => 'membership_request_submitted',
)
);
}
}
add_action( 'bp_core_signup_after_resend', 'bp_members_membership_requests_delete_notifications_on_change' );
add_action( 'bp_core_signup_after_activate', 'bp_members_membership_requests_delete_notifications_on_change' );
add_action( 'bp_core_signup_after_delete', 'bp_members_membership_requests_delete_notifications_on_change' );
/**
* In the Nouveau template pack, when membership requests are required,
* change registration form submit button label to "Submit Request".
*
* @since 10.0.0
*
* @return string $retval the HTML for the request membership link.
*/
function bp_members_membership_requests_filter_complete_signup_button( $buttons ) {
$buttons['register']['attributes']['value'] = __( 'Submit Request', 'buddypress' );
return $buttons;
}
add_filter( 'bp_nouveau_get_submit_button', 'bp_members_membership_requests_filter_complete_signup_button' );
/**
* Administration: Change certain behavior and labels
* on the WP Admin > Users > Manage Signups screen.
*********************************************************************/
/**
* Filter the actions available on the signups list table.
*
* @since 10.0.0
*
* @param array $actions Array of actions and corresponding links.
* @param object $signup_object The signup data object.
*/
function bp_members_membership_requests_filter_signup_row_actions( $actions, $signup_object ) {
// Rename the "email" resend option when membership requests are active.
$email_link = add_query_arg(
array(
'page' => 'bp-signups',
'signup_id' => $signup_object->id,
'action' => 'resend',
),
bp_get_admin_url( 'users.php' )
);
$resend_label = ( 0 === $signup_object->count_sent ) ? __( 'Approve Request', 'buddypress' ) : __( 'Resend Approval', 'buddypress' );
$actions['resend'] = sprintf( '%2$s', esc_url( $email_link ), esc_html( $resend_label ) );
// Add a link to view profile info when membership requests and xprofile are active.
if ( bp_is_active( 'xprofile' ) || bp_members_site_requests_enabled() ) {
$profile_link = add_query_arg(
array(
'page' => 'bp-signups#TB_inline',
'inlineId' => 'signup-info-modal-' . $signup_object->id,
),
bp_get_admin_url( 'users.php' )
);
$actions['profile'] = sprintf( '%2$s', esc_url( $profile_link ), esc_html__( 'Profile Info', 'buddypress' ) );
}
return $actions;
}
add_filter( 'bp_members_ms_signup_row_actions', 'bp_members_membership_requests_filter_signup_row_actions', 10, 2 );
/**
* Filter the bulk actions available on the signups list table.
*
* @since 10.0.0
*
* @param array $actions Array of actions and corresponding links.
* @return array List of actions and corresponding links.
*/
function bp_members_membership_requests_filter_signup_bulk_actions( $actions ) {
// Rename the "email" resend option when membership requests are active.
$actions['resend'] = esc_html_x( 'Approve', 'Pending signup action', 'buddypress' );
return $actions;
}
add_filter( 'bp_members_ms_signup_bulk_actions', 'bp_members_membership_requests_filter_signup_bulk_actions' );
/**
* Filter the "Last Sent" column header on the pending users table.
*
* @since 10.0.0
*
* @param array $columns Array of columns to display.
* @return array List of columns to display.
*/
function bp_members_membership_requests_filter_signup_table_date_sent_header( $columns ) {
$columns['date_sent'] = esc_html__( 'Approved', 'buddypress' );
return $columns;
}
add_filter( 'bp_members_signup_columns', 'bp_members_membership_requests_filter_signup_table_date_sent_header' );
add_filter( 'bp_members_ms_signup_columns', 'bp_members_membership_requests_filter_signup_table_date_sent_header' );
/**
* Filter the "Last Sent" column message on the pending users table.
*
* @since 10.0.0
*
* @param string $message "Not yet sent" message.
* @param object|null $signup Signup object instance.
* @return string "Not yet approved" message, if needed. Unchanged message otherwise.
*/
function bp_members_membership_requests_filter_signup_table_unsent_message( $message, $signup ) {
if ( 0 === $signup->count_sent ) {
$message = esc_html__( 'Not yet approved', 'buddypress' );
}
return $message;
}
add_filter( 'bp_members_signup_date_sent_unsent_message', 'bp_members_membership_requests_filter_signup_table_unsent_message', 10, 2 );
add_filter( 'bp_members_ms_signup_date_sent_unsent_message', 'bp_members_membership_requests_filter_signup_table_unsent_message', 10, 2 );
/**
* Filter/add "Request Membership" links in the following locations:
* - BP login widget,
* - Sidebar register link,
* - WP Toolbar,
* - WP login form.
*********************************************************************/
/**
* Add "Request Membership" link to Widget login form.
*
* @since 10.0.0
*
* @return string $retval the HTML for the request membership link.
*/
function bp_members_membership_requests_add_link_to_widget_login_form() {
?>
' . esc_html__( 'Request Membership', 'buddypress' ) . '';
}
return $link;
}
add_filter( 'register', 'bp_members_membership_requests_filter_sidebar_register_link' );
/**
* Add a "Request Membership" link to the WP Toolbar.
* Priority 21 should place it just after the "Log In" link.
*
* @since 10.0.0
*
* @param WP_Admin_Bar $wp_admin_bar WP_Admin_Bar instance, passed by reference
*/
function bp_members_membership_requests_add_toolbar_link( $wp_admin_bar ) {
if ( is_user_logged_in() ) {
return;
}
$args = array(
'id' => 'bp-request-membership',
'title' => __( 'Request Membership', 'buddypress' ),
'href' => wp_registration_url(),
'meta' => array(
'class' => 'buddypress-request-membership',
'title' => __( 'Request Membership', 'buddypress' ),
),
);
$wp_admin_bar->add_node( $args );
}
add_action( 'admin_bar_menu', 'bp_members_membership_requests_add_toolbar_link', 21 );
/**
* Add a "Request Membership" link to the WP Login form.
*
* @since 10.0.0
*
* @param string $link HTML link to the home URL of the current site.
* @return string HTML link to the home URL of the current site and the one to request a membership.
*/
function bp_members_membership_requests_add_link_wp_login( $link ) {
$link_separator = apply_filters( 'login_link_separator', ' | ' );
return $link . $link_separator . '' . esc_html__( 'Request Membership', 'buddypress' ) . '';
}
add_action( 'login_site_html_link', 'bp_members_membership_requests_add_link_wp_login' );