X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/7f1521bf193b382565eb753043c161f4cb3fcda7..16e7b37c7914d753890c1a05a9335f3b43751eb8:/wp-admin/includes/image-edit.php diff --git a/wp-admin/includes/image-edit.php b/wp-admin/includes/image-edit.php index 5a82b415..db11b566 100644 --- a/wp-admin/includes/image-edit.php +++ b/wp-admin/includes/image-edit.php @@ -40,13 +40,14 @@ function wp_image_editor($post_id, $msg = false) { } ?> -
+
-

+

+

@@ -54,9 +55,22 @@ function wp_image_editor($post_id, $msg = false) {

- × - ! - , 'scale')" class="button button-primary" value="" /> + +
+ +
+ + × + + ! + , 'scale')" class="button button-primary" value="" /> +
+
+
@@ -65,7 +79,7 @@ function wp_image_editor($post_id, $msg = false) {
-

+

-

+

+

@@ -97,23 +112,32 @@ function wp_image_editor($post_id, $msg = false) {
-

- - - - : - - -

- -

- - - - × - - -

+
+ +
+ + : + +
+
+ +
+ +
+ + × + +
+
+
-

+

+

-

+

-
-

+
+
-

-
+

+
+
+
-
+
-
-
, this)" class="imgedit-crop disabled" title="">
+ get_post_mime_type( $post_id ), 'methods' => array( 'rotate' ) ) ) ) { ?> -
, this)" title="">
-
, this)" title="">
+ if ( wp_image_editor_supports( array( 'mime_type' => get_post_mime_type( $post_id ), 'methods' => array( 'rotate' ) ) ) ) { + $note_no_rotate = ''; + ?> + + ' . __( 'Image rotation is not supported by your web host.' ) . '

'; ?> -
-
+ + -
, this)" class="imgedit-flipv" title="">
-
, this)" class="imgedit-fliph" title="">
+ + -
, this)" class="imgedit-undo disabled" title="">
-
, this)" class="imgedit-redo disabled" title="">
-
+ + +
@@ -184,18 +213,17 @@ function wp_image_editor($post_id, $msg = false) {
- +
- + )" disabled="disabled" class="button button-primary imgedit-submit-btn" value="" />
-
save( $filename, $mime_type ); } else { - _deprecated_argument( __FUNCTION__, '3.5', __( '$image needs to be an WP_Image_Editor object' ) ); + _deprecated_argument( __FUNCTION__, '3.5.0', __( '$image needs to be an WP_Image_Editor object' ) ); /** This filter is documented in wp-admin/includes/image-edit.php */ $image = apply_filters( 'image_save_pre', $image, $post_id ); /** - * Filter whether to skip saving the image file. + * Filters whether to skip saving the image file. * * Returning a non-null value will short-circuit the save method, * returning that value instead. @@ -359,7 +387,7 @@ function _image_get_preview_ratio($w, $h) { * @return resource|false GD image resource, false otherwise. */ function _rotate_image_resource($img, $angle) { - _deprecated_function( __FUNCTION__, '3.5', __( 'Use WP_Image_Editor::rotate' ) ); + _deprecated_function( __FUNCTION__, '3.5.0', 'WP_Image_Editor::rotate()' ); if ( function_exists('imagerotate') ) { $rotated = imagerotate($img, $angle, 0); if ( is_resource($rotated) ) { @@ -382,7 +410,7 @@ function _rotate_image_resource($img, $angle) { * @return resource (maybe) flipped image resource. */ function _flip_image_resource($img, $horz, $vert) { - _deprecated_function( __FUNCTION__, '3.5', __( 'Use WP_Image_Editor::flip' ) ); + _deprecated_function( __FUNCTION__, '3.5.0', 'WP_Image_Editor::flip()' ); $w = imagesx($img); $h = imagesy($img); $dst = wp_imagecreatetruecolor($w, $h); @@ -429,13 +457,13 @@ function _crop_image_resource($img, $x, $y, $w, $h) { * * @since 2.9.0 * - * @param WP_Image_Editor $image {@see WP_Image_Editor} instance. + * @param WP_Image_Editor $image WP_Image_Editor instance. * @param array $changes Array of change operations. - * @return WP_Image_Editor {@see WP_Image_Editor} instance with changes applied. + * @return WP_Image_Editor WP_Image_Editor instance with changes applied. */ function image_edit_apply_changes( $image, $changes ) { if ( is_resource( $image ) ) - _deprecated_argument( __FUNCTION__, '3.5', __( '$image needs to be an WP_Image_Editor object' ) ); + _deprecated_argument( __FUNCTION__, '3.5.0', __( '$image needs to be an WP_Image_Editor object' ) ); if ( !is_array($changes) ) return $image; @@ -486,7 +514,7 @@ function image_edit_apply_changes( $image, $changes ) { if ( $image instanceof WP_Image_Editor ) { /** - * Filter the WP_Image_Editor instance before applying changes to the image. + * Filters the WP_Image_Editor instance before applying changes to the image. * * @since 3.5.0 * @@ -497,7 +525,7 @@ function image_edit_apply_changes( $image, $changes ) { } elseif ( is_resource( $image ) ) { /** - * Filter the GD image resource before applying changes to the image. + * Filters the GD image resource before applying changes to the image. * * @since 2.9.0 * @deprecated 3.5.0 Use wp_image_editor_before_change instead. @@ -552,18 +580,18 @@ function image_edit_apply_changes( $image, $changes ) { * in $_REQUEST['history'] * * @param int $post_id - * @return boolean + * @return bool */ function stream_preview_image( $post_id ) { $post = get_post( $post_id ); - /** This filter is documented in wp-admin/admin.php */ - @ini_set( 'memory_limit', apply_filters( 'admin_memory_limit', WP_MAX_MEMORY_LIMIT ) ); + wp_raise_memory_limit( 'admin' ); $img = wp_get_image_editor( _load_image_to_edit_path( $post_id ) ); - if ( is_wp_error( $img ) ) - return false; + if ( is_wp_error( $img ) ) { + return false; + } $changes = !empty($_REQUEST['history']) ? json_decode( wp_unslash($_REQUEST['history']) ) : null; if ( $changes ) @@ -614,7 +642,7 @@ function wp_restore_image($post_id) { if ( $parts['basename'] != $data['file'] ) { if ( defined('IMAGE_EDIT_OVERWRITE') && IMAGE_EDIT_OVERWRITE ) { - // Delete only if it's edited image. + // Delete only if it's an edited image. if ( preg_match('/-e[0-9]{13}\./', $parts['basename']) ) { wp_delete_file( $file ); } @@ -637,7 +665,7 @@ function wp_restore_image($post_id) { if ( isset($meta['sizes'][$default_size]) && $meta['sizes'][$default_size]['file'] != $data['file'] ) { if ( defined('IMAGE_EDIT_OVERWRITE') && IMAGE_EDIT_OVERWRITE ) { - // Delete only if it's edited image + // Delete only if it's an edited image. if ( preg_match('/-e[0-9]{13}-/', $meta['sizes'][$default_size]['file']) ) { $delete_file = path_join( $parts['dirname'], $meta['sizes'][$default_size]['file'] ); wp_delete_file( $delete_file ); @@ -676,7 +704,7 @@ function wp_restore_image($post_id) { * @return \stdClass */ function wp_save_image( $post_id ) { - global $_wp_additional_image_sizes; + $_wp_additional_image_sizes = wp_get_additional_image_sizes(); $return = new stdClass; $success = $delete = $scaled = $nocrop = false; @@ -731,28 +759,33 @@ function wp_save_image( $post_id ) { $backup_sizes = array(); // Generate new filename. - $path = get_attached_file($post_id); - $path_parts = pathinfo( $path ); - $filename = $path_parts['filename']; + $path = get_attached_file( $post_id ); + + $basename = pathinfo( $path, PATHINFO_BASENAME ); + $dirname = pathinfo( $path, PATHINFO_DIRNAME ); + $ext = pathinfo( $path, PATHINFO_EXTENSION ); + $filename = pathinfo( $path, PATHINFO_FILENAME ); $suffix = time() . rand(100, 999); if ( defined('IMAGE_EDIT_OVERWRITE') && IMAGE_EDIT_OVERWRITE && - isset($backup_sizes['full-orig']) && $backup_sizes['full-orig']['file'] != $path_parts['basename'] ) { + isset($backup_sizes['full-orig']) && $backup_sizes['full-orig']['file'] != $basename ) { - if ( 'thumbnail' == $target ) - $new_path = "{$path_parts['dirname']}/{$filename}-temp.{$path_parts['extension']}"; - else + if ( 'thumbnail' == $target ) { + $new_path = "{$dirname}/{$filename}-temp.{$ext}"; + } else { $new_path = $path; + } } else { - while( true ) { + while ( true ) { $filename = preg_replace( '/-e([0-9]+)$/', '', $filename ); $filename .= "-e{$suffix}"; - $new_filename = "{$filename}.{$path_parts['extension']}"; - $new_path = "{$path_parts['dirname']}/$new_filename"; - if ( file_exists($new_path) ) + $new_filename = "{$filename}.{$ext}"; + $new_path = "{$dirname}/$new_filename"; + if ( file_exists($new_path) ) { $suffix++; - else + } else { break; + } } } @@ -762,18 +795,19 @@ function wp_save_image( $post_id ) { return $return; } - if ( 'nothumb' == $target || 'all' == $target || 'full' == $target || $scaled ) { + if ( 'nothumb' === $target || 'all' === $target || 'full' === $target || $scaled ) { $tag = false; - if ( isset($backup_sizes['full-orig']) ) { - if ( ( !defined('IMAGE_EDIT_OVERWRITE') || !IMAGE_EDIT_OVERWRITE ) && $backup_sizes['full-orig']['file'] != $path_parts['basename'] ) + if ( isset( $backup_sizes['full-orig'] ) ) { + if ( ( ! defined( 'IMAGE_EDIT_OVERWRITE' ) || ! IMAGE_EDIT_OVERWRITE ) && $backup_sizes['full-orig']['file'] !== $basename ) { $tag = "full-$suffix"; + } } else { $tag = 'full-orig'; } - if ( $tag ) - $backup_sizes[$tag] = array('width' => $meta['width'], 'height' => $meta['height'], 'file' => $path_parts['basename']); - + if ( $tag ) { + $backup_sizes[$tag] = array('width' => $meta['width'], 'height' => $meta['height'], 'file' => $basename ); + } $success = ( $path === $new_path ) || update_attached_file( $post_id, $new_path ); $meta['file'] = _wp_relative_upload_path( $new_path ); @@ -795,6 +829,21 @@ function wp_save_image( $post_id ) { $success = $delete = $nocrop = true; } + /* + * We need to remove any existing resized image files because + * a new crop or rotate could generate different sizes (and hence, filenames), + * keeping the new resized images from overwriting the existing image files. + * https://core.trac.wordpress.org/ticket/32171 + */ + if ( defined( 'IMAGE_EDIT_OVERWRITE' ) && IMAGE_EDIT_OVERWRITE && ! empty( $meta['sizes'] ) ) { + foreach ( $meta['sizes'] as $size ) { + if ( ! empty( $size['file'] ) && preg_match( '/-e[0-9]{13}-/', $size['file'] ) ) { + $delete_file = path_join( $dirname, $size['file'] ); + wp_delete_file( $delete_file ); + } + } + } + if ( isset( $sizes ) ) { $_sizes = array();