WordPress.org

Make WordPress Core

Ticket #37818: 37818.2.diff

File 37818.2.diff, 3.1 KB (added by donmhico, 13 months ago)

Patch for this PR - https://github.com/WordPress/wordpress-develop/pull/414 - Refreshed and add unit test.

  • src/wp-includes/user.php

    From 9ebb4bbc36b2ae0ad2fc0cdfe8c48c6c8cb370fb Mon Sep 17 00:00:00 2001
    From: Michael Joseph Panaga <donmhico@gmail.com>
    Date: Sat, 18 Jul 2020 01:15:17 +0800
    Subject: [PATCH] Add  to allow creation of user with pre-given ID
    
    ---
     src/wp-includes/user.php     | 10 ++++++++++
     tests/phpunit/tests/user.php | 25 +++++++++++++++++++++++++
     2 files changed, 35 insertions(+)
    
    diff --git a/src/wp-includes/user.php b/src/wp-includes/user.php
    index 63047c7219..b306a4e036 100644
    a b function validate_username( $username ) { 
    14921492 * @since 4.7.0 The user's locale can be passed to `$userdata`.
    14931493 * @since 5.3.0 The `user_activation_key` field can be passed to `$userdata`.
    14941494 * @since 5.3.0 The `spam` field can be passed to `$userdata` (Multisite only).
     1495 * @since 5.5.0 Add `import_id`.
    14951496 *
    14961497 * @global wpdb $wpdb WordPress database abstraction object.
    14971498 *
    function validate_username( $username ) { 
    15361537 *                                        as a string literal, not boolean. Default 'true'.
    15371538 *     @type string $role                 User's role.
    15381539 *     @type string $locale               User's locale. Default empty.
     1540 *     @type int    $import_id            Suggested Uer ID, use it if not already present.
    15391541 * }
    15401542 * @return int|WP_Error The newly created user's ID or a WP_Error object if the user could not
    15411543 *                      be created.
    function wp_insert_user( $userdata ) { 
    16331635
    16341636        $user_nicename_check = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->users WHERE user_nicename = %s AND user_login != %s LIMIT 1", $user_nicename, $user_login ) );
    16351637
     1638        $import_id = empty( $userdata['import_id'] ) ? 0 : absint( $userdata['import_id'] );
     1639
    16361640        if ( $user_nicename_check ) {
    16371641                $suffix = 2;
    16381642                while ( $user_nicename_check ) {
    function wp_insert_user( $userdata ) { 
    18231827                $wpdb->update( $wpdb->users, $data, compact( 'ID' ) );
    18241828                $user_id = (int) $ID;
    18251829        } else {
     1830                // If there is a suggested ID, use it if not already present.
     1831        if ( ! empty( $import_id ) ) {
     1832            if ( ! $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->users WHERE ID = %d", $import_id ) ) ) {
     1833                                $data['ID'] = $import_id;
     1834                        }
     1835        }
    18261836                $wpdb->insert( $wpdb->users, $data );
    18271837                $user_id = (int) $wpdb->insert_id;
    18281838        }
  • tests/phpunit/tests/user.php

    diff --git a/tests/phpunit/tests/user.php b/tests/phpunit/tests/user.php
    index d3e9a581e5..8f60d49a74 100644
    a b function test_user_meta_error() { 
    644644                $this->assertNotContains( 'key', $metas );
    645645        }
    646646
     647        /**
     648         * @ticket 37818
     649         */
     650        function test_insert_user_with_import_id() {
     651                $user_1 = wp_insert_user(
     652                        array(
     653                                'import_id'  => 72,
     654                                'user_login' => 'user_log_1',
     655                                'user_pass'  => 'user_pass_1',
     656                                'user_email' => 'user1@pass.com',
     657                        )
     658                );
     659                $this->assertEquals( $user_1, 72 );
     660
     661                $user_2 = wp_insert_user(
     662                        array(
     663                                'import_id'  => 88,
     664                                'user_login' => 'user_log_2',
     665                                'user_pass'  => 'user_pass_2',
     666                                'user_email' => 'user2@pass.com',
     667                        )
     668                );
     669                $this->assertEquals( $user_2, 88 );
     670        }
     671
    647672        /**
    648673         * @ticket 30647
    649674         */