Changeset 54559
- Timestamp:
- 10/17/2022 06:01:26 PM (22 months ago)
- Location:
- branches/5.4
- Files:
-
- 20 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/5.4
- Property svn:mergeinfo changed
/trunk merged: 54521-54530,54541
- Property svn:mergeinfo changed
-
branches/5.4/src/wp-admin/includes/ajax-actions.php
r47245 r54559 2951 2951 // Filter query clauses to include filenames. 2952 2952 if ( isset( $query['s'] ) ) { 2953 add_filter( ' posts_clauses', '_filter_query_attachment_filenames' );2953 add_filter( '' ); 2954 2954 } 2955 2955 -
branches/5.4/src/wp-admin/includes/post.php
r47410 r54559 1254 1254 // Filter query clauses to include filenames. 1255 1255 if ( isset( $q['s'] ) ) { 1256 add_filter( ' posts_clauses', '_filter_query_attachment_filenames' );1256 add_filter( '' ); 1257 1257 } 1258 1258 -
branches/5.4/src/wp-includes/class-wp-date-query.php
r47122 r54559 150 150 } 151 151 152 if ( isset( $date_query['relation'] ) && 'OR' === strtoupper( $date_query['relation'] )) {153 $this->relation = 'OR';152 if ( isset( $date_query['relation'] ) ) { 153 $this->relation = ; 154 154 } else { 155 155 $this->relation = 'AND'; … … 221 221 $this->validate_date_values( $queries ); 222 222 } 223 224 225 223 226 224 227 foreach ( $queries as $key => $q ) { … … 1040 1043 return $wpdb->prepare( "DATE_FORMAT( $column, %s ) $compare %f", $format, $time ); 1041 1044 } 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1042 1061 } -
branches/5.4/src/wp-includes/class-wp-query.php
r47641 r54559 442 442 public $thumbnails_cached = false; 443 443 444 445 446 447 448 449 450 444 451 /** 445 452 * Cached list of search stopwords. … … 1389 1396 } 1390 1397 1391 $like = $n . $wpdb->esc_like( $term ) . $n; 1392 $search .= $wpdb->prepare( "{$searchand}(({$wpdb->posts}.post_title $like_op %s) $andor_op ({$wpdb->posts}.post_excerpt $like_op %s) $andor_op ({$wpdb->posts}.post_content $like_op %s))", $like, $like, $like ); 1398 $like = $n . $wpdb->esc_like( $term ) . $n; 1399 1400 if ( ! empty( $this->allow_query_attachment_by_filename ) ) { 1401 $search .= $wpdb->prepare( "{$searchand}(({$wpdb->posts}.post_title $like_op %s) $andor_op ({$wpdb->posts}.post_excerpt $like_op %s) $andor_op ({$wpdb->posts}.post_content $like_op %s) $andor_op (sq1.meta_value $like_op %s))", $like, $like, $like, $like ); 1402 } else { 1403 $search .= $wpdb->prepare( "{$searchand}(({$wpdb->posts}.post_title $like_op %s) $andor_op ({$wpdb->posts}.post_excerpt $like_op %s) $andor_op ({$wpdb->posts}.post_content $like_op %s))", $like, $like, $like ); 1404 } 1393 1405 $searchand = ' AND '; 1394 1406 } … … 1774 1786 $q = $this->fill_query_vars( $q ); 1775 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1776 1798 // Parse meta query. 1777 1799 $this->meta_query = new WP_Meta_Query(); … … 2205 2227 } 2206 2228 2207 if ( ! empty( $this->tax_query->queries ) || ! empty( $this->meta_query->queries ) ) {2229 if ( ! empty( $this->tax_query->queries ) || ! empty( $this->meta_query->queries ) ) { 2208 2230 $groupby = "{$wpdb->posts}.ID"; 2209 2231 } … … 2281 2303 } 2282 2304 $where .= $search . $whichauthor . $whichmimetype; 2305 2306 2307 2308 2283 2309 2284 2310 if ( ! empty( $this->meta_query->queries ) ) { -
branches/5.4/src/wp-includes/comment.php
r47888 r54559 2338 2338 } 2339 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2340 2349 // Escape data pulled from DB. 2341 2350 $comment = wp_slash( $comment ); … … 2347 2356 2348 2357 $commentarr = wp_filter_comment( $commentarr ); 2358 2359 2360 2361 2349 2362 2350 2363 // Now extract the merged array. -
branches/5.4/src/wp-includes/customize/class-wp-customize-header-image-control.php
r45932 r54559 131 131 132 132 <button type="button" class="choice thumbnail" 133 data-customize-image-value="{{ {data.header.url}}}"133 data-customize-image-value="{{}}" 134 134 data-customize-header-image-data="{{JSON.stringify(data.header)}}"> 135 135 <span class="screen-reader-text"><?php _e( 'Set image' ); ?></span> 136 <img src="{{ {data.header.thumbnail_url}}}" alt="{{{data.header.alt_text || data.header.description}}}">136 <img src="{{> 137 137 </button> 138 138 -
branches/5.4/src/wp-includes/customize/class-wp-customize-site-icon-control.php
r47382 r54559 69 69 <img src="{{ data.attachment.sizes.full ? data.attachment.sizes.full.url : data.attachment.url }}" alt="<?php esc_attr_e( 'Preview as a browser icon' ); ?>"/> 70 70 </div> 71 <span class="browser-title" aria-hidden="true"><# print( '<?php bloginfo( 'name'); ?>' ) #></span>71 <span class="browser-title" aria-hidden="true"><# print( '<?php ); ?>' ) #></span> 72 72 </div> 73 73 <img class="app-icon-preview" src="{{ data.attachment.sizes.full ? data.attachment.sizes.full.url : data.attachment.url }}" alt="<?php esc_attr_e( 'Preview as an app icon' ); ?>"/> -
branches/5.4/src/wp-includes/deprecated.php
r47567 r54559 3966 3966 return wp_get_user_request( $request_id ); 3967 3967 } 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 -
branches/5.4/src/wp-includes/functions.php
r51745 r54559 3222 3222 $html = __( 'The link you followed has expired.' ); 3223 3223 if ( wp_get_referer() ) { 3224 $html .= '</p><p>'; 3225 $html .= sprintf( 3224 $wp_http_referer = remove_query_arg( 'updated', wp_get_referer() ); 3225 $wp_http_referer = wp_validate_redirect( esc_url_raw( $wp_http_referer ) ); 3226 $html .= '</p><p>'; 3227 $html .= sprintf( 3226 3228 '<a href="%s">%s</a>', 3227 esc_url( remove_query_arg( 'updated', wp_get_referer() )),3229 esc_url( ), 3228 3230 __( 'Please try again.' ) 3229 3231 ); -
branches/5.4/src/wp-includes/media-template.php
r47202 r54559 1447 1447 <img id="preview-favicon" src="{{ data.url }}" alt="<?php esc_attr_e( 'Preview as a browser icon' ); ?>"/> 1448 1448 </div> 1449 <span class="browser-title" aria-hidden="true"><# print( '<?php bloginfo( 'name'); ?>' ) #></span>1449 <span class="browser-title" aria-hidden="true"><# print( '<?php ); ?>' ) #></span> 1450 1450 </div> 1451 1451 -
branches/5.4/src/wp-includes/pluggable.php
r47955 r54559 312 312 $phpmailer->clearCustomHeaders(); 313 313 $phpmailer->clearReplyTos(); 314 315 314 316 315 317 // Set "From" name and email. -
branches/5.4/src/wp-includes/post.php
r52469 r54559 1973 1973 * @since 4.5.0 Added the ability to pass a post type name in addition to object. 1974 1974 * @since 4.6.0 Converted the `$post_type` parameter to accept a `WP_Post_Type` object. 1975 1975 1976 * 1976 1977 * @param string|WP_Post_Type $post_type Post type name or object. … … 1980 1981 if ( is_scalar( $post_type ) ) { 1981 1982 $post_type = get_post_type_object( $post_type ); 1983 1982 1984 if ( ! $post_type ) { 1983 1985 return false; … … 1985 1987 } 1986 1988 1987 return $post_type->publicly_queryable || ( $post_type->_builtin && $post_type->public ); 1989 if ( ! is_object( $post_type ) ) { 1990 return false; 1991 } 1992 1993 $is_viewable = $post_type->publicly_queryable || ( $post_type->_builtin && $post_type->public ); 1994 1995 /** 1996 * Filters whether a post type is considered "viewable". 1997 * 1998 * The returned filtered value must be a boolean type to ensure 1999 * `is_post_type_viewable()` only returns a boolean. This strictness 2000 * is by design to maintain backwards-compatibility and guard against 2001 * potential type errors in PHP 8.1+. Non-boolean values (even falsey 2002 * and truthy values) will result in the function returning false. 2003 * 2004 * @since 5.9.0 2005 * 2006 * @param bool $is_viewable Whether the post type is "viewable" (strict type). 2007 * @param WP_Post_Type $post_type Post type object. 2008 */ 2009 return true === apply_filters( 'is_post_type_viewable', $is_viewable, $post_type ); 2010 } 2011 2012 /** 2013 * Determines whether a post status is considered "viewable". 2014 * 2015 * For built-in post statuses such as publish and private, the 'public' value will be evaluated. 2016 * For all others, the 'publicly_queryable' value will be used. 2017 * 2018 * @since 5.7.0 2019 * @since 5.9.0 Added `is_post_status_viewable` hook to filter the result. 2020 * 2021 * @param string|stdClass $post_status Post status name or object. 2022 * @return bool Whether the post status should be considered viewable. 2023 */ 2024 function is_post_status_viewable( $post_status ) { 2025 if ( is_scalar( $post_status ) ) { 2026 $post_status = get_post_status_object( $post_status ); 2027 2028 if ( ! $post_status ) { 2029 return false; 2030 } 2031 } 2032 2033 if ( 2034 ! is_object( $post_status ) || 2035 $post_status->internal || 2036 $post_status->protected 2037 ) { 2038 return false; 2039 } 2040 2041 $is_viewable = $post_status->publicly_queryable || ( $post_status->_builtin && $post_status->public ); 2042 2043 /** 2044 * Filters whether a post status is considered "viewable". 2045 * 2046 * The returned filtered value must be a boolean type to ensure 2047 * `is_post_status_viewable()` only returns a boolean. This strictness 2048 * is by design to maintain backwards-compatibility and guard against 2049 * potential type errors in PHP 8.1+. Non-boolean values (even falsey 2050 * and truthy values) will result in the function returning false. 2051 * 2052 * @since 5.9.0 2053 * 2054 * @param bool $is_viewable Whether the post status is "viewable" (strict type). 2055 * @param stdClass $post_status Post status object. 2056 */ 2057 return true === apply_filters( 'is_post_status_viewable', $is_viewable, $post_status ); 2058 } 2059 2060 /** 2061 * Determines whether a post is publicly viewable. 2062 * 2063 * Posts are considered publicly viewable if both the post status and post type 2064 * are viewable. 2065 * 2066 * @since 5.7.0 2067 * 2068 * @param int|WP_Post|null $post Optional. Post ID or post object. Defaults to global $post. 2069 * @return bool Whether the post is publicly viewable. 2070 */ 2071 function is_post_publicly_viewable( $post = null ) { 2072 $post = get_post( $post ); 2073 2074 if ( ! $post ) { 2075 return false; 2076 } 2077 2078 $post_type = get_post_type( $post ); 2079 $post_status = get_post_status( $post ); 2080 2081 return is_post_type_viewable( $post_type ) && is_post_status_viewable( $post_status ); 1988 2082 } 1989 2083 … … 7138 7232 7139 7233 /** 7140 * Filter the SQL clauses of an attachment query to include filenames.7141 *7142 * @since 4.7.07143 * @access private7144 *7145 * @global wpdb $wpdb WordPress database abstraction object.7146 *7147 * @param string[] $clauses An array including WHERE, GROUP BY, JOIN, ORDER BY,7148 * DISTINCT, fields (SELECT), and LIMITS clauses.7149 * @return string[] The modified array of clauses.7150 */7151 function _filter_query_attachment_filenames( $clauses ) {7152 global $wpdb;7153 remove_filter( 'posts_clauses', __FUNCTION__ );7154 7155 // Add a LEFT JOIN of the postmeta table so we don't trample existing JOINs.7156 $clauses['join'] .= " LEFT JOIN {$wpdb->postmeta} AS sq1 ON ( {$wpdb->posts}.ID = sq1.post_id AND sq1.meta_key = '_wp_attached_file' )";7157 7158 $clauses['groupby'] = "{$wpdb->posts}.ID";7159 7160 $clauses['where'] = preg_replace(7161 "/\({$wpdb->posts}.post_content (NOT LIKE|LIKE) (\'[^']+\')\)/",7162 '$0 OR ( sq1.meta_value $1 $2 )',7163 $clauses['where']7164 );7165 7166 return $clauses;7167 }7168 7169 /**7170 7234 * Sets the last changed time for the 'posts' cache group. 7171 7235 * -
branches/5.4/src/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php
r47391 r54559 80 80 // Filter query clauses to include filenames. 81 81 if ( isset( $query_args['s'] ) ) { 82 add_filter( ' posts_clauses', '_filter_query_attachment_filenames' );82 add_filter( '' ); 83 83 } 84 84 -
branches/5.4/src/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php
r47166 r54559 136 136 137 137 /** 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 138 167 * Checks if a request has access to read terms in the specified taxonomy. 139 168 * … … 156 185 array( 'status' => rest_authorization_required_code() ) 157 186 ); 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 158 211 } 159 212 -
branches/5.4/src/wp-includes/widgets.php
r47122 r54559 1497 1497 if ( is_wp_error( $rss ) ) { 1498 1498 if ( is_admin() || current_user_can( 'manage_options' ) ) { 1499 echo '<p><strong>' . __( 'RSS Error:' ) . '</strong> ' . $rss->get_error_message() . '</p>';1499 echo '<p><strong>' . __( 'RSS Error:' ) . '</strong> ' . ) . '</p>'; 1500 1500 } 1501 1501 return; … … 1620 1620 1621 1621 if ( ! empty( $args['error'] ) ) { 1622 echo '<p class="widget-error"><strong>' . __( 'RSS Error:' ) . '</strong> ' . $args['error']. '</p>';1622 echo '<p class="widget-error"><strong>' . __( 'RSS Error:' ) . '</strong> ' . . '</p>'; 1623 1623 } 1624 1624 -
branches/5.4/src/wp-mail.php
r47581 r54559 65 65 wp_die( __( 'There doesn’t seem to be any new mail.' ) ); 66 66 } 67 68 69 67 70 68 71 for ( $i = 1; $i <= $count; $i++ ) { … … 132 135 $author = sanitize_email( $author ); 133 136 if ( is_email( $author ) ) { 134 /* translators: %s: Post author email address. */135 echo '<p>' . sprintf( __( 'Author is %s' ), $author ) . '</p>';136 137 $userdata = get_user_by( 'email', $author ); 137 138 if ( ! empty( $userdata ) ) { -
branches/5.4/src/wp-trackback.php
r47198 r54559 13 13 wp( array( 'tb' => '1' ) ); 14 14 } 15 16 17 15 18 16 19 /** -
branches/5.4/tests/phpunit/tests/query/search.php
r47122 r54559 456 456 457 457 add_post_meta( $attachment, '_wp_attached_file', 'some-image1.png', true ); 458 add_filter( ' posts_clauses', '_filter_query_attachment_filenames' );458 add_filter( '' ); 459 459 460 460 // Pass post_type a string value. … … 486 486 487 487 add_post_meta( $attachment, '_wp_attached_file', 'some-image2.png', true ); 488 add_filter( ' posts_clauses', '_filter_query_attachment_filenames' );488 add_filter( '' ); 489 489 490 490 // Pass post_type an array value. … … 545 545 add_post_meta( $attachment, '_wp_attached_file', 'some-image4.png', true ); 546 546 add_post_meta( $attachment, '_test_meta_key', 'value', true ); 547 add_filter( ' posts_clauses', '_filter_query_attachment_filenames' );547 add_filter( '' ); 548 548 549 549 // Pass post_type a string value. … … 585 585 586 586 add_post_meta( $attachment, '_wp_attached_file', 'some-image5.png', true ); 587 add_filter( ' posts_clauses', '_filter_query_attachment_filenames' );587 add_filter( '' ); 588 588 589 589 // Pass post_type a string value. … … 610 610 * @ticket 22744 611 611 */ 612 public function test_filter_query_attachment_filenames_unhooks_itself() { 613 add_filter( 'posts_clauses', '_filter_query_attachment_filenames' ); 614 615 apply_filters( 616 'posts_clauses', 617 array( 618 'where' => '', 619 'groupby' => '', 620 'join' => '', 621 'orderby' => '', 622 'distinct' => '', 623 'fields' => '', 624 'limit' => '', 625 ) 626 ); 627 628 $result = has_filter( 'posts_clauses', '_filter_query_attachment_filenames' ); 629 630 $this->assertFalse( $result ); 612 public function test_wp_query_removes_filter_wp_allow_query_attachment_by_filename() { 613 $attachment = self::factory()->post->create( 614 array( 615 'post_type' => 'attachment', 616 'post_status' => 'publish', 617 'post_title' => 'bar foo', 618 'post_content' => 'foo bar', 619 'post_excerpt' => 'This post has foo', 620 ) 621 ); 622 623 add_post_meta( $attachment, '_wp_attached_file', 'some-image1.png', true ); 624 add_filter( 'wp_allow_query_attachment_by_filename', '__return_true' ); 625 626 $q = new WP_Query( 627 array( 628 's' => 'image1', 629 'fields' => 'ids', 630 'post_type' => 'attachment', 631 'post_status' => 'inherit', 632 ) 633 ); 634 635 $this->assertSame( array( $attachment ), $q->posts ); 636 637 /* 638 * WP_Query should have removed the wp_allow_query_attachment_by_filename filter 639 * and thus not match the attachment created above 640 */ 641 $q->get_posts(); 642 $this->assertEmpty( $q->posts ); 631 643 } 632 644 -
branches/5.4/tests/phpunit/tests/rest-api/rest-comments-controller.php
r47122 r54559 2873 2873 'author_name' => '<div>div</div> <strong>strong</strong> <script>oh noes</script>', 2874 2874 'author_user_agent' => '<div>div</div> <strong>strong</strong> <script>oh noes</script>', 2875 2875 2876 ), 2876 2877 array( … … 2881 2882 'author_name' => 'div strong', 2882 2883 'author_user_agent' => 'div strong', 2884 2883 2885 ) 2884 2886 ); … … 2890 2892 'author_name' => '<div>div</div> <strong>strong</strong> <script>oh noes</script>', 2891 2893 'author_user_agent' => '<div>div</div> <strong>strong</strong> <script>oh noes</script>', 2894 2892 2895 ), 2893 2896 array( … … 2898 2901 'author_name' => 'div strong', 2899 2902 'author_user_agent' => 'div strong', 2903 2900 2904 ) 2901 2905 ); … … 2912 2916 'author_name' => '\\\&\\\ & &invalid; < < &lt;', 2913 2917 'author_user_agent' => '\\\&\\\ & &invalid; < < &lt;', 2918 2914 2919 ), 2915 2920 array( … … 2920 2925 'author_name' => '\\\&\\\ & &invalid; < < &lt;', 2921 2926 'author_user_agent' => '\\\&\\\ & &invalid; < < &lt;', 2927 2922 2928 ) 2923 2929 ); … … 2933 2939 'author_name' => '<div>div</div> <strong>strong</strong> <script>oh noes</script>', 2934 2940 'author_user_agent' => '<div>div</div> <strong>strong</strong> <script>oh noes</script>', 2941 2935 2942 ), 2936 2943 array( … … 2941 2948 'author_name' => 'div strong', 2942 2949 'author_user_agent' => 'div strong', 2950 2943 2951 ) 2944 2952 );
Note: See TracChangeset
for help on using the changeset viewer.