Make WordPress Core


Ignore:
Timestamp:
02/21/2017 06:17:32 PM (8 years ago)
Author:
jnylen0
Message:

REST API: Fix multiple issues with setting dates of posts and comments.

This commit modifies the rest_get_date_with_gmt function to correctly parse local and UTC timestamps with or without timezone information.

It also ensures that the REST API can edit the dates of draft posts by setting the edit_date flag to wp_update_post.

Overall this commit ensures that post and comment dates can be set and updated as expected.

Fixes #39256.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/tests/rest-api.php

    r38832 r40101  
    384384    }
    385385
     386    public function rest_date_provider() {
     387        return array(
     388            // Valid dates with timezones
     389            array( '2017-01-16T11:30:00-05:00', gmmktime( 11, 30,  0,  1, 16, 2017 ) + 5 * HOUR_IN_SECONDS ),
     390            array( '2017-01-16T11:30:00-05:30', gmmktime( 11, 30,  0,  1, 16, 2017 ) + 5.5 * HOUR_IN_SECONDS ),
     391            array( '2017-01-16T11:30:00-05'   , gmmktime( 11, 30,  0,  1, 16, 2017 ) + 5 * HOUR_IN_SECONDS ),
     392            array( '2017-01-16T11:30:00+05'   , gmmktime( 11, 30,  0,  1, 16, 2017 ) - 5 * HOUR_IN_SECONDS ),
     393            array( '2017-01-16T11:30:00-00'   , gmmktime( 11, 30,  0,  1, 16, 2017 ) ),
     394            array( '2017-01-16T11:30:00+00'   , gmmktime( 11, 30,  0,  1, 16, 2017 ) ),
     395            array( '2017-01-16T11:30:00Z'     , gmmktime( 11, 30,  0,  1, 16, 2017 ) ),
     396
     397            // Valid dates without timezones
     398            array( '2017-01-16T11:30:00'      , gmmktime( 11, 30,  0,  1, 16, 2017 ) ),
     399
     400            // Invalid dates (TODO: support parsing partial dates as ranges, see #38641)
     401            array( '2017-01-16T11:30:00-5', false ),
     402            array( '2017-01-16T11:30', false ),
     403            array( '2017-01-16T11', false ),
     404            array( '2017-01-16T', false ),
     405            array( '2017-01-16', false ),
     406            array( '2017-01', false ),
     407            array( '2017', false ),
     408        );
     409    }
     410
     411    /**
     412     * @dataProvider rest_date_provider
     413     */
     414    public function test_rest_parse_date( $string, $value ) {
     415        $this->assertEquals( $value, rest_parse_date( $string ) );
     416    }
     417
     418    public function rest_date_force_utc_provider() {
     419        return array(
     420            // Valid dates with timezones
     421            array( '2017-01-16T11:30:00-05:00', gmmktime( 11, 30,  0,  1, 16, 2017 ) ),
     422            array( '2017-01-16T11:30:00-05:30', gmmktime( 11, 30,  0,  1, 16, 2017 ) ),
     423            array( '2017-01-16T11:30:00-05'   , gmmktime( 11, 30,  0,  1, 16, 2017 ) ),
     424            array( '2017-01-16T11:30:00+05'   , gmmktime( 11, 30,  0,  1, 16, 2017 ) ),
     425            array( '2017-01-16T11:30:00-00'   , gmmktime( 11, 30,  0,  1, 16, 2017 ) ),
     426            array( '2017-01-16T11:30:00+00'   , gmmktime( 11, 30,  0,  1, 16, 2017 ) ),
     427            array( '2017-01-16T11:30:00Z'     , gmmktime( 11, 30,  0,  1, 16, 2017 ) ),
     428
     429            // Valid dates without timezones
     430            array( '2017-01-16T11:30:00'      , gmmktime( 11, 30,  0,  1, 16, 2017 ) ),
     431
     432            // Invalid dates (TODO: support parsing partial dates as ranges, see #38641)
     433            array( '2017-01-16T11:30:00-5', false ),
     434            array( '2017-01-16T11:30', false ),
     435            array( '2017-01-16T11', false ),
     436            array( '2017-01-16T', false ),
     437            array( '2017-01-16', false ),
     438            array( '2017-01', false ),
     439            array( '2017', false ),
     440        );
     441    }
     442
     443    /**
     444     * @dataProvider rest_date_force_utc_provider
     445     */
     446    public function test_rest_parse_date_force_utc( $string, $value ) {
     447        $this->assertEquals( $value, rest_parse_date( $string, true ) );
     448    }
    386449}
Note: See TracChangeset for help on using the changeset viewer.