Skip to:
Content

BuddyPress.org

Changeset 13984


Ignore:
Timestamp:
07/27/2024 07:01:02 PM (10 months ago)
Author:
espellcaste
Message:

Enforce requirement of usernames having valid letters.

Profile links dont

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-members/bp-members-functions.php

    r13983 r13984  
    16221622    // Note: This check only works on Multisite.
    16231623    $limited_email_domains = get_site_option( 'limited_email_domains' );
    1624     if ( is_array( $limited_email_domains ) && empty( $limited_email_domains ) == false ) {
     1624    if ( is_array( $limited_email_domains ) && ! empty( $limited_email_domains ) ) {
    16251625        $emaildomain = substr( $user_email, 1 + strpos( $user_email, '@' ) );
    1626         if ( ! in_array( $emaildomain, $limited_email_domains ) ) {
     1626
     1627        if ( ! in_array( $emaildomain, $limited_email_domains, true ) ) {
    16271628            $errors['domain_not_allowed'] = 1;
    16281629        }
     
    16341635    }
    16351636
    1636     $retval = ! empty( $errors ) ? $errors : true;
    1637 
    1638     return $retval;
     1637    return ! empty( $errors ) ? $errors : true;
    16391638}
    16401639
     
    17131712        // User name can't be on the list of illegal names.
    17141713        $illegal_names = get_site_option( 'illegal_names' );
    1715         if ( in_array( $user_name, (array) $illegal_names ) ) {
    1716             $errors->add( 'user_name', __( 'That username is not allowed', 'buddypress' ) );
     1714        if ( in_array( $user_name, (array) $illegal_names, true ) ) {
     1715            $errors->add( 'user_name', __( 'That username is not allowed.', 'buddypress' ) );
    17171716        }
    17181717
     
    17241723        // Minimum of 4 characters.
    17251724        if ( strlen( $user_name ) < 4 ) {
    1726             $errors->add( 'user_name',  __( 'Username must be at least 4 characters', 'buddypress' ) );
     1725            $errors->add( 'user_name', __( 'Username must be at least 4 characters.', 'buddypress' ) );
     1726        }
     1727
     1728        // Maximum of 60 characters.
     1729        if ( strlen( $user_name ) > 60 ) {
     1730            $errors->add( 'user_name', __( 'Username may not be longer than 60 characters.', 'buddypress' ) );
    17271731        }
    17281732
    17291733        // No underscores. @todo Why not?
    1730         if ( false !== strpos( ' ' . $user_name, '_' ) ) {
     1734        if ( str_contains( ' ' . $user_name, '_' ) ) {
    17311735            $errors->add( 'user_name', __( 'Sorry, usernames may not contain the character "_"!', 'buddypress' ) );
    17321736        }
     
    17351739        $match = array();
    17361740        preg_match( '/[0-9]*/', $user_name, $match );
    1737         if ( $match[0] == $user_name ) {
     1741
     1742        // Check for valid letters.
     1743        $valid_letters = preg_match( '/[a-zA-Z]+/', $user_name );
     1744
     1745        if ( $match[0] === $user_name || ! $valid_letters ) {
    17381746            $errors->add( 'user_name', __( 'Sorry, usernames must have letters too!', 'buddypress' ) );
    17391747        }
    17401748
    17411749        // Check into signups.
    1742         $signups = BP_Signup::get( array(
    1743             'user_login' => $user_name,
    1744         ) );
     1750        $signups = BP_Signup::get(
     1751            array(
     1752                'user_login' => $user_name,
     1753            )
     1754        );
    17451755
    17461756        $signup = isset( $signups['signups'] ) && ! empty( $signups['signups'][0] ) ? $signups['signups'][0] : false;
  • trunk/tests/phpunit/testcases/members/functions.php

    r13981 r13984  
    66class BP_Tests_Members_Functions extends BP_UnitTestCase {
    77    protected $permalink_structure = '';
    8     protected $filter_fired = '';
     8    protected $filter_fired        = '';
    99
    1010    public function set_up() {
     
    2525    public function test_bp_core_delete_account() {
    2626        // Stash
    27         $current_user = get_current_user_id();
     27        $current_user      = get_current_user_id();
    2828        $deletion_disabled = bp_disable_account_deletion();
    2929
     
    3333
    3434        // 1. Admin can delete user account
    35         self::set_current_user( $admin_user );
     35        $this->set_current_user( $admin_user );
    3636        $user1 = self::factory()->user->create( array( 'role' => 'subscriber' ) );
    3737        bp_core_delete_account( $user1 );
     
    5252        $user3 = self::factory()->user->create( array( 'role' => 'subscriber' ) );
    5353        $user4 = self::factory()->user->create( array( 'role' => 'subscriber' ) );
    54         self::set_current_user( $user3 );
     54        $this->set_current_user( $user3 );
    5555        bp_core_delete_account( $user4 );
    5656        $maybe_user = new WP_User( $user4 );
     
    5959
    6060        // Cleanup
    61         self::set_current_user( $current_user );
     61        $this->set_current_user( $current_user );
    6262        bp_update_option( 'bp-disable-account-deletion', $deletion_disabled );
    6363    }
     
    136136
    137137        // Now change the members directory slug
    138         $pages = bp_core_get_directory_pages();
    139         $members_page = get_post( $pages->members->id );
    140         $new_members_slug = 'new-members-slug';
     138        $pages                   = bp_core_get_directory_pages();
     139        $members_page            = get_post( $pages->members->id );
     140        $new_members_slug        = 'new-members-slug';
    141141        $members_page->post_name = $new_members_slug;
    142         $p = wp_update_post( $members_page );
     142        $p                       = wp_update_post( $members_page );
    143143
    144144        // Weird!
     
    185185     */
    186186    public function test_bp_core_get_user_displayname_xprofile_exists() {
    187         $xprofile_is_active = bp_is_active( 'xprofile' );
     187        $xprofile_is_active                         = bp_is_active( 'xprofile' );
    188188        buddypress()->active_components['xprofile'] = '1';
    189189
     
    202202     */
    203203    public function test_bp_core_get_user_displayname_arrays_all_bad_entries() {
    204         $this->assertSame( array(), bp_core_get_user_displaynames( array( 0, 'foo', ) ) );
     204        $this->assertSame( array(), bp_core_get_user_displaynames( array( 0, 'foo' ) ) );
    205205    }
    206206
     
    219219        );
    220220
    221         $this->assertSame( $expected, bp_core_get_user_displaynames( array( $u1, $u2, ) ) );
     221        $this->assertSame( $expected, bp_core_get_user_displaynames( array( $u1, $u2 ) ) );
    222222    }
    223223
     
    227227    public function test_bp_core_get_user_displaynames_one_not_in_xprofile() {
    228228        $u1 = self::factory()->user->create();
    229         $u2 = self::factory()->user->create( array(
    230             'display_name' => 'Bar',
    231         ) );
     229        $u2 = self::factory()->user->create(
     230            array(
     231                'display_name' => 'Bar',
     232            )
     233        );
    232234        xprofile_set_field_data( 1, $u1, 'Foo' );
    233235
     
    237239        );
    238240
    239         $this->assertSame( $expected, bp_core_get_user_displaynames( array( $u1, $u2, ) ) );
     241        $this->assertSame( $expected, bp_core_get_user_displaynames( array( $u1, $u2 ) ) );
    240242    }
    241243
     
    244246     */
    245247    public function test_bp_members_migrate_signups_standard() {
    246         $u = self::factory()->user->create();
     248        $u     = self::factory()->user->create();
    247249        $u_obj = new WP_User( $u );
    248250
     
    254256        $wpdb->update(
    255257            $wpdb->users,
    256             array( 'user_status' => '2', ),
    257             array( 'ID' => $u, ),
    258             array( '%d', ),
    259             array( '%d', )
     258            array( 'user_status' => '2' ),
     259            array( 'ID' => $u ),
     260            array( '%d' ),
     261            array( '%d' )
    260262        );
    261263        clean_user_cache( $u );
     
    278280     */
    279281    public function test_bp_members_migrate_signups_activation_key_but_user_status_0() {
    280         $u = self::factory()->user->create();
     282        $u     = self::factory()->user->create();
    281283        $u_obj = new WP_User( $u );
    282284
     
    291293        $wpdb->update(
    292294            $wpdb->users,
    293             array( 'user_status' => '0', ),
    294             array( 'ID' => $u, ),
    295             array( '%d', ),
    296             array( '%d', )
     295            array( 'user_status' => '0' ),
     296            array( 'ID' => $u ),
     297            array( '%d' ),
     298            array( '%d' )
    297299        );
    298300        clean_user_cache( $u );
     
    309311     */
    310312    public function test_bp_members_migrate_signups_no_activation_key_but_user_status_2() {
    311         $u = self::factory()->user->create();
     313        $u     = self::factory()->user->create();
    312314        $u_obj = new WP_User( $u );
    313315
     
    316318        $wpdb->update(
    317319            $wpdb->users,
    318             array( 'user_status' => '2', ),
    319             array( 'ID' => $u, ),
    320             array( '%d', ),
    321             array( '%d', )
     320            array( 'user_status' => '2' ),
     321            array( 'ID' => $u ),
     322            array( '%d' ),
     323            array( '%d' )
    322324        );
    323325        clean_user_cache( $u );
     
    326328
    327329        // Use email address as a sanity check
    328         $found = BP_Signup::get();
     330        $found       = BP_Signup::get();
    329331        $found_email = isset( $found['signups'][0]->user_email ) ? $found['signups'][0]->user_email : '';
    330332        $this->assertSame( $u_obj->user_email, $found_email );
     
    344346
    345347        $time = time();
    346         $t1 = date( 'Y-m-d H:i:s', $time - 50 );
    347         $t2 = date( 'Y-m-d H:i:s', $time - 500 );
    348         $t3 = date( 'Y-m-d H:i:s', $time - 5000 );
     348        $t1   = date( 'Y-m-d H:i:s', $time - 50 );
     349        $t2   = date( 'Y-m-d H:i:s', $time - 500 );
     350        $t3   = date( 'Y-m-d H:i:s', $time - 5000 );
    349351
    350352        update_user_meta( $u1, 'last_activity', $t1 );
     
    355357        global $wpdb;
    356358        $bp = buddypress();
    357         $wpdb->query( $wpdb->prepare(
    358             "INSERT INTO {$bp->members->table_name_last_activity}
     359        $wpdb->query(
     360            $wpdb->prepare(
     361                "INSERT INTO {$bp->members->table_name_last_activity}
    359362                (`user_id`, `component`, `type`, `action`, `content`, `primary_link`, `item_id`, `date_recorded` ) VALUES
    360363                ( %d, %s, %s, %s, %s, %s, %d, %s )",
    361             $u2, $bp->members->id, 'last_activity', '', '', '', 0, $t1
    362         ) );
     364                $u2,
     365                $bp->members->id,
     366                'last_activity',
     367                '',
     368                '',
     369                '',
     370                0,
     371                $t1
     372            )
     373        );
    363374
    364375        bp_last_activity_migrate();
     
    387398     */
    388399    public function test_bp_core_get_userid_from_nicename_failure() {
    389         $this->assertSame( NULL, bp_core_get_userid_from_nicename( 'non_existent_user' ) );
     400        $this->assertSame( null, bp_core_get_userid_from_nicename( 'non_existent_user' ) );
    390401    }
    391402
     
    432443        }
    433444
    434         $bp = buddypress();
     445        $bp             = buddypress();
    435446        $displayed_user = $bp->displayed_user;
    436447
    437         $u1 = self::factory()->user->create();
     448        $u1                     = self::factory()->user->create();
    438449        $bp->displayed_user->id = $u1;
    439450
     
    460471        }
    461472
    462         $bp = buddypress();
     473        $bp             = buddypress();
    463474        $displayed_user = $bp->displayed_user;
    464475
    465         $u1 = self::factory()->user->create();
     476        $u1                     = self::factory()->user->create();
    466477        $bp->displayed_user->id = $u1;
    467478
     
    484495     */
    485496    public function test_bp_core_process_spammer_status_ms_bulk_ham() {
    486         if ( ! is_multisite() ) {
    487             $this->markTestSkipped();
    488         }
    489 
    490         $bp = buddypress();
     497        $this->skipWithoutMultisite();
     498
     499        $bp             = buddypress();
    491500        $displayed_user = $bp->displayed_user;
    492501
    493         $u1 = self::factory()->user->create();
     502        $u1                     = self::factory()->user->create();
    494503        $bp->displayed_user->id = $u1;
    495504
     
    520529        add_action( 'make_spam_user', array( $this, 'notification_filter_callback' ) );
    521530
    522         $n = bp_core_process_spammer_status( $u1, 'spam' );
     531        bp_core_process_spammer_status( $u1, 'spam' );
    523532
    524533        remove_action( 'make_spam_user', array( $this, 'notification_filter_callback' ) );
     
    529538    public function test_bp_core_process_spammer_status_make_ham_user_filter() {
    530539        $u1 = self::factory()->user->create();
    531         $s  = bp_core_process_spammer_status( $u1, 'spam' );
     540
     541        bp_core_process_spammer_status( $u1, 'spam' );
    532542
    533543        add_action( 'make_ham_user', array( $this, 'notification_filter_callback' ) );
    534544
    535         $h = bp_core_process_spammer_status( $u1, 'ham' );
     545        bp_core_process_spammer_status( $u1, 'ham' );
    536546
    537547        remove_action( 'make_ham_user', array( $this, 'notification_filter_callback' ) );
    538548
    539549        $this->assertSame( 'make_ham_user', $this->filter_fired );
    540 
    541550    }
    542551
     
    545554
    546555        $u1 = self::factory()->user->create();
    547         $n = bp_core_process_spammer_status( $u1, 'spam' );
     556
     557        bp_core_process_spammer_status( $u1, 'spam' );
    548558
    549559        remove_action( 'bp_make_spam_user', array( $this, 'notification_filter_callback' ) );
    550560
    551561        $this->assertSame( 'bp_make_spam_user', $this->filter_fired );
    552 
    553562    }
    554563
     
    557566
    558567        $u1 = self::factory()->user->create();
    559         $n = bp_core_process_spammer_status( $u1, 'ham' );
     568        $n  = bp_core_process_spammer_status( $u1, 'ham' );
    560569
    561570        remove_action( 'bp_make_ham_user', array( $this, 'notification_filter_callback' ) );
    562571
    563572        $this->assertSame( 'bp_make_ham_user', $this->filter_fired );
    564 
    565573    }
    566574
     
    570578     */
    571579    public function test_bp_core_process_spammer_status_ms_should_only_spam_sites_with_one_admin() {
    572         if ( ! is_multisite() ) {
    573             $this->markTestSkipped();
    574         }
     580        $this->skipWithoutMultisite();
    575581
    576582        $u1 = self::factory()->user->create();
     
    663669        global $wpdb;
    664670
    665 
    666         $signups = array( 'no-blog' =>
    667             array( 'signup_id' => self::factory()->signup->create( array(
    668                     'user_login'     => 'noblog',
    669                     'user_email'     => 'noblog@example.com',
    670                     'activation_key' => 'no-blog',
    671                     'meta' => array(
    672                         'field_1' => 'Foo Bar',
    673                         'password' => 'foobar',
    674                     ),
    675             ) ),
    676                 'password' => 'foobar',
     671        $signups = array(
     672            'no-blog' =>
     673            array(
     674                'signup_id' => self::factory()->signup->create(
     675                    array(
     676                        'user_login'     => 'noblog',
     677                        'user_email'     => 'noblog@example.com',
     678                        'activation_key' => 'no-blog',
     679                        'meta'           => array(
     680                            'field_1'  => 'Foo Bar',
     681                            'password' => 'foobar',
     682                        ),
     683                    )
     684                ),
     685                'password'  => 'foobar',
    677686            ),
    678687        );
    679688
    680689        if ( is_multisite() ) {
    681             $signups['ms-blog'] = array( 'signup_id' => self::factory()->signup->create( array(
    682                     'user_login'     => 'msblog',
    683                     'user_email'     => 'msblog@example.com',
    684                     'domain'         => get_current_site()->domain,
    685                     'path'           => get_current_site()->path . 'ms-blog',
    686                     'title'          => 'Ding Dang',
    687                     'activation_key' => 'ms-blog',
    688                     'meta' => array(
    689                         'field_1'  => 'Ding Dang',
    690                         'password' => 'dingdang',
    691                     ),
    692                 ) ),
    693                 'password' => 'dingdang',
     690            $signups['ms-blog'] = array(
     691                'signup_id' => self::factory()->signup->create(
     692                    array(
     693                        'user_login'     => 'msblog',
     694                        'user_email'     => 'msblog@example.com',
     695                        'domain'         => get_current_site()->domain,
     696                        'path'           => get_current_site()->path . 'ms-blog',
     697                        'title'          => 'Ding Dang',
     698                        'activation_key' => 'ms-blog',
     699                        'meta'           => array(
     700                            'field_1'  => 'Ding Dang',
     701                            'password' => 'dingdang',
     702                        ),
     703                    )
     704                ),
     705                'password'  => 'dingdang',
    694706            );
    695707        }
     
    747759
    748760        // Create the signup.
    749         self::factory()->signup->create( array(
    750             'user_login'     => 'test',
    751             'user_email'     => 'test@example.com',
    752             'activation_key' => $key,
    753             'meta' => array(
    754                 'field_1' => 'Foo Bar',
    755                 'password' => 'foobar',
    756             ),
    757         ) );
     761        self::factory()->signup->create(
     762            array(
     763                'user_login'     => 'test',
     764                'user_email'     => 'test@example.com',
     765                'activation_key' => $key,
     766                'meta'           => array(
     767                    'field_1'  => 'Foo Bar',
     768                    'password' => 'foobar',
     769                ),
     770            )
     771        );
    758772
    759773        // Activate user.
     
    788802        // Spam user 2.
    789803        if ( is_multisite() ) {
    790             wp_update_user( array( 'ID' => $u2, 'spam' => '1' ) );
     804            wp_update_user(
     805                array(
     806                    'ID'   => $u2,
     807                    'spam' => '1',
     808                )
     809            );
    791810        } else {
    792811            bp_core_process_spammer_status( $u2, 'spam' );
     
    810829        $this->assertSame( 0, bp_get_total_member_count() );
    811830    }
     831
     832    /**
     833     * @dataProvider provider_bp_core_validate_user_signup_errors
     834     *
     835     * @param string   $user_name User name to validate.
     836     * @param string   $user_email User email to validate.
     837     * @param WP_Error $expected_error Expected error message.
     838     */
     839    public function test_bp_core_validate_user_signup_errors( $user_name, $user_email, $expected_error ) {
     840        $this->skipWithMultisite();
     841
     842        $validate = bp_core_validate_user_signup( $user_name, $user_email );
     843
     844        $this->assertSame( $user_email, $validate['user_email'] );
     845        $this->assertSame( $user_name, $validate['user_name'] );
     846        $this->assertSame( $expected_error, $validate['errors']->get_error_message() );
     847    }
     848
     849    /**
     850     * Provider for the test_bp_core_validate_user_signup() test.
     851     *
     852     * @return array[]
     853     */
     854    public function provider_bp_core_validate_user_signup_errors() {
     855        return array(
     856            array( '', 'test@example.com', 'Please enter a username' ),
     857            array( '@-t', 'test@example.com', 'Username must be at least 4 characters.' ),
     858            array( '@-', 'test@example.com', 'Username must be at least 4 characters.' ),
     859            array( '@-@-', 'test@example.com', 'Sorry, usernames must have letters too!' ),
     860            array( '4343543', 'test@example.com', 'Sorry, usernames must have letters too!' ),
     861            array( 'cool-test', 'example.com', 'Please check your email address.' ),
     862            array( 'test&', 'test@example.com', 'Usernames can contain only letters, numbers, ., -, and @' ),
     863            array( 'test_', 'test@example.com', 'Sorry, usernames may not contain the character "_"!' ),
     864            array( '4te343543', 'test@example.com', '' ),
     865            array( 'g4te343543', 'test@example.com', '' ),
     866        );
     867    }
    812868}
Note: See TracChangeset for help on using the changeset viewer.