From 9635ac49bb2c521f797860d94ee69e105926ec7c Mon Sep 17 00:00:00 2001 From: Aaron Jorbin Date: Wed, 24 Oct 2018 16:33:52 +0000 Subject: [PATCH] php7.3 compatibility: Fix compact throwing notices In PHP 7.3, the compact() function has been changed to issue an E_NOTICE level error if a passed string refers to an unset variable. In previous versions of PHP, this notice was silently skipped. The full RFC can be viewed here: https://wiki.php.net/rfc/compact This fixes all unit tested code that uses compact. Props desrosj. Fixes #44416. Built from https://develop.svn.wordpress.org/branches/5.0@43819 git-svn-id: http://core.svn.wordpress.org/branches/5.0@43648 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-includes/class-wp-comment-query.php | 4 +- wp-includes/class-wp-xmlrpc-server.php | 69 ++++++++++++++++---------- wp-includes/comment.php | 2 +- wp-includes/post.php | 9 +++- wp-includes/version.php | 2 +- 5 files changed, 56 insertions(+), 30 deletions(-) diff --git a/wp-includes/class-wp-comment-query.php b/wp-includes/class-wp-comment-query.php index d781b88a28..78a8218cf4 100644 --- a/wp-includes/class-wp-comment-query.php +++ b/wp-includes/class-wp-comment-query.php @@ -633,6 +633,7 @@ class WP_Comment_Query { $number = absint( $this->query_vars['number'] ); $offset = absint( $this->query_vars['offset'] ); $paged = absint( $this->query_vars['paged'] ); + $limits = ''; if ( ! empty( $number ) ) { if ( $offset ) { @@ -817,7 +818,8 @@ class WP_Comment_Query { $this->sql_clauses['where']['post_author__not_in'] = 'post_author NOT IN ( ' . implode( ',', wp_parse_id_list( $this->query_vars['post_author__not_in'] ) ) . ' )'; } - $join = ''; + $join = ''; + $groupby = ''; if ( $join_posts_table ) { $join .= "JOIN $wpdb->posts ON $wpdb->posts.ID = $wpdb->comments.comment_post_ID"; diff --git a/wp-includes/class-wp-xmlrpc-server.php b/wp-includes/class-wp-xmlrpc-server.php index 826f2efdfe..d4d7fc3980 100644 --- a/wp-includes/class-wp-xmlrpc-server.php +++ b/wp-includes/class-wp-xmlrpc-server.php @@ -3517,6 +3517,10 @@ class wp_xmlrpc_server extends IXR_Server { /** This action is documented in wp-includes/class-wp-xmlrpc-server.php */ do_action( 'xmlrpc_call', 'wp.editComment' ); + $comment = array( + 'comment_ID' => $comment_ID, + ); + if ( isset($content_struct['status']) ) { $statuses = get_comment_statuses(); @@ -3524,31 +3528,33 @@ class wp_xmlrpc_server extends IXR_Server { if ( ! in_array($content_struct['status'], $statuses) ) return new IXR_Error( 401, __( 'Invalid comment status.' ) ); - $comment_approved = $content_struct['status']; + $comment['comment_approved'] = $content_struct['status']; } // Do some timestamp voodoo 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_date = get_date_from_gmt(iso8601_to_datetime($dateCreated)); - $comment_date_gmt = iso8601_to_datetime($dateCreated, 'GMT'); + + $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' ); } - if ( isset($content_struct['content']) ) - $comment_content = $content_struct['content']; + if ( isset($content_struct['content']) ) { + $comment['comment_content'] = $content_struct['content']; + } - if ( isset($content_struct['author']) ) - $comment_author = $content_struct['author']; + if ( isset($content_struct['author']) ) { + $comment['comment_author'] = $content_struct['author']; + } - if ( isset($content_struct['author_url']) ) - $comment_author_url = $content_struct['author_url']; + if ( isset($content_struct['author_url']) ) { + $comment['comment_author_url'] = $content_struct['author_url']; + } - if ( isset($content_struct['author_email']) ) - $comment_author_email = $content_struct['author_email']; - - // We've got all the data -- post it: - $comment = compact('comment_ID', 'comment_content', 'comment_approved', 'comment_date', 'comment_date_gmt', 'comment_author', 'comment_author_email', 'comment_author_url'); + if ( isset($content_struct['author_email']) ) { + $comment['comment_author_email'] = $content_struct['author_email']; + } $result = wp_update_comment($comment); if ( is_wp_error( $result ) ) @@ -4989,16 +4995,25 @@ class wp_xmlrpc_server extends IXR_Server { $post_name = $content_struct['wp_slug']; // Only use a password if one was given. - if ( isset($content_struct['wp_password']) ) + if ( isset($content_struct['wp_password']) ) { $post_password = $content_struct['wp_password']; + } else { + $post_password = ''; + } // Only set a post parent if one was provided. - if ( isset($content_struct['wp_page_parent_id']) ) + if ( isset($content_struct['wp_page_parent_id']) ) { $post_parent = $content_struct['wp_page_parent_id']; + } else { + $post_parent = 0; + } // Only set the menu_order if it was provided. - if ( isset($content_struct['wp_page_order']) ) + if ( isset($content_struct['wp_page_order']) ) { $menu_order = $content_struct['wp_page_order']; + } else { + $menu_order = 0; + } $post_author = $user->ID; @@ -5308,14 +5323,16 @@ class wp_xmlrpc_server extends IXR_Server { $this->escape($postdata); - $ID = $postdata['ID']; - $post_content = $postdata['post_content']; - $post_title = $postdata['post_title']; - $post_excerpt = $postdata['post_excerpt']; - $post_password = $postdata['post_password']; - $post_parent = $postdata['post_parent']; - $post_type = $postdata['post_type']; - $menu_order = $postdata['menu_order']; + $ID = $postdata['ID']; + $post_content = $postdata['post_content']; + $post_title = $postdata['post_title']; + $post_excerpt = $postdata['post_excerpt']; + $post_password = $postdata['post_password']; + $post_parent = $postdata['post_parent']; + $post_type = $postdata['post_type']; + $menu_order = $postdata['menu_order']; + $ping_status = $postdata['ping_status']; + $comment_status = $postdata['comment_status']; // Let WordPress manage slug if none was provided. $post_name = $postdata['post_name']; diff --git a/wp-includes/comment.php b/wp-includes/comment.php index 2875dc6c2b..97685711bf 100644 --- a/wp-includes/comment.php +++ b/wp-includes/comment.php @@ -2965,7 +2965,7 @@ function _close_comments_for_old_post( $open, $post_id ) { */ function wp_handle_comment_submission( $comment_data ) { - $comment_post_ID = $comment_parent = 0; + $comment_post_ID = $comment_parent = $user_ID = 0; $comment_author = $comment_author_email = $comment_author_url = $comment_content = null; if ( isset( $comment_data['comment_post_ID'] ) ) { diff --git a/wp-includes/post.php b/wp-includes/post.php index d040f442e2..89b76184c3 100644 --- a/wp-includes/post.php +++ b/wp-includes/post.php @@ -3415,6 +3415,13 @@ function wp_insert_post( $postarr, $wp_error = false ) { $post_parent = 0; } + $new_postarr = array_merge( + array( + 'ID' => $post_ID, + ), + compact( array_diff( array_keys( $defaults ), array( 'context', 'filter' ) ) ) + ); + /** * Filters the post parent -- used to check for and prevent hierarchy loops. * @@ -3425,7 +3432,7 @@ function wp_insert_post( $postarr, $wp_error = false ) { * @param array $new_postarr Array of parsed post data. * @param array $postarr Array of sanitized, but otherwise unmodified post data. */ - $post_parent = apply_filters( 'wp_insert_post_parent', $post_parent, $post_ID, compact( array_keys( $postarr ) ), $postarr ); + $post_parent = apply_filters( 'wp_insert_post_parent', $post_parent, $post_ID, $new_postarr, $postarr ); /* * If the post is being untrashed and it has a desired slug stored in post meta, diff --git a/wp-includes/version.php b/wp-includes/version.php index 813dc4f23c..dc92d99b78 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -4,7 +4,7 @@ * * @global string $wp_version */ -$wp_version = '5.0-alpha-43818'; +$wp_version = '5.0-alpha-43819'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.