Skip to:
Content

BuddyPress.org

Opened 7 months ago

Last modified 2 weeks ago

#9057 assigned enhancement

Make BP Signups a Member's component deactivable feature

Reported by: shawfactor's profile shawfactor Owned by: imath's profile imath
Milestone: 15.0.0 Priority: normal
Severity: normal Version: 2.0
Component: Members Keywords: needs-patch
Cc:

Description

Right now register is a fully fledged comonent but it is not listed in options-general.php?page=bp-components and cannot be deactivated.

This is not ideal as users may want to use non buddypress ways to register users some of which (e.g. registering via a third party like google) are much lower friction. These methods usually require registration to be open so it is not a question of toggling the global setting

Change History (11)

#1 @imath
7 months ago

  • Component changed from Core to Members
  • Milestone changed from Awaiting Review to 14.0.0

Thanks for your feedback, I agree about giving the choice to admin, see #9046

I’m unsure about the how, moving signups out of the members component to make it a separate one seems a bit too much to me. I was more thinking to an option. But let’s discuss about it during 14.0.0 dev cycle.

This ticket was mentioned in Slack in #buddypress by imath. View the logs.


6 months ago

#3 @teeboy4real
6 months ago

Hello @imath

I really like this idea and I would also like to add suggestion of the ability to control registrations based on a set threshold or the number of already registered members. I would love to share this code below with you so you can review it and improve on it. Adding this to core would be really awesome.

Thanks

<?php
/*
* Plugin Name: BuddyPress Registration Control
* Description: Allows administrators to enable or disable user registration and select a URL to redirect to when registration is disabled.
* Version: 1.0
*/

// Register the new setting in the BuddyPress options group
function custom_bp_register_settings() {
    if ( ! function_exists( 'bp_is_active' ) ) {
        return;
    }
    register_setting( 'buddypress', 'bp-disable-site-registration', 'custom_bp_sanitize_registration_status' );
    register_setting( 'buddypress', 'bp-disable-site-registration-redirection-url', 'custom_bp_sanitize_redirection_url' );
    register_setting( 'buddypress', 'bp-close-registration-at-users', 'custom_bp_sanitize_user_registration_count' );
}
add_action( 'admin_init', 'custom_bp_register_settings' );

// add sanitization function
function custom_bp_sanitize_registration_status( $status ) {
    $allowed_values = array( 'open', 'closed' );
    if ( ! in_array( $status, $allowed_values ) ) {
        $status = 'open';
    }
    return $status;
}

function custom_bp_sanitize_redirection_url( $url ) {
    return esc_url_raw( $url, null, 'db' );
}

function custom_bp_sanitize_user_registration_count( $count ) {
    return absint( $count );
}

// Add the new setting to the BuddyPress options page
function custom_bp_add_settings_field() {
    if ( ! function_exists( 'bp_is_active' ) ) {
        return;
    }
        add_settings_field(
        'bp-disable-site-registration',
        __( 'Registration', 'buddypress' ),
        'custom_bp_settings_field_html',
        'buddypress',
        'bp_main',
        array(
            'label_for' => 'bp-disable-site-registration',
        )
    );
    add_settings_field(
        'bp-disable-site-registration-redirection-url',
        __( 'Redirection URL', 'buddypress' ),
        'custom_bp_settings_redirection_url_html',
        'buddypress',
        'bp_main',
        array(
            'label_for' => 'bp-disable-site-registration-redirection-url',
        )
    );
    add_settings_field( 
        'bp-close-registration-at-users',
        __( 'Limit User Registration Count', 'buddypress' ),
        'custom_bp_close_registration_at_users_html',
        'buddypress',
        'bp_main',
        array(
            'label_for' => 'bp-close-registration-at-users',
        )
    );
}
add_action( 'bp_register_admin_settings', 'custom_bp_add_settings_field', 10, 1 );

// Output the HTML for the setting field
function custom_bp_settings_field_html() {
    $value = get_option( 'bp-disable-site-registration', 'open' );
    ?>
    <select name="bp-disable-site-registration" id="bp-disable-site-registration">
        <option value="open" <?php selected( $value, 'open' ); ?>><?php _e( 'Open', 'buddypress' ); ?></option>
        <option value="closed" <?php selected( $value, 'closed' ); ?>><?php _e( 'Closed', 'buddypress' ); ?></option>
    </select>
    <?php
}

// Output the HTML for the redirection URL field
function custom_bp_settings_redirection_url_html() {
    $value = get_option( 'bp-disable-site-registration-redirection-url', home_url() );
    ?>
    <input type="text" name="bp-disable-site-registration-redirection-url" id="bp-disable-site-registration-redirection-url" value="<?php echo esc_attr( $value ); ?>" required/>
    <?php
}

// Output the HTML for the close registration at users field
function custom_bp_close_registration_at_users_html() {
    $value = get_option( 'bp-close-registration-at-users' );
    ?>
    <input type="number" name="bp-close-registration-at-users" id="bp-close-registration-at-users" value="<?php echo esc_attr( $value ); ?>" required/>
    <p class="description"><?php _e( 'Enter the maximum number of users allowed to register on the site. Leave it empty or set to 0 for no limit.', 'buddypress' ); ?></p>
    <?php
}

// Check if registration is open or closed
function custom_bp_redirect_registration() {
	if ( ! bp_is_register_page() ) {
		return;
	}
	if ( get_option( 'bp-disable-site-registration', 'open' ) !== 'closed' ) {
		return;
	}
	$total_users                   = count_users();
	$total_users                   = $total_users['total_users'];
	$limit_user_registration_count = absint( get_option( 'bp-close-registration-at-users' ) );

	if ( $total_users >= $limit_user_registration_count ) {
		wp_redirect( get_option( 'bp-disable-site-registration-redirection-url' ) ); // wp_safe_redirect?
		exit;
	}
}
add_action( 'bp_screens', 'custom_bp_redirect_registration' );
Version 0, edited 6 months ago by teeboy4real (next)

#4 @imath
6 months ago

Hi @teeboy4real

Thanks for your feedback, suggestion & code. I’ll look at it asap 👍

#5 @imath
5 months ago

  • Owner set to imath
  • Status changed from new to assigned

This ticket was mentioned in Slack in #buddypress by emaralive. View the logs.


4 months ago

#7 @imath
4 months ago

  • Keywords needs-patch added
  • Summary changed from Make register a deactivatable component to Make BP Signups a Member's component deactivable feature
  • Version set to 2.0

This ticket was mentioned in Slack in #buddypress by imath. View the logs.


2 months ago

This ticket was mentioned in Slack in #buddypress by dcavins. View the logs.


6 weeks ago

#10 @imath
5 weeks ago

  • Milestone changed from 14.0.0 to Up Next

We need more time, sorry to postpone this to next major release.

#11 @imath
2 weeks ago

  • Milestone changed from Up Next to 15.0.0
Note: See TracTickets for help on using tickets.