Make WordPress Core

Ticket #11895: 11895.1.diff

File 11895.1.diff, 6.2 KB (added by bradt, 9 years ago)
  • wp-admin/includes/image-edit.php

    diff --git src/wp-admin/includes/image-edit.php src/wp-admin/includes/image-edit.php
    index f8a9d50..97c888d 100644
    function wp_image_editor($post_id, $msg = false) { 
    131131        <p id="imgedit-save-target-<?php echo $post_id; ?>">
    132132                <strong><?php _e('Apply changes to:'); ?></strong><br />
    133133
    134                 <label class="imgedit-label">
    135                 <input type="radio" name="imgedit-target-<?php echo $post_id; ?>" value="all" checked="checked" />
    136                 <?php _e('All image sizes'); ?></label>
     134                <?php
     135                $image_sizes = get_intermediate_image_sizes();
     136                $image_sizes[] = 'full';
     137
     138                /** This filter is documented in wp-admin/includes/media.php */
     139                $image_size_names = apply_filters( 'image_size_names_choose', array(
     140                        'thumbnail'      => __( 'Thumbnail' ),
     141                        'medium'         => __( 'Medium' ),
     142                        'large'          => __( 'Large' ),
     143                        'post-thumbnail' => __( 'Featured Image' ),
     144                        'full'           => __( 'Full Size' ),
     145                ) );
     146
     147                foreach ( $image_sizes as $image_size ) {
     148                        if ( ! isset( $image_size_names[ $image_size ] ) ) {
     149                                continue;
     150                        }
     151                        ?>
     152
     153                        <label class="imgedit-label">
     154                        <input type="checkbox" name="imgedit-target-<?php echo $post_id; ?>" value="<?php echo esc_attr( $image_size ); ?>" checked="checked" />
     155                        <?php echo esc_html( $image_size_names[ $image_size ] ); ?></label>
    137156
    138                 <label class="imgedit-label">
    139                 <input type="radio" name="imgedit-target-<?php echo $post_id; ?>" value="thumbnail" />
    140                 <?php _e('Thumbnail'); ?></label>
     157                        <?php
     158                }
     159                ?>
    141160
    142                 <label class="imgedit-label">
    143                 <input type="radio" name="imgedit-target-<?php echo $post_id; ?>" value="nothumb" />
    144                 <?php _e('All sizes except thumbnail'); ?></label>
    145161        </p>
    146162        </div>
    147163
    function wp_save_image( $post_id ) { 
    655671        global $_wp_additional_image_sizes;
    656672
    657673        $return = new stdClass;
    658         $success = $delete = $scaled = $nocrop = false;
     674        $success = $scaled = false;
    659675        $post = get_post( $post_id );
    660676
    661677        $img = wp_get_image_editor( _load_image_to_edit_path( $post_id, 'full' ) );
    function wp_save_image( $post_id ) { 
    666682
    667683        $fwidth = !empty($_REQUEST['fwidth']) ? intval($_REQUEST['fwidth']) : 0;
    668684        $fheight = !empty($_REQUEST['fheight']) ? intval($_REQUEST['fheight']) : 0;
    669         $target = !empty($_REQUEST['target']) ? preg_replace('/[^a-z0-9_-]+/i', '', $_REQUEST['target']) : '';
     685        $target = !empty($_REQUEST['target']) ? $_REQUEST['target'] : array();
    670686        $scale = !empty($_REQUEST['do']) && 'scale' == $_REQUEST['do'];
    671687
     688        if ( ! is_array( $target ) ) {
     689                $target = array( $target );
     690        }
     691
     692        // Sanitize image sizes
     693        foreach( $target as &$image_size ) {
     694                $image_size = preg_replace( '/[^a-z0-9_-]+/i', '', $image_size );
     695        }
     696
    672697        if ( $scale && $fwidth > 0 && $fheight > 0 ) {
    673698                $size = $img->get_size();
    674699                $sX = $size['width'];
    function wp_save_image( $post_id ) { 
    715740        if ( defined('IMAGE_EDIT_OVERWRITE') && IMAGE_EDIT_OVERWRITE &&
    716741                isset($backup_sizes['full-orig']) && $backup_sizes['full-orig']['file'] != $path_parts['basename'] ) {
    717742
    718                 if ( 'thumbnail' == $target )
    719                         $new_path = "{$path_parts['dirname']}/{$filename}-temp.{$path_parts['extension']}";
    720                 else
    721                         $new_path = $path;
     743                $new_path = $path;
    722744        } else {
    723745                while( true ) {
    724746                        $filename = preg_replace( '/-e([0-9]+)$/', '', $filename );
    function wp_save_image( $post_id ) { 
    738760                return $return;
    739761        }
    740762
    741         if ( 'nothumb' == $target || 'all' == $target || 'full' == $target || $scaled ) {
     763        if ( in_array( 'full', $target ) || $scaled ) {
    742764                $tag = false;
    743765                if ( isset($backup_sizes['full-orig']) ) {
    744766                        if ( ( !defined('IMAGE_EDIT_OVERWRITE') || !IMAGE_EDIT_OVERWRITE ) && $backup_sizes['full-orig']['file'] != $path_parts['basename'] )
    function wp_save_image( $post_id ) { 
    758780                $meta['width'] = $size['width'];
    759781                $meta['height'] = $size['height'];
    760782
    761                 if ( $success && ('nothumb' == $target || 'all' == $target) ) {
    762                         $sizes = get_intermediate_image_sizes();
    763                         if ( 'nothumb' == $target )
    764                                 $sizes = array_diff( $sizes, array('thumbnail') );
    765                 }
    766 
    767783                $return->fw = $meta['width'];
    768784                $return->fh = $meta['height'];
    769         } elseif ( 'thumbnail' == $target ) {
    770                 $sizes = array( 'thumbnail' );
    771                 $success = $delete = $nocrop = true;
    772785        }
     786        else {
     787                $success = true;
     788        }
     789
     790        /**
     791         * Previously there were radio buttons under "Apply changes to:"
     792         * and when you selected "Thumbnail", it would turn off cropping.
     793         * We want to preserve this behaviour here for now.
     794         */
     795        $nocrop = in_array( 'thumbnail', $target ) && 1 == count( $target );
     796
     797        if ( $success && ! $scaled ) {
     798                $sizes = get_intermediate_image_sizes();
     799                // Excludes 'full' and any incorrect image sizes
     800                $sizes = array_intersect( $sizes, $target );
    773801
    774         if ( isset( $sizes ) ) {
    775802                $_sizes = array();
    776803
    777804                foreach ( $sizes as $size ) {
    function wp_save_image( $post_id ) { 
    810837                wp_update_attachment_metadata( $post_id, $meta );
    811838                update_post_meta( $post_id, '_wp_attachment_backup_sizes', $backup_sizes);
    812839
    813                 if ( $target == 'thumbnail' || $target == 'all' || $target == 'full' ) {
     840                if ( ! $scaled ) {
    814841                        // Check if it's an image edit from attachment edit screen
    815842                        if ( ! empty( $_REQUEST['context'] ) && 'edit-attachment' == $_REQUEST['context'] ) {
    816843                                $thumb_url = wp_get_attachment_image_src( $post_id, array( 900, 600 ), true );
    function wp_save_image( $post_id ) { 
    824851                                }
    825852                        }
    826853                }
    827         } else {
    828                 $delete = true;
    829854        }
    830855
    831         if ( $delete ) {
    832 
     856        if ( ! $success || ( ! $scaled && ! in_array( 'full', $target ) ) ) {
    833857                /** This filter is documented in wp-admin/custom-header.php */
    834858                $delpath = apply_filters( 'wp_delete_file', $new_path );
    835859                @unlink( $delpath );
  • wp-admin/js/image-edit.js

    diff --git src/wp-admin/js/image-edit.js src/wp-admin/js/image-edit.js
    index 7bf2928..b8ae4a5 100644
    var imageEdit = window.imageEdit = { 
    6868        },
    6969
    7070        getTarget : function(postid) {
    71                 return $('input[name="imgedit-target-' + postid + '"]:checked', '#imgedit-save-target-' + postid).val() || 'full';
     71                var target = new Array();
     72                $('input[name="imgedit-target-' + postid + '"]:checked', '#imgedit-save-target-' + postid).each(function() {
     73                        target.push(jQuery(this).val());
     74                });
     75                return target;
    7276        },
    7377
    7478        scaleChanged : function(postid, x) {