diff -r 34716fd837a4 -r be944660c56a wp/wp-includes/comment.php --- a/wp/wp-includes/comment.php Tue Dec 15 15:52:01 2020 +0100 +++ b/wp/wp-includes/comment.php Wed Sep 21 18:19:35 2022 +0200 @@ -192,7 +192,7 @@ * respectively. Default OBJECT. * @return WP_Comment|array|null Depends on $output value. */ -function get_comment( &$comment = null, $output = OBJECT ) { +function get_comment( $comment = null, $output = OBJECT ) { if ( empty( $comment ) && isset( $GLOBALS['comment'] ) ) { $comment = $GLOBALS['comment']; } @@ -218,11 +218,11 @@ */ $_comment = apply_filters( 'get_comment', $_comment ); - if ( OBJECT == $output ) { + if ( OBJECT === $output ) { return $_comment; - } elseif ( ARRAY_A == $output ) { + } elseif ( ARRAY_A === $output ) { return $_comment->to_array(); - } elseif ( ARRAY_N == $output ) { + } elseif ( ARRAY_N === $output ) { return array_values( $_comment->to_array() ); } return $_comment; @@ -454,7 +454,7 @@ * @param mixed $meta_value Metadata value. Must be serializable if non-scalar. * @param bool $unique Optional. Whether the same key should not be added. * Default false. - * @return int|bool Meta ID on success, false on failure. + * @return int|false Meta ID on success, false on failure. */ function add_comment_meta( $comment_id, $meta_key, $meta_value, $unique = false ) { return add_metadata( 'comment', $comment_id, $meta_key, $meta_value, $unique ); @@ -493,10 +493,12 @@ * @param string $key Optional. The meta key to retrieve. By default, * returns data for all keys. * @param bool $single Optional. Whether to return a single value. - * This parameter has no effect if $key is not specified. + * This parameter has no effect if `$key` is not specified. * Default false. - * @return mixed An array if $single is false. The value of meta data field - * if $single is true. False for an invalid $comment_id. + * @return mixed An array of values if `$single` is false. + * The value of meta data field if `$single` is true. + * False for an invalid `$comment_id` (non-numeric, zero, or negative value). + * An empty string if a valid but non-existing comment ID is passed. */ function get_comment_meta( $comment_id, $key = '', $single = false ) { return get_metadata( 'comment', $comment_id, $key, $single ); @@ -615,9 +617,10 @@ * * @param string $author_cookie The comment author name cookie. */ - $comment_author = apply_filters( 'pre_comment_author_name', $_COOKIE[ 'comment_author_' . COOKIEHASH ] ); - $comment_author = wp_unslash( $comment_author ); - $comment_author = esc_attr( $comment_author ); + $comment_author = apply_filters( 'pre_comment_author_name', $_COOKIE[ 'comment_author_' . COOKIEHASH ] ); + $comment_author = wp_unslash( $comment_author ); + $comment_author = esc_attr( $comment_author ); + $_COOKIE[ 'comment_author_' . COOKIEHASH ] = $comment_author; } @@ -632,9 +635,10 @@ * * @param string $author_email_cookie The comment author email cookie. */ - $comment_author_email = apply_filters( 'pre_comment_author_email', $_COOKIE[ 'comment_author_email_' . COOKIEHASH ] ); - $comment_author_email = wp_unslash( $comment_author_email ); - $comment_author_email = esc_attr( $comment_author_email ); + $comment_author_email = apply_filters( 'pre_comment_author_email', $_COOKIE[ 'comment_author_email_' . COOKIEHASH ] ); + $comment_author_email = wp_unslash( $comment_author_email ); + $comment_author_email = esc_attr( $comment_author_email ); + $_COOKIE[ 'comment_author_email_' . COOKIEHASH ] = $comment_author_email; } @@ -649,8 +653,9 @@ * * @param string $author_url_cookie The comment author URL cookie. */ - $comment_author_url = apply_filters( 'pre_comment_author_url', $_COOKIE[ 'comment_author_url_' . COOKIEHASH ] ); - $comment_author_url = wp_unslash( $comment_author_url ); + $comment_author_url = apply_filters( 'pre_comment_author_url', $_COOKIE[ 'comment_author_url_' . COOKIEHASH ] ); + $comment_author_url = wp_unslash( $comment_author_url ); + $_COOKIE[ 'comment_author_url_' . COOKIEHASH ] = $comment_author_url; } } @@ -1254,7 +1259,7 @@ if ( ! is_array( $col_length ) && (int) $col_length > 0 ) { $max_length = (int) $col_length; - } elseif ( is_array( $col_length ) && isset( $col_length['length'] ) && intval( $col_length['length'] ) > 0 ) { + } elseif ( is_array( $col_length ) && isset( $col_length['length'] ) && (int) $col_length['length'] > 0 ) { $max_length = (int) $col_length['length']; if ( ! empty( $col_length['type'] ) && 'byte' === $col_length['type'] ) { @@ -1922,6 +1927,8 @@ * Used to allow the commenter to see their pending comment. * * @since 5.1.0 + * @since 5.7.0 The window within which the author email for an unapproved comment + * can be retrieved was extended to 10 minutes. * * @return string The unapproved comment author's email (when supplied). */ @@ -1933,8 +1940,8 @@ $comment = get_comment( $comment_id ); if ( $comment && hash_equals( $_GET['moderation-hash'], wp_hash( $comment->comment_date_gmt ) ) ) { - // The comment will only be viewable by the comment author for 1 minute. - $comment_preview_expires = strtotime( $comment->comment_date_gmt . '+1 minute' ); + // The comment will only be viewable by the comment author for 10 minutes. + $comment_preview_expires = strtotime( $comment->comment_date_gmt . '+10 minutes' ); if ( time() < $comment_preview_expires ) { $commenter_email = $comment->comment_author_email; @@ -2188,10 +2195,19 @@ $prefiltered_user_id = ( isset( $commentdata['user_id'] ) ) ? (int) $commentdata['user_id'] : 0; + if ( ! isset( $commentdata['comment_author_IP'] ) ) { + $commentdata['comment_author_IP'] = $_SERVER['REMOTE_ADDR']; + } + + if ( ! isset( $commentdata['comment_agent'] ) ) { + $commentdata['comment_agent'] = isset( $_SERVER['HTTP_USER_AGENT'] ) ? $_SERVER['HTTP_USER_AGENT'] : ''; + } + /** * Filters a comment's data before it is sanitized and inserted into the database. * * @since 1.5.0 + * @since 5.6.0 Comment data includes the `comment_agent` and `comment_author_IP` values. * * @param array $commentdata Comment data. */ @@ -2211,14 +2227,8 @@ $commentdata['comment_parent'] = ( 'approved' === $parent_status || 'unapproved' === $parent_status ) ? $commentdata['comment_parent'] : 0; - if ( ! isset( $commentdata['comment_author_IP'] ) ) { - $commentdata['comment_author_IP'] = $_SERVER['REMOTE_ADDR']; - } $commentdata['comment_author_IP'] = preg_replace( '/[^0-9a-fA-F:., ]/', '', $commentdata['comment_author_IP'] ); - if ( ! isset( $commentdata['comment_agent'] ) ) { - $commentdata['comment_agent'] = isset( $_SERVER['HTTP_USER_AGENT'] ) ? $_SERVER['HTTP_USER_AGENT'] : ''; - } $commentdata['comment_agent'] = substr( $commentdata['comment_agent'], 0, 254 ); if ( empty( $commentdata['comment_date'] ) ) { @@ -2398,14 +2408,14 @@ $comment = get_comment( $comment_old->comment_ID ); /** - * Fires immediately before transitioning a comment's status from one to another - * in the database. + * Fires immediately after transitioning a comment's status from one to another in the database + * and removing the comment from the object cache, but prior to all status transition hooks. * * @since 1.5.0 * - * @param int $comment_id Comment ID. - * @param string|bool $comment_status Current comment status. Possible values include - * 'hold', 'approve', 'spam', 'trash', or false. + * @param int $comment_id Comment ID. + * @param string $comment_status Current comment status. Possible values include + * 'hold', '0', 'approve', '1', 'spam', and 'trash'. */ do_action( 'wp_set_comment_status', $comment->comment_ID, $comment_status ); @@ -2713,7 +2723,7 @@ * @since 1.5.0 * * @param string $url URL to ping. - * @param int $deprecated Not Used. + * @param string $deprecated Not Used. * @return string|false String containing URI on success, false on failure. */ function discover_pingback_server_uri( $url, $deprecated = '' ) { @@ -2797,13 +2807,23 @@ * Perform all pingbacks, enclosures, trackbacks, and send to pingback services. * * @since 2.1.0 - * - * @global wpdb $wpdb WordPress database abstraction object. + * @since 5.6.0 Introduced `do_all_pings` action hook for individual services. */ function do_all_pings() { - global $wpdb; - - // Do pingbacks. + /** + * Fires immediately after the `do_pings` event to hook services individually. + * + * @since 5.6.0 + */ + do_action( 'do_all_pings' ); +} + +/** + * Perform all pingbacks. + * + * @since 5.6.0 + */ +function do_all_pingbacks() { $pings = get_posts( array( 'post_type' => get_post_types(), @@ -2818,8 +2838,14 @@ delete_post_meta( $ping, '_pingme' ); pingback( null, $ping ); } - - // Do enclosures. +} + +/** + * Perform all enclosures. + * + * @since 5.6.0 + */ +function do_all_enclosures() { $enclosures = get_posts( array( 'post_type' => get_post_types(), @@ -2834,8 +2860,14 @@ delete_post_meta( $enclosure, '_encloseme' ); do_enclose( null, $enclosure ); } - - // Do trackbacks. +} + +/** + * Perform all trackbacks. + * + * @since 5.6.0 + */ +function do_all_trackbacks() { $trackbacks = get_posts( array( 'post_type' => get_post_types(), @@ -2850,9 +2882,6 @@ delete_post_meta( $trackback, '_trackbackme' ); do_trackbacks( $trackback ); } - - // Do Update Services/Generic Pings. - generic_ping(); } /** @@ -3232,7 +3261,7 @@ $non_cached_ids = _get_non_cached_ids( $comment_ids, 'comment' ); if ( ! empty( $non_cached_ids ) ) { - $fresh_comments = $wpdb->get_results( sprintf( "SELECT $wpdb->comments.* FROM $wpdb->comments WHERE comment_ID IN (%s)", join( ',', array_map( 'intval', $non_cached_ids ) ) ) ); + $fresh_comments = $wpdb->get_results( sprintf( "SELECT $wpdb->comments.* FROM $wpdb->comments WHERE comment_ID IN (%s)", implode( ',', array_map( 'intval', $non_cached_ids ) ) ) ); update_comment_cache( $fresh_comments, $update_meta_cache ); } @@ -3625,7 +3654,7 @@ case 'comment_link': $value = get_comment_link( $comment->comment_ID ); $value = sprintf( - '%s', + '%s', esc_url( $value ), esc_html( $value ) );