Make WordPress Core

Ticket #39000: 39000.2.diff

File 39000.2.diff, 4.4 KB (added by jeremyfelt, 8 years ago)
  • src/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php

     
    9292                                        'reassign' => array(
    9393                                                'type'        => 'integer',
    9494                                                'description' => __( 'Reassign the deleted user\'s posts and links to this user ID.' ),
     95                                                'required'    => true,
     96                                                'sanitize_callback' => array( $this, 'check_reassign' ),
    9597                                        ),
    9698                                ),
    9799                        ),
     
    125127                                        'reassign' => array(
    126128                                                'type'        => 'integer',
    127129                                                'description' => __( 'Reassign the deleted user\'s posts and links to this user ID.' ),
     130                                                'required'    => true,
     131                                                'sanitize_callback' => array( $this, 'check_reassign' ),
    128132                                        ),
    129133                                ),
    130134                        ),
     
    133137        }
    134138
    135139        /**
     140         * Checks for a valid value for the reassign parameter when deleting users.
     141         *
     142         * @since 4.7.0
     143         *
     144         * @param $value
     145         * @param $request
     146         * @param $param
     147         *
     148         * @return int|bool|WP_Error
     149         */
     150        public function check_reassign( $value, $request, $param ) {
     151                if ( is_numeric( $value ) ) {
     152                        return $value;
     153                }
     154
     155                if ( false === $value || 'false' === $value ) {
     156                        return false;
     157                }
     158
     159                return new WP_Error( 'rest_invalid_param', __( 'Invalid user parameter(s).' ), array( 'status' => 400 ) );
     160        }
     161
     162        /**
    136163         * Permissions check for getting all users.
    137164         *
    138165         * @since 4.7.0
     
    673700         */
    674701        public function delete_item( $request ) {
    675702                $id       = (int) $request['id'];
    676                 $reassign = isset( $request['reassign'] ) ? absint( $request['reassign'] ) : null;
     703                $reassign = false === $request['reassign'] ? null : absint( $request['reassign'] );
    677704                $force    = isset( $request['force'] ) ? (bool) $request['force'] : false;
    678705
    679706                // We don't support trashing for users.
  • tests/phpunit/tests/rest-api/rest-users-controller.php

     
    16391639
    16401640                $userdata = get_userdata( $user_id ); // cache for later
    16411641                $request = new WP_REST_Request( 'DELETE', sprintf( '/wp/v2/users/%d', $user_id ) );
    1642                 $request['force'] = true;
     1642                $request->set_param( 'force', true );
     1643                $request->set_param( 'reassign', false );
    16431644                $response = $this->server->dispatch( $request );
    16441645
    16451646                $this->assertEquals( 200, $response->get_status() );
     
    16571658                $userdata = get_userdata( $user_id ); // cache for later
    16581659
    16591660                $request = new WP_REST_Request( 'DELETE', sprintf( '/wp/v2/users/%d', $user_id ) );
     1661                $request->set_param( 'reassign', false );
    16601662                $response = $this->server->dispatch( $request );
    16611663                $this->assertErrorResponse( 'rest_trash_not_supported', $response, 501 );
    16621664
     
    16781680
    16791681                $request = new WP_REST_Request( 'DELETE', '/wp/v2/users/me' );
    16801682                $request['force'] = true;
     1683                $request->set_param( 'reassign', false );
    16811684                $response = $this->server->dispatch( $request );
    16821685
    16831686                $this->assertEquals( 200, $response->get_status() );
     
    16941697                update_site_option( 'site_admins', array( $user->user_login ) );
    16951698
    16961699                $request = new WP_REST_Request( 'DELETE', '/wp/v2/users/me' );
     1700                $request->set_param( 'reassign', false );
    16971701                $response = $this->server->dispatch( $request );
    16981702                $this->assertErrorResponse( 'rest_trash_not_supported', $response, 501 );
    16991703
     
    17141718
    17151719                $request = new WP_REST_Request( 'DELETE', sprintf( '/wp/v2/users/%d', $user_id ) );
    17161720                $request['force'] = true;
     1721                $request->set_param( 'reassign', false );
    17171722                $response = $this->server->dispatch( $request );
    17181723
    17191724                $this->assertErrorResponse( 'rest_user_cannot_delete', $response, 403 );
     
    17201725
    17211726                $request = new WP_REST_Request( 'DELETE', '/wp/v2/users/me' );
    17221727                $request['force'] = true;
     1728                $request->set_param( 'reassign', false );
    17231729                $response = $this->server->dispatch( $request );
    17241730
    17251731                $this->assertErrorResponse( 'rest_user_cannot_delete', $response, 403 );
     
    17311737
    17321738                $request = new WP_REST_Request( 'DELETE', '/wp/v2/users/100' );
    17331739                $request['force'] = true;
     1740                $request->set_param( 'reassign', false );
    17341741                $response = $this->server->dispatch( $request );
    17351742
    17361743                $this->assertErrorResponse( 'rest_user_invalid_id', $response, 404 );