Make WordPress Core

Changeset 43833


Ignore:
Timestamp:
10/29/2018 12:23:11 AM (6 years ago)
Author:
danielbachhuber
Message:

Block Editor: Preload wp/v2/media with OPTIONS for caps check.

Also introduces a block_editor_preload_paths filter for plugins and themes to preload additional data.

Props imath, mattheu.
Fixes #45194.

Location:
branches/5.0
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/5.0/src/wp-admin/edit-form-blocks.php

    r43816 r43833  
    5050    sprintf( '/wp/v2/types/%s?context=edit', $post_type ),
    5151    sprintf( '/wp/v2/users/me?post_type=%s&context=edit', $post_type ),
    52 );
     52    array( '/wp/v2/media', 'OPTIONS' ),
     53);
     54
     55/**
     56 * Preload common data by specifying an array of REST API paths that will be preloaded.
     57 *
     58 * Filters the array of paths that will be preloaded.
     59 *
     60 * @since 5.0.0
     61 *
     62 * @param array  $preload_paths Array of paths to preload.
     63 * @param object $post          The post resource data.
     64 */
     65$preload_paths = apply_filters( 'block_editor_preload_paths', $preload_paths, $post );
    5366
    5467/*
  • branches/5.0/src/wp-includes/rest-api.php

    r43805 r43833  
    13441344    }
    13451345
     1346    $method = 'GET';
     1347    if ( is_array( $path ) && 2 === count( $path ) ) {
     1348        $method = end( $path );
     1349        $path   = reset( $path );
     1350
     1351        if ( ! in_array( $method, array( 'GET', 'OPTIONS' ), true ) ) {
     1352            $method = 'GET';
     1353        }
     1354    }
     1355
    13461356    $path_parts = parse_url( $path );
    13471357    if ( false === $path_parts ) {
     
    13491359    }
    13501360
    1351     $request = new WP_REST_Request( 'GET', $path_parts['path'] );
     1361    $request = new WP_REST_Request( $method, $path_parts['path'] );
    13521362    if ( ! empty( $path_parts['query'] ) ) {
    13531363        parse_str( $path_parts['query'], $query_params );
     
    13681378        }
    13691379
    1370         $memo[ $path ] = array(
    1371             'body'    => $data,
    1372             'headers' => $response->headers,
    1373         );
     1380        if ( 'OPTIONS' === $method ) {
     1381            $response = rest_send_allow_header( $response, $server, $request );
     1382
     1383            $memo[ $method ][ $path ] = array(
     1384                'body'    => $data,
     1385                'headers' => $response->headers,
     1386            );
     1387        } else {
     1388            $memo[ $path ] = array(
     1389                'body'    => $data,
     1390                'headers' => $response->headers,
     1391            );
     1392        }
    13741393    }
    13751394
  • branches/5.0/tests/phpunit/tests/rest-api.php

    r43766 r43833  
    630630        $this->assertTrue( is_array( rest_preload_api_request( 0, '/' ) ) );
    631631    }
     632
     633    function test_rest_preload_api_request_with_method() {
     634        $rest_server = $GLOBALS['wp_rest_server'];
     635        $GLOBALS['wp_rest_server'] = null;
     636
     637        $preload_paths = array(
     638            '/wp/v2/types',
     639            array( '/wp/v2/media', 'OPTIONS' ),
     640        );
     641
     642        $preload_data = array_reduce(
     643            $preload_paths,
     644            'rest_preload_api_request',
     645            array()
     646        );
     647
     648        $this->assertSame( array_keys( $preload_data ), array( '/wp/v2/types', 'OPTIONS' ) );
     649        $this->assertTrue( isset( $preload_data['OPTIONS']['/wp/v2/media'] ) );
     650
     651        $GLOBALS['wp_rest_server'] = $rest_server;
     652    }
    632653}
Note: See TracChangeset for help on using the changeset viewer.