<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[54085] trunk: Media: revert the multi-mime feature.</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { white-space: pre-line; overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta" style="font-size: 105%">
<dt style="float: left; width: 6em; font-weight: bold">Revision</dt> <dd><a style="font-weight: bold" href="https://core.trac.wordpress.org/changeset/54085">54085</a><script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","description":"Review this Commit","action":{"@type":"ViewAction","url":"https://core.trac.wordpress.org/changeset/54085","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>adamsilverstein</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2022-09-06 21:11:41 +0000 (Tue, 06 Sep 2022)</dd>
</dl>
<pre style='padding-left: 1em; margin: 2em 0; border-left: 2px solid #ccc; line-height: 1.25; font-size: 105%; font-family: sans-serif'>Media: revert the multi-mime feature.
This feature isn't quite ready to land.
Reverts <a href="https://core.trac.wordpress.org/changeset/53786">r53786</a>, <a href="https://core.trac.wordpress.org/changeset/53848">r53848</a>, <a href="https://core.trac.wordpress.org/changeset/53847">r53847</a>, <a href="https://core.trac.wordpress.org/changeset/53845">r53845</a>, <a href="https://core.trac.wordpress.org/changeset/53751">r53751</a>.
Props flixos90, azaozz, dd32.
See <a href="https://core.trac.wordpress.org/ticket/55443">#55443</a>.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunksrcjs_enqueuesvendorpluploadhandlersjs">trunk/src/js/_enqueues/vendor/plupload/handlers.js</a></li>
<li><a href="#trunksrcjs_enqueuesvendorpluploadwppluploadjs">trunk/src/js/_enqueues/vendor/plupload/wp-plupload.js</a></li>
<li><a href="#trunksrcwpadminincludesimagephp">trunk/src/wp-admin/includes/image.php</a></li>
<li><a href="#trunksrcwpincludesclasswpimageeditorphp">trunk/src/wp-includes/class-wp-image-editor.php</a></li>
<li><a href="#trunksrcwpincludesmediaphp">trunk/src/wp-includes/media.php</a></li>
<li><a href="#trunksrcwpincludespostphp">trunk/src/wp-includes/post.php</a></li>
<li><a href="#trunksrcwpincludesrestapiendpointsclasswprestattachmentscontrollerphp">trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php</a></li>
<li><a href="#trunktestsphpunittestsimageeditorphp">trunk/tests/phpunit/tests/image/editor.php</a></li>
<li><a href="#trunktestsphpunittestsimagefunctionsphp">trunk/tests/phpunit/tests/image/functions.php</a></li>
<li><a href="#trunktestsphpunittestsmediaphp">trunk/tests/phpunit/tests/media.php</a></li>
<li><a href="#trunktestsphpunittestsrestapirestattachmentscontrollerphp">trunk/tests/phpunit/tests/rest-api/rest-attachments-controller.php</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunksrcjs_enqueuesvendorpluploadhandlersjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/js/_enqueues/vendor/plupload/handlers.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/js/_enqueues/vendor/plupload/handlers.js 2022-09-06 16:16:07 UTC (rev 54084)
+++ trunk/src/js/_enqueues/vendor/plupload/handlers.js 2022-09-06 21:11:41 UTC (rev 54085)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -486,7 +486,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> times = tryAgainCount[ file.id ];
</span><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- if ( times && times > 8 ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ if ( times && times > 4 ) {
</ins><span class="cx" style="display: block; padding: 0 10px"> /*
</span><span class="cx" style="display: block; padding: 0 10px"> * The file may have been uploaded and attachment post created,
</span><span class="cx" style="display: block; padding: 0 10px"> * but post-processing and resizing failed...
</span></span></pre></div>
<a id="trunksrcjs_enqueuesvendorpluploadwppluploadjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/js/_enqueues/vendor/plupload/wp-plupload.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/js/_enqueues/vendor/plupload/wp-plupload.js 2022-09-06 16:16:07 UTC (rev 54084)
+++ trunk/src/js/_enqueues/vendor/plupload/wp-plupload.js 2022-09-06 21:11:41 UTC (rev 54085)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -138,7 +138,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> times = tryAgainCount[ file.id ];
</span><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- if ( times && times > 8 ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ if ( times && times > 4 ) {
</ins><span class="cx" style="display: block; padding: 0 10px"> /*
</span><span class="cx" style="display: block; padding: 0 10px"> * The file may have been uploaded and attachment post created,
</span><span class="cx" style="display: block; padding: 0 10px"> * but post-processing and resizing failed...
</span></span></pre></div>
<a id="trunksrcwpadminincludesimagephp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-admin/includes/image.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-admin/includes/image.php 2022-09-06 16:16:07 UTC (rev 54084)
+++ trunk/src/wp-admin/includes/image.php 2022-09-06 21:11:41 UTC (rev 54085)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -71,29 +71,22 @@
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * Compares the existing image sub-sizes (as saved in the attachment meta)
- * to the currently registered image sub-sizes, and returns the difference.
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * Compare the existing image sub-sizes (as saved in the attachment meta)
+ * to the currently registered image sub-sizes, and return the difference.
</ins><span class="cx" style="display: block; padding: 0 10px"> *
</span><span class="cx" style="display: block; padding: 0 10px"> * Registered sub-sizes that are larger than the image are skipped.
</span><span class="cx" style="display: block; padding: 0 10px"> *
</span><span class="cx" style="display: block; padding: 0 10px"> * @since 5.3.0
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * @since 6.1.0 The $mime_type parameter was added.
</del><span class="cx" style="display: block; padding: 0 10px"> *
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * @param int $attachment_id The image attachment post ID.
- * @param string $mime_type Optional. The mime type to check for missing sizes. Default is the primary image mime.
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * @param int $attachment_id The image attachment post ID.
</ins><span class="cx" style="display: block; padding: 0 10px"> * @return array[] Associative array of arrays of image sub-size information for
</span><span class="cx" style="display: block; padding: 0 10px"> * missing image sizes, keyed by image size name.
</span><span class="cx" style="display: block; padding: 0 10px"> */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-function wp_get_missing_image_subsizes( $attachment_id, $mime_type = '' ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+function wp_get_missing_image_subsizes( $attachment_id ) {
</ins><span class="cx" style="display: block; padding: 0 10px"> if ( ! wp_attachment_is_image( $attachment_id ) ) {
</span><span class="cx" style="display: block; padding: 0 10px"> return array();
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $primary_mime_type = get_post_mime_type( get_post( $attachment_id ) );
- if ( ! $mime_type ) {
- $mime_type = $primary_mime_type;
- }
-
</del><span class="cx" style="display: block; padding: 0 10px"> $registered_sizes = wp_get_registered_image_subsizes();
</span><span class="cx" style="display: block; padding: 0 10px"> $image_meta = wp_get_attachment_metadata( $attachment_id );
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -136,38 +129,19 @@
</span><span class="cx" style="display: block; padding: 0 10px"> * However we keep the old sub-sizes with the previous dimensions
</span><span class="cx" style="display: block; padding: 0 10px"> * as the image may have been used in an older post.
</span><span class="cx" style="display: block; padding: 0 10px"> */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $missing_sizes = array();
- foreach ( $possible_sizes as $size_name => $size_data ) {
- if ( ! isset( $image_meta['sizes'][ $size_name ] ) ) {
- $missing_sizes[ $size_name ] = $size_data;
- continue;
- }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $missing_sizes = array_diff_key( $possible_sizes, $image_meta['sizes'] );
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- if ( ( isset( $size_data['mime-type'] ) && $size_data['mime-type'] === $mime_type ) || isset( $size_data['sources'][ $mime_type ] ) ) {
- continue;
- }
-
- $missing_sizes[ $size_name ] = $size_data;
- }
-
- // Filter secondary mime types to those sizes that are enabled.
- if ( $primary_mime_type !== $mime_type ) {
- $missing_sizes = _wp_filter_image_sizes_additional_mime_type_support( $missing_sizes, $attachment_id );
- }
-
</del><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="cx" style="display: block; padding: 0 10px"> * Filters the array of missing image sub-sizes for an uploaded image.
</span><span class="cx" style="display: block; padding: 0 10px"> *
</span><span class="cx" style="display: block; padding: 0 10px"> * @since 5.3.0
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * @since 6.1.0 The $mime_type filter parameter was added.
</del><span class="cx" style="display: block; padding: 0 10px"> *
</span><span class="cx" style="display: block; padding: 0 10px"> * @param array[] $missing_sizes Associative array of arrays of image sub-size information for
</span><span class="cx" style="display: block; padding: 0 10px"> * missing image sizes, keyed by image size name.
</span><span class="cx" style="display: block; padding: 0 10px"> * @param array $image_meta The image meta data.
</span><span class="cx" style="display: block; padding: 0 10px"> * @param int $attachment_id The image attachment post ID.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * @param string $mime_type The image mime type to get missing sizes for.
</del><span class="cx" style="display: block; padding: 0 10px"> */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- return apply_filters( 'wp_get_missing_image_subsizes', $missing_sizes, $image_meta, $attachment_id, $mime_type );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ return apply_filters( 'wp_get_missing_image_subsizes', $missing_sizes, $image_meta, $attachment_id );
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -175,7 +149,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> * create them and update the image meta data.
</span><span class="cx" style="display: block; padding: 0 10px"> *
</span><span class="cx" style="display: block; padding: 0 10px"> * @since 5.3.0
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * @since 6.1.0 Now supports additional mime types, creating the additional sub-sizes and 'full' sized images.
</del><span class="cx" style="display: block; padding: 0 10px"> *
</span><span class="cx" style="display: block; padding: 0 10px"> * @param int $attachment_id The image attachment post ID.
</span><span class="cx" style="display: block; padding: 0 10px"> * @return array|WP_Error The updated image meta data array or WP_Error object
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -194,33 +167,14 @@
</span><span class="cx" style="display: block; padding: 0 10px"> return new WP_Error( 'invalid_attachment', __( 'The attached file cannot be found.' ) );
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> } else {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- // Get the primary and additional mime types to generate.
- list( $primary_mime_type, $additional_mime_types ) = _wp_get_primary_and_additional_mime_types( $image_file, $attachment_id );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $missing_sizes = wp_get_missing_image_subsizes( $attachment_id );
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- // Generate missing 'full' image files for additional mime types.
- if ( ! empty( $additional_mime_types ) ) {
- if ( isset( $image_meta['sources'] ) ) {
- $missing_mime_types = array_diff( $additional_mime_types, array_keys( $image_meta['sources'] ) );
- } else {
- $missing_mime_types = $additional_mime_types;
- }
- if ( ! empty( $missing_mime_types ) ) {
- $image_meta = _wp_make_additional_mime_types( $missing_mime_types, $image_file, $image_meta, $attachment_id );
- }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ if ( empty( $missing_sizes ) ) {
+ return $image_meta;
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- // Generate missing image sub-sizes for each mime type.
- $all_mime_types = array_merge( array( $primary_mime_type ), $additional_mime_types );
- foreach ( $all_mime_types as $mime_type ) {
- $missing_sizes = wp_get_missing_image_subsizes( $attachment_id, $mime_type );
-
- if ( empty( $missing_sizes ) ) {
- continue;
- }
-
- // This also updates the image meta.
- $image_meta = _wp_make_subsizes( $missing_sizes, $image_file, $image_meta, $attachment_id, $mime_type );
- }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ // This also updates the image meta.
+ $image_meta = _wp_make_subsizes( $missing_sizes, $image_file, $image_meta, $attachment_id );
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> /** This filter is documented in wp-admin/includes/image.php */
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -268,13 +222,12 @@
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * Creates image mime variations and sub-sizes, adds the new data to the image meta `sizes` array, and updates the image metadata.
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * Creates image sub-sizes, adds the new data to the image meta `sizes` array, and updates the image metadata.
</ins><span class="cx" style="display: block; padding: 0 10px"> *
</span><span class="cx" style="display: block; padding: 0 10px"> * Intended for use after an image is uploaded. Saves/updates the image metadata after each
</span><span class="cx" style="display: block; padding: 0 10px"> * sub-size is created. If there was an error, it is added to the returned image metadata array.
</span><span class="cx" style="display: block; padding: 0 10px"> *
</span><span class="cx" style="display: block; padding: 0 10px"> * @since 5.3.0
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * @since 6.1.0 Generates sub-sizes in alternate mime types based on the `wp_image_mime_transforms` filter.
</del><span class="cx" style="display: block; padding: 0 10px"> *
</span><span class="cx" style="display: block; padding: 0 10px"> * @param string $file Full path to the image file.
</span><span class="cx" style="display: block; padding: 0 10px"> * @param int $attachment_id Attachment ID to process.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -295,7 +248,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 'file' => _wp_relative_upload_path( $file ),
</span><span class="cx" style="display: block; padding: 0 10px"> 'filesize' => wp_filesize( $file ),
</span><span class="cx" style="display: block; padding: 0 10px"> 'sizes' => array(),
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- 'sources' => array(),
</del><span class="cx" style="display: block; padding: 0 10px"> );
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> // Fetch additional metadata from EXIF/IPTC.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -305,127 +257,9 @@
</span><span class="cx" style="display: block; padding: 0 10px"> $image_meta['image_meta'] = $exif_meta;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- // Get the primary and additional mime types to generate.
- list( $primary_mime_type, $additional_mime_types ) = _wp_get_primary_and_additional_mime_types( $file, $attachment_id );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ // Do not scale (large) PNG images. May result in sub-sizes that have greater file size than the original. See #48736.
+ if ( 'image/png' !== $imagesize['mime'] ) {
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- list( $editor, $resized, $rotated ) = _wp_maybe_scale_and_rotate_image( $file, $attachment_id, $imagesize, $exif_meta, $primary_mime_type );
- if ( is_wp_error( $editor ) ) {
- return $image_meta;
- }
- $suffix = _wp_get_image_suffix( $resized, $rotated );
-
- // Save image only if either it was modified or if the primary mime type is different from the original.
- if ( ! empty( $suffix ) || $primary_mime_type !== $imagesize['mime'] ) {
- $saved = $editor->save( $editor->generate_filename( $suffix ) );
-
- if ( ! is_wp_error( $saved ) ) {
- $image_meta = _wp_image_meta_replace_original( $saved, $file, $image_meta, $attachment_id );
-
- // If the image was rotated update the stored EXIF data.
- if ( true === $rotated && ! empty( $image_meta['image_meta']['orientation'] ) ) {
- $image_meta['image_meta']['orientation'] = 1;
- }
- } else {
- // TODO: Log errors.
- }
- }
-
- // Set 'sources' for the primary mime type.
- $image_meta['sources'][ $primary_mime_type ] = _wp_get_sources_from_meta( $image_meta );
-
- /*
- * Initial save of the new metadata.
- * At this point the file was uploaded and moved to the uploads directory
- * but the image sub-sizes haven't been created yet and the `sizes` array is empty.
- */
- wp_update_attachment_metadata( $attachment_id, $image_meta );
-
- if ( ! empty( $additional_mime_types ) ) {
- // Use the original file's exif_meta orientation and size information for secondary mime generation to ensure
- // sub-sized images are correctly scaled and rotated.
-
- // Save data.
- $saved_meta = array();
- $saved_meta['orientation'] = $image_meta['image_meta']['orientation'];
- $saved_meta['width'] = $image_meta['width'];
- $saved_meta['height'] = $image_meta['height'];
-
- // Temporarily set the image meta to the original file's meta.
- $image_meta['image_meta']['orientation'] = $exif_meta['orientation'];
- $image_meta['width'] = $imagesize[0];
- $image_meta['height'] = $imagesize[1];
-
- $image_meta = _wp_make_additional_mime_types( $additional_mime_types, $file, $image_meta, $attachment_id );
-
- // Restore the saved meta data.
- $image_meta['image_meta']['orientation'] = $saved_meta['orientation'];
- $image_meta['width'] = $saved_meta['width'];
- $image_meta['height'] = $saved_meta['height'];
-
- }
-
- $new_sizes = wp_get_registered_image_subsizes();
-
- /**
- * Filters the image sizes automatically generated when uploading an image.
- *
- * @since 2.9.0
- * @since 4.4.0 Added the `$image_meta` argument.
- * @since 5.3.0 Added the `$attachment_id` argument.
- *
- * @param array $new_sizes Associative array of image sizes to be created.
- * @param array $image_meta The image meta data: width, height, file, sizes, etc.
- * @param int $attachment_id The attachment post ID for the image.
- */
- $new_sizes = apply_filters( 'intermediate_image_sizes_advanced', $new_sizes, $image_meta, $attachment_id );
-
- $image_meta = _wp_make_subsizes( $new_sizes, $file, $image_meta, $attachment_id, $primary_mime_type );
-
- // Filter secondary mime types to those sizes that are enabled.
- $new_sizes = _wp_filter_image_sizes_additional_mime_type_support( $new_sizes, $attachment_id );
-
- foreach ( $additional_mime_types as $additional_mime_type ) {
- $image_meta = _wp_make_subsizes( $new_sizes, $file, $image_meta, $attachment_id, $additional_mime_type );
- }
-
- return $image_meta;
-}
-
-/**
- * Returns a WP_Image_Editor instance where the image file has been scaled and rotated as necessary.
- *
- * @since 6.1.0
- * @access private
- *
- * @param string $file Full path to the image file.
- * @param int $attachment_id Attachment ID.
- * @param array $imagesize {
- * Indexed array of the image width and height in pixels.
- *
- * @type int $0 The image width.
- * @type int $1 The image height.
- * }
- * @param array|null $exif_meta EXIF metadata if extracted from the image file.
- * @param string $mime_type Output mime type.
- * @return array Array with three entries: The WP_Image_Editor instance, whether the image was resized, and whether the
- * image was rotated (booleans). Each entry can alternatively be a WP_Error in case something went wrong.
- */
-function _wp_maybe_scale_and_rotate_image( $file, $attachment_id, $imagesize, $exif_meta, $mime_type ) {
- $resized = false;
- $rotated = false;
-
- $editor = wp_get_image_editor( $file, array( 'mime_type' => $mime_type ) );
- if ( is_wp_error( $editor ) ) {
- // This image cannot be edited.
- return array( $editor, $resized, $rotated );
- }
-
- if ( ! empty( $mime_type ) ) {
- $editor->set_output_mime_type( $mime_type );
- }
-
- // Do not scale (large) PNG images. May result in sub-sizes that have greater file size than the original. See #48736.
- if ( 'image/png' !== $mime_type ) {
</del><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="cx" style="display: block; padding: 0 10px"> * Filters the "BIG image" threshold value.
</span><span class="cx" style="display: block; padding: 0 10px"> *
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -451,68 +285,99 @@
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> // If the original image's dimensions are over the threshold,
</span><span class="cx" style="display: block; padding: 0 10px"> // scale the image and use it as the "full" size.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- if ( $threshold && ( $imagesize[0] > $threshold || $imagesize[1] > $threshold ) ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ if ( $threshold && ( $image_meta['width'] > $threshold || $image_meta['height'] > $threshold ) ) {
+ $editor = wp_get_image_editor( $file );
+
+ if ( is_wp_error( $editor ) ) {
+ // This image cannot be edited.
+ return $image_meta;
+ }
+
</ins><span class="cx" style="display: block; padding: 0 10px"> // Resize the image.
</span><span class="cx" style="display: block; padding: 0 10px"> $resized = $editor->resize( $threshold, $threshold );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $rotated = null;
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> // If there is EXIF data, rotate according to EXIF Orientation.
</span><span class="cx" style="display: block; padding: 0 10px"> if ( ! is_wp_error( $resized ) && is_array( $exif_meta ) ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $rotated = $editor->maybe_exif_rotate();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $resized = $editor->maybe_exif_rotate();
+ $rotated = $resized;
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+ if ( ! is_wp_error( $resized ) ) {
+ // Append "-scaled" to the image file name. It will look like "my_image-scaled.jpg".
+ // This doesn't affect the sub-sizes names as they are generated from the original image (for best quality).
+ $saved = $editor->save( $editor->generate_filename( 'scaled' ) );
+
+ if ( ! is_wp_error( $saved ) ) {
+ $image_meta = _wp_image_meta_replace_original( $saved, $file, $image_meta, $attachment_id );
+
+ // If the image was rotated update the stored EXIF data.
+ if ( true === $rotated && ! empty( $image_meta['image_meta']['orientation'] ) ) {
+ $image_meta['image_meta']['orientation'] = 1;
+ }
+ } else {
+ // TODO: Log errors.
+ }
+ } else {
+ // TODO: Log errors.
+ }
</ins><span class="cx" style="display: block; padding: 0 10px"> } elseif ( ! empty( $exif_meta['orientation'] ) && 1 !== (int) $exif_meta['orientation'] ) {
</span><span class="cx" style="display: block; padding: 0 10px"> // Rotate the whole original image if there is EXIF data and "orientation" is not 1.
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+ $editor = wp_get_image_editor( $file );
+
+ if ( is_wp_error( $editor ) ) {
+ // This image cannot be edited.
+ return $image_meta;
+ }
+
+ // Rotate the image.
</ins><span class="cx" style="display: block; padding: 0 10px"> $rotated = $editor->maybe_exif_rotate();
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+ if ( true === $rotated ) {
+ // Append `-rotated` to the image file name.
+ $saved = $editor->save( $editor->generate_filename( 'rotated' ) );
+
+ if ( ! is_wp_error( $saved ) ) {
+ $image_meta = _wp_image_meta_replace_original( $saved, $file, $image_meta, $attachment_id );
+
+ // Update the stored EXIF data.
+ if ( ! empty( $image_meta['image_meta']['orientation'] ) ) {
+ $image_meta['image_meta']['orientation'] = 1;
+ }
+ } else {
+ // TODO: Log errors.
+ }
+ }
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- return array( $editor, $resized, $rotated );
-}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ /*
+ * Initial save of the new metadata.
+ * At this point the file was uploaded and moved to the uploads directory
+ * but the image sub-sizes haven't been created yet and the `sizes` array is empty.
+ */
+ wp_update_attachment_metadata( $attachment_id, $image_meta );
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-/**
- * Gets the suffix to use for image files based on resizing and rotating.
- *
- * @since 6.1.0
- * @access private
- *
- * @param bool|WP_Error Whether the image was resized, or an error if resizing failed.
- * @param bool|WP_Error Whether the image was rotated, or an error if rotating failed.
- * @return string The suffix to use for the file name, or empty string if none.
- */
-function _wp_get_image_suffix( $resized, $rotated ) {
- if ( $resized && ! is_wp_error( $resized ) ) {
- // Append "-scaled" to the image file name. It will look like "my_image-scaled.jpg".
- // This doesn't affect the sub-sizes names as they are generated from the original image (for best quality).
- return 'scaled';
- }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $new_sizes = wp_get_registered_image_subsizes();
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- if ( true === $rotated ) {
- // Append `-rotated` to the image file name.
- return 'rotated';
- }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ /**
+ * Filters the image sizes automatically generated when uploading an image.
+ *
+ * @since 2.9.0
+ * @since 4.4.0 Added the `$image_meta` argument.
+ * @since 5.3.0 Added the `$attachment_id` argument.
+ *
+ * @param array $new_sizes Associative array of image sizes to be created.
+ * @param array $image_meta The image meta data: width, height, file, sizes, etc.
+ * @param int $attachment_id The attachment post ID for the image.
+ */
+ $new_sizes = apply_filters( 'intermediate_image_sizes_advanced', $new_sizes, $image_meta, $attachment_id );
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- if ( is_wp_error( $resized ) || is_wp_error( $rotated ) ) {
- // TODO: Log errors.
- }
- return '';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ return _wp_make_subsizes( $new_sizes, $file, $image_meta, $attachment_id );
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * Gets a sources array element from a meta.
- *
- * @since 6.1.0
- * @access private
- *
- * @param array $meta The meta to get the source from.
- * @return array The source array element.
- */
-function _wp_get_sources_from_meta( $meta ) {
- return array(
- 'file' => isset( $meta['file'] ) ? wp_basename( $meta['file'] ) : '',
- 'filesize' => isset( $meta['filesize'] ) ? $meta['filesize'] : wp_filesize( $meta['path'] ),
- );
-}
-
-/**
</del><span class="cx" style="display: block; padding: 0 10px"> * Low-level function to create image sub-sizes.
</span><span class="cx" style="display: block; padding: 0 10px"> *
</span><span class="cx" style="display: block; padding: 0 10px"> * Updates the image meta after each sub-size is created.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -519,26 +384,20 @@
</span><span class="cx" style="display: block; padding: 0 10px"> * Errors are stored in the returned image metadata array.
</span><span class="cx" style="display: block; padding: 0 10px"> *
</span><span class="cx" style="display: block; padding: 0 10px"> * @since 5.3.0
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * @since 6.1.0 The $mime_type parameter was added.
</del><span class="cx" style="display: block; padding: 0 10px"> * @access private
</span><span class="cx" style="display: block; padding: 0 10px"> *
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * @param array $new_sizes Array defining what sizes to create.
- * @param string $file Full path to the image file.
- * @param array $image_meta The attachment meta data array.
- * @param int $attachment_id Attachment ID to process.
- * @param string $mime_type Optional. The mime type to check for missing sizes. Default is the image mime of $file.
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * @param array $new_sizes Array defining what sizes to create.
+ * @param string $file Full path to the image file.
+ * @param array $image_meta The attachment meta data array.
+ * @param int $attachment_id Attachment ID to process.
</ins><span class="cx" style="display: block; padding: 0 10px"> * @return array The attachment meta data with updated `sizes` array. Includes an array of errors encountered while resizing.
</span><span class="cx" style="display: block; padding: 0 10px"> */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-function _wp_make_subsizes( $new_sizes, $file, $image_meta, $attachment_id, $mime_type = '' ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+function _wp_make_subsizes( $new_sizes, $file, $image_meta, $attachment_id ) {
</ins><span class="cx" style="display: block; padding: 0 10px"> if ( empty( $image_meta ) || ! is_array( $image_meta ) ) {
</span><span class="cx" style="display: block; padding: 0 10px"> // Not an image attachment.
</span><span class="cx" style="display: block; padding: 0 10px"> return array();
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- if ( ! $mime_type ) {
- $mime_type = wp_get_image_mime( $file );
- }
-
</del><span class="cx" style="display: block; padding: 0 10px"> // Check if any of the new sizes already exist.
</span><span class="cx" style="display: block; padding: 0 10px"> if ( isset( $image_meta['sizes'] ) && is_array( $image_meta['sizes'] ) ) {
</span><span class="cx" style="display: block; padding: 0 10px"> foreach ( $image_meta['sizes'] as $size_name => $size_meta ) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -548,11 +407,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> * To change the behavior, unset changed/mismatched sizes in the `sizes` array in image meta.
</span><span class="cx" style="display: block; padding: 0 10px"> */
</span><span class="cx" style="display: block; padding: 0 10px"> if ( array_key_exists( $size_name, $new_sizes ) ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- // Unset the size if it is either the required mime type already exists either as main mime type or
- // within sources.
- if ( $size_meta['mime-type'] === $mime_type || isset( $size_meta['sources'][ $mime_type ] ) ) {
- unset( $new_sizes[ $size_name ] );
- }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ unset( $new_sizes[ $size_name ] );
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> } else {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -578,7 +433,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> $new_sizes = array_filter( array_merge( $priority, $new_sizes ) );
</span><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $editor = wp_get_image_editor( $file, array( 'mime_type' => $mime_type ) );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $editor = wp_get_image_editor( $file );
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> if ( is_wp_error( $editor ) ) {
</span><span class="cx" style="display: block; padding: 0 10px"> // The image cannot be edited.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -585,8 +440,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> return $image_meta;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $editor->set_output_mime_type( $mime_type );
-
</del><span class="cx" style="display: block; padding: 0 10px"> // If stored EXIF data exists, rotate the source image before creating sub-sizes.
</span><span class="cx" style="display: block; padding: 0 10px"> if ( ! empty( $image_meta['image_meta'] ) ) {
</span><span class="cx" style="display: block; padding: 0 10px"> $rotated = $editor->maybe_exif_rotate();
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -604,22 +457,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> // TODO: Log errors.
</span><span class="cx" style="display: block; padding: 0 10px"> } else {
</span><span class="cx" style="display: block; padding: 0 10px"> // Save the size meta value.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- if ( ! isset( $image_meta['sizes'][ $new_size_name ] ) ) {
- $image_meta['sizes'][ $new_size_name ] = $new_size_meta;
- } else {
- // Remove any newly generated images that are larger than the primary mime type.
- $new_size = isset( $new_size_meta['filesize'] ) ? $new_size_meta['filesize'] : 0;
- $primary_size = isset( $image_meta['sizes'][ $new_size_name ]['filesize'] ) ? $image_meta['sizes'][ $new_size_name ]['filesize'] : 0;
-
- if ( $new_size && $primary_size && $new_size >= $primary_size ) {
- wp_delete_file( dirname( $file ) . '/' . $new_size_meta['file'] );
- continue;
- }
- }
- if ( ! isset( $image_meta['sizes'][ $new_size_name ]['sources'] ) ) {
- $image_meta['sizes'][ $new_size_name ]['sources'] = array();
- }
- $image_meta['sizes'][ $new_size_name ]['sources'][ $mime_type ] = _wp_get_sources_from_meta( $new_size_meta );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $image_meta['sizes'][ $new_size_name ] = $new_size_meta;
</ins><span class="cx" style="display: block; padding: 0 10px"> wp_update_attachment_metadata( $attachment_id, $image_meta );
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -628,26 +466,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> $created_sizes = $editor->multi_resize( $new_sizes );
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> if ( ! empty( $created_sizes ) ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- foreach ( $created_sizes as $created_size_name => $created_size_meta ) {
-
- // Primary mime type is set in 'sizes' array.
- if ( ! isset( $image_meta['sizes'][ $created_size_name ] ) ) {
- $image_meta['sizes'][ $created_size_name ] = $created_size_meta;
- } else {
- // Remove any newly generated images that are larger than the primary mime type.
- $new_size = isset( $created_size_meta['filesize'] ) ? $created_size_meta['filesize'] : 0;
- $primary_size = isset( $image_meta['sizes'][ $created_size_name ]['filesize'] ) ? $image_meta['sizes'][ $created_size_name ]['filesize'] : 0;
-
- if ( $new_size && $primary_size && $new_size >= $primary_size ) {
- wp_delete_file( dirname( $file ) . '/' . $created_size_meta['file'] );
- continue;
- }
- }
- if ( ! isset( $image_meta['sizes'][ $created_size_name ]['sources'] ) ) {
- $image_meta['sizes'][ $created_size_name ]['sources'] = array();
- }
- $image_meta['sizes'][ $created_size_name ]['sources'][ $mime_type ] = _wp_get_sources_from_meta( $created_size_meta );
- }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $image_meta['sizes'] = array_merge( $image_meta['sizes'], $created_sizes );
</ins><span class="cx" style="display: block; padding: 0 10px"> wp_update_attachment_metadata( $attachment_id, $image_meta );
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -656,92 +475,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * Filters the list of image size objects that support secondary mime type output.
- *
- * @since 6.1.0
- *
- * @param array $sizes Associative array of image sizes.
- * @param int $attachment_id Attachment ID.
- * @return array $sizes Filtered $sizes with only those that support secondary mime type output.
- */
-function _wp_filter_image_sizes_additional_mime_type_support( $sizes, $attachment_id ) {
-
- // Include only the core sizes that do not rely on add_image_size(). Additional image sizes are opt-in.
- $enabled_sizes = array(
- 'thumbnail' => true,
- 'medium' => true,
- 'medium_large' => true,
- 'large' => true,
- 'post-thumbnail' => true,
- );
-
- /**
- * Filter the sizes that support secondary mime type output. Developers can use this
- * to control the output of additional mime type sub-sized images.
- *
- * @since 6.1.0
- *
- * @param array $enabled_sizes Map of size names and whether they support secondary mime type output.
- * @param int $attachment_id Attachment ID.
- */
- $enabled_sizes = apply_filters( 'wp_image_sizes_with_additional_mime_type_support', $enabled_sizes, $attachment_id );
-
- // Filter supported sizes to only include enabled sizes.
- return array_intersect_key( $sizes, array_filter( $enabled_sizes ) );
-}
-
-/**
- * Low-level function to create full-size images in additional mime types.
- *
- * Updates the image meta after each mime type image is created.
- *
- * @since 6.1.0
- * @access private
- *
- * @param array $new_mime_types Array defining what mime types to create.
- * @param string $file Full path to the image file.
- * @param array $image_meta The attachment meta data array.
- * @param int $attachment_id Attachment ID to process.
- * @return array The attachment meta data with updated `sizes` array. Includes an array of errors encountered while resizing.
- */
-function _wp_make_additional_mime_types( $new_mime_types, $file, $image_meta, $attachment_id ) {
- $imagesize = array(
- $image_meta['width'],
- $image_meta['height'],
- );
- $exif_meta = isset( $image_meta['image_meta'] ) ? $image_meta['image_meta'] : null;
- $original_file_size = isset( $image_meta['filesize'] ) ? $image_meta['filesize'] : wp_filesize( $file );
-
- foreach ( $new_mime_types as $mime_type ) {
- list( $editor, $resized, $rotated ) = _wp_maybe_scale_and_rotate_image( $file, $attachment_id, $imagesize, $exif_meta, $mime_type );
- if ( is_wp_error( $editor ) ) {
- // The image cannot be edited.
- continue;
- }
-
- $suffix = _wp_get_image_suffix( $resized, $rotated );
- $extension = wp_get_default_extension_for_mime_type( $mime_type );
-
- $saved = $editor->save( $editor->generate_filename( $suffix, null, $extension ) );
-
- if ( is_wp_error( $saved ) ) {
- // TODO: Log errors.
- } else {
- // If the saved image is larger than the original, discard it.
- $filesize = isset( $saved['filesize'] ) ? $saved['filesize'] : wp_filesize( $saved['path'] );
- if ( $filesize && $original_file_size && $filesize > $original_file_size ) {
- wp_delete_file( $saved['path'] );
- continue;
- }
- $image_meta['sources'][ $mime_type ] = _wp_get_sources_from_meta( $saved );
- wp_update_attachment_metadata( $attachment_id, $image_meta );
- }
- }
-
- return $image_meta;
-}
-
-/**
</del><span class="cx" style="display: block; padding: 0 10px"> * Generates attachment meta data and create image sub-sizes for images.
</span><span class="cx" style="display: block; padding: 0 10px"> *
</span><span class="cx" style="display: block; padding: 0 10px"> * @since 2.1.0
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -827,9 +560,9 @@
</span><span class="cx" style="display: block; padding: 0 10px"> * @param array $uploaded {
</span><span class="cx" style="display: block; padding: 0 10px"> * Information about the newly-uploaded file.
</span><span class="cx" style="display: block; padding: 0 10px"> *
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * @type string $file Filename of the newly-uploaded file.
- * @type string $url URL of the uploaded file.
- * @type string $type File type.
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * @type string $file Filename of the newly-uploaded file.
+ * @type string $url URL of the uploaded file.
+ * @type string $type File type.
</ins><span class="cx" style="display: block; padding: 0 10px"> * }
</span><span class="cx" style="display: block; padding: 0 10px"> */
</span><span class="cx" style="display: block; padding: 0 10px"> $image_attachment = apply_filters( 'attachment_thumbnail_args', $image_attachment, $metadata, $uploaded );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -897,7 +630,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> wp_update_attachment_metadata( $attachment_id, $metadata );
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> // Create sub-sizes saving the image meta after each.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $metadata = _wp_make_subsizes( $merged_sizes, $image_file, $metadata, $attachment_id, '' );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $metadata = _wp_make_subsizes( $merged_sizes, $image_file, $metadata, $attachment_id );
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1424,97 +1157,3 @@
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> return $dst_file;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-
-/**
- * Returns an array with the list of valid mime types that a specific mime type should be converted into.
- * For example an `image/jpeg` should be converted into an `image/jpeg` and `image/webp`. The first type
- * is considered the primary output type for this image.
- *
- * Called for each uploaded image to determine the list of mime types that should be converted into. Then,
- * called again for each image size as they are generated to check if the image should be converted into the mime type
- * for that size.
- *
- * @since 6.1.0
- *
- * @param int $attachment_id The attachment ID.
- * @return array An array of valid mime types, where the key is the source file mime type and the list of mime types to
- * generate.
- */
-function wp_upload_image_mime_transforms( $attachment_id ) {
- $default_image_mime_transforms = array(
- 'image/jpeg' => array( 'image/jpeg', 'image/webp' ),
- 'image/webp' => array( 'image/webp', 'image/jpeg' ),
- );
- $image_mime_transforms = $default_image_mime_transforms;
-
- /**
- * Filters the output mime types for a given input mime type and image size.
- *
- * @since 6.1.0
- *
- * @param array $image_mime_transforms A map with the valid mime transforms where the key is the source file mime type
- * and the value is one or more mime file types to generate.
- * @param int $attachment_id The ID of the attachment where the hook was dispatched.
- */
- $image_mime_transforms = apply_filters( 'wp_upload_image_mime_transforms', $image_mime_transforms, $attachment_id );
-
- if ( ! is_array( $image_mime_transforms ) ) {
- return $default_image_mime_transforms;
- }
-
- return array_map(
- function( $transforms_list ) {
- return (array) $transforms_list;
- },
- $image_mime_transforms
- );
-}
-
-/**
- * Extracts the primary and additional mime output types for an image from the $image_mime_transforms.
- *
- * @since 6.1.0
- * @access private
- *
- * @param string $file Full path to the image file.
- * @param int $attachment_id Attachment ID to process.
- * @return array An array with two entries, the primary mime type and the list of additional mime types.
- */
-function _wp_get_primary_and_additional_mime_types( $file, $attachment_id ) {
- $image_mime_transforms = wp_upload_image_mime_transforms( $attachment_id );
- $original_mime_type = wp_get_image_mime( $file );
- $output_mime_types = isset( $image_mime_transforms[ $original_mime_type ] ) ? $image_mime_transforms[ $original_mime_type ] : array( $original_mime_type );
-
- // Exclude any output mime types that the system doesn't support.
- $output_mime_types = array_values(
- array_filter(
- $output_mime_types,
- function( $mime_type ) {
- return wp_image_editor_supports(
- array(
- 'mime_type' => $mime_type,
- )
- );
- }
- )
- );
-
- // Handle an empty value for $output_mime_types: only output the original type.
- if ( empty( $output_mime_types ) ) {
- return array( $original_mime_type, array() );
- }
-
- // Use original mime type as primary mime type, or alternatively the first one.
- $primary_mime_type_key = array_search( $original_mime_type, $output_mime_types, true );
- if ( false === $primary_mime_type_key ) {
- $primary_mime_type_key = 0;
- }
- // Split output mime types into primary mime type and additional mime types.
- $additional_mime_types = $output_mime_types;
- list( $primary_mime_type ) = array_splice( $additional_mime_types, $primary_mime_type_key, 1 );
-
- return array(
- $primary_mime_type,
- $additional_mime_types,
- );
-}
</del></span></pre></div>
<a id="trunksrcwpincludesclasswpimageeditorphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/class-wp-image-editor.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/class-wp-image-editor.php 2022-09-06 16:16:07 UTC (rev 54084)
+++ trunk/src/wp-includes/class-wp-image-editor.php 2022-09-06 21:11:41 UTC (rev 54085)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -334,11 +334,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> protected function get_output_format( $filename = null, $mime_type = null ) {
</span><span class="cx" style="display: block; padding: 0 10px"> $new_ext = null;
</span><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- // If no mime type is passed but output mime type is set, use that.
- if ( ! $mime_type && ! empty( $this->output_mime_type ) ) {
- $mime_type = $this->output_mime_type;
- }
-
</del><span class="cx" style="display: block; padding: 0 10px"> // By default, assume specified type takes priority.
</span><span class="cx" style="display: block; padding: 0 10px"> if ( $mime_type ) {
</span><span class="cx" style="display: block; padding: 0 10px"> $new_ext = $this->get_extension( $mime_type );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -430,25 +425,18 @@
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * Builds an output filename based on current file, and adding proper suffix.
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * Builds an output filename based on current file, and adding proper suffix
</ins><span class="cx" style="display: block; padding: 0 10px"> *
</span><span class="cx" style="display: block; padding: 0 10px"> * @since 3.5.0
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * @since 6.1.0 Skips adding a suffix when set to an empty string. When the
- * file extension being generated doesn't match the image file extension,
- * add the extension to the suffix
</del><span class="cx" style="display: block; padding: 0 10px"> *
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * @param string $suffix Optional. Suffix to add to the filename. The default null
- * will result in a 'widthxheight' suffix. Passing
- * an empty string will result in no suffix.
- * @param string $dest_path Optional. The path to save the file to. The default null
- * will use the image file path.
- * @param string $extension Optional. The file extension to use. The default null
- * will use the image file extension.
- * @return string filename The generated file name.
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * @param string $suffix
+ * @param string $dest_path
+ * @param string $extension
+ * @return string filename
</ins><span class="cx" style="display: block; padding: 0 10px"> */
</span><span class="cx" style="display: block; padding: 0 10px"> public function generate_filename( $suffix = null, $dest_path = null, $extension = null ) {
</span><span class="cx" style="display: block; padding: 0 10px"> // $suffix will be appended to the destination filename, just before the extension.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- if ( null === $suffix ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ if ( ! $suffix ) {
</ins><span class="cx" style="display: block; padding: 0 10px"> $suffix = $this->get_suffix();
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -469,21 +457,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- if ( empty( $suffix ) ) {
- $suffix = '';
- } else {
- $suffix = "-{$suffix}";
- }
-
- // When the file extension being generated doesn't match the image file extension,
- // add the extension to the suffix to ensure a unique file name. Prevents
- // name conflicts when a single image type can have multiple extensions,
- // eg. .jpg, .jpeg and .jpe are all valid JPEG extensions.
- if ( ! empty( $extension ) && $extension !== $ext ) {
- $suffix .= "-{$ext}";
- }
-
- return trailingslashit( $dir ) . "{$name}{$suffix}.{$new_ext}";
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ return trailingslashit( $dir ) . "{$name}-{$suffix}.{$new_ext}";
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -663,28 +637,5 @@
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> return wp_get_default_extension_for_mime_type( $mime_type );
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+}
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- /**
- * Set the editor output mime type, useful when outputting alternate mime types.
- *
- * Track that the mime type is set with the mime type set flag.
- *
- * @since 6.1.0
- *
- * @param string $output_mime_type The mime type to set.
- */
- public function set_output_mime_type( $output_mime_type ) {
- $this->output_mime_type = $output_mime_type;
- }
-
- /**
- * Reset the mime type to the original file mime type.
- *
- * Reset the mime type set flag.
- *
- * @since 6.1.0
- */
- public function reset_output_mime_type() {
- $this->output_mime_type = $this->mime_type;
- }
-}
</del></span></pre></div>
<a id="trunksrcwpincludesmediaphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/media.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/media.php 2022-09-06 16:16:07 UTC (rev 54084)
+++ trunk/src/wp-includes/media.php 2022-09-06 21:11:41 UTC (rev 54085)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1852,11 +1852,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> $filtered_image = wp_img_tag_add_decoding_attr( $filtered_image, $context );
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- // Use alternate mime types when specified and available.
- if ( $attachment_id > 0 && _wp_in_front_end_context() ) {
- $filtered_image = wp_image_use_alternate_mime_types( $filtered_image, $context, $attachment_id );
- }
-
</del><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="cx" style="display: block; padding: 0 10px"> * Filters an img tag within the content for a given context.
</span><span class="cx" style="display: block; padding: 0 10px"> *
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1904,117 +1899,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * Use alternate mime type images in the front end content output when available.
- *
- * @since 6.1.0
- *
- * @param string $image The HTML `img` tag where the attribute should be added.
- * @param string $context Additional context to pass to the filters.
- * @param int $attachment_id The attachment ID.
- * @return string Converted `img` tag with `loading` attribute added.
- */
-function wp_image_use_alternate_mime_types( $image, $context, $attachment_id ) {
- $metadata = wp_get_attachment_metadata( $attachment_id );
- if ( empty( $metadata['file'] ) ) {
- return $image;
- }
-
- // Only alter images with a `sources` attribute
- if ( empty( $metadata['sources'] ) ) {
- return $image;
- };
-
- $target_mimes = array( 'image/webp', 'image/jpeg' );
-
- /**
- * Filter the content image mime type output selection and order.
- *
- * When outputting images in the content, the first mime type available will be used.
- *
- * @since 6.1.0
- *
- * @param array $target_mimes The image output mime type and order. Default is array( 'image/webp', 'image/jpeg' ).
- * @param int $attachment_id The attachment ID.
- * @param string $context Additional context to pass to the filters.
- * @return array The filtered output mime type and order. Return an empty array to skip mime type substitution.
- */
- $target_mimes = apply_filters( 'wp_content_image_mimes', $target_mimes, $attachment_id, $context );
-
- if ( false === $target_mimes ) {
- return $image;
- }
-
- // Find the appropriate size for the provided URL in the first available mime type.
- foreach ( $target_mimes as $target_mime ) {
- // Handle full size image replacement.
- if ( ! empty( $metadata['sources'][ $target_mime ]['file'] ) ) {
- $src_filename = wp_basename( $metadata['file'] );
-
- // This is the same MIME type as the original, so the entire $target_mime can be skipped.
- // Since it is already the preferred MIME type, the entire loop can be cancelled.
- if ( $metadata['sources'][ $target_mime ]['file'] === $src_filename ) {
- break;
- }
-
- $image = str_replace( $src_filename, $metadata['sources'][ $target_mime ]['file'], $image );
-
- // The full size was replaced, so unset this entirely here so that in the next iteration it is no longer
- // considered, simply for a small performance optimization.
- unset( $metadata['sources'] );
- }
-
- // Go through each image size and replace with the first available mime type version.
- foreach ( $metadata['sizes'] as $name => $size_data ) {
- // Check if size has an original file.
- if ( empty( $size_data['file'] ) ) {
- continue;
- }
-
- // Check if size has a source in the desired mime type.
- if ( empty( $size_data['sources'][ $target_mime ]['file'] ) ) {
- continue;
- }
-
- $src_filename = wp_basename( $size_data['file'] );
-
- // This is the same MIME type as the original, so the entire $target_mime can be skipped.
- // Since it is already the preferred MIME type, the entire loop can be cancelled.
- if ( $size_data['sources'][ $target_mime ]['file'] === $src_filename ) {
- break 2;
- }
-
- // Found a match, replace with the new filename.
- $image = str_replace( $src_filename, $size_data['sources'][ $target_mime ]['file'], $image );
-
- // This size was replaced, so unset this entirely here so that in the next iteration it is no longer
- // considered, simply for a small performance optimization.
- unset( $metadata['sizes'][ $name ] );
- }
- }
- return $image;
-}
-
-/**
- * Check if execution is currently in the front end content context, outside of <head>.
- *
- * @since 6.1.0
- * @access private
- *
- * @return bool True if in the front end content context, false otherwise.
- */
-function _wp_in_front_end_context() {
- global $wp_query;
-
- // Check if this request is generally outside (or before) any frontend context.
- if ( ! isset( $wp_query ) || defined( 'XMLRPC_REQUEST' ) || defined( 'REST_REQUEST' ) || is_feed() ) {
- return false;
- }
-
- // Check if we're anywhere before the 'wp_head' action has completed.
- return did_action( 'template_redirect' ) && ! doing_action( 'wp_head' );
-}
-
-/**
</del><span class="cx" style="display: block; padding: 0 10px"> * Adds `loading` attribute to an `img` HTML tag.
</span><span class="cx" style="display: block; padding: 0 10px"> *
</span><span class="cx" style="display: block; padding: 0 10px"> * @since 5.5.0
</span></span></pre></div>
<a id="trunksrcwpincludespostphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/post.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/post.php 2022-09-06 16:16:07 UTC (rev 54084)
+++ trunk/src/wp-includes/post.php 2022-09-06 21:11:41 UTC (rev 54085)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -6486,28 +6486,13 @@
</span><span class="cx" style="display: block; padding: 0 10px"> $intermediate_dir = path_join( $uploadpath['basedir'], dirname( $file ) );
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> foreach ( $meta['sizes'] as $size => $sizeinfo ) {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $intermediate_file = str_replace( wp_basename( $file ), $sizeinfo['file'], $file );
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- // Check for alternate size mime types in the sizeinfo['sources'] array to delete.
- if ( isset( $sizeinfo['sources'] ) && is_array( $sizeinfo['sources'] ) ) {
- foreach ( $sizeinfo['sources'] as $mime => $properties ) {
- $intermediate_file = str_replace( wp_basename( $file ), $properties['file'], $file );
- if ( ! empty( $intermediate_file ) ) {
- $intermediate_file = path_join( $uploadpath['basedir'], $intermediate_file );
- if ( ! wp_delete_file_from_directory( $intermediate_file, $intermediate_dir ) ) {
- $deleted = false;
- }
- }
- }
- } else {
- // Otherwise, delete files from the sizeinfo data.
- $intermediate_file = str_replace( wp_basename( $file ), $sizeinfo['file'], $file );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ if ( ! empty( $intermediate_file ) ) {
+ $intermediate_file = path_join( $uploadpath['basedir'], $intermediate_file );
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- if ( ! empty( $intermediate_file ) ) {
- $intermediate_file = path_join( $uploadpath['basedir'], $intermediate_file );
-
- if ( ! wp_delete_file_from_directory( $intermediate_file, $intermediate_dir ) ) {
- $deleted = false;
- }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ if ( ! wp_delete_file_from_directory( $intermediate_file, $intermediate_dir ) ) {
+ $deleted = false;
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -6529,60 +6514,26 @@
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- // Delete the full size images from 'sources' if available, or the root file.
- if ( isset( $meta['sources'] ) && is_array( $meta['sources'] ) ) {
- $sources = $meta['sources'];
- $intermediate_dir = path_join( $uploadpath['basedir'], dirname( $file ) );
- foreach ( $sources as $mime => $properties ) {
- if ( ! is_array( $properties ) || empty( $properties['file'] ) ) {
- continue;
- }
- $intermediate_file = str_replace( wp_basename( $file ), $properties['file'], $file );
- if ( ! wp_delete_file_from_directory( $intermediate_file, $intermediate_dir ) ) {
- $deleted = false;
- }
- }
- } else {
- if ( ! wp_delete_file_from_directory( $file, $uploadpath['basedir'] ) ) {
- $deleted = false;
- }
- }
-
</del><span class="cx" style="display: block; padding: 0 10px"> if ( is_array( $backup_sizes ) ) {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $del_dir = path_join( $uploadpath['basedir'], dirname( $meta['file'] ) );
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $del_dir = path_join( $uploadpath['basedir'], dirname( $meta['file'] ) );
- // Delete the root (edited) file which was not deleted above.
- if ( ! wp_delete_file_from_directory( $file, $uploadpath['basedir'] ) ) {
- $deleted = false;
- }
</del><span class="cx" style="display: block; padding: 0 10px"> foreach ( $backup_sizes as $size ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- // Delete files from 'sources' data if available, otherwise from 'sizes' data.
- if ( isset( $meta['sources'] ) && is_array( $meta['sources'] ) ) {
- // Delete any backup images stored in the 'sources' array.
- if ( isset( $size['sources'] ) && is_array( $size['sources'] ) ) {
- foreach ( $size['sources'] as $mime => $properties ) {
- $del_file = path_join( dirname( $meta['file'] ), $properties['file'] );
- if ( ! empty( $del_file ) ) {
- $del_file = path_join( $uploadpath['basedir'], $del_file );
- if ( ! wp_delete_file_from_directory( $del_file, $del_dir ) ) {
- $deleted = false;
- }
- }
- }
- }
- } else {
- $del_file = path_join( dirname( $meta['file'] ), $size['file'] );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $del_file = path_join( dirname( $meta['file'] ), $size['file'] );
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- if ( ! empty( $del_file ) ) {
- $del_file = path_join( $uploadpath['basedir'], $del_file );
- if ( ! wp_delete_file_from_directory( $del_file, $del_dir ) ) {
- $deleted = false;
- }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ if ( ! empty( $del_file ) ) {
+ $del_file = path_join( $uploadpath['basedir'], $del_file );
+
+ if ( ! wp_delete_file_from_directory( $del_file, $del_dir ) ) {
+ $deleted = false;
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ if ( ! wp_delete_file_from_directory( $file, $uploadpath['basedir'] ) ) {
+ $deleted = false;
+ }
+
</ins><span class="cx" style="display: block; padding: 0 10px"> return $deleted;
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span></span></pre></div>
<a id="trunksrcwpincludesrestapiendpointsclasswprestattachmentscontrollerphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php 2022-09-06 16:16:07 UTC (rev 54084)
+++ trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php 2022-09-06 21:11:41 UTC (rev 54085)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -783,15 +783,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> $size_data['source_url'] = $image_src[0];
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-
- if ( empty( $size_data['sources'] ) || ! is_array( $size_data['sources'] ) ) {
- continue;
- }
-
- $image_url_basename = wp_basename( $image_src[0] );
- foreach ( $size_data['sources'] as $mime => &$mime_details ) {
- $mime_details['source_url'] = str_replace( $image_url_basename, $mime_details['file'], $image_src[0] );
- }
</del><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> $full_src = wp_get_attachment_image_src( $post->ID, 'full' );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -804,15 +795,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 'mime_type' => $post->post_mime_type,
</span><span class="cx" style="display: block; padding: 0 10px"> 'source_url' => $full_src[0],
</span><span class="cx" style="display: block; padding: 0 10px"> );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-
- if ( ! empty( $data['media_details']['sources'] ) ) {
- $full_url_basename = wp_basename( $full_src[0] );
- foreach ( $data['media_details']['sources'] as $mime => &$mime_details ) {
- $mime_details['source_url'] = str_replace( $full_url_basename, $mime_details['file'], $full_src[0] );
- }
- $data['media_details']['sizes']['full']['sources'] = $data['media_details']['sources'];
- unset( $data['media_details']['sources'] );
- }
</del><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> } else {
</span><span class="cx" style="display: block; padding: 0 10px"> $data['media_details']['sizes'] = new stdClass;
</span></span></pre></div>
<a id="trunktestsphpunittestsimageeditorphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/phpunit/tests/image/editor.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/phpunit/tests/image/editor.php 2022-09-06 16:16:07 UTC (rev 54084)
+++ trunk/tests/phpunit/tests/image/editor.php 2022-09-06 21:11:41 UTC (rev 54085)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -131,7 +131,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> $this->assertSame( 86, $editor->get_quality(), 'Output image format is WEBP. Quality setting for it should be 86.' );
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> // Removing PNG to WEBP conversion on save. Quality setting should reset to the default.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $editor->reset_output_mime_type();
</del><span class="cx" style="display: block; padding: 0 10px"> remove_filter( 'image_editor_output_format', array( $this, 'image_editor_output_formats' ) );
</span><span class="cx" style="display: block; padding: 0 10px"> $editor->save();
</span><span class="cx" style="display: block; padding: 0 10px"> $this->assertSame( 82, $editor->get_quality(), 'After removing image conversion quality setting should reset to the default of 82.' );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -155,7 +154,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> $this->assertSame( 42, $editor->get_quality(), 'Image conversion from JPEG to WEBP. Filtered WEBP quality shoild be 42.' );
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> // After removing the conversion the quality setting should reset to the filtered value for the original image type, JPEG.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $editor->reset_output_mime_type();
</del><span class="cx" style="display: block; padding: 0 10px"> remove_filter( 'image_editor_output_format', array( $this, 'image_editor_output_formats' ) );
</span><span class="cx" style="display: block; padding: 0 10px"> $editor->save();
</span><span class="cx" style="display: block; padding: 0 10px"> $this->assertSame(
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -228,10 +226,10 @@
</span><span class="cx" style="display: block; padding: 0 10px"> $this->assertSame( trailingslashit( realpath( get_temp_dir() ) ), trailingslashit( realpath( dirname( $editor->generate_filename( null, get_temp_dir() ) ) ) ) );
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> // Test with a suffix only.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $this->assertSame( 'canola-100x50-jpg.png', wp_basename( $editor->generate_filename( null, null, 'png' ) ) );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $this->assertSame( 'canola-100x50.png', wp_basename( $editor->generate_filename( null, null, 'png' ) ) );
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> // Combo!
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $this->assertSame( trailingslashit( realpath( get_temp_dir() ) ) . 'canola-new-jpg.png', $editor->generate_filename( 'new', realpath( get_temp_dir() ), 'png' ) );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $this->assertSame( trailingslashit( realpath( get_temp_dir() ) ) . 'canola-new.png', $editor->generate_filename( 'new', realpath( get_temp_dir() ), 'png' ) );
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> // Test with a stream destination.
</span><span class="cx" style="display: block; padding: 0 10px"> $this->assertSame( 'file://testing/path/canola-100x50.jpg', $editor->generate_filename( null, 'file://testing/path' ) );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -364,404 +362,4 @@
</span><span class="cx" style="display: block; padding: 0 10px"> );
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- /**
- * Test creating the original image mime type when the image is uploaded.
- *
- * @ticket 55443
- *
- * @dataProvider provider_image_with_default_behaviors_during_upload
- */
- public function it_should_create_the_original_image_mime_type_when_the_image_is_uploaded( $file_location, $expected_mime, $targeted_mime ) {
- $attachment_id = $this->factory->attachment->create_upload_object( $file_location );
-
- $metadata = wp_get_attachment_metadata( $attachment_id );
-
- $this->assertIsArray( $metadata );
- foreach ( $metadata['sizes'] as $size_name => $properties ) {
- $this->assertArrayHasKey( 'sources', $properties );
- $this->assertIsArray( $properties['sources'] );
- $this->assertArrayHasKey( $expected_mime, $properties['sources'] );
- $this->assertArrayHasKey( 'filesize', $properties['sources'][ $expected_mime ] );
- $this->assertArrayHasKey( 'file', $properties['sources'][ $expected_mime ] );
- $this->assertArrayHasKey( $targeted_mime, $properties['sources'] );
- $this->assertArrayHasKey( 'filesize', $properties['sources'][ $targeted_mime ] );
- $this->assertArrayHasKey( 'file', $properties['sources'][ $targeted_mime ] );
- }
- }
-
- /**
- * Data provider for it_should_create_the_original_image_mime_type_when_the_image_is_uploaded.
- */
- public function provider_image_with_default_behaviors_during_upload() {
- yield 'JPEG image' => array(
- DIR_TESTDATA . '/images/test-image.jpg',
- 'image/jpeg',
- 'image/webp',
- );
-
- yield 'WebP image' => array(
- DIR_TESTDATA . '/images/webp-lossy.webp',
- 'image/webp',
- 'image/jpeg',
- );
- }
-
- /**
- * Test Do not create the sources property if no transform is provided.
- *
- * @ticket 55443
- */
- public function it_should_not_create_the_sources_property_if_no_transform_is_provided() {
- add_filter( 'wp_upload_image_mime_transforms', '__return_empty_array' );
-
- $attachment_id = $this->factory->attachment->create_upload_object(
- DIR_TESTDATA . '/images/test-image.jpg'
- );
-
- $metadata = wp_get_attachment_metadata( $attachment_id );
-
- $this->assertIsArray( $metadata );
- foreach ( $metadata['sizes'] as $size_name => $properties ) {
- $this->assertArrayNotHasKey( 'sources', $properties );
- }
- }
-
- /**
- * Test creating the sources property when no transform is available.
- *
- * @ticket 55443
- */
- public function it_should_create_the_sources_property_when_no_transform_is_available() {
- add_filter(
- 'wp_upload_image_mime_transforms',
- function () {
- return array( 'image/jpeg' => array() );
- }
- );
-
- $attachment_id = $this->factory->attachment->create_upload_object(
- DIR_TESTDATA . '/images/test-image.jpg'
- );
-
- $metadata = wp_get_attachment_metadata( $attachment_id );
-
- $this->assertIsArray( $metadata );
- foreach ( $metadata['sizes'] as $size_name => $properties ) {
- $this->assertArrayHasKey( 'sources', $properties );
- $this->assertIsArray( $properties['sources'] );
- $this->assertArrayHasKey( 'image/jpeg', $properties['sources'] );
- $this->assertArrayHasKey( 'filesize', $properties['sources']['image/jpeg'] );
- $this->assertArrayHasKey( 'file', $properties['sources']['image/jpeg'] );
- $this->assertArrayNotHasKey( 'image/webp', $properties['sources'] );
- }
- }
-
- /**
- * Test not creating the sources property if the mime is not specified on the transforms images.
- *
- * @ticket 55443
- */
- public function it_should_not_create_the_sources_property_if_the_mime_is_not_specified_on_the_transforms_images() {
- add_filter(
- 'wp_upload_image_mime_transforms',
- function () {
- return array( 'image/jpeg' => array() );
- }
- );
-
- $attachment_id = $this->factory->attachment->create_upload_object(
- DIR_TESTDATA . '/images/webp-lossy.webp'
- );
-
- $metadata = wp_get_attachment_metadata( $attachment_id );
-
- $this->assertIsArray( $metadata );
- foreach ( $metadata['sizes'] as $size_name => $properties ) {
- $this->assertArrayNotHasKey( 'sources', $properties );
- }
- }
-
-
- /**
- * Test creating a WebP version with all the required properties.
- *
- * @ticket 55443
- */
- public function it_should_create_a_webp_version_with_all_the_required_properties() {
- $attachment_id = $this->factory->attachment->create_upload_object(
- DIR_TESTDATA . '/images/test-image.jpg'
- );
-
- $metadata = wp_get_attachment_metadata( $attachment_id );
- $this->assertArrayHasKey( 'sources', $metadata['sizes']['thumbnail'] );
- $this->assertArrayHasKey( 'image/jpeg', $metadata['sizes']['thumbnail']['sources'] );
- $this->assertArrayHasKey( 'filesize', $metadata['sizes']['thumbnail']['sources']['image/jpeg'] );
- $this->assertArrayHasKey( 'file', $metadata['sizes']['thumbnail']['sources']['image/jpeg'] );
- $this->assertArrayHasKey( 'image/webp', $metadata['sizes']['thumbnail']['sources'] );
- $this->assertArrayHasKey( 'filesize', $metadata['sizes']['thumbnail']['sources']['image/webp'] );
- $this->assertArrayHasKey( 'file', $metadata['sizes']['thumbnail']['sources']['image/webp'] );
- $this->assertStringEndsNotWith( '.jpeg', $metadata['sizes']['thumbnail']['sources']['image/webp']['file'] );
- $this->assertStringEndsWith( '.webp', $metadata['sizes']['thumbnail']['sources']['image/webp']['file'] );
- }
-
- /**
- * Test removing `scaled` suffix from the generated filename.
- *
- * @ticket 55443
- */
- public function it_should_remove_scaled_suffix_from_the_generated_filename() {
- // The leafs image is 1080 pixels wide with this filter we ensure a -scaled version is created.
- add_filter(
- 'big_image_size_threshold',
- function () {
- return 850;
- }
- );
-
- $attachment_id = $this->factory->attachment->create_upload_object(
- DIR_TESTDATA . '/images/test-image.jpg'
- );
- $metadata = wp_get_attachment_metadata( $attachment_id );
- $this->assertStringEndsWith( '-scaled.jpg', get_attached_file( $attachment_id ) );
- $this->assertArrayHasKey( 'image/webp', $metadata['sizes']['medium']['sources'] );
- $this->assertStringEndsNotWith( '-scaled.webp', $metadata['sizes']['medium']['sources']['image/webp']['file'] );
- $this->assertStringEndsWith( '-300x200.webp', $metadata['sizes']['medium']['sources']['image/webp']['file'] );
- }
-
- /**
- * Test removing the generated webp images when the attachment is deleted.
- *
- * @ticket 55443
- */
- public function it_should_remove_the_generated_webp_images_when_the_attachment_is_deleted() {
- // Make sure no editor is available.
- $attachment_id = $this->factory->attachment->create_upload_object(
- DIR_TESTDATA . '/images/test-image.jpg'
- );
-
- $file = get_attached_file( $attachment_id, true );
- $dirname = pathinfo( $file, PATHINFO_DIRNAME );
-
- $this->assertIsString( $file );
- $this->assertFileExists( $file );
-
- $metadata = wp_get_attachment_metadata( $attachment_id );
- $sizes = array( 'thumbnail', 'medium' );
-
- foreach ( $sizes as $size_name ) {
- $this->assertArrayHasKey( 'image/webp', $metadata['sizes'][ $size_name ]['sources'] );
- $this->assertArrayHasKey( 'file', $metadata['sizes'][ $size_name ]['sources']['image/webp'] );
- $this->assertFileExists(
- path_join( $dirname, $metadata['sizes'][ $size_name ]['sources']['image/webp']['file'] )
- );
- }
-
- wp_delete_attachment( $attachment_id );
-
- foreach ( $sizes as $size_name ) {
- $this->assertFileDoesNotExist(
- path_join( $dirname, $metadata['sizes'][ $size_name ]['sources']['image/webp']['file'] )
- );
- }
- }
-
- /**
- * Test removing the attached WebP version if the attachment is force deleted but empty trash day is not defined.
- *
- * @ticket 55443
- */
- public function it_should_remove_the_attached_webp_version_if_the_attachment_is_force_deleted_but_empty_trash_day_is_not_defined() {
- // Make sure no editor is available.
- $attachment_id = $this->factory->attachment->create_upload_object(
- DIR_TESTDATA . '/images/test-image.jpg'
- );
-
- $file = get_attached_file( $attachment_id, true );
- $dirname = pathinfo( $file, PATHINFO_DIRNAME );
-
- $this->assertIsString( $file );
- $this->assertFileExists( $file );
-
- $metadata = wp_get_attachment_metadata( $attachment_id );
-
- $this->assertFileExists(
- path_join( $dirname, $metadata['sizes']['thumbnail']['sources']['image/webp']['file'] )
- );
-
- wp_delete_attachment( $attachment_id, true );
-
- $this->assertFileDoesNotExist(
- path_join( $dirname, $metadata['sizes']['thumbnail']['sources']['image/webp']['file'] )
- );
- }
-
- /**
- * Test removing the WebP version of the image if the image is force deleted and empty trash days is set to zero.
- *
- * @ticket 55443
- */
- public function it_should_remove_the_webp_version_of_the_image_if_the_image_is_force_deleted_and_empty_trash_days_is_set_to_zero() {
- // Make sure no editor is available.
- $attachment_id = $this->factory->attachment->create_upload_object(
- DIR_TESTDATA . '/images/test-image.jpg'
- );
-
- $file = get_attached_file( $attachment_id, true );
- $dirname = pathinfo( $file, PATHINFO_DIRNAME );
-
- $this->assertIsString( $file );
- $this->assertFileExists( $file );
-
- $metadata = wp_get_attachment_metadata( $attachment_id );
-
- $this->assertFileExists(
- path_join( $dirname, $metadata['sizes']['thumbnail']['sources']['image/webp']['file'] )
- );
-
- define( 'EMPTY_TRASH_DAYS', 0 );
-
- wp_delete_attachment( $attachment_id, true );
-
- $this->assertFileDoesNotExist(
- path_join( $dirname, $metadata['sizes']['thumbnail']['sources']['image/webp']['file'] )
- );
- }
-
- /**
- * Test avoiding the change of URLs of images that are not part of the media library.
- *
- * @ticket 55443
- */
- public function it_should_avoid_the_change_of_urls_of_images_that_are_not_part_of_the_media_library() {
- $paragraph = '<p>Donec accumsan, sapien et <img src="https://ia600200.us.archive.org/16/items/SPD-SLRSY-1867/hubblesite_2001_06.jpg">, id commodo nisi sapien et est. Mauris nisl odio, iaculis vitae pellentesque nec.</p>';
-
- $this->assertSame( $paragraph, webp_uploads_update_image_references( $paragraph ) );
- }
-
- /**
- * Test avoiding replacing not existing attachment IDs.
- *
- * @ticket 55443
- */
- public function it_should_avoid_replacing_not_existing_attachment_i_ds() {
- $paragraph = '<p>Donec accumsan, sapien et <img class="wp-image-0" src="https://ia600200.us.archive.org/16/items/SPD-SLRSY-1867/hubblesite_2001_06.jpg">, id commodo nisi sapien et est. Mauris nisl odio, iaculis vitae pellentesque nec.</p>';
-
- $this->assertSame( $paragraph, webp_uploads_update_image_references( $paragraph ) );
- }
-
- /**
- * Test preventing replacing a WebP image.
- *
- * @ticket 55443
- */
- public function it_should_test_preventing_replacing_a_webp_image() {
- $attachment_id = $this->factory->attachment->create_upload_object(
- DIR_TESTDATA . '/images/webp-lossy.webp'
- );
-
- $tag = wp_get_attachment_image( $attachment_id, 'medium', false, array( 'class' => "wp-image-{$attachment_id}" ) );
-
- $this->assertSame( $tag, webp_uploads_img_tag_update_mime_type( $tag, 'the_content', $attachment_id ) );
- }
-
- /**
- * Test preventing replacing a jpg image if the image does not have the target class name.
- *
- * @ticket 55443
- */
- public function it_should_test_preventing_replacing_a_jpg_image_if_the_image_does_not_have_the_target_class_name() {
- $attachment_id = $this->factory->attachment->create_upload_object(
- DIR_TESTDATA . '/images/test-image.jpg'
- );
-
- $tag = wp_get_attachment_image( $attachment_id, 'medium' );
-
- $this->assertSame( $tag, webp_uploads_update_image_references( $tag ) );
- }
-
- /**
- * Test replacing the references to a JPG image to a WebP version.
- *
- * @dataProvider provider_replace_images_with_different_extensions
- *
- * @ticket 55443
- */
- public function it_should_replace_the_references_to_a_jpg_image_to_a_webp_version( $image_path ) {
- $attachment_id = $this->factory->attachment->create_upload_object( $image_path );
-
- $tag = wp_get_attachment_image( $attachment_id, 'medium', false, array( 'class' => "wp-image-{$attachment_id}" ) );
- $expected_tag = $tag;
- $metadata = wp_get_attachment_metadata( $attachment_id );
- foreach ( $metadata['sizes'] as $size => $properties ) {
- $expected_tag = str_replace( $properties['sources']['image/jpeg']['file'], $properties['sources']['image/webp']['file'], $expected_tag );
- }
-
- $this->assertNotEmpty( $expected_tag );
- $this->assertNotSame( $tag, $expected_tag );
- $this->assertSame( $expected_tag, webp_uploads_img_tag_update_mime_type( $tag, 'the_content', $attachment_id ) );
- }
-
- public function provider_replace_images_with_different_extensions() {
- yield 'An image with a .jpg extension' => array( DIR_TESTDATA . '/images/test-image.jpg' );
- yield 'An image with a .jpeg extension' => array( DIR_TESTDATA . '/images/test-image.jpeg' );
- }
-
- /**
- * Test the full image size from the original mime type.
- *
- * @ticket 55443
- */
- public function it_should_contain_the_full_image_size_from_the_original_mime() {
- $attachment_id = $this->factory->attachment->create_upload_object(
- DIR_TESTDATA . '/images/test-image.jpg'
- );
-
- $tag = wp_get_attachment_image( $attachment_id, 'full', false, array( 'class' => "wp-image-{$attachment_id}" ) );
-
- $expected = array(
- 'ext' => 'jpg',
- 'type' => 'image/jpeg',
- );
- $this->assertSame( $expected, wp_check_filetype( get_attached_file( $attachment_id ) ) );
- $this->assertContains( wp_basename( get_attached_file( $attachment_id ) ), webp_uploads_img_tag_update_mime_type( $tag, 'the_content', $attachment_id ) );
- }
-
- /**
- * Test preventing replacing an image with no available sources.
- *
- * @ticket 55443
- */
- public function it_should_prevent_replacing_an_image_with_no_available_sources() {
- add_filter( 'wp_upload_image_mime_transforms', '__return_empty_array' );
-
- $attachment_id = $this->factory->attachment->create_upload_object( DIR_TESTDATA . '/images/test-image.jpg' );
-
- $tag = wp_get_attachment_image( $attachment_id, 'full', false, array( 'class' => "wp-image-{$attachment_id}" ) );
- $this->assertSame( $tag, webp_uploads_img_tag_update_mime_type( $tag, 'the_content', $attachment_id ) );
- }
-
- /**
- * Test preventing update not supported images with no available sources.
- *
- * @dataProvider provider_it_should_prevent_update_not_supported_images_with_no_available_sources
- *
- * @ticket 55443
- */
- public function it_should_prevent_update_not_supported_images_with_no_available_sources( $image_path ) {
- $attachment_id = $this->factory->attachment->create_upload_object( $image_path );
-
- $this->assertIsNumeric( $attachment_id );
- $tag = wp_get_attachment_image( $attachment_id, 'full', false, array( 'class' => "wp-image-{$attachment_id}" ) );
-
- $this->assertSame( $tag, webp_uploads_img_tag_update_mime_type( $tag, 'the_content', $attachment_id ) );
- }
-
- /**
- * Data provider for it_should_prevent_update_not_supported_images_with_no_available_sources.
- */
- public function provider_it_should_prevent_update_not_supported_images_with_no_available_sources() {
- yield 'PNG image' => array( DIR_TESTDATA . '/images/test-image.png' );
- yield 'GIFT image' => array( DIR_TESTDATA . '/images/test-image.gif' );
- }
-
</del><span class="cx" style="display: block; padding: 0 10px"> }
</span></span></pre></div>
<a id="trunktestsphpunittestsimagefunctionsphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/phpunit/tests/image/functions.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/phpunit/tests/image/functions.php 2022-09-06 16:16:07 UTC (rev 54084)
+++ trunk/tests/phpunit/tests/image/functions.php 2022-09-06 21:11:41 UTC (rev 54085)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -639,9 +639,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> $this->markTestSkipped( 'Rendering PDFs is not supported on this system.' );
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- // Use legacy JPEG output.
- add_filter( 'wp_upload_image_mime_transforms', '__return_empty_array' );
-
</del><span class="cx" style="display: block; padding: 0 10px"> $orig_file = DIR_TESTDATA . '/images/wordpress-gsoc-flyer.pdf';
</span><span class="cx" style="display: block; padding: 0 10px"> $test_file = get_temp_dir() . 'wordpress-gsoc-flyer.pdf';
</span><span class="cx" style="display: block; padding: 0 10px"> copy( $orig_file, $test_file );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -680,12 +677,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 'height' => 300,
</span><span class="cx" style="display: block; padding: 0 10px"> 'mime-type' => 'image/jpeg',
</span><span class="cx" style="display: block; padding: 0 10px"> 'filesize' => wp_filesize( $temp_dir . 'wordpress-gsoc-flyer-pdf-232x300.jpg' ),
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- 'sources' => array(
- 'image/jpeg' => array(
- 'file' => 'wordpress-gsoc-flyer-pdf-232x300.jpg',
- 'filesize' => wp_filesize( $temp_dir . 'wordpress-gsoc-flyer-pdf-232x300.jpg' ),
- ),
- ),
</del><span class="cx" style="display: block; padding: 0 10px"> ),
</span><span class="cx" style="display: block; padding: 0 10px"> 'large' => array(
</span><span class="cx" style="display: block; padding: 0 10px"> 'file' => 'wordpress-gsoc-flyer-pdf-791x1024.jpg',
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -693,12 +684,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 'height' => 1024,
</span><span class="cx" style="display: block; padding: 0 10px"> 'mime-type' => 'image/jpeg',
</span><span class="cx" style="display: block; padding: 0 10px"> 'filesize' => wp_filesize( $temp_dir . 'wordpress-gsoc-flyer-pdf-791x1024.jpg' ),
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- 'sources' => array(
- 'image/jpeg' => array(
- 'file' => 'wordpress-gsoc-flyer-pdf-791x1024.jpg',
- 'filesize' => wp_filesize( $temp_dir . 'wordpress-gsoc-flyer-pdf-791x1024.jpg' ),
- ),
- ),
</del><span class="cx" style="display: block; padding: 0 10px"> ),
</span><span class="cx" style="display: block; padding: 0 10px"> 'thumbnail' => array(
</span><span class="cx" style="display: block; padding: 0 10px"> 'file' => 'wordpress-gsoc-flyer-pdf-116x150.jpg',
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -706,12 +691,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 'height' => 150,
</span><span class="cx" style="display: block; padding: 0 10px"> 'mime-type' => 'image/jpeg',
</span><span class="cx" style="display: block; padding: 0 10px"> 'filesize' => wp_filesize( $temp_dir . 'wordpress-gsoc-flyer-pdf-116x150.jpg' ),
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- 'sources' => array(
- 'image/jpeg' => array(
- 'file' => 'wordpress-gsoc-flyer-pdf-116x150.jpg',
- 'filesize' => wp_filesize( $temp_dir . 'wordpress-gsoc-flyer-pdf-116x150.jpg' ),
- ),
- ),
</del><span class="cx" style="display: block; padding: 0 10px"> ),
</span><span class="cx" style="display: block; padding: 0 10px"> ),
</span><span class="cx" style="display: block; padding: 0 10px"> 'filesize' => wp_filesize( $test_file ),
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -723,7 +702,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> foreach ( $metadata['sizes'] as $size ) {
</span><span class="cx" style="display: block; padding: 0 10px"> unlink( $temp_dir . $size['file'] );
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- remove_filter( 'wp_upload_image_mime_transforms', '__return_empty_array' );
</del><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -738,9 +716,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> update_option( 'medium_crop', 1 );
</span><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- // Use legacy JPEG output.
- add_filter( 'wp_upload_image_mime_transforms', '__return_empty_array' );
-
</del><span class="cx" style="display: block; padding: 0 10px"> $orig_file = DIR_TESTDATA . '/images/wordpress-gsoc-flyer.pdf';
</span><span class="cx" style="display: block; padding: 0 10px"> $test_file = get_temp_dir() . 'wordpress-gsoc-flyer.pdf';
</span><span class="cx" style="display: block; padding: 0 10px"> copy( $orig_file, $test_file );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -779,12 +754,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 'height' => 300,
</span><span class="cx" style="display: block; padding: 0 10px"> 'mime-type' => 'image/jpeg',
</span><span class="cx" style="display: block; padding: 0 10px"> 'filesize' => wp_filesize( $temp_dir . 'wordpress-gsoc-flyer-pdf-300x300.jpg' ),
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- 'sources' => array(
- 'image/jpeg' => array(
- 'file' => 'wordpress-gsoc-flyer-pdf-300x300.jpg',
- 'filesize' => wp_filesize( $temp_dir . 'wordpress-gsoc-flyer-pdf-300x300.jpg' ),
- ),
- ),
</del><span class="cx" style="display: block; padding: 0 10px"> ),
</span><span class="cx" style="display: block; padding: 0 10px"> 'large' => array(
</span><span class="cx" style="display: block; padding: 0 10px"> 'file' => 'wordpress-gsoc-flyer-pdf-791x1024.jpg',
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -792,13 +761,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 'height' => 1024,
</span><span class="cx" style="display: block; padding: 0 10px"> 'mime-type' => 'image/jpeg',
</span><span class="cx" style="display: block; padding: 0 10px"> 'filesize' => wp_filesize( $temp_dir . 'wordpress-gsoc-flyer-pdf-791x1024.jpg' ),
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- 'sources' => array(
- 'image/jpeg' => array(
- 'file' => 'wordpress-gsoc-flyer-pdf-791x1024.jpg',
- 'filesize' => wp_filesize( $temp_dir . 'wordpress-gsoc-flyer-pdf-791x1024.jpg' ),
- ),
- ),
-
</del><span class="cx" style="display: block; padding: 0 10px"> ),
</span><span class="cx" style="display: block; padding: 0 10px"> 'thumbnail' => array(
</span><span class="cx" style="display: block; padding: 0 10px"> 'file' => 'wordpress-gsoc-flyer-pdf-116x150.jpg',
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -806,12 +768,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 'height' => 150,
</span><span class="cx" style="display: block; padding: 0 10px"> 'mime-type' => 'image/jpeg',
</span><span class="cx" style="display: block; padding: 0 10px"> 'filesize' => wp_filesize( $temp_dir . 'wordpress-gsoc-flyer-pdf-116x150.jpg' ),
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- 'sources' => array(
- 'image/jpeg' => array(
- 'file' => 'wordpress-gsoc-flyer-pdf-116x150.jpg',
- 'filesize' => wp_filesize( $temp_dir . 'wordpress-gsoc-flyer-pdf-116x150.jpg' ),
- ),
- ),
</del><span class="cx" style="display: block; padding: 0 10px"> ),
</span><span class="cx" style="display: block; padding: 0 10px"> ),
</span><span class="cx" style="display: block; padding: 0 10px"> 'filesize' => wp_filesize( $test_file ),
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -823,8 +779,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> foreach ( $metadata['sizes'] as $size ) {
</span><span class="cx" style="display: block; padding: 0 10px"> unlink( $temp_dir . $size['file'] );
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- remove_filter( 'wp_upload_image_mime_transforms', '__return_empty_array' );
-
</del><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -835,9 +789,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> $this->markTestSkipped( 'Rendering PDFs is not supported on this system.' );
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- // Use legacy JPEG output.
- add_filter( 'wp_upload_image_mime_transforms', '__return_empty_array' );
-
</del><span class="cx" style="display: block; padding: 0 10px"> $orig_file = DIR_TESTDATA . '/images/wordpress-gsoc-flyer.pdf';
</span><span class="cx" style="display: block; padding: 0 10px"> $test_file = get_temp_dir() . 'wordpress-gsoc-flyer.pdf';
</span><span class="cx" style="display: block; padding: 0 10px"> copy( $orig_file, $test_file );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -870,12 +821,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 'height' => 100,
</span><span class="cx" style="display: block; padding: 0 10px"> 'mime-type' => 'image/jpeg',
</span><span class="cx" style="display: block; padding: 0 10px"> 'filesize' => wp_filesize( $temp_dir . 'wordpress-gsoc-flyer-pdf-77x100.jpg' ),
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- 'sources' => array(
- 'image/jpeg' => array(
- 'file' => 'wordpress-gsoc-flyer-pdf-77x100.jpg',
- 'filesize' => wp_filesize( $temp_dir . 'wordpress-gsoc-flyer-pdf-77x100.jpg' ),
- ),
- ),
</del><span class="cx" style="display: block; padding: 0 10px"> );
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> // Different environments produce slightly different filesize results.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -891,7 +836,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> foreach ( $metadata['sizes'] as $size ) {
</span><span class="cx" style="display: block; padding: 0 10px"> unlink( $temp_dir . $size['file'] );
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- remove_filter( 'wp_upload_image_mime_transforms', '__return_empty_array' );
</del><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> public function filter_fallback_intermediate_image_sizes( $fallback_sizes, $metadata ) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1082,431 +1026,4 @@
</span><span class="cx" style="display: block; padding: 0 10px"> ),
</span><span class="cx" style="display: block; padding: 0 10px"> );
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-
- /**
- * @ticket 55443
- */
- public function test_wp_upload_image_mime_transforms_generates_webp_and_jpeg_for_both_by_default() {
- $result = wp_upload_image_mime_transforms( 42 );
- $this->assertArrayHasKey( 'image/jpeg', $result );
- $this->assertArrayHasKey( 'image/webp', $result );
- $this->assertSameSets( array( 'image/jpeg', 'image/webp' ), $result['image/jpeg'] );
- $this->assertSameSets( array( 'image/jpeg', 'image/webp' ), $result['image/webp'] );
- }
-
- /**
- * @ticket 55443
- */
- public function test_wp_upload_image_mime_transforms_filter_always_use_webp_instead_of_jpeg() {
- add_filter(
- 'wp_upload_image_mime_transforms',
- function( $transforms ) {
- // Ensure JPG only results in WebP files.
- $transforms['image/jpeg'] = array( 'image/webp' );
- // Unset WebP since it does not need any transformation in that case.
- unset( $transforms['image/webp'] );
- return $transforms;
- }
- );
-
- $result = wp_upload_image_mime_transforms( 42 );
- $this->assertArrayHasKey( 'image/jpeg', $result );
- $this->assertArrayNotHasKey( 'image/webp', $result );
- $this->assertSameSets( array( 'image/webp' ), $result['image/jpeg'] );
- }
-
- /**
- * @ticket 55443
- */
- public function test_wp_upload_image_mime_transforms_filter_receives_parameters() {
- $attachment_id = null;
- add_filter(
- 'wp_upload_image_mime_transforms',
- function( $transforms, $param1 ) use ( &$attachment_id ) {
- $attachment_id = $param1;
- return $transforms;
- },
- 10,
- 2
- );
-
- wp_upload_image_mime_transforms( 23 );
- $this->assertSame( 23, $attachment_id );
- }
-
- /**
- * @ticket 55443
- */
- public function test_wp_upload_image_mime_transforms_filter_with_empty_array() {
- add_filter( 'wp_upload_image_mime_transforms', '__return_empty_array' );
- $result = wp_upload_image_mime_transforms( 42 );
- $this->assertSame( array(), $result );
- }
-
- /**
- * @ticket 55443
- */
- public function test_wp_upload_image_mime_transforms_filter_with_invalid_usage() {
- $default = wp_upload_image_mime_transforms( 42 );
-
- add_filter( 'wp_upload_image_mime_transforms', '__return_false' );
- $result = wp_upload_image_mime_transforms( 42 );
- $this->assertSame( $default, $result );
- }
-
- /**
- * @ticket 55443
- */
- public function test__wp_get_primary_and_additional_mime_types_default() {
- $jpeg_file = DIR_TESTDATA . '/images/test-image-large.jpg';
-
- list( $primary_mime_type, $additional_mime_types ) = _wp_get_primary_and_additional_mime_types( $jpeg_file, 42 );
- $this->assertSame( 'image/jpeg', $primary_mime_type );
-
- // WebP may not be supported by the server, in which case it will be stripped from the results.
- if ( wp_image_editor_supports( array( 'mime_type' => 'image/webp' ) ) ) {
- $this->assertSame( array( 'image/webp' ), $additional_mime_types );
- } else {
- $this->assertSame( array(), $additional_mime_types );
- }
- }
-
- /**
- * @ticket 55443
- */
- public function test__wp_get_primary_and_additional_mime_types_prefer_original_mime() {
- $jpeg_file = DIR_TESTDATA . '/images/test-image-large.jpg';
-
- // Set 'image/jpeg' only as secondary output MIME type.
- // Still, because it is the original, it should be chosen as primary over 'image/webp'.
- add_filter(
- 'wp_upload_image_mime_transforms',
- function( $transforms ) {
- $transforms['image/jpeg'] = array( 'image/webp', 'image/jpeg' );
- return $transforms;
- }
- );
-
- list( $primary_mime_type, $additional_mime_types ) = _wp_get_primary_and_additional_mime_types( $jpeg_file, 42 );
- $this->assertSame( 'image/jpeg', $primary_mime_type );
-
- // WebP may not be supported by the server, in which case it will be stripped from the results.
- if ( wp_image_editor_supports( array( 'mime_type' => 'image/webp' ) ) ) {
- $this->assertSame( array( 'image/webp' ), $additional_mime_types );
- } else {
- $this->assertSame( array(), $additional_mime_types );
- }
- }
-
- /**
- * @ticket 55443
- */
- public function test__wp_get_primary_and_additional_mime_types_use_original_mime_when_no_transformation_rules() {
- $jpeg_file = DIR_TESTDATA . '/images/test-image-large.jpg';
-
- // Strip all transformation rules.
- add_filter( 'wp_upload_image_mime_transforms', '__return_empty_array' );
-
- list( $primary_mime_type, $additional_mime_types ) = _wp_get_primary_and_additional_mime_types( $jpeg_file, 42 );
- $this->assertSame( 'image/jpeg', $primary_mime_type );
- $this->assertSame( array(), $additional_mime_types );
- }
-
- /**
- * @ticket 55443
- */
- public function test__wp_get_primary_and_additional_mime_types_different_output_mime() {
- $jpeg_file = DIR_TESTDATA . '/images/test-image-large.jpg';
-
- // Set 'image/webp' as the only output MIME type.
- // In that case, JPEG is not generated at all, so WebP becomes the primary MIME type.
- add_filter(
- 'wp_upload_image_mime_transforms',
- function( $transforms ) {
- $transforms['image/jpeg'] = array( 'image/webp' );
- return $transforms;
- }
- );
-
- list( $primary_mime_type, $additional_mime_types ) = _wp_get_primary_and_additional_mime_types( $jpeg_file, 42 );
-
- // WebP may not be supported by the server, in which case it will fall back to the original MIME type.
- if ( wp_image_editor_supports( array( 'mime_type' => 'image/webp' ) ) ) {
- $this->assertSame( 'image/webp', $primary_mime_type );
- } else {
- $this->assertSame( 'image/jpeg', $primary_mime_type );
- }
-
- $this->assertSame( array(), $additional_mime_types );
- }
-
- /**
- * @ticket 55443
- */
- public function test__wp_get_primary_and_additional_mime_types_different_output_mimes() {
- $jpeg_file = DIR_TESTDATA . '/images/test-image-large.jpg';
-
- // Set 'image/webp' and 'image/avif' as output MIME types.
- // In that case, JPEG is not generated at all, with WebP being the primary MIME type and AVIF the secondary.
- add_filter(
- 'wp_upload_image_mime_transforms',
- function( $transforms ) {
- $transforms['image/jpeg'] = array( 'image/webp', 'image/avif' );
- return $transforms;
- }
- );
-
- list( $primary_mime_type, $additional_mime_types ) = _wp_get_primary_and_additional_mime_types( $jpeg_file, 42 );
-
- // WebP may not be supported by the server, in which case it will fall back to the original MIME type.
- if ( wp_image_editor_supports( array( 'mime_type' => 'image/webp' ) ) ) {
- $this->assertSame( 'image/webp', $primary_mime_type );
- } else {
- $this->assertSame( 'image/jpeg', $primary_mime_type );
- }
-
- // AVIF may not be supported by the server, in which case it will be stripped from the results.
- if ( wp_image_editor_supports( array( 'mime_type' => 'image/avif' ) ) ) {
- $this->assertSame( array( 'image/avif' ), $additional_mime_types );
- } else {
- $this->assertSame( array(), $additional_mime_types );
- }
- }
-
- /**
- * @ticket 55443
- * @dataProvider data__wp_filter_image_sizes_additional_mime_type_support
- */
- public function test__wp_filter_image_sizes_additional_mime_type_support( $input_size_data, $filter_callback, $expected_size_names ) {
- remove_all_filters( 'wp_image_sizes_with_additional_mime_type_support' );
- if ( $filter_callback ) {
- add_filter( 'wp_image_sizes_with_additional_mime_type_support', $filter_callback );
- }
-
- $expected_size_data = array_intersect_key( $input_size_data, array_flip( $expected_size_names ) );
-
- $output_size_data = _wp_filter_image_sizes_additional_mime_type_support( $input_size_data, 42 );
- $this->assertEqualSetsWithIndex( $expected_size_data, $output_size_data );
- }
-
- public function data__wp_filter_image_sizes_additional_mime_type_support() {
- $thumbnail_data = array(
- 'width' => 150,
- 'height' => 150,
- 'crop' => true,
- );
- $medium_data = array(
- 'width' => 300,
- 'height' => 300,
- 'crop' => false,
- );
- $medium_large_data = array(
- 'width' => 768,
- 'height' => 0,
- 'crop' => false,
- );
- $large_data = array(
- 'width' => 1024,
- 'height' => 1024,
- 'crop' => false,
- );
- $custom_data = array(
- 'width' => 512,
- 'height' => 512,
- 'crop' => true,
- );
-
- return array(
- array(
- array(
- 'thumbnail' => $thumbnail_data,
- 'medium' => $medium_data,
- 'medium_large' => $medium_large_data,
- 'large' => $large_data,
- ),
- null,
- array( 'thumbnail', 'medium', 'medium_large', 'large' ),
- ),
- array(
- array(
- 'thumbnail' => $thumbnail_data,
- 'medium' => $medium_data,
- 'custom' => $custom_data,
- ),
- null,
- array( 'thumbnail', 'medium' ),
- ),
- array(
- array(
- 'thumbnail' => $thumbnail_data,
- 'medium' => $medium_data,
- 'medium_large' => $medium_large_data,
- 'large' => $large_data,
- ),
- function( $enabled_sizes ) {
- unset( $enabled_sizes['medium_large'], $enabled_sizes['large'] );
- return $enabled_sizes;
- },
- array( 'thumbnail', 'medium' ),
- ),
- array(
- array(
- 'thumbnail' => $thumbnail_data,
- 'medium' => $medium_data,
- 'medium_large' => $medium_large_data,
- 'large' => $large_data,
- ),
- function( $enabled_sizes ) {
- $enabled_sizes['medium_large'] = false;
- $enabled_sizes['large'] = false;
- return $enabled_sizes;
- },
- array( 'thumbnail', 'medium' ),
- ),
- array(
- array(
- 'thumbnail' => $thumbnail_data,
- 'medium' => $medium_data,
- 'custom' => $custom_data,
- ),
- function( $enabled_sizes ) {
- unset( $enabled_sizes['medium'] );
- $enabled_sizes['custom'] = true;
- return $enabled_sizes;
- },
- array( 'thumbnail', 'custom' ),
- ),
- );
- }
-
- /**
- * Test the `_wp_maybe_scale_and_rotate_image()` function.
- *
- * @dataProvider data_test__wp_maybe_scale_and_rotate_image
- *
- * @ticket 55443
- */
- public function test__wp_maybe_scale_and_rotate_image( $file, $imagesize, $mime_type, $expected ) {
- if ( ! wp_image_editor_supports( array( 'mime_type' => $mime_type ) ) ) {
- $this->markTestSkipped( sprintf( 'This test requires %s support.', $mime_type ) );
- }
-
- $attributes = array( 'post_mime_type' => $mime_type );
- $attachment_id = $this->factory->attachment->create_object( $file, 0, $attributes );
- $exif_meta = wp_read_image_metadata( $file );
-
- list( $editor, $resized, $rotated ) = _wp_maybe_scale_and_rotate_image( $file, $attachment_id, $imagesize, $exif_meta, $mime_type );
-
- $this->assertSame( $expected['rotated'], $rotated );
- $this->assertSame( $expected['resized'], $resized );
- $this->assertSame( $expected['size'], $editor->get_size() );
- }
-
- /**
- * Data provider for the `test__wp_maybe_scale_and_rotate_image()` test.
- *
- * @return array
- */
- public function data_test__wp_maybe_scale_and_rotate_image() {
- return array(
-
- // Image that will be scaled.
- array(
- DIR_TESTDATA . '/images/test-image-large.jpg',
- array( 3000, 2250 ),
- 'image/jpeg',
- array(
- 'rotated' => false,
- 'resized' => true,
- 'size' => array(
- 'width' => 2560,
- 'height' => 1920,
- ),
- ),
- ),
-
- // Image that will not be scaled.
- array(
- DIR_TESTDATA . '/images/canola.jpg',
- array( 640, 480 ),
- 'image/jpeg',
- array(
- 'rotated' => false,
- 'resized' => false,
- 'size' => array(
- 'width' => 640,
- 'height' => 480,
- ),
- ),
- ),
-
- // Image that will be flipped.
- array(
- DIR_TESTDATA . '/images/test-image-upside-down.jpg',
- array( 600, 450 ),
- 'image/jpeg',
- array(
- 'rotated' => true,
- 'resized' => false,
- 'size' => array(
- 'width' => 600,
- 'height' => 450,
- ),
- ),
- ),
-
- // Image that will be rotated.
- array(
- DIR_TESTDATA . '/images/test-image-rotated-90ccw.jpg',
- array( 1200, 1800 ),
- 'image/jpeg',
- array(
- 'rotated' => true,
- 'resized' => false,
- 'size' => array(
- 'width' => 1800,
- 'height' => 1200,
- ),
- ),
- ),
-
- // Image that will not be rotated - WebP Exif is not supported in PHP.
- array(
- DIR_TESTDATA . '/images/test-image-rotated-90cw.webp',
- array( 1024, 768 ),
- 'image/webp',
- array(
- 'rotated' => false,
- 'resized' => false,
- 'size' => array(
- 'width' => 1024,
- 'height' => 768,
- ),
- ),
- ),
-
- );
- }
-
- /**
- * Test the `_wp_get_image_suffix()` function.
- * @dataProvider data_test__wp_get_image_suffix
- *
- * @ticket 55443
- */
- public function test__wp_get_image_suffix( $resized, $rotated, $expected ) {
- $this->assertSame( $expected, _wp_get_image_suffix( $resized, $rotated ) );
- }
-
- /**
- * Data provider for the `test__wp_get_image_suffix()` test.
- */
- public function data_test__wp_get_image_suffix() {
- return array(
- array( false, false, '' ),
- array( true, false, 'scaled' ),
- array( false, true, 'rotated' ),
- array( true, true, 'scaled' ),
- );
- }
</del><span class="cx" style="display: block; padding: 0 10px"> }
</span></span></pre></div>
<a id="trunktestsphpunittestsmediaphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/phpunit/tests/media.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/phpunit/tests/media.php 2022-09-06 16:16:07 UTC (rev 54084)
+++ trunk/tests/phpunit/tests/media.php 2022-09-06 21:11:41 UTC (rev 54085)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2255,14 +2255,11 @@
</span><span class="cx" style="display: block; padding: 0 10px"> // Do not add width, height, and loading.
</span><span class="cx" style="display: block; padding: 0 10px"> add_filter( 'wp_img_tag_add_width_and_height_attr', '__return_false' );
</span><span class="cx" style="display: block; padding: 0 10px"> add_filter( 'wp_img_tag_add_loading_attr', '__return_false' );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- add_filter( 'wp_content_image_mimes', '__return_empty_array' );
</del><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> $this->assertSame( $content_filtered, wp_filter_content_tags( $content_unfiltered ) );
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> remove_filter( 'wp_img_tag_add_width_and_height_attr', '__return_false' );
</span><span class="cx" style="display: block; padding: 0 10px"> remove_filter( 'wp_img_tag_add_loading_attr', '__return_false' );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- remove_filter( 'wp_content_image_mimes', '__return_empty_array' );
-
</del><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2296,12 +2293,9 @@
</span><span class="cx" style="display: block; padding: 0 10px"> $img = wp_img_tag_add_loading_attr( $img, 'test' );
</span><span class="cx" style="display: block; padding: 0 10px"> $img = wp_img_tag_add_decoding_attr( $img, 'the_content' );
</span><span class="cx" style="display: block; padding: 0 10px"> $img = preg_replace( '|<img ([^>]+) />|', '<img $1 ' . 'srcset="image2x.jpg 2x" />', $img );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- add_filter( 'wp_content_image_mimes', '__return_empty_array' );
</del><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> // The content filter should return the image unchanged.
</span><span class="cx" style="display: block; padding: 0 10px"> $this->assertSame( $img, wp_filter_content_tags( $img ) );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-
- remove_filter( 'wp_content_image_mimes', '__return_empty_array' );
</del><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2371,7 +2365,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> add_filter( 'wp_img_tag_add_width_and_height_attr', '__return_false' );
</span><span class="cx" style="display: block; padding: 0 10px"> add_filter( 'wp_img_tag_add_srcset_and_sizes_attr', '__return_false' );
</span><span class="cx" style="display: block; padding: 0 10px"> add_filter( 'wp_img_tag_add_decoding_attr', '__return_false' );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- add_filter( 'wp_content_image_mimes', '__return_empty_array' );
</del><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> add_filter(
</span><span class="cx" style="display: block; padding: 0 10px"> 'wp_content_img_tag',
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2434,7 +2427,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> * @requires function imagejpeg
</span><span class="cx" style="display: block; padding: 0 10px"> */
</span><span class="cx" style="display: block; padding: 0 10px"> public function test_wp_filter_content_tags_schemes() {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- add_filter( 'wp_content_image_mimes', '__return_empty_array' );
</del><span class="cx" style="display: block; padding: 0 10px"> $image_meta = wp_get_attachment_metadata( self::$large_id );
</span><span class="cx" style="display: block; padding: 0 10px"> $size_array = $this->get_image_size_array_from_meta( $image_meta, 'medium' );
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2480,7 +2472,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> $actual = wp_filter_content_tags( $unfiltered );
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> $this->assertSame( $expected, $actual );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- remove_filter( 'wp_content_image_mimes', '__return_empty_array' );
</del><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2974,13 +2965,11 @@
</span><span class="cx" style="display: block; padding: 0 10px"> // Do not add loading, srcset, and sizes.
</span><span class="cx" style="display: block; padding: 0 10px"> add_filter( 'wp_img_tag_add_loading_attr', '__return_false' );
</span><span class="cx" style="display: block; padding: 0 10px"> add_filter( 'wp_img_tag_add_srcset_and_sizes_attr', '__return_false' );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- add_filter( 'wp_content_image_mimes', '__return_empty_array' );
</del><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> $this->assertSame( $content_filtered, wp_filter_content_tags( $content_unfiltered ) );
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> remove_filter( 'wp_img_tag_add_loading_attr', '__return_false' );
</span><span class="cx" style="display: block; padding: 0 10px"> remove_filter( 'wp_img_tag_add_srcset_and_sizes_attr', '__return_false' );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- remove_filter( 'wp_content_image_mimes', '__return_empty_array' );
</del><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -3056,13 +3045,11 @@
</span><span class="cx" style="display: block; padding: 0 10px"> // Do not add width, height, srcset, and sizes.
</span><span class="cx" style="display: block; padding: 0 10px"> add_filter( 'wp_img_tag_add_width_and_height_attr', '__return_false' );
</span><span class="cx" style="display: block; padding: 0 10px"> add_filter( 'wp_img_tag_add_srcset_and_sizes_attr', '__return_false' );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- add_filter( 'wp_content_image_mimes', '__return_empty_array' );
</del><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> $this->assertSame( $content_filtered, wp_filter_content_tags( $content_unfiltered ) );
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> remove_filter( 'wp_img_tag_add_width_and_height_attr', '__return_false' );
</span><span class="cx" style="display: block; padding: 0 10px"> remove_filter( 'wp_img_tag_add_srcset_and_sizes_attr', '__return_false' );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- remove_filter( 'wp_content_image_mimes', '__return_empty_array' );
</del><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -3091,13 +3078,9 @@
</span><span class="cx" style="display: block; padding: 0 10px"> // Enable globally for all tags.
</span><span class="cx" style="display: block; padding: 0 10px"> add_filter( 'wp_lazy_loading_enabled', '__return_true' );
</span><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- add_filter( 'wp_content_image_mimes', '__return_empty_array' );
-
</del><span class="cx" style="display: block; padding: 0 10px"> $this->assertSame( $content_filtered, wp_filter_content_tags( $content_unfiltered ) );
</span><span class="cx" style="display: block; padding: 0 10px"> remove_filter( 'wp_lazy_loading_enabled', '__return_true' );
</span><span class="cx" style="display: block; padding: 0 10px"> remove_filter( 'wp_img_tag_add_srcset_and_sizes_attr', '__return_false' );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- remove_filter( 'wp_content_image_mimes', '__return_empty_array' );
-
</del><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -3122,12 +3105,9 @@
</span><span class="cx" style="display: block; padding: 0 10px"> // Disable globally for all tags.
</span><span class="cx" style="display: block; padding: 0 10px"> add_filter( 'wp_lazy_loading_enabled', '__return_false' );
</span><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- add_filter( 'wp_content_image_mimes', '__return_empty_array' );
-
</del><span class="cx" style="display: block; padding: 0 10px"> $this->assertSame( $content, wp_filter_content_tags( $content ) );
</span><span class="cx" style="display: block; padding: 0 10px"> remove_filter( 'wp_lazy_loading_enabled', '__return_false' );
</span><span class="cx" style="display: block; padding: 0 10px"> remove_filter( 'wp_img_tag_add_srcset_and_sizes_attr', '__return_false' );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- remove_filter( 'wp_content_image_mimes', '__return_empty_array' );
</del><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -3553,7 +3533,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> */
</span><span class="cx" style="display: block; padding: 0 10px"> function test_wp_filter_content_tags_with_wp_get_loading_attr_default() {
</span><span class="cx" style="display: block; padding: 0 10px"> global $wp_query, $wp_the_query;
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- add_filter( 'wp_content_image_mimes', '__return_empty_array' );
</del><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> $img1 = get_image_tag( self::$large_id, '', '', '', 'large' );
</span><span class="cx" style="display: block; padding: 0 10px"> $iframe1 = '<iframe src="https://www.example.com" width="640" height="360"></iframe>';
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -3589,7 +3568,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> $content_filtered = wp_filter_content_tags( $content_unfiltered, 'the_content' );
</span><span class="cx" style="display: block; padding: 0 10px"> remove_filter( 'wp_img_tag_add_srcset_and_sizes_attr', '__return_false' );
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- remove_filter( 'wp_content_image_mimes', '__return_empty_array' );
</del><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> // After filtering, the first image should not be lazy-loaded while the other ones should be.
</span><span class="cx" style="display: block; padding: 0 10px"> $this->assertSame( $content_expected, $content_filtered );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -3639,169 +3617,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> // Clean up the above filter.
</span><span class="cx" style="display: block; padding: 0 10px"> remove_filter( 'wp_omit_loading_attr_threshold', '__return_null', 100 );
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-
- /**
- * @ticket 55443
- */
- public function test_wp_image_use_alternate_mime_types_replaces_jpg_with_webp_where_available() {
- if ( ! wp_image_editor_supports( array( 'mime_type' => 'image/webp' ) ) ) {
- $this->markTestSkipped( 'This test requires WebP support.' );
- }
-
- // The attachment $large_id is a JPEG image, so it gets WebP files generated by default.
- $tag = wp_get_attachment_image( self::$large_id, 'full' );
- $expected_tag = $tag;
-
- $metadata = wp_get_attachment_metadata( self::$large_id );
- foreach ( $metadata['sizes'] as $size => $properties ) {
- // Some sizes may not have WebP if the WebP file is larger than the JPEG for the size.
- if ( ! isset( $properties['sources']['image/webp'] ) ) {
- continue;
- }
- $expected_tag = str_replace( $properties['sources']['image/jpeg']['file'], $properties['sources']['image/webp']['file'], $expected_tag );
- }
- // Same applies to the full size.
- if ( isset( $metadata['sources']['image/webp'] ) ) {
- $expected_tag = str_replace( $metadata['sources']['image/jpeg']['file'], $metadata['sources']['image/webp']['file'], $expected_tag );
- }
-
- $this->assertNotSame( $tag, $expected_tag );
- $this->assertSame( $expected_tag, wp_image_use_alternate_mime_types( $tag, 'the_content', self::$large_id ) );
- }
-
- /**
- * @ticket 55443
- */
- public function test_wp_image_use_alternate_mime_types_does_not_replace_jpg_when_webp_is_not_available() {
- if ( ! wp_image_editor_supports( array( 'mime_type' => 'image/webp' ) ) ) {
- $this->markTestSkipped( 'This test requires WebP support.' );
- }
-
- // The attachment $large_id is a JPEG image, so it gets WebP files generated by default.
- $tag = wp_get_attachment_image( self::$large_id, 'full' );
-
- // Update attachment metadata as if the image had no WebP available for any sub-sizes and the full size.
- $metadata = wp_get_attachment_metadata( self::$large_id );
- foreach ( $metadata['sizes'] as $size => $properties ) {
- unset( $metadata['sizes'][ $size ]['sources']['image/webp'] );
- }
- unset( $metadata['sources']['image/webp'] );
- wp_update_attachment_metadata( self::$large_id, $metadata );
-
- $this->assertSame( $tag, wp_image_use_alternate_mime_types( $tag, 'the_content', self::$large_id ) );
- }
-
- /**
- * @ticket 55443
- */
- public function test_wp_image_use_alternate_mime_types_still_replaces_jpg_subsizes_when_webp_is_not_available_for_full_size() {
- if ( ! wp_image_editor_supports( array( 'mime_type' => 'image/webp' ) ) ) {
- $this->markTestSkipped( 'This test requires WebP support.' );
- }
-
- // The attachment $large_id is a JPEG image, so it gets WebP files generated by default.
- $tag = wp_get_attachment_image( self::$large_id, 'full' );
- $expected_tag = $tag;
-
- // Update attachment metadata as if the image had no WebP available for the full size.
- $metadata = wp_get_attachment_metadata( self::$large_id );
- unset( $metadata['sources']['image/webp'] );
- wp_update_attachment_metadata( self::$large_id, $metadata );
-
- foreach ( $metadata['sizes'] as $size => $properties ) {
- // Some sizes may not have WebP if the WebP file is larger than the JPEG for the size.
- if ( ! isset( $properties['sources']['image/webp'] ) ) {
- continue;
- }
- $expected_tag = str_replace( $properties['sources']['image/jpeg']['file'], $properties['sources']['image/webp']['file'], $expected_tag );
- }
-
- $this->assertNotSame( $tag, $expected_tag );
- $this->assertSame( $expected_tag, wp_image_use_alternate_mime_types( $tag, 'the_content', self::$large_id ) );
- }
-
- /**
- * @ticket 55443
- */
- public function test_wp_image_use_alternate_mime_types_respects_wp_content_image_mimes_filter() {
- if ( ! wp_image_editor_supports( array( 'mime_type' => 'image/webp' ) ) ) {
- $this->markTestSkipped( 'This test requires WebP support.' );
- }
-
- // The attachment $large_id is a JPEG image, so it gets WebP files generated by default.
- $tag = wp_get_attachment_image( self::$large_id, 'full' );
-
- // Invalid filter value results in no changes to content.
- add_filter( 'wp_content_image_mimes', '__return_false' );
- $this->assertSame( $tag, wp_image_use_alternate_mime_types( $tag, 'the_content', self::$large_id ) );
-
- // Empty array results in no changes to content.
- add_filter( 'wp_content_image_mimes', '__return_empty_array' );
- $this->assertSame( $tag, wp_image_use_alternate_mime_types( $tag, 'the_content', self::$large_id ) );
-
- // Preferring JPEG over WebP results in no changes to content.
- add_filter(
- 'wp_content_image_mimes',
- function() {
- return array( 'image/jpeg', 'image/webp' );
- }
- );
- $this->assertSame( $tag, wp_image_use_alternate_mime_types( $tag, 'the_content', self::$large_id ) );
- }
-
- /**
- * @ticket 55443
- */
- public function test__wp_in_front_end_context_without_wp_query() {
- unset( $GLOBALS['wp_query'] );
-
- $this->assertFalse( _wp_in_front_end_context() );
- }
-
- /**
- * @ticket 55443
- */
- public function test__wp_in_front_end_context_with_feed() {
- remove_all_actions( 'template_redirect' );
- do_action( 'template_redirect' );
- $GLOBALS['wp_query']->is_feed = true;
-
- $this->assertFalse( _wp_in_front_end_context() );
- }
-
- /**
- * @ticket 55443
- */
- public function test__wp_in_front_end_context_before_and_after_template_redirect() {
- $result = _wp_in_front_end_context();
-
- remove_all_actions( 'template_redirect' );
- do_action( 'template_redirect' );
-
- $this->assertFalse( $result );
- $this->assertTrue( _wp_in_front_end_context() );
- }
-
- /**
- * @ticket 55443
- */
- public function test__wp_in_front_end_context_within_wp_head() {
- remove_all_actions( 'template_redirect' );
- do_action( 'template_redirect' );
-
- // Call function within a 'wp_head' callback.
- remove_all_actions( 'wp_head' );
- $result = null;
- add_action(
- 'wp_head',
- function() use ( &$result ) {
- $result = _wp_in_front_end_context();
- }
- );
- do_action( 'wp_head' );
-
- $this->assertFalse( $result );
- }
</del><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span></span></pre></div>
<a id="trunktestsphpunittestsrestapirestattachmentscontrollerphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/phpunit/tests/rest-api/rest-attachments-controller.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/phpunit/tests/rest-api/rest-attachments-controller.php 2022-09-06 16:16:07 UTC (rev 54084)
+++ trunk/tests/phpunit/tests/rest-api/rest-attachments-controller.php 2022-09-06 21:11:41 UTC (rev 54085)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2262,46 +2262,4 @@
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> );
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-
- /**
- * @ticket 55443
- */
- public function test_image_sources_to_rest_response() {
-
- $attachment_id = self::factory()->attachment->create_upload_object( $this->test_file );
- $metadata = wp_get_attachment_metadata( $attachment_id );
- $request = new WP_REST_Request();
- $request['id'] = $attachment_id;
- $controller = new WP_REST_Attachments_Controller( 'attachment' );
- $response = $controller->get_item( $request );
-
- $this->assertNotWPError( $response );
-
- $data = $response->get_data();
- $mime_types = array(
- 'image/jpeg',
- );
-
- if ( wp_image_editor_supports( array( 'mime_type' => 'image/webp' ) ) ) {
- array_push( $mime_types, 'image/webp' );
- }
-
- foreach ( $data['media_details']['sizes'] as $size_name => $properties ) {
- if ( ! isset( $metadata['sizes'][ $size_name ]['sources'] ) ) {
- continue;
- }
-
- $this->assertArrayHasKey( 'sources', $properties );
- $this->assertIsArray( $properties['sources'] );
-
- foreach ( $mime_types as $mime_type ) {
- $this->assertArrayHasKey( $mime_type, $properties['sources'] );
- $this->assertArrayHasKey( 'filesize', $properties['sources'][ $mime_type ] );
- $this->assertArrayHasKey( 'file', $properties['sources'][ $mime_type ] );
- $this->assertArrayHasKey( 'source_url', $properties['sources'][ $mime_type ] );
- $this->assertNotFalse( filter_var( $properties['sources'][ $mime_type ]['source_url'], FILTER_VALIDATE_URL ) );
- }
- }
- $this->assertArrayNotHasKey( 'sources', $data['media_details'] );
- }
</del><span class="cx" style="display: block; padding: 0 10px"> }
</span></span></pre>
</div>
</div>
</body>
</html>