Compare commits
16 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2324b11a54 | ||
|
|
86cdb64878 | ||
|
|
04a88b9941 | ||
|
|
fdbe707b83 | ||
|
|
be7517b381 | ||
|
|
060a547a9f | ||
|
|
74ecc7cf27 | ||
|
|
d8ffe4fe33 | ||
|
|
0bad0b3e48 | ||
|
|
1fe18d5a70 | ||
|
|
d8dd6b5902 | ||
|
|
45f4c51ec4 | ||
|
|
e6ce4269a3 | ||
|
|
47e5d13a47 | ||
|
|
d67264d17c | ||
|
|
c4666346ad |
@@ -43,6 +43,106 @@ require_once ABSPATH . 'wp-admin/admin-header.php';
|
||||
<div class="about__section changelog">
|
||||
<div class="column">
|
||||
<h2><?php _e( 'Maintenance and Security Releases' ); ?></h2>
|
||||
<p>
|
||||
<?php
|
||||
printf(
|
||||
/* translators: %s: WordPress version number. */
|
||||
__( '<strong>Version %s</strong> addressed some security issues.' ),
|
||||
'5.8.8'
|
||||
);
|
||||
?>
|
||||
<?php
|
||||
printf(
|
||||
/* translators: %s: HelpHub URL. */
|
||||
__( 'For more information, see <a href="%s">the release notes</a>.' ),
|
||||
sprintf(
|
||||
/* translators: %s: WordPress version. */
|
||||
esc_url( __( 'https://wordpress.org/support/wordpress-version/version-%s/' ) ),
|
||||
sanitize_title( '5.8.8' )
|
||||
)
|
||||
);
|
||||
?>
|
||||
</p>
|
||||
<p>
|
||||
<?php
|
||||
printf(
|
||||
/* translators: %s: WordPress version number. */
|
||||
__( '<strong>Version %s</strong> addressed some security issues.' ),
|
||||
'5.8.7'
|
||||
);
|
||||
?>
|
||||
<?php
|
||||
printf(
|
||||
/* translators: %s: HelpHub URL. */
|
||||
__( 'For more information, see <a href="%s">the release notes</a>.' ),
|
||||
sprintf(
|
||||
/* translators: %s: WordPress version. */
|
||||
esc_url( __( 'https://wordpress.org/support/wordpress-version/version-%s/' ) ),
|
||||
sanitize_title( '5.8.7' )
|
||||
)
|
||||
);
|
||||
?>
|
||||
</p>
|
||||
<p>
|
||||
<?php
|
||||
printf(
|
||||
/* translators: %s: WordPress version number. */
|
||||
__( '<strong>Version %s</strong> addressed some security issues.' ),
|
||||
'5.8.6'
|
||||
);
|
||||
?>
|
||||
<?php
|
||||
printf(
|
||||
/* translators: %s: HelpHub URL. */
|
||||
__( 'For more information, see <a href="%s">the release notes</a>.' ),
|
||||
sprintf(
|
||||
/* translators: %s: WordPress version. */
|
||||
esc_url( __( 'https://wordpress.org/support/wordpress-version/version-%s/' ) ),
|
||||
sanitize_title( '5.8.6' )
|
||||
)
|
||||
);
|
||||
?>
|
||||
</p>
|
||||
<p>
|
||||
<?php
|
||||
printf(
|
||||
/* translators: %s: WordPress version number. */
|
||||
__( '<strong>Version %s</strong> addressed some security issues.' ),
|
||||
'5.8.5'
|
||||
);
|
||||
?>
|
||||
<?php
|
||||
printf(
|
||||
/* translators: %s: HelpHub URL. */
|
||||
__( 'For more information, see <a href="%s">the release notes</a>.' ),
|
||||
sprintf(
|
||||
/* translators: %s: WordPress version. */
|
||||
esc_url( __( 'https://wordpress.org/support/wordpress-version/version-%s/' ) ),
|
||||
sanitize_title( '5.8.5' )
|
||||
)
|
||||
);
|
||||
?>
|
||||
</p>
|
||||
<p>
|
||||
<?php
|
||||
printf(
|
||||
/* translators: %s: WordPress version number. */
|
||||
__( '<strong>Version %s</strong> addressed some security issues.' ),
|
||||
'5.8.4'
|
||||
);
|
||||
?>
|
||||
<?php
|
||||
printf(
|
||||
/* translators: %s: HelpHub URL. */
|
||||
__( 'For more information, see <a href="%s">the release notes</a>.' ),
|
||||
sprintf(
|
||||
/* translators: %s: WordPress version. */
|
||||
esc_url( __( 'https://wordpress.org/support/wordpress-version/version-%s/' ) ),
|
||||
sanitize_title( '5.8.4' )
|
||||
)
|
||||
);
|
||||
?>
|
||||
</p>
|
||||
<p>
|
||||
<?php
|
||||
printf(
|
||||
@@ -374,3 +474,15 @@ _n_noop(
|
||||
|
||||
/* translators: %s: Documentation URL. */
|
||||
__( 'For more information, see <a href="%s">the release notes</a>.' );
|
||||
|
||||
/* translators: 1: WordPress version number, 2: Link to update WordPress */
|
||||
__( 'Important! Your version of WordPress (%1$s) is no longer supported, you will not receive any security updates for your website. To keep your site secure, please <a href="%2$s">update to the latest version of WordPress</a>.' );
|
||||
|
||||
/* translators: 1: WordPress version number, 2: Link to update WordPress */
|
||||
__( 'Important! Your version of WordPress (%1$s) will stop receiving security updates in the near future. To keep your site secure, please <a href="%2$s">update to the latest version of WordPress</a>.' );
|
||||
|
||||
/* translators: %s: The major version of WordPress for this branch. */
|
||||
__( 'This is the final release of WordPress %s' );
|
||||
|
||||
/* translators: The localized WordPress download URL. */
|
||||
__( 'https://wordpress.org/download/' );
|
||||
|
||||
@@ -2722,6 +2722,10 @@ function wp_ajax_set_attachment_thumbnail() {
|
||||
wp_send_json_error();
|
||||
}
|
||||
|
||||
if ( false === check_ajax_referer( 'set-attachment-thumbnail', '_ajax_nonce', false ) ) {
|
||||
wp_send_json_error();
|
||||
}
|
||||
|
||||
$post_ids = array();
|
||||
// For each URL, try to find its corresponding post ID.
|
||||
foreach ( $_POST['urls'] as $url ) {
|
||||
@@ -2974,7 +2978,7 @@ function wp_ajax_query_attachments() {
|
||||
|
||||
// Filter query clauses to include filenames.
|
||||
if ( isset( $query['s'] ) ) {
|
||||
add_filter( 'posts_clauses', '_filter_query_attachment_filenames' );
|
||||
add_filter( 'wp_allow_query_attachment_by_filename', '__return_true' );
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -3778,13 +3782,29 @@ function wp_ajax_parse_media_shortcode() {
|
||||
|
||||
$shortcode = wp_unslash( $_POST['shortcode'] );
|
||||
|
||||
// Only process previews for media related shortcodes:
|
||||
$found_shortcodes = get_shortcode_tags_in_content( $shortcode );
|
||||
$media_shortcodes = array(
|
||||
'audio',
|
||||
'embed',
|
||||
'playlist',
|
||||
'video',
|
||||
'gallery',
|
||||
);
|
||||
|
||||
$other_shortcodes = array_diff( $found_shortcodes, $media_shortcodes );
|
||||
|
||||
if ( ! empty( $other_shortcodes ) ) {
|
||||
wp_send_json_error();
|
||||
}
|
||||
|
||||
if ( ! empty( $_POST['post_ID'] ) ) {
|
||||
$post = get_post( (int) $_POST['post_ID'] );
|
||||
}
|
||||
|
||||
// The embed shortcode requires a post.
|
||||
if ( ! $post || ! current_user_can( 'edit_post', $post->ID ) ) {
|
||||
if ( 'embed' === $shortcode ) {
|
||||
if ( in_array( 'embed', $found_shortcodes, true ) ) {
|
||||
wp_send_json_error();
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -640,6 +640,19 @@ class WP_Comments_List_Table extends WP_List_Table {
|
||||
|
||||
$this->user_can = current_user_can( 'edit_comment', $comment->comment_ID );
|
||||
|
||||
$edit_post_cap = $post ? 'edit_post' : 'edit_posts';
|
||||
if (
|
||||
current_user_can( $edit_post_cap, $comment->comment_post_ID ) ||
|
||||
(
|
||||
empty( $post->post_password ) &&
|
||||
current_user_can( 'read_post', $comment->comment_post_ID )
|
||||
)
|
||||
) {
|
||||
// The user has access to the post
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
echo "<tr id='comment-$comment->comment_ID' class='$the_comment_class'>";
|
||||
$this->single_row_columns( $comment );
|
||||
echo "</tr>\n";
|
||||
|
||||
@@ -735,6 +735,20 @@ class WP_List_Table {
|
||||
$pending_comments_number
|
||||
);
|
||||
|
||||
$post_object = get_post( $post_id );
|
||||
$edit_post_cap = $post_object ? 'edit_post' : 'edit_posts';
|
||||
if (
|
||||
current_user_can( $edit_post_cap, $post_id ) ||
|
||||
(
|
||||
empty( $post_object->post_password ) &&
|
||||
current_user_can( 'read_post', $post_id )
|
||||
)
|
||||
) {
|
||||
// The user has access to the post and thus can see comments
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( ! $approved_comments && ! $pending_comments ) {
|
||||
// No comments at all.
|
||||
printf(
|
||||
|
||||
@@ -1085,7 +1085,17 @@ function wp_dashboard_recent_comments( $total_items = 5 ) {
|
||||
|
||||
echo '<ul id="the-comment-list" data-wp-lists="list:comment">';
|
||||
foreach ( $comments as $comment ) {
|
||||
_wp_dashboard_recent_comments_row( $comment );
|
||||
|
||||
$comment_post = get_post( $comment->comment_post_ID );
|
||||
if (
|
||||
current_user_can( 'edit_post', $comment->comment_post_ID ) ||
|
||||
(
|
||||
empty( $comment_post->post_password ) &&
|
||||
current_user_can( 'read_post', $comment->comment_post_ID )
|
||||
)
|
||||
) {
|
||||
_wp_dashboard_recent_comments_row( $comment );
|
||||
}
|
||||
}
|
||||
echo '</ul>';
|
||||
|
||||
|
||||
@@ -1284,7 +1284,7 @@ function wp_edit_attachments_query_vars( $q = false ) {
|
||||
|
||||
// Filter query clauses to include filenames.
|
||||
if ( isset( $q['s'] ) ) {
|
||||
add_filter( 'posts_clauses', '_filter_query_attachment_filenames' );
|
||||
add_filter( 'wp_allow_query_attachment_by_filename', '__return_true' );
|
||||
}
|
||||
|
||||
return $q;
|
||||
|
||||
@@ -599,6 +599,8 @@ Please click the following link to activate your user account:
|
||||
* Checks if the Authorize Application Password request is valid.
|
||||
*
|
||||
* @since 5.6.0
|
||||
* @since 6.2.0 Allow insecure HTTP connections for the local environment.
|
||||
* @since 6.3.2 Validates the success and reject URLs to prevent javascript pseudo protocol being executed.
|
||||
*
|
||||
* @param array $request {
|
||||
* The array of request data. All arguments are optional and may be empty.
|
||||
@@ -614,24 +616,22 @@ Please click the following link to activate your user account:
|
||||
function wp_is_authorize_application_password_request_valid( $request, $user ) {
|
||||
$error = new WP_Error();
|
||||
|
||||
if ( ! empty( $request['success_url'] ) ) {
|
||||
$scheme = wp_parse_url( $request['success_url'], PHP_URL_SCHEME );
|
||||
|
||||
if ( 'http' === $scheme ) {
|
||||
if ( isset( $request['success_url'] ) ) {
|
||||
$validated_success_url = wp_is_authorize_application_redirect_url_valid( $request['success_url'] );
|
||||
if ( is_wp_error( $validated_success_url ) ) {
|
||||
$error->add(
|
||||
'invalid_redirect_scheme',
|
||||
__( 'The success url must be served over a secure connection.' )
|
||||
$validated_success_url->get_error_code(),
|
||||
$validated_success_url->get_error_message()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! empty( $request['reject_url'] ) ) {
|
||||
$scheme = wp_parse_url( $request['reject_url'], PHP_URL_SCHEME );
|
||||
|
||||
if ( 'http' === $scheme ) {
|
||||
if ( isset( $request['reject_url'] ) ) {
|
||||
$validated_reject_url = wp_is_authorize_application_redirect_url_valid( $request['reject_url'] );
|
||||
if ( is_wp_error( $validated_reject_url ) ) {
|
||||
$error->add(
|
||||
'invalid_redirect_scheme',
|
||||
__( 'The rejection url must be served over a secure connection.' )
|
||||
$validated_reject_url->get_error_code(),
|
||||
$validated_reject_url->get_error_message()
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -660,3 +660,59 @@ function wp_is_authorize_application_password_request_valid( $request, $user ) {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates the redirect URL protocol scheme. The protocol can be anything except http and javascript.
|
||||
*
|
||||
* @since 6.3.2
|
||||
*
|
||||
* @param string $url - The redirect URL to be validated.
|
||||
*
|
||||
* @return true|WP_Error True if the redirect URL is valid, a WP_Error object otherwise.
|
||||
*/
|
||||
function wp_is_authorize_application_redirect_url_valid( $url ) {
|
||||
$bad_protocols = array( 'javascript', 'data' );
|
||||
if ( empty( $url ) ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Based on https://www.rfc-editor.org/rfc/rfc2396#section-3.1
|
||||
$valid_scheme_regex = '/^[a-zA-Z][a-zA-Z0-9+.-]*:/';
|
||||
if ( ! preg_match( $valid_scheme_regex, $url ) ) {
|
||||
return new WP_Error(
|
||||
'invalid_redirect_url_format',
|
||||
__( 'Invalid URL format.' )
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Filters the list of invalid protocols used in applications redirect URLs.
|
||||
*
|
||||
* @since 6.3.2
|
||||
*
|
||||
* @param string[] $bad_protocols Array of invalid protocols.
|
||||
* @param string $url The redirect URL to be validated.
|
||||
*/
|
||||
$invalid_protocols = array_map( 'strtolower', apply_filters( 'wp_authorize_application_redirect_url_invalid_protocols', $bad_protocols, $url ) );
|
||||
|
||||
$scheme = wp_parse_url( $url, PHP_URL_SCHEME );
|
||||
$host = wp_parse_url( $url, PHP_URL_HOST );
|
||||
$is_local = 'local' === wp_get_environment_type();
|
||||
|
||||
// validates if the proper URI format is applied to the $url
|
||||
if ( empty( $host ) || empty( $scheme ) || in_array( strtolower( $scheme ), $invalid_protocols, true ) ) {
|
||||
return new WP_Error(
|
||||
'invalid_redirect_url_format',
|
||||
__( 'Invalid URL format.' )
|
||||
);
|
||||
}
|
||||
|
||||
if ( 'http' === $scheme && ! $is_local ) {
|
||||
return new WP_Error(
|
||||
'invalid_redirect_scheme',
|
||||
__( 'The URL must be served over a secure connection.' )
|
||||
);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -610,7 +610,7 @@ if ( ! empty( $invalid ) ) {
|
||||
/* translators: 1: Plugin file, 2: Error message. */
|
||||
__( 'The plugin %1$s has been deactivated due to an error: %2$s' ),
|
||||
'<code>' . esc_html( $plugin_file ) . '</code>',
|
||||
$error->get_error_message()
|
||||
esc_html( $error->get_error_message() )
|
||||
);
|
||||
echo '</p></div>';
|
||||
}
|
||||
@@ -674,7 +674,7 @@ elseif ( isset( $_GET['deleted'] ) ) :
|
||||
printf(
|
||||
/* translators: %s: Error message. */
|
||||
__( 'Plugin could not be deleted due to an error: %s' ),
|
||||
$delete_result->get_error_message()
|
||||
esc_html( $delete_result->get_error_message() )
|
||||
);
|
||||
?>
|
||||
</p>
|
||||
|
||||
@@ -65,4 +65,8 @@ class Requests_Hooks implements Requests_Hooker {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function __wakeup() {
|
||||
throw new \LogicException( __CLASS__ . ' should never be unserialized' );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -705,6 +705,20 @@ class Requests_IRI {
|
||||
return true;
|
||||
}
|
||||
|
||||
public function __wakeup() {
|
||||
$class_props = get_class_vars( __CLASS__ );
|
||||
$string_props = array( 'scheme', 'iuserinfo', 'ihost', 'port', 'ipath', 'iquery', 'ifragment' );
|
||||
$array_props = array( 'normalization' );
|
||||
foreach ( $class_props as $prop => $default_value ) {
|
||||
if ( in_array( $prop, $string_props, true ) && ! is_string( $this->$prop ) ) {
|
||||
throw new UnexpectedValueException();
|
||||
} elseif ( in_array( $prop, $array_props, true ) && ! is_array( $this->$prop ) ) {
|
||||
throw new UnexpectedValueException();
|
||||
}
|
||||
$this->$prop = null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the entire IRI. Returns true on success, false on failure (if there
|
||||
* are any invalid characters).
|
||||
|
||||
@@ -229,6 +229,10 @@ class Requests_Session {
|
||||
return Requests::request_multiple($requests, $options);
|
||||
}
|
||||
|
||||
public function __wakeup() {
|
||||
throw new \LogicException( __CLASS__ . ' should never be unserialized' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Merge a request's data with the default data
|
||||
*
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -620,6 +620,10 @@ function serialize_blocks( $blocks ) {
|
||||
function filter_block_content( $text, $allowed_html = 'post', $allowed_protocols = array() ) {
|
||||
$result = '';
|
||||
|
||||
if ( false !== strpos( $text, '<!--' ) && false !== strpos( $text, '--->' ) ) {
|
||||
$text = preg_replace_callback( '%<!--(.*?)--->%', '_filter_block_content_callback', $text );
|
||||
}
|
||||
|
||||
$blocks = parse_blocks( $text );
|
||||
foreach ( $blocks as $block ) {
|
||||
$block = filter_block_kses( $block, $allowed_html, $allowed_protocols );
|
||||
@@ -629,6 +633,19 @@ function filter_block_content( $text, $allowed_html = 'post', $allowed_protocols
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Callback used for regular expression replacement in filter_block_content().
|
||||
*
|
||||
* @private
|
||||
* @since 6.2.1
|
||||
*
|
||||
* @param array $matches Array of preg_replace_callback matches.
|
||||
* @return string Replacement string.
|
||||
*/
|
||||
function _filter_block_content_callback( $matches ) {
|
||||
return '<!--' . rtrim( $matches[1], '-' ) . '-->';
|
||||
}
|
||||
|
||||
/**
|
||||
* Filters and sanitizes a parsed block to remove non-allowable HTML from block
|
||||
* attribute values.
|
||||
|
||||
@@ -46,7 +46,7 @@ function render_block_core_legacy_widget( $attributes ) {
|
||||
|
||||
if ( isset( $attributes['instance']['encoded'], $attributes['instance']['hash'] ) ) {
|
||||
$serialized_instance = base64_decode( $attributes['instance']['encoded'] );
|
||||
if ( wp_hash( $serialized_instance ) !== $attributes['instance']['hash'] ) {
|
||||
if ( ! hash_equals( wp_hash( $serialized_instance ), (string) $attributes['instance']['hash'] ) ) {
|
||||
return '';
|
||||
}
|
||||
$instance = unserialize( $serialized_instance );
|
||||
|
||||
@@ -16,7 +16,7 @@ function render_block_core_rss( $attributes ) {
|
||||
$rss = fetch_feed( $attributes['feedURL'] );
|
||||
|
||||
if ( is_wp_error( $rss ) ) {
|
||||
return '<div class="components-placeholder"><div class="notice notice-error"><strong>' . __( 'RSS Error:' ) . '</strong> ' . $rss->get_error_message() . '</div></div>';
|
||||
return '<div class="components-placeholder"><div class="notice notice-error"><strong>' . __( 'RSS Error:' ) . '</strong> ' . esc_html( $rss->get_error_message() ) . '</div></div>';
|
||||
}
|
||||
|
||||
if ( ! $rss->get_item_quantity() ) {
|
||||
@@ -44,8 +44,8 @@ function render_block_core_rss( $attributes ) {
|
||||
if ( $date ) {
|
||||
$date = sprintf(
|
||||
'<time datetime="%1$s" class="wp-block-rss__item-publish-date">%2$s</time> ',
|
||||
date_i18n( get_option( 'c' ), $date ),
|
||||
date_i18n( get_option( 'date_format' ), $date )
|
||||
esc_attr( date_i18n( get_option( 'c' ), $date ) ),
|
||||
esc_attr( date_i18n( get_option( 'date_format' ), $date ) )
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -307,7 +307,7 @@ function get_bookmarks( $args = '' ) {
|
||||
$query .= " $exclusions $inclusions $search";
|
||||
$query .= " ORDER BY $orderby $order";
|
||||
if ( -1 != $parsed_args['limit'] ) {
|
||||
$query .= ' LIMIT ' . $parsed_args['limit'];
|
||||
$query .= ' LIMIT ' . absint( $parsed_args['limit'] );
|
||||
}
|
||||
|
||||
$results = $wpdb->get_results( $query );
|
||||
|
||||
@@ -139,6 +139,21 @@ final class WP_Block_Patterns_Registry {
|
||||
return isset( $this->registered_patterns[ $pattern_name ] );
|
||||
}
|
||||
|
||||
public function __wakeup() {
|
||||
if ( ! $this->registered_patterns ) {
|
||||
return;
|
||||
}
|
||||
if ( ! is_array( $this->registered_patterns ) ) {
|
||||
throw new UnexpectedValueException();
|
||||
}
|
||||
foreach ( $this->registered_patterns as $value ) {
|
||||
if ( ! is_array( $value ) ) {
|
||||
throw new UnexpectedValueException();
|
||||
}
|
||||
}
|
||||
$this->registered_patterns_outside_init = array();
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility method to retrieve the main instance of the class.
|
||||
*
|
||||
|
||||
@@ -167,6 +167,20 @@ final class WP_Block_Type_Registry {
|
||||
return isset( $this->registered_block_types[ $name ] );
|
||||
}
|
||||
|
||||
public function __wakeup() {
|
||||
if ( ! $this->registered_block_types ) {
|
||||
return;
|
||||
}
|
||||
if ( ! is_array( $this->registered_block_types ) ) {
|
||||
throw new UnexpectedValueException();
|
||||
}
|
||||
foreach ( $this->registered_block_types as $value ) {
|
||||
if ( ! $value instanceof WP_Block_Type ) {
|
||||
throw new UnexpectedValueException();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility method to retrieve the main instance of the class.
|
||||
*
|
||||
|
||||
@@ -149,8 +149,8 @@ class WP_Date_Query {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( isset( $date_query['relation'] ) && 'OR' === strtoupper( $date_query['relation'] ) ) {
|
||||
$this->relation = 'OR';
|
||||
if ( isset( $date_query['relation'] ) ) {
|
||||
$this->relation = $this->sanitize_relation( $date_query['relation'] );
|
||||
} else {
|
||||
$this->relation = 'AND';
|
||||
}
|
||||
@@ -219,6 +219,9 @@ class WP_Date_Query {
|
||||
$this->validate_date_values( $queries );
|
||||
}
|
||||
|
||||
// Sanitize the relation parameter.
|
||||
$queries['relation'] = $this->sanitize_relation( $queries['relation'] );
|
||||
|
||||
foreach ( $queries as $key => $q ) {
|
||||
if ( ! is_array( $q ) || in_array( $key, $this->time_keys, true ) ) {
|
||||
// This is a first-order query. Trust the values and sanitize when building SQL.
|
||||
@@ -1039,4 +1042,20 @@ class WP_Date_Query {
|
||||
|
||||
return $wpdb->prepare( "DATE_FORMAT( $column, %s ) $compare %f", $format, $time );
|
||||
}
|
||||
|
||||
/**
|
||||
* Sanitizes a 'relation' operator.
|
||||
*
|
||||
* @since 6.0.3
|
||||
*
|
||||
* @param string $relation Raw relation key from the query argument.
|
||||
* @return string Sanitized relation ('AND' or 'OR').
|
||||
*/
|
||||
public function sanitize_relation( $relation ) {
|
||||
if ( 'OR' === strtoupper( $relation ) ) {
|
||||
return 'OR';
|
||||
} else {
|
||||
return 'AND';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -444,6 +444,13 @@ class WP_Query {
|
||||
*/
|
||||
public $thumbnails_cached = false;
|
||||
|
||||
/**
|
||||
* Controls whether an attachment query should include filenames or not.
|
||||
*
|
||||
* @since 6.0.3
|
||||
* @var bool
|
||||
*/
|
||||
protected $allow_query_attachment_by_filename = false;
|
||||
/**
|
||||
* Cached list of search stopwords.
|
||||
*
|
||||
@@ -1394,7 +1401,12 @@ class WP_Query {
|
||||
}
|
||||
|
||||
$like = $n . $wpdb->esc_like( $term ) . $n;
|
||||
$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 );
|
||||
|
||||
if ( ! empty( $this->allow_query_attachment_by_filename ) ) {
|
||||
$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 );
|
||||
} else {
|
||||
$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 );
|
||||
}
|
||||
$searchand = ' AND ';
|
||||
}
|
||||
|
||||
@@ -1789,6 +1801,16 @@ class WP_Query {
|
||||
// Fill again in case 'pre_get_posts' unset some vars.
|
||||
$q = $this->fill_query_vars( $q );
|
||||
|
||||
/**
|
||||
* Filters whether an attachment query should include filenames or not.
|
||||
*
|
||||
* @since 6.0.3
|
||||
*
|
||||
* @param bool $allow_query_attachment_by_filename Whether or not to include filenames.
|
||||
*/
|
||||
$this->allow_query_attachment_by_filename = apply_filters( 'wp_allow_query_attachment_by_filename', false );
|
||||
remove_all_filters( 'wp_allow_query_attachment_by_filename' );
|
||||
|
||||
// Parse meta query.
|
||||
$this->meta_query = new WP_Meta_Query();
|
||||
$this->meta_query->parse_query_vars( $q );
|
||||
@@ -2220,7 +2242,7 @@ class WP_Query {
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! empty( $this->tax_query->queries ) || ! empty( $this->meta_query->queries ) ) {
|
||||
if ( ! empty( $this->tax_query->queries ) || ! empty( $this->meta_query->queries ) || ! empty( $this->allow_query_attachment_by_filename ) ) {
|
||||
$groupby = "{$wpdb->posts}.ID";
|
||||
}
|
||||
|
||||
@@ -2297,6 +2319,10 @@ class WP_Query {
|
||||
}
|
||||
$where .= $search . $whichauthor . $whichmimetype;
|
||||
|
||||
if ( ! empty( $this->allow_query_attachment_by_filename ) ) {
|
||||
$join .= " LEFT JOIN {$wpdb->postmeta} AS sq1 ON ( {$wpdb->posts}.ID = sq1.post_id AND sq1.meta_key = '_wp_attached_file' )";
|
||||
}
|
||||
|
||||
if ( ! empty( $this->meta_query->queries ) ) {
|
||||
$clauses = $this->meta_query->get_sql( 'post', $wpdb->posts, 'ID', $this );
|
||||
$join .= $clauses['join'];
|
||||
|
||||
@@ -675,6 +675,28 @@ final class WP_Theme implements ArrayAccess {
|
||||
return isset( $this->parent ) ? $this->parent : false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform reinitialization tasks.
|
||||
*
|
||||
* Prevents a callback from being injected during unserialization of an object.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __wakeup() {
|
||||
if ( $this->parent && ! $this->parent instanceof self ) {
|
||||
throw new UnexpectedValueException();
|
||||
}
|
||||
if ( $this->headers && ! is_array( $this->headers ) ) {
|
||||
throw new UnexpectedValueException();
|
||||
}
|
||||
foreach ( $this->headers as $value ) {
|
||||
if ( ! is_string( $value ) ) {
|
||||
throw new UnexpectedValueException();
|
||||
}
|
||||
}
|
||||
$this->headers_sanitized = array();
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds theme data to cache.
|
||||
*
|
||||
@@ -1675,4 +1697,16 @@ final class WP_Theme implements ArrayAccess {
|
||||
private static function _name_sort_i18n( $a, $b ) {
|
||||
return strnatcasecmp( $a->name_translated, $b->name_translated );
|
||||
}
|
||||
|
||||
private static function _check_headers_property_has_correct_type( $headers ) {
|
||||
if ( ! is_array( $headers ) ) {
|
||||
return false;
|
||||
}
|
||||
foreach ( $headers as $key => $value ) {
|
||||
if ( ! is_string( $key ) || ! is_string( $value ) ) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2466,6 +2466,15 @@ function wp_update_comment( $commentarr, $wp_error = false ) {
|
||||
}
|
||||
}
|
||||
|
||||
$filter_comment = false;
|
||||
if ( ! has_filter( 'pre_comment_content', 'wp_filter_kses' ) ) {
|
||||
$filter_comment = ! user_can( isset( $comment['user_id'] ) ? $comment['user_id'] : 0, 'unfiltered_html' );
|
||||
}
|
||||
|
||||
if ( $filter_comment ) {
|
||||
add_filter( 'pre_comment_content', 'wp_filter_kses' );
|
||||
}
|
||||
|
||||
// Escape data pulled from DB.
|
||||
$comment = wp_slash( $comment );
|
||||
|
||||
@@ -2476,6 +2485,10 @@ function wp_update_comment( $commentarr, $wp_error = false ) {
|
||||
|
||||
$commentarr = wp_filter_comment( $commentarr );
|
||||
|
||||
if ( $filter_comment ) {
|
||||
remove_filter( 'pre_comment_content', 'wp_filter_kses' );
|
||||
}
|
||||
|
||||
// Now extract the merged array.
|
||||
$data = wp_unslash( $commentarr );
|
||||
|
||||
|
||||
@@ -130,10 +130,10 @@ class WP_Customize_Header_Image_Control extends WP_Customize_Image_Control {
|
||||
<# } else { #>
|
||||
|
||||
<button type="button" class="choice thumbnail"
|
||||
data-customize-image-value="{{{data.header.url}}}"
|
||||
data-customize-image-value="{{data.header.url}}"
|
||||
data-customize-header-image-data="{{JSON.stringify(data.header)}}">
|
||||
<span class="screen-reader-text"><?php _e( 'Set image' ); ?></span>
|
||||
<img src="{{{data.header.thumbnail_url}}}" alt="{{{data.header.alt_text || data.header.description}}}" />
|
||||
<img src="{{data.header.thumbnail_url}}" alt="{{data.header.alt_text || data.header.description}}" />
|
||||
</button>
|
||||
|
||||
<# if ( data.type === 'uploaded' ) { #>
|
||||
@@ -158,7 +158,7 @@ class WP_Customize_Header_Image_Control extends WP_Customize_Image_Control {
|
||||
|
||||
<# } else { #>
|
||||
|
||||
<img src="{{{data.header.thumbnail_url}}}" alt="{{{data.header.alt_text || data.header.description}}}" />
|
||||
<img src="{{data.header.thumbnail_url}}" alt="{{data.header.alt_text || data.header.description}}" />
|
||||
|
||||
<# } #>
|
||||
<# } else { #>
|
||||
|
||||
@@ -68,7 +68,7 @@ class WP_Customize_Site_Icon_Control extends WP_Customize_Cropped_Image_Control
|
||||
<div class="favicon">
|
||||
<img src="{{ data.attachment.sizes.full ? data.attachment.sizes.full.url : data.attachment.url }}" alt="<?php esc_attr_e( 'Preview as a browser icon' ); ?>" />
|
||||
</div>
|
||||
<span class="browser-title" aria-hidden="true"><# print( '<?php bloginfo( 'name' ); ?>' ) #></span>
|
||||
<span class="browser-title" aria-hidden="true"><# print( '<?php echo esc_js( get_bloginfo( 'name' ) ); ?>' ) #></span>
|
||||
</div>
|
||||
<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' ); ?>" />
|
||||
</div>
|
||||
|
||||
@@ -4224,3 +4224,21 @@ function _excerpt_render_inner_columns_blocks( $columns, $allowed_blocks ) {
|
||||
_deprecated_function( __FUNCTION__, '5.8.0', '_excerpt_render_inner_blocks()' );
|
||||
return _excerpt_render_inner_blocks( $columns, $allowed_blocks );
|
||||
}
|
||||
|
||||
/**
|
||||
* Filter the SQL clauses of an attachment query to include filenames.
|
||||
*
|
||||
* @since 4.7.0
|
||||
* @deprecated 6.0.3
|
||||
* @access private
|
||||
*
|
||||
* @param array $clauses An array including WHERE, GROUP BY, JOIN, ORDER BY,
|
||||
* DISTINCT, fields (SELECT), and LIMITS clauses.
|
||||
* @return array The unmodified clauses.
|
||||
*/
|
||||
function _filter_query_attachment_filenames( $clauses ) {
|
||||
_deprecated_function( __FUNCTION__, '6.0.3', 'add_filter( "wp_allow_query_attachment_by_filename", "__return_true" )');
|
||||
remove_filter( 'posts_clauses', __FUNCTION__ );
|
||||
return $clauses;
|
||||
}
|
||||
|
||||
|
||||
@@ -469,7 +469,7 @@ function get_post_embed_html( $width, $height, $post = null ) {
|
||||
*/
|
||||
$output .= <<<JS
|
||||
/*! This file is auto-generated */
|
||||
!function(c,d){"use strict";var e=!1,n=!1;if(d.querySelector)if(c.addEventListener)e=!0;if(c.wp=c.wp||{},!c.wp.receiveEmbedMessage)if(c.wp.receiveEmbedMessage=function(e){var t=e.data;if(t)if(t.secret||t.message||t.value)if(!/[^a-zA-Z0-9]/.test(t.secret)){for(var r,a,i,s=d.querySelectorAll('iframe[data-secret="'+t.secret+'"]'),n=d.querySelectorAll('blockquote[data-secret="'+t.secret+'"]'),o=0;o<n.length;o++)n[o].style.display="none";for(o=0;o<s.length;o++)if(r=s[o],e.source===r.contentWindow){if(r.removeAttribute("style"),"height"===t.message){if(1e3<(i=parseInt(t.value,10)))i=1e3;else if(~~i<200)i=200;r.height=i}if("link"===t.message)if(a=d.createElement("a"),i=d.createElement("a"),a.href=r.getAttribute("src"),i.href=t.value,i.host===a.host)if(d.activeElement===r)c.top.location.href=t.value}}},e)c.addEventListener("message",c.wp.receiveEmbedMessage,!1),d.addEventListener("DOMContentLoaded",t,!1),c.addEventListener("load",t,!1);function t(){if(!n){n=!0;for(var e,t,r=-1!==navigator.appVersion.indexOf("MSIE 10"),a=!!navigator.userAgent.match(/Trident.*rv:11\./),i=d.querySelectorAll("iframe.wp-embedded-content"),s=0;s<i.length;s++){if(!(e=i[s]).getAttribute("data-secret"))t=Math.random().toString(36).substr(2,10),e.src+="#?secret="+t,e.setAttribute("data-secret",t);if(r||a)(t=e.cloneNode(!0)).removeAttribute("security"),e.parentNode.replaceChild(t,e)}}}}(window,document);
|
||||
!function(d,l){"use strict";var e=!1,n=!1;if(l.querySelector)if(d.addEventListener)e=!0;if(d.wp=d.wp||{},!d.wp.receiveEmbedMessage)if(d.wp.receiveEmbedMessage=function(e){var t=e.data;if(t)if(t.secret||t.message||t.value)if(!/[^a-zA-Z0-9]/.test(t.secret)){for(var r,i,a,s=l.querySelectorAll('iframe[data-secret="'+t.secret+'"]'),n=l.querySelectorAll('blockquote[data-secret="'+t.secret+'"]'),o=new RegExp("^https?:$","i"),c=0;c<n.length;c++)n[c].style.display="none";for(c=0;c<s.length;c++)if(r=s[c],e.source===r.contentWindow){if(r.removeAttribute("style"),"height"===t.message){if(1e3<(a=parseInt(t.value,10)))a=1e3;else if(~~a<200)a=200;r.height=a}if("link"===t.message)if(i=l.createElement("a"),a=l.createElement("a"),i.href=r.getAttribute("src"),a.href=t.value,o.test(a.protocol))if(a.host===i.host)if(l.activeElement===r)d.top.location.href=t.value}}},e)d.addEventListener("message",d.wp.receiveEmbedMessage,!1),l.addEventListener("DOMContentLoaded",t,!1),d.addEventListener("load",t,!1);function t(){if(!n){n=!0;for(var e,t,r=-1!==navigator.appVersion.indexOf("MSIE 10"),i=!!navigator.userAgent.match(/Trident.*rv:11\./),a=l.querySelectorAll("iframe.wp-embedded-content"),s=0;s<a.length;s++){if(!(e=a[s]).getAttribute("data-secret"))t=Math.random().toString(36).substr(2,10),e.src+="#?secret="+t,e.setAttribute("data-secret",t);if(r||i)(t=e.cloneNode(!0)).removeAttribute("security"),e.parentNode.replaceChild(t,e)}}}}(window,document);
|
||||
JS;
|
||||
}
|
||||
$output .= "\n//--><!]]>";
|
||||
|
||||
@@ -2371,6 +2371,29 @@ function sanitize_html_class( $class, $fallback = '' ) {
|
||||
return apply_filters( 'sanitize_html_class', $sanitized, $class, $fallback );
|
||||
}
|
||||
|
||||
/**
|
||||
* Strips out all characters not allowed in a locale name.
|
||||
*
|
||||
* @since 6.2.1
|
||||
*
|
||||
* @param string $locale_name The locale name to be sanitized.
|
||||
* @return string The sanitized value.
|
||||
*/
|
||||
function sanitize_locale_name( $locale_name ) {
|
||||
// Limit to A-Z, a-z, 0-9, '_', '-'.
|
||||
$sanitized = preg_replace( '/[^A-Za-z0-9_-]/', '', $locale_name );
|
||||
|
||||
/**
|
||||
* Filters a sanitized locale name string.
|
||||
*
|
||||
* @since 6.2.1
|
||||
*
|
||||
* @param string $sanitized The sanitized locale name.
|
||||
* @param string $locale_name The locale name before sanitization.
|
||||
*/
|
||||
return apply_filters( 'sanitize_locale_name', $sanitized, $locale_name );
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts lone & characters into `&` (a.k.a. `&`)
|
||||
*
|
||||
|
||||
@@ -3466,10 +3466,12 @@ function wp_nonce_ays( $action ) {
|
||||
} else {
|
||||
$html = __( 'The link you followed has expired.' );
|
||||
if ( wp_get_referer() ) {
|
||||
$wp_http_referer = remove_query_arg( 'updated', wp_get_referer() );
|
||||
$wp_http_referer = wp_validate_redirect( esc_url_raw( $wp_http_referer ) );
|
||||
$html .= '</p><p>';
|
||||
$html .= sprintf(
|
||||
'<a href="%s">%s</a>',
|
||||
esc_url( remove_query_arg( 'updated', wp_get_referer() ) ),
|
||||
esc_url( $wp_http_referer ),
|
||||
__( 'Please try again.' )
|
||||
);
|
||||
}
|
||||
|
||||
1
wp-includes/js/dist/block-library.js
vendored
1
wp-includes/js/dist/block-library.js
vendored
@@ -3583,7 +3583,6 @@ function (_super) {
|
||||
};
|
||||
|
||||
_this.onTouchStart = function (e) {
|
||||
e.preventDefault();
|
||||
document.addEventListener('touchmove', _this.onTouchMove, {
|
||||
passive: false
|
||||
}); // iOS 11 now defaults to passive: true
|
||||
|
||||
2
wp-includes/js/dist/block-library.min.js
vendored
2
wp-includes/js/dist/block-library.min.js
vendored
File diff suppressed because one or more lines are too long
39
wp-includes/js/dist/edit-post.js
vendored
39
wp-includes/js/dist/edit-post.js
vendored
@@ -3877,7 +3877,7 @@ function TextEditor({
|
||||
}))(TextEditor));
|
||||
|
||||
// CONCATENATED MODULE: ./node_modules/framer-motion/node_modules/tslib/tslib.es6.js
|
||||
/*! *****************************************************************************
|
||||
/******************************************************************************
|
||||
Copyright (c) Microsoft Corporation.
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
@@ -3986,7 +3986,11 @@ function __generator(thisArg, body) {
|
||||
|
||||
var __createBinding = Object.create ? (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
||||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||
}
|
||||
Object.defineProperty(o, k2, desc);
|
||||
}) : (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
o[k2] = m[k];
|
||||
@@ -4116,6 +4120,11 @@ function __classPrivateFieldSet(receiver, state, value, kind, f) {
|
||||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
||||
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
||||
}
|
||||
|
||||
function __classPrivateFieldIn(state, receiver) {
|
||||
if (receiver === null || (typeof receiver !== "object" && typeof receiver !== "function")) throw new TypeError("Cannot use 'in' operator on non-object");
|
||||
return typeof state === "function" ? receiver === state : state.has(receiver);
|
||||
}
|
||||
|
||||
// EXTERNAL MODULE: external "React"
|
||||
var external_React_ = __webpack_require__("cDcd");
|
||||
@@ -4930,7 +4939,7 @@ var getValueAsType = function (value, type) {
|
||||
|
||||
|
||||
// CONCATENATED MODULE: ./node_modules/style-value-types/node_modules/tslib/tslib.es6.js
|
||||
/*! *****************************************************************************
|
||||
/******************************************************************************
|
||||
Copyright (c) Microsoft Corporation.
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
@@ -5039,7 +5048,11 @@ function tslib_es6_generator(thisArg, body) {
|
||||
|
||||
var tslib_es6_createBinding = Object.create ? (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
||||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||
}
|
||||
Object.defineProperty(o, k2, desc);
|
||||
}) : (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
o[k2] = m[k];
|
||||
@@ -5169,6 +5182,11 @@ function tslib_es6_classPrivateFieldSet(receiver, state, value, kind, f) {
|
||||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
||||
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
||||
}
|
||||
|
||||
function tslib_es6_classPrivateFieldIn(state, receiver) {
|
||||
if (receiver === null || (typeof receiver !== "object" && typeof receiver !== "function")) throw new TypeError("Cannot use 'in' operator on non-object");
|
||||
return typeof state === "function" ? receiver === state : state.has(receiver);
|
||||
}
|
||||
|
||||
// CONCATENATED MODULE: ./node_modules/style-value-types/dist/es/utils.js
|
||||
var clamp = function (min, max) { return function (v) {
|
||||
@@ -6478,7 +6496,7 @@ function shallowCompare(next, prev) {
|
||||
|
||||
|
||||
// CONCATENATED MODULE: ./node_modules/popmotion/node_modules/tslib/tslib.es6.js
|
||||
/*! *****************************************************************************
|
||||
/******************************************************************************
|
||||
Copyright (c) Microsoft Corporation.
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
@@ -6587,7 +6605,11 @@ function tslib_tslib_es6_generator(thisArg, body) {
|
||||
|
||||
var tslib_tslib_es6_createBinding = Object.create ? (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
||||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||
}
|
||||
Object.defineProperty(o, k2, desc);
|
||||
}) : (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
o[k2] = m[k];
|
||||
@@ -6717,6 +6739,11 @@ function tslib_tslib_es6_classPrivateFieldSet(receiver, state, value, kind, f) {
|
||||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
||||
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
||||
}
|
||||
|
||||
function tslib_tslib_es6_classPrivateFieldIn(state, receiver) {
|
||||
if (receiver === null || (typeof receiver !== "object" && typeof receiver !== "function")) throw new TypeError("Cannot use 'in' operator on non-object");
|
||||
return typeof state === "function" ? receiver === state : state.has(receiver);
|
||||
}
|
||||
|
||||
// CONCATENATED MODULE: ./node_modules/popmotion/dist/es/utils/clamp.js
|
||||
var clamp_clamp = function (min, max, v) {
|
||||
|
||||
44
wp-includes/js/dist/edit-post.min.js
vendored
44
wp-includes/js/dist/edit-post.min.js
vendored
File diff suppressed because one or more lines are too long
7
wp-includes/js/dist/url.js
vendored
7
wp-includes/js/dist/url.js
vendored
@@ -515,9 +515,10 @@ function setPath(object, path, value) {
|
||||
// If key is empty string and next value is array, derive key from
|
||||
// the current length of the array.
|
||||
key = object.length.toString();
|
||||
} // If the next key in the path is numeric (or empty string), it will be
|
||||
// created as an array. Otherwise, it will be created as an object.
|
||||
}
|
||||
|
||||
key = ['__proto__', 'constructor', 'prototype'].includes(key) ? key.toUpperCase() : key; // If the next key in the path is numeric (or empty string), it will be
|
||||
// created as an array. Otherwise, it will be created as an object.
|
||||
|
||||
const isNextKeyArrayIndex = !isNaN(Number(path[i + 1]));
|
||||
object[key] = i === lastIndex ? // If at end of path, assign the intended value.
|
||||
@@ -568,7 +569,7 @@ function getQueryArgs(url) {
|
||||
}
|
||||
|
||||
return accumulator;
|
||||
}, {});
|
||||
}, Object.create(null));
|
||||
}
|
||||
|
||||
// CONCATENATED MODULE: ./node_modules/@wordpress/url/build-module/add-query-args.js
|
||||
|
||||
2
wp-includes/js/dist/url.min.js
vendored
2
wp-includes/js/dist/url.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -5,7 +5,7 @@
|
||||
* Date: 2009/8/13
|
||||
*
|
||||
* @author Blair Mitchelmore
|
||||
* @version 2.1.7
|
||||
* @version 2.2.3
|
||||
*
|
||||
**/
|
||||
new function(e){var d=e.separator||"&";var c=e.spaces===false?false:true;var a=e.suffix===false?"":"[]";var g=e.prefix===false?false:true;var b=g?e.hash===true?"#":"?":"";var f=e.numbers===false?false:true;jQuery.query=new function(){var h=function(m,l){return m!=undefined&&m!==null&&(!!l?m.constructor==l:true)};var i=function(r){var l,q=/\[([^[]*)\]/g,n=/^([^[]+)(\[.*\])?$/.exec(r),o=n[1],p=[];while(l=q.exec(n[2])){p.push(l[1])}return[o,p]};var k=function(s,r,q){var t,p=r.shift();if(typeof s!="object"){s=null}if(p===""){if(!s){s=[]}if(h(s,Array)){s.push(r.length==0?q:k(null,r.slice(0),q))}else{if(h(s,Object)){var n=0;while(s[n++]!=null){}s[--n]=r.length==0?q:k(s[n],r.slice(0),q)}else{s=[];s.push(r.length==0?q:k(null,r.slice(0),q))}}}else{if(p&&p.match(/^\s*[0-9]+\s*$/)){var m=parseInt(p,10);if(!s){s=[]}s[m]=r.length==0?q:k(s[m],r.slice(0),q)}else{if(p){var m=p.replace(/^\s*|\s*$/g,"");if(!s){s={}}if(h(s,Array)){var l={};for(var n=0;n<s.length;++n){l[n]=s[n]}s=l}s[m]=r.length==0?q:k(s[m],r.slice(0),q)}else{return q}}}return s};var j=function(l){var m=this;m.keys={};if(l.queryObject){jQuery.each(l.get(),function(n,o){m.SET(n,o)})}else{jQuery.each(arguments,function(){var n=""+this;n=n.replace(/^[?#]/,"");n=n.replace(/[;&]$/,"");if(c){n=n.replace(/[+]/g," ")}jQuery.each(n.split(/[&;]/),function(){var o=decodeURIComponent(this.split("=")[0]||"");var p=decodeURIComponent(this.split("=")[1]||"");if(!o){return}if(f){if(/^[+-]?[0-9]+\.[0-9]*$/.test(p)){p=parseFloat(p)}else{if(/^[+-]?[0-9]+$/.test(p)){p=parseInt(p,10)}}}p=(!p&&p!==0)?true:p;if(p!==false&&p!==true&&typeof p!="number"){p=p}m.SET(o,p)})})}return m};j.prototype={queryObject:true,has:function(l,m){var n=this.get(l);return h(n,m)},GET:function(m){if(!h(m)){return this.keys}var l=i(m),n=l[0],p=l[1];var o=this.keys[n];while(o!=null&&p.length!=0){o=o[p.shift()]}return typeof o=="number"?o:o||""},get:function(l){var m=this.GET(l);if(h(m,Object)){return jQuery.extend(true,{},m)}else{if(h(m,Array)){return m.slice(0)}}return m},SET:function(m,r){var o=!h(r)?null:r;var l=i(m),n=l[0],q=l[1];var p=this.keys[n];this.keys[n]=k(p,q.slice(0),o);return this},set:function(l,m){return this.copy().SET(l,m)},REMOVE:function(l){return this.SET(l,null).COMPACT()},remove:function(l){return this.copy().REMOVE(l)},EMPTY:function(){var l=this;jQuery.each(l.keys,function(m,n){delete l.keys[m]});return l},load:function(l){var n=l.replace(/^.*?[#](.+?)(?:\?.+)?$/,"$1");var m=l.replace(/^.*?[?](.+?)(?:#.+)?$/,"$1");return new j(l.length==m.length?"":m,l.length==n.length?"":n)},empty:function(){return this.copy().EMPTY()},copy:function(){return new j(this)},COMPACT:function(){function l(o){var n=typeof o=="object"?h(o,Array)?[]:{}:o;if(typeof o=="object"){function m(r,p,q){if(h(r,Array)){r.push(q)}else{r[p]=q}}jQuery.each(o,function(p,q){if(!h(q)){return true}m(n,p,l(q))})}return n}this.keys=l(this.keys);return this},compact:function(){return this.copy().COMPACT()},toString:function(){var n=0,r=[],q=[],m=this;var o=function(s){s=s+"";if(c){s=s.replace(/ /g,"+")}return encodeURIComponent(s)};var l=function(s,t,u){if(!h(u)||u===false){return}var v=[o(t)];if(u!==true){v.push("=");v.push(o(u))}s.push(v.join(""))};var p=function(t,s){var u=function(v){return !s||s==""?[v].join(""):[s,"[",v,"]"].join("")};jQuery.each(t,function(v,w){if(typeof w=="object"){p(w,u(v))}else{l(q,u(v),w)}})};p(this.keys);if(q.length>0){r.push(b)}r.push(q.join(d));return r.join("")}};return new j(location.search,location.hash)}}(jQuery.query||{});
|
||||
!function(e){var t=e.separator||"&",l=!1!==e.spaces,n=(e.suffix,!1!==e.prefix?!0===e.hash?"#":"?":""),i=!1!==e.numbers;jQuery.query=new function(){function c(e,t){return null!=e&&null!==e&&(!t||e.constructor==t)}function u(e){for(var t,n=/\[([^[]*)\]/g,r=/^([^[]+)(\[.*\])?$/.exec(e),e=r[1],u=[];t=n.exec(r[2]);)u.push(t[1]);return[e,u]}function o(e,t,n){var r=t.shift();if("object"!=typeof e&&(e=null),""===r)if(c(e=e||[],Array))e.push(0==t.length?n:o(null,t.slice(0),n));else if(c(e,Object)){for(var u=0;null!=e[u++];);e[--u]=0==t.length?n:o(e[u],t.slice(0),n)}else(e=[]).push(0==t.length?n:o(null,t.slice(0),n));else if(r&&r.match(/^\s*[0-9]+\s*$/))(e=e||[])[i=parseInt(r,10)]=0==t.length?n:o(e[i],t.slice(0),n);else{if(!r)return n;var i=r.replace(/^\s*|\s*$/g,"");if(c(e=e||{},Array)){for(var s={},u=0;u<e.length;++u)s[u]=e[u];e=s}e[i]=0==t.length?n:o(e[i],t.slice(0),n)}return e}function r(e){var n=this;return n.keys={},e.queryObject?jQuery.each(e.get(),function(e,t){n.SET(e,t)}):n.parseNew.apply(n,arguments),n}return r.prototype={queryObject:!0,parseNew:function(){var n=this;return n.keys={},jQuery.each(arguments,function(){var e=""+this;e=(e=e.replace(/^[?#]/,"")).replace(/[;&]$/,""),l&&(e=e.replace(/[+]/g," ")),jQuery.each(e.split(/[&;]/),function(){var e=decodeURIComponent(this.split("=")[0]||""),t=decodeURIComponent(this.split("=")[1]||"");e&&(i&&(/^[+-]?[0-9]+\.[0-9]*$/.test(t)?t=parseFloat(t):/^[+-]?[1-9][0-9]*$/.test(t)&&(t=parseInt(t,10))),n.SET(e,t=!t&&0!==t||t))})}),n},has:function(e,t){e=this.get(e);return c(e,t)},GET:function(e){if(!c(e))return this.keys;for(var e=u(e),t=e[0],n=e[1],r=this.keys[t];null!=r&&0!=n.length;)r=r[n.shift()];return"number"==typeof r?r:r||""},get:function(e){e=this.GET(e);return c(e,Object)?jQuery.extend(!0,{},e):c(e,Array)?e.slice(0):e},SET:function(e,t){var n,r;return e.includes("__proto__")||e.includes("constructor")||e.includes("prototype")||(t=c(t)?t:null,n=(e=u(e))[0],e=e[1],r=this.keys[n],this.keys[n]=o(r,e.slice(0),t)),this},set:function(e,t){return this.copy().SET(e,t)},REMOVE:function(e,t){if(t){var n=this.GET(e);if(c(n,Array)){for(tval in n)n[tval]=n[tval].toString();var r=$.inArray(t,n);if(!(0<=r))return;e=(e=n.splice(r,1))[r]}else if(t!=n)return}return this.SET(e,null).COMPACT()},remove:function(e,t){return this.copy().REMOVE(e,t)},EMPTY:function(){var n=this;return jQuery.each(n.keys,function(e,t){delete n.keys[e]}),n},load:function(e){var t=e.replace(/^.*?[#](.+?)(?:\?.+)?$/,"$1"),n=e.replace(/^.*?[?](.+?)(?:#.+)?$/,"$1");return new r(e.length==n.length?"":n,e.length==t.length?"":t)},empty:function(){return this.copy().EMPTY()},copy:function(){return new r(this)},COMPACT:function(){return this.keys=function r(e){var u="object"==typeof e?c(e,Array)?[]:{}:e;return"object"==typeof e&&jQuery.each(e,function(e,t){if(!c(t))return!0;var n;n=u,t=r(t),c(n,Array)?n.push(t):n[e]=t}),u}(this.keys),this},compact:function(){return this.copy().COMPACT()},toString:function(){function u(e,t){function r(e){return(t&&""!=t?[t,"[",e,"]"]:[e]).join("")}jQuery.each(e,function(e,t){var n;"object"==typeof t?u(t,r(e)):(n=i,e=r(e),c(t=t)&&!1!==t&&(e=[s(e)],!0!==t&&(e.push("="),e.push(s(t))),n.push(e.join(""))))})}var e=[],i=[],s=function(e){return e+="",e=encodeURIComponent(e),e=l?e.replace(/%20/g,"+"):e};return u(this.keys),0<i.length&&e.push(n),e.push(i.join(t)),e.join("")}},new r(location.search,location.hash)}}(jQuery.query||{});
|
||||
|
||||
@@ -824,6 +824,7 @@ VideoDetails = MediaDetails.extend(/** @lends wp.media.view.MediaFrame.VideoDeta
|
||||
|
||||
wp.ajax.send( 'set-attachment-thumbnail', {
|
||||
data : {
|
||||
_ajax_nonce: wp.media.view.settings.nonce.setAttachmentThumbnail,
|
||||
urls: urls,
|
||||
thumbnail_id: attachment.get( 'id' )
|
||||
}
|
||||
|
||||
2
wp-includes/js/media-audiovideo.min.js
vendored
2
wp-includes/js/media-audiovideo.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -44,6 +44,7 @@
|
||||
|
||||
var iframes = document.querySelectorAll( 'iframe[data-secret="' + data.secret + '"]' ),
|
||||
blockquotes = document.querySelectorAll( 'blockquote[data-secret="' + data.secret + '"]' ),
|
||||
allowedProtocols = new RegExp( '^https?:$', 'i' ),
|
||||
i, source, height, sourceURL, targetURL;
|
||||
|
||||
for ( i = 0; i < blockquotes.length; i++ ) {
|
||||
@@ -79,6 +80,11 @@
|
||||
sourceURL.href = source.getAttribute( 'src' );
|
||||
targetURL.href = data.value;
|
||||
|
||||
/* Only follow link if the protocol is in the allow list. */
|
||||
if ( ! allowedProtocols.test( targetURL.protocol ) ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Only continue if link hostname matches iframe's hostname. */
|
||||
if ( targetURL.host === sourceURL.host ) {
|
||||
if ( document.activeElement === source ) {
|
||||
|
||||
2
wp-includes/js/wp-embed.min.js
vendored
2
wp-includes/js/wp-embed.min.js
vendored
@@ -1,2 +1,2 @@
|
||||
/*! This file is auto-generated */
|
||||
!function(c,d){"use strict";var e=!1,n=!1;if(d.querySelector)if(c.addEventListener)e=!0;if(c.wp=c.wp||{},!c.wp.receiveEmbedMessage)if(c.wp.receiveEmbedMessage=function(e){var t=e.data;if(t)if(t.secret||t.message||t.value)if(!/[^a-zA-Z0-9]/.test(t.secret)){for(var r,a,i,s=d.querySelectorAll('iframe[data-secret="'+t.secret+'"]'),n=d.querySelectorAll('blockquote[data-secret="'+t.secret+'"]'),o=0;o<n.length;o++)n[o].style.display="none";for(o=0;o<s.length;o++)if(r=s[o],e.source===r.contentWindow){if(r.removeAttribute("style"),"height"===t.message){if(1e3<(i=parseInt(t.value,10)))i=1e3;else if(~~i<200)i=200;r.height=i}if("link"===t.message)if(a=d.createElement("a"),i=d.createElement("a"),a.href=r.getAttribute("src"),i.href=t.value,i.host===a.host)if(d.activeElement===r)c.top.location.href=t.value}}},e)c.addEventListener("message",c.wp.receiveEmbedMessage,!1),d.addEventListener("DOMContentLoaded",t,!1),c.addEventListener("load",t,!1);function t(){if(!n){n=!0;for(var e,t,r=-1!==navigator.appVersion.indexOf("MSIE 10"),a=!!navigator.userAgent.match(/Trident.*rv:11\./),i=d.querySelectorAll("iframe.wp-embedded-content"),s=0;s<i.length;s++){if(!(e=i[s]).getAttribute("data-secret"))t=Math.random().toString(36).substr(2,10),e.src+="#?secret="+t,e.setAttribute("data-secret",t);if(r||a)(t=e.cloneNode(!0)).removeAttribute("security"),e.parentNode.replaceChild(t,e)}}}}(window,document);
|
||||
!function(d,l){"use strict";var e=!1,n=!1;if(l.querySelector)if(d.addEventListener)e=!0;if(d.wp=d.wp||{},!d.wp.receiveEmbedMessage)if(d.wp.receiveEmbedMessage=function(e){var t=e.data;if(t)if(t.secret||t.message||t.value)if(!/[^a-zA-Z0-9]/.test(t.secret)){for(var r,i,a,s=l.querySelectorAll('iframe[data-secret="'+t.secret+'"]'),n=l.querySelectorAll('blockquote[data-secret="'+t.secret+'"]'),o=new RegExp("^https?:$","i"),c=0;c<n.length;c++)n[c].style.display="none";for(c=0;c<s.length;c++)if(r=s[c],e.source===r.contentWindow){if(r.removeAttribute("style"),"height"===t.message){if(1e3<(a=parseInt(t.value,10)))a=1e3;else if(~~a<200)a=200;r.height=a}if("link"===t.message)if(i=l.createElement("a"),a=l.createElement("a"),i.href=r.getAttribute("src"),a.href=t.value,o.test(a.protocol))if(a.host===i.host)if(l.activeElement===r)d.top.location.href=t.value}}},e)d.addEventListener("message",d.wp.receiveEmbedMessage,!1),l.addEventListener("DOMContentLoaded",t,!1),d.addEventListener("load",t,!1);function t(){if(!n){n=!0;for(var e,t,r=-1!==navigator.appVersion.indexOf("MSIE 10"),i=!!navigator.userAgent.match(/Trident.*rv:11\./),a=l.querySelectorAll("iframe.wp-embedded-content"),s=0;s<a.length;s++){if(!(e=a[s]).getAttribute("data-secret"))t=Math.random().toString(36).substr(2,10),e.src+="#?secret="+t,e.setAttribute("data-secret",t);if(r||i)(t=e.cloneNode(!0)).removeAttribute("security"),e.parentNode.replaceChild(t,e)}}}}(window,document);
|
||||
@@ -145,7 +145,7 @@ function determine_locale() {
|
||||
}
|
||||
|
||||
if ( ! empty( $_GET['wp_lang'] ) && ! empty( $GLOBALS['pagenow'] ) && 'wp-login.php' === $GLOBALS['pagenow'] ) {
|
||||
$determined_locale = sanitize_text_field( $_GET['wp_lang'] );
|
||||
$determined_locale = sanitize_locale_name( wp_unslash( $_GET['wp_lang'] ) );
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1493,7 +1493,7 @@ function wp_print_media_templates() {
|
||||
<div class="favicon">
|
||||
<img id="preview-favicon" src="{{ data.url }}" alt="<?php esc_attr_e( 'Preview as a browser icon' ); ?>" />
|
||||
</div>
|
||||
<span class="browser-title" aria-hidden="true"><# print( '<?php bloginfo( 'name' ); ?>' ) #></span>
|
||||
<span class="browser-title" aria-hidden="true"><# print( '<?php echo esc_js( get_bloginfo( 'name' ) ); ?>' ) #></span>
|
||||
</div>
|
||||
|
||||
<strong aria-hidden="true"><?php _e( 'As an app icon' ); ?></strong>
|
||||
|
||||
@@ -2338,6 +2338,7 @@ function gallery_shortcode( $attr ) {
|
||||
$attachments[ $val->ID ] = $_attachments[ $key ];
|
||||
}
|
||||
} elseif ( ! empty( $atts['exclude'] ) ) {
|
||||
$post_parent_id = $id;
|
||||
$attachments = get_children(
|
||||
array(
|
||||
'post_parent' => $id,
|
||||
@@ -2350,6 +2351,7 @@ function gallery_shortcode( $attr ) {
|
||||
)
|
||||
);
|
||||
} else {
|
||||
$post_parent_id = $id;
|
||||
$attachments = get_children(
|
||||
array(
|
||||
'post_parent' => $id,
|
||||
@@ -2362,6 +2364,17 @@ function gallery_shortcode( $attr ) {
|
||||
);
|
||||
}
|
||||
|
||||
if ( ! empty( $post_parent_id ) ) {
|
||||
$post_parent = get_post( $post_parent_id );
|
||||
|
||||
// terminate the shortcode execution if user cannot read the post or password-protected
|
||||
if (
|
||||
( ! is_post_publicly_viewable( $post_parent->ID ) && ! current_user_can( 'read_post', $post_parent->ID ) )
|
||||
|| post_password_required( $post_parent ) ) {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
if ( empty( $attachments ) ) {
|
||||
return '';
|
||||
}
|
||||
@@ -2688,6 +2701,15 @@ function wp_playlist_shortcode( $attr ) {
|
||||
$attachments = get_children( $args );
|
||||
}
|
||||
|
||||
if ( ! empty( $args['post_parent'] ) ) {
|
||||
$post_parent = get_post( $id );
|
||||
|
||||
// terminate the shortcode execution if user cannot read the post or password-protected
|
||||
if ( ! current_user_can( 'read_post', $post_parent->ID ) || post_password_required( $post_parent ) ) {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
if ( empty( $attachments ) ) {
|
||||
return '';
|
||||
}
|
||||
@@ -4372,7 +4394,8 @@ function wp_enqueue_media( $args = array() ) {
|
||||
/** This filter is documented in wp-admin/includes/media.php */
|
||||
'captions' => ! apply_filters( 'disable_captions', '' ),
|
||||
'nonce' => array(
|
||||
'sendToEditor' => wp_create_nonce( 'media-send-to-editor' ),
|
||||
'sendToEditor' => wp_create_nonce( 'media-send-to-editor' ),
|
||||
'setAttachmentThumbnail' => wp_create_nonce( 'set-attachment-thumbnail' ),
|
||||
),
|
||||
'post' => array(
|
||||
'id' => 0,
|
||||
|
||||
@@ -91,7 +91,6 @@ if ( ! function_exists( 'get_user_by' ) ) :
|
||||
*
|
||||
* @since 2.8.0
|
||||
* @since 4.4.0 Added 'ID' as an alias of 'id' for the `$field` parameter.
|
||||
* @since 5.8.0 Returns the global `$current_user` if it's the user being fetched.
|
||||
*
|
||||
* @global WP_User $current_user The current user object which holds the user data.
|
||||
*
|
||||
@@ -100,18 +99,12 @@ if ( ! function_exists( 'get_user_by' ) ) :
|
||||
* @return WP_User|false WP_User object on success, false on failure.
|
||||
*/
|
||||
function get_user_by( $field, $value ) {
|
||||
global $current_user;
|
||||
|
||||
$userdata = WP_User::get_data_by( $field, $value );
|
||||
|
||||
if ( ! $userdata ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( $current_user instanceof WP_User && $current_user->ID === (int) $userdata->ID ) {
|
||||
return $current_user;
|
||||
}
|
||||
|
||||
$user = new WP_User;
|
||||
$user->init( $userdata );
|
||||
|
||||
@@ -361,6 +354,8 @@ if ( ! function_exists( 'wp_mail' ) ) :
|
||||
$phpmailer->clearAttachments();
|
||||
$phpmailer->clearCustomHeaders();
|
||||
$phpmailer->clearReplyTos();
|
||||
$phpmailer->Body = '';
|
||||
$phpmailer->AltBody = '';
|
||||
|
||||
// Set "From" name and email.
|
||||
|
||||
|
||||
@@ -1088,9 +1088,10 @@ function post_custom( $key = '' ) {
|
||||
*
|
||||
* @since 1.2.0
|
||||
*
|
||||
* @internal This will probably change at some point...
|
||||
* @deprecated 6.0.2 Use get_post_meta() to retrieve post meta and render manually.
|
||||
*/
|
||||
function the_meta() {
|
||||
_deprecated_function( __FUNCTION__, '6.0.2', 'get_post_meta()' );
|
||||
$keys = get_post_custom_keys();
|
||||
if ( $keys ) {
|
||||
$li_html = '';
|
||||
@@ -1106,8 +1107,8 @@ function the_meta() {
|
||||
$html = sprintf(
|
||||
"<li><span class='post-meta-key'>%s</span> %s</li>\n",
|
||||
/* translators: %s: Post custom field name. */
|
||||
sprintf( _x( '%s:', 'Post custom field name' ), $key ),
|
||||
$value
|
||||
esc_html( sprintf( _x( '%s:', 'Post custom field name' ), $key ) ),
|
||||
esc_html( $value )
|
||||
);
|
||||
|
||||
/**
|
||||
|
||||
@@ -7694,36 +7694,6 @@ function wp_add_trashed_suffix_to_post_name_for_post( $post ) {
|
||||
return $post_name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Filters the SQL clauses of an attachment query to include filenames.
|
||||
*
|
||||
* @since 4.7.0
|
||||
* @access private
|
||||
*
|
||||
* @global wpdb $wpdb WordPress database abstraction object.
|
||||
*
|
||||
* @param string[] $clauses An array including WHERE, GROUP BY, JOIN, ORDER BY,
|
||||
* DISTINCT, fields (SELECT), and LIMITS clauses.
|
||||
* @return string[] The modified array of clauses.
|
||||
*/
|
||||
function _filter_query_attachment_filenames( $clauses ) {
|
||||
global $wpdb;
|
||||
remove_filter( 'posts_clauses', __FUNCTION__ );
|
||||
|
||||
// Add a LEFT JOIN of the postmeta table so we don't trample existing JOINs.
|
||||
$clauses['join'] .= " LEFT JOIN {$wpdb->postmeta} AS sq1 ON ( {$wpdb->posts}.ID = sq1.post_id AND sq1.meta_key = '_wp_attached_file' )";
|
||||
|
||||
$clauses['groupby'] = "{$wpdb->posts}.ID";
|
||||
|
||||
$clauses['where'] = preg_replace(
|
||||
"/\({$wpdb->posts}.post_content (NOT LIKE|LIKE) (\'[^']+\')\)/",
|
||||
'$0 OR ( sq1.meta_value $1 $2 )',
|
||||
$clauses['where']
|
||||
);
|
||||
|
||||
return $clauses;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the last changed time for the 'posts' cache group.
|
||||
*
|
||||
|
||||
@@ -1028,6 +1028,7 @@ function rest_cookie_check_errors( $result ) {
|
||||
$result = wp_verify_nonce( $nonce, 'wp_rest' );
|
||||
|
||||
if ( ! $result ) {
|
||||
add_filter( 'rest_send_nocache_headers', '__return_true', 20 );
|
||||
return new WP_Error( 'rest_cookie_invalid_nonce', __( 'Cookie check failed' ), array( 'status' => 403 ) );
|
||||
}
|
||||
|
||||
|
||||
@@ -330,24 +330,6 @@ class WP_REST_Server {
|
||||
|
||||
$this->send_header( 'Access-Control-Allow-Headers', implode( ', ', $allow_headers ) );
|
||||
|
||||
/**
|
||||
* Filters whether to send nocache headers on a REST API request.
|
||||
*
|
||||
* @since 4.4.0
|
||||
*
|
||||
* @param bool $rest_send_nocache_headers Whether to send no-cache headers.
|
||||
*/
|
||||
$send_no_cache_headers = apply_filters( 'rest_send_nocache_headers', is_user_logged_in() );
|
||||
if ( $send_no_cache_headers ) {
|
||||
foreach ( wp_get_nocache_headers() as $header => $header_value ) {
|
||||
if ( empty( $header_value ) ) {
|
||||
$this->remove_header( $header );
|
||||
} else {
|
||||
$this->send_header( $header, $header_value );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Filters whether the REST API is enabled.
|
||||
*
|
||||
@@ -402,10 +384,12 @@ class WP_REST_Server {
|
||||
* $_GET['_method']. If that is not set, we check for the HTTP_X_HTTP_METHOD_OVERRIDE
|
||||
* header.
|
||||
*/
|
||||
$method_overridden = false;
|
||||
if ( isset( $_GET['_method'] ) ) {
|
||||
$request->set_method( $_GET['_method'] );
|
||||
} elseif ( isset( $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'] ) ) {
|
||||
$request->set_method( $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'] );
|
||||
$method_overridden = true;
|
||||
}
|
||||
|
||||
$result = $this->check_authentication();
|
||||
@@ -464,6 +448,28 @@ class WP_REST_Server {
|
||||
*/
|
||||
$served = apply_filters( 'rest_pre_serve_request', false, $result, $request, $this );
|
||||
|
||||
/**
|
||||
* Filters whether to send nocache headers on a REST API request.
|
||||
*
|
||||
* @since 4.4.0
|
||||
* @since 6.x.x Moved the block to catch the filter added on rest_cookie_check_errors() from rest-api.php
|
||||
*
|
||||
* @param bool $rest_send_nocache_headers Whether to send no-cache headers.
|
||||
*/
|
||||
$send_no_cache_headers = apply_filters( 'rest_send_nocache_headers', is_user_logged_in() );
|
||||
|
||||
// send no cache headers if the $send_no_cache_headers is true
|
||||
// OR if the HTTP_X_HTTP_METHOD_OVERRIDE is used but resulted a 4xx response code.
|
||||
if ( $send_no_cache_headers || ( true === $method_overridden && strpos( $code, '4' ) === 0 ) ) {
|
||||
foreach ( wp_get_nocache_headers() as $header => $header_value ) {
|
||||
if ( empty( $header_value ) ) {
|
||||
$this->remove_header( $header );
|
||||
} else {
|
||||
$this->send_header( $header, $header_value );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! $served ) {
|
||||
if ( 'HEAD' === $request->get_method() ) {
|
||||
return null;
|
||||
|
||||
@@ -89,7 +89,7 @@ class WP_REST_Attachments_Controller extends WP_REST_Posts_Controller {
|
||||
|
||||
// Filter query clauses to include filenames.
|
||||
if ( isset( $query_args['s'] ) ) {
|
||||
add_filter( 'posts_clauses', '_filter_query_attachment_filenames' );
|
||||
add_filter( 'wp_allow_query_attachment_by_filename', '__return_true' );
|
||||
}
|
||||
|
||||
return $query_args;
|
||||
|
||||
@@ -210,7 +210,7 @@ class WP_REST_Pattern_Directory_Controller extends WP_REST_Controller {
|
||||
'title' => sanitize_text_field( $raw_pattern->title->rendered ),
|
||||
'content' => wp_kses_post( $raw_pattern->pattern_content ),
|
||||
'categories' => array_map( 'sanitize_title', $raw_pattern->category_slugs ),
|
||||
'keywords' => array_map( 'sanitize_title', $raw_pattern->keyword_slugs ),
|
||||
'keywords' => array_map( 'sanitize_text_field', explode( ',', $raw_pattern->meta->wpop_keywords ) ),
|
||||
'description' => sanitize_text_field( $raw_pattern->meta->wpop_description ),
|
||||
'viewport_width' => absint( $raw_pattern->meta->wpop_viewport_width ),
|
||||
);
|
||||
@@ -278,7 +278,7 @@ class WP_REST_Pattern_Directory_Controller extends WP_REST_Controller {
|
||||
),
|
||||
|
||||
'keywords' => array(
|
||||
'description' => __( "The pattern's keyword slugs." ),
|
||||
'description' => __( "The pattern's keywords." ),
|
||||
'type' => 'array',
|
||||
'uniqueItems' => true,
|
||||
'items' => array( 'type' => 'string' ),
|
||||
|
||||
@@ -134,6 +134,35 @@ class WP_REST_Terms_Controller extends WP_REST_Controller {
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the terms for a post can be read.
|
||||
*
|
||||
* @since 6.0.3
|
||||
*
|
||||
* @param WP_Post $post Post object.
|
||||
* @param WP_REST_Request $request Full details about the request.
|
||||
* @return bool Whether the terms for the post can be read.
|
||||
*/
|
||||
public function check_read_terms_permission_for_post( $post, $request ) {
|
||||
// If the requested post isn't associated with this taxonomy, deny access.
|
||||
if ( ! is_object_in_taxonomy( $post->post_type, $this->taxonomy ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Grant access if the post is publicly viewable.
|
||||
if ( is_post_publicly_viewable( $post ) ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Otherwise grant access if the post is readable by the logged in user.
|
||||
if ( current_user_can( 'read_post', $post->ID ) ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Otherwise, deny access.
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if a request has access to read terms in the specified taxonomy.
|
||||
*
|
||||
@@ -157,6 +186,30 @@ class WP_REST_Terms_Controller extends WP_REST_Controller {
|
||||
);
|
||||
}
|
||||
|
||||
if ( ! empty( $request['post'] ) ) {
|
||||
$post = get_post( $request['post'] );
|
||||
|
||||
if ( ! $post ) {
|
||||
return new WP_Error(
|
||||
'rest_post_invalid_id',
|
||||
__( 'Invalid post ID.' ),
|
||||
array(
|
||||
'status' => 400,
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
if ( ! $this->check_read_terms_permission_for_post( $post, $request ) ) {
|
||||
return new WP_Error(
|
||||
'rest_forbidden_context',
|
||||
__( 'Sorry, you are not allowed to view terms for this post.' ),
|
||||
array(
|
||||
'status' => rest_authorization_required_code(),
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -302,6 +302,9 @@ class WP_REST_Users_Controller extends WP_REST_Controller {
|
||||
}
|
||||
|
||||
if ( ! empty( $prepared_args['search'] ) ) {
|
||||
if ( ! current_user_can( 'list_users' ) ) {
|
||||
$prepared_args['search_columns'] = array( 'ID', 'user_login', 'user_nicename', 'display_name' );
|
||||
}
|
||||
$prepared_args['search'] = '*' . $prepared_args['search'] . '*';
|
||||
}
|
||||
/**
|
||||
|
||||
@@ -823,7 +823,7 @@ function wp_default_scripts( $scripts ) {
|
||||
// jQuery plugins.
|
||||
$scripts->add( 'jquery-color', '/wp-includes/js/jquery/jquery.color.min.js', array( 'jquery' ), '2.1.2', 1 );
|
||||
$scripts->add( 'schedule', '/wp-includes/js/jquery/jquery.schedule.js', array( 'jquery' ), '20m', 1 );
|
||||
$scripts->add( 'jquery-query', '/wp-includes/js/jquery/jquery.query.js', array( 'jquery' ), '2.1.7', 1 );
|
||||
$scripts->add( 'jquery-query', '/wp-includes/js/jquery/jquery.query.js', array( 'jquery' ), '2.2.3', 1 );
|
||||
$scripts->add( 'jquery-serialize-object', '/wp-includes/js/jquery/jquery.serialize-object.js', array( 'jquery' ), '0.2-wp', 1 );
|
||||
$scripts->add( 'jquery-hotkeys', "/wp-includes/js/jquery/jquery.hotkeys$suffix.js", array( 'jquery' ), '0.0.2m', 1 );
|
||||
$scripts->add( 'jquery-table-hotkeys', "/wp-includes/js/jquery/jquery.table-hotkeys$suffix.js", array( 'jquery', 'jquery-hotkeys' ), false, 1 );
|
||||
|
||||
@@ -170,7 +170,45 @@ function has_shortcode( $content, $tag ) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Search content for shortcodes and filter shortcodes through their hooks.
|
||||
* Returns a list of registered shortcode names found in the given content.
|
||||
*
|
||||
* Example usage:
|
||||
*
|
||||
* get_shortcode_tags_in_content( '[audio src="file.mp3"][/audio] [foo] [gallery ids="1,2,3"]' );
|
||||
* // array( 'audio', 'gallery' )
|
||||
*
|
||||
* @since 6.3.2
|
||||
*
|
||||
* @param string $content The content to check.
|
||||
* @return string[] An array of registered shortcode names found in the content.
|
||||
*/
|
||||
function get_shortcode_tags_in_content( $content ) {
|
||||
if ( false === strpos( $content, '[' ) ) {
|
||||
return array();
|
||||
}
|
||||
|
||||
preg_match_all( '/' . get_shortcode_regex() . '/', $content, $matches, PREG_SET_ORDER );
|
||||
if ( empty( $matches ) ) {
|
||||
return array();
|
||||
}
|
||||
|
||||
$tags = array();
|
||||
foreach ( $matches as $shortcode ) {
|
||||
$tags[] = $shortcode[2];
|
||||
|
||||
if ( ! empty( $shortcode[5] ) ) {
|
||||
$deep_tags = get_shortcode_tags_in_content( $shortcode[5] );
|
||||
if ( ! empty( $deep_tags ) ) {
|
||||
$tags = array_merge( $tags, $deep_tags );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $tags;
|
||||
}
|
||||
|
||||
/**
|
||||
* Searches content for shortcodes and filter shortcodes through their hooks.
|
||||
*
|
||||
* This function is an alias for do_shortcode().
|
||||
*
|
||||
|
||||
@@ -1571,15 +1571,10 @@ function update_user_caches( $user ) {
|
||||
*
|
||||
* @since 3.0.0
|
||||
* @since 4.4.0 'clean_user_cache' action was added.
|
||||
* @since 5.8.0 Refreshes the global user instance if cleaning the user cache for the current user.
|
||||
*
|
||||
* @global WP_User $current_user The current user object which holds the user data.
|
||||
*
|
||||
* @param WP_User|int $user User object or ID to be cleaned from the cache
|
||||
*/
|
||||
function clean_user_cache( $user ) {
|
||||
global $current_user;
|
||||
|
||||
if ( is_numeric( $user ) ) {
|
||||
$user = new WP_User( $user );
|
||||
}
|
||||
@@ -1602,13 +1597,6 @@ function clean_user_cache( $user ) {
|
||||
* @param WP_User $user User object.
|
||||
*/
|
||||
do_action( 'clean_user_cache', $user->ID, $user );
|
||||
|
||||
// Refresh the global user instance if the cleaning current user.
|
||||
if ( get_current_user_id() === (int) $user->ID ) {
|
||||
$user_id = (int) $user->ID;
|
||||
$current_user = null;
|
||||
wp_set_current_user( $user_id, '' );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
*
|
||||
* @global string $wp_version
|
||||
*/
|
||||
$wp_version = '5.8.3';
|
||||
$wp_version = '5.8.8';
|
||||
|
||||
/**
|
||||
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
|
||||
|
||||
@@ -1534,7 +1534,7 @@ function wp_widget_rss_output( $rss, $args = array() ) {
|
||||
|
||||
if ( is_wp_error( $rss ) ) {
|
||||
if ( is_admin() || current_user_can( 'manage_options' ) ) {
|
||||
echo '<p><strong>' . __( 'RSS Error:' ) . '</strong> ' . $rss->get_error_message() . '</p>';
|
||||
echo '<p><strong>' . __( 'RSS Error:' ) . '</strong> ' . esc_html( $rss->get_error_message() ) . '</p>';
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -1657,7 +1657,7 @@ function wp_widget_rss_form( $args, $inputs = null ) {
|
||||
$args['show_date'] = isset( $args['show_date'] ) ? (int) $args['show_date'] : (int) $inputs['show_date'];
|
||||
|
||||
if ( ! empty( $args['error'] ) ) {
|
||||
echo '<p class="widget-error"><strong>' . __( 'RSS Error:' ) . '</strong> ' . $args['error'] . '</p>';
|
||||
echo '<p class="widget-error"><strong>' . __( 'RSS Error:' ) . '</strong> ' . esc_html( $args['error'] ) . '</p>';
|
||||
}
|
||||
|
||||
$esc_number = esc_attr( $args['number'] );
|
||||
|
||||
@@ -65,6 +65,9 @@ if ( 0 === $count ) {
|
||||
wp_die( __( 'There doesn’t seem to be any new mail.' ) );
|
||||
}
|
||||
|
||||
// Always run as an unauthenticated user.
|
||||
wp_set_current_user( 0 );
|
||||
|
||||
for ( $i = 1; $i <= $count; $i++ ) {
|
||||
|
||||
$message = $pop3->get( $i );
|
||||
@@ -131,8 +134,6 @@ for ( $i = 1; $i <= $count; $i++ ) {
|
||||
}
|
||||
$author = sanitize_email( $author );
|
||||
if ( is_email( $author ) ) {
|
||||
/* translators: %s: Post author email address. */
|
||||
echo '<p>' . sprintf( __( 'Author is %s' ), $author ) . '</p>';
|
||||
$userdata = get_user_by( 'email', $author );
|
||||
if ( ! empty( $userdata ) ) {
|
||||
$post_author = $userdata->ID;
|
||||
|
||||
@@ -13,6 +13,9 @@ if ( empty( $wp ) ) {
|
||||
wp( array( 'tb' => '1' ) );
|
||||
}
|
||||
|
||||
// Always run as an unauthenticated user.
|
||||
wp_set_current_user( 0 );
|
||||
|
||||
/**
|
||||
* Response to a trackback.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user