Date/Time: XML-RPC: Сalculate the proper offset for GMT in wp.newPost
, wp.editComment
, mw.newPost
, mw.editPost
when post_date
or comment_date
is set.
Previously, `post_date` or `comment_date` was assumed to be GMT, which is only true if the timezone string for the site matches GMT. Add unit tests. Props Rarst, smerriman, justdaiv, wonderboymusic, noyle. Fixes #30429. git-svn-id: https://develop.svn.wordpress.org/trunk@46864 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
50f01f47e3
commit
bdca31b322
@ -1469,8 +1469,8 @@ class wp_xmlrpc_server extends IXR_Server {
|
||||
$post_data['edit_date'] = false;
|
||||
|
||||
if ( ! empty( $dateCreated ) ) {
|
||||
$post_data['post_date'] = get_date_from_gmt( iso8601_to_datetime( $dateCreated ) );
|
||||
$post_data['post_date_gmt'] = iso8601_to_datetime( $dateCreated, 'GMT' );
|
||||
$post_data['post_date'] = iso8601_to_datetime( $dateCreated );
|
||||
$post_data['post_date_gmt'] = iso8601_to_datetime( $dateCreated, 'gmt' );
|
||||
|
||||
// Flag the post date to be edited.
|
||||
$post_data['edit_date'] = true;
|
||||
@ -3766,8 +3766,8 @@ class wp_xmlrpc_server extends IXR_Server {
|
||||
if ( ! empty( $content_struct['date_created_gmt'] ) ) {
|
||||
// We know this is supposed to be GMT, so we're going to slap that Z on there by force
|
||||
$dateCreated = rtrim( $content_struct['date_created_gmt']->getIso(), 'Z' ) . 'Z';
|
||||
$comment['comment_date'] = get_date_from_gmt( iso8601_to_datetime( $dateCreated ) );
|
||||
$comment['comment_date_gmt'] = iso8601_to_datetime( $dateCreated, 'GMT' );
|
||||
$comment['comment_date'] = get_date_from_gmt( $dateCreated );
|
||||
$comment['comment_date_gmt'] = iso8601_to_datetime( $dateCreated, 'gmt' );
|
||||
}
|
||||
|
||||
if ( isset( $content_struct['content'] ) ) {
|
||||
@ -5485,8 +5485,8 @@ class wp_xmlrpc_server extends IXR_Server {
|
||||
}
|
||||
|
||||
if ( ! empty( $dateCreated ) ) {
|
||||
$post_date = get_date_from_gmt( iso8601_to_datetime( $dateCreated ) );
|
||||
$post_date_gmt = iso8601_to_datetime( $dateCreated, 'GMT' );
|
||||
$post_date = iso8601_to_datetime( $dateCreated );
|
||||
$post_date_gmt = iso8601_to_datetime( $dateCreated, 'gmt' );
|
||||
} else {
|
||||
$post_date = '';
|
||||
$post_date_gmt = '';
|
||||
@ -5874,8 +5874,8 @@ class wp_xmlrpc_server extends IXR_Server {
|
||||
$edit_date = false;
|
||||
|
||||
if ( ! empty( $dateCreated ) ) {
|
||||
$post_date = get_date_from_gmt( iso8601_to_datetime( $dateCreated ) );
|
||||
$post_date_gmt = iso8601_to_datetime( $dateCreated, 'GMT' );
|
||||
$post_date = iso8601_to_datetime( $dateCreated );
|
||||
$post_date_gmt = iso8601_to_datetime( $dateCreated, 'gmt' );
|
||||
|
||||
// Flag the post date to be edited.
|
||||
$edit_date = true;
|
||||
|
240
tests/phpunit/tests/date/xmlrpc.php
Normal file
240
tests/phpunit/tests/date/xmlrpc.php
Normal file
@ -0,0 +1,240 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @group date
|
||||
* @group datetime
|
||||
* @group xmlrpc
|
||||
*/
|
||||
class Tests_Date_XMLRPC extends WP_XMLRPC_UnitTestCase {
|
||||
|
||||
/**
|
||||
* @ticket 30429
|
||||
*/
|
||||
public function test_date_new_post() {
|
||||
$timezone = 'Europe/Kiev';
|
||||
update_option( 'timezone_string', $timezone );
|
||||
|
||||
$datetime = new DateTimeImmutable( 'now', new DateTimeZone( $timezone ) );
|
||||
$datetimeutc = $datetime->setTimezone( new DateTimeZone( 'UTC' ) );
|
||||
|
||||
$this->make_user_by_role( 'editor' );
|
||||
|
||||
$post = get_post(
|
||||
$this->myxmlrpcserver->mw_newPost(
|
||||
array(
|
||||
1,
|
||||
'editor',
|
||||
'editor',
|
||||
array(
|
||||
'title' => 'test',
|
||||
'post_content' => 'test',
|
||||
'dateCreated' => new IXR_Date( $datetimeutc->format( 'Ymd\TH:i:s\Z' ) ),
|
||||
),
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
$datetime->format( 'Y-m-d H:i:s' ),
|
||||
$post->post_date,
|
||||
'UTC time with explicit time zone into mw_newPost'
|
||||
);
|
||||
|
||||
$post = get_post(
|
||||
$this->myxmlrpcserver->mw_newPost(
|
||||
array(
|
||||
1,
|
||||
'editor',
|
||||
'editor',
|
||||
array(
|
||||
'title' => 'test',
|
||||
'post_content' => 'test',
|
||||
'dateCreated' => new IXR_Date( $datetime->format( 'Ymd\TH:i:s' ) ),
|
||||
),
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
$datetime->format( 'Y-m-d H:i:s' ),
|
||||
$post->post_date,
|
||||
'Local time w/o time zone into mw_newPost'
|
||||
);
|
||||
|
||||
$post = get_post(
|
||||
$this->myxmlrpcserver->mw_newPost(
|
||||
array(
|
||||
1,
|
||||
'editor',
|
||||
'editor',
|
||||
array(
|
||||
'title' => 'test',
|
||||
'post_content' => 'test',
|
||||
'date_created_gmt' => new IXR_Date( $datetimeutc->format( 'Ymd\TH:i:s' ) ),
|
||||
),
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
$datetime->format( 'Y-m-d H:i:s' ),
|
||||
$post->post_date,
|
||||
'UTC time into mw_newPost'
|
||||
);
|
||||
|
||||
$post = get_post(
|
||||
$this->myxmlrpcserver->wp_newPost(
|
||||
array(
|
||||
1,
|
||||
'editor',
|
||||
'editor',
|
||||
array(
|
||||
'title' => 'test',
|
||||
'post_content' => 'test',
|
||||
'post_date' => $datetime->format( 'Ymd\TH:i:s' ),
|
||||
),
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
$datetime->format( 'Y-m-d H:i:s' ),
|
||||
$post->post_date,
|
||||
'Local time into wp_newPost'
|
||||
);
|
||||
|
||||
$post = get_post(
|
||||
$this->myxmlrpcserver->wp_newPost(
|
||||
array(
|
||||
1,
|
||||
'editor',
|
||||
'editor',
|
||||
array(
|
||||
'title' => 'test',
|
||||
'post_content' => 'test',
|
||||
'post_date_gmt' => $datetimeutc->format( 'Ymd\TH:i:s' ),
|
||||
),
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
$datetime->format( 'Y-m-d H:i:s' ),
|
||||
$post->post_date,
|
||||
'UTC time into wp_newPost'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 30429
|
||||
*/
|
||||
public function test_date_edit_post() {
|
||||
$timezone = 'Europe/Kiev';
|
||||
update_option( 'timezone_string', $timezone );
|
||||
|
||||
$datetime = new DateTimeImmutable( 'now', new DateTimeZone( $timezone ) );
|
||||
$datetimeutc = $datetime->setTimezone( new DateTimeZone( 'UTC' ) );
|
||||
|
||||
$editor_id = $this->make_user_by_role( 'editor' );
|
||||
|
||||
$post_id = self::factory()->post->create(
|
||||
array(
|
||||
'post_author' => $editor_id,
|
||||
'post_date' => $datetime->modify( '-1 hour' )->format( 'Y-m-d H:i:s' ),
|
||||
)
|
||||
);
|
||||
|
||||
$result = $this->myxmlrpcserver->mw_editPost(
|
||||
array(
|
||||
$post_id,
|
||||
'editor',
|
||||
'editor',
|
||||
array(
|
||||
'dateCreated' => new IXR_Date( $datetime->format( 'Ymd\TH:i:s' ) ),
|
||||
),
|
||||
)
|
||||
);
|
||||
|
||||
$fetched_post = get_post( $post_id );
|
||||
|
||||
$this->assertTrue( $result );
|
||||
$this->assertEquals(
|
||||
$datetime->format( 'Y-m-d H:i:s' ),
|
||||
$fetched_post->post_date,
|
||||
'Local time into mw_editPost'
|
||||
);
|
||||
|
||||
$post_id = self::factory()->post->create(
|
||||
array(
|
||||
'post_author' => $editor_id,
|
||||
'post_date' => $datetime->modify( '-1 hour' )->format( 'Y-m-d H:i:s' ),
|
||||
)
|
||||
);
|
||||
|
||||
$result = $this->myxmlrpcserver->mw_editPost(
|
||||
array(
|
||||
$post_id,
|
||||
'editor',
|
||||
'editor',
|
||||
array(
|
||||
'date_created_gmt' => new IXR_Date( $datetimeutc->format( 'Ymd\TH:i:s' ) ),
|
||||
),
|
||||
)
|
||||
);
|
||||
|
||||
$fetched_post = get_post( $post_id );
|
||||
|
||||
$this->assertTrue( $result );
|
||||
$this->assertEquals(
|
||||
$datetime->format( 'Y-m-d H:i:s' ),
|
||||
$fetched_post->post_date,
|
||||
'UTC time into mw_editPost'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 30429
|
||||
*/
|
||||
function test_date_edit_comment() {
|
||||
$timezone = 'Europe/Kiev';
|
||||
update_option( 'timezone_string', $timezone );
|
||||
|
||||
$datetime = new DateTimeImmutable( 'now', new DateTimeZone( $timezone ) );
|
||||
$datetime = $datetime->modify( '-1 hour' );
|
||||
$datetimeutc = $datetime->setTimezone( new DateTimeZone( 'UTC' ) );
|
||||
|
||||
$this->make_user_by_role( 'administrator' );
|
||||
$post_id = $this->factory->post->create();
|
||||
|
||||
$comment_data = array(
|
||||
'comment_post_ID' => $post_id,
|
||||
'comment_author' => 'Test commenter',
|
||||
'comment_author_url' => 'http://example.com/',
|
||||
'comment_author_email' => 'example@example.com',
|
||||
'comment_content' => rand_str( 100 ),
|
||||
'comment_approved' => '1',
|
||||
);
|
||||
$comment_id = wp_insert_comment( $comment_data );
|
||||
|
||||
$result = $this->myxmlrpcserver->wp_editComment(
|
||||
array(
|
||||
1,
|
||||
'administrator',
|
||||
'administrator',
|
||||
$comment_id,
|
||||
array(
|
||||
'date_created_gmt' => new IXR_Date( $datetimeutc->format( 'Ymd\TH:i:s' ) ),
|
||||
),
|
||||
)
|
||||
);
|
||||
|
||||
$fetched_comment = get_comment( $comment_id );
|
||||
|
||||
$this->assertTrue( $result );
|
||||
$this->assertEquals(
|
||||
$datetime->format( 'Y-m-d H:i:s' ),
|
||||
$fetched_comment->comment_date,
|
||||
'UTC time into wp_editComment'
|
||||
);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user