Make WordPress Core

Ticket #20657: 20657.9.patch

File 20657.9.patch, 6.1 KB (added by SergeyBiryukov, 12 years ago)
  • wp-admin/custom-header.php

     
    788788        <?php } ?>
    789789        <?php wp_nonce_field( 'custom-header-crop-image' ) ?>
    790790
    791         <?php submit_button( __( 'Crop and Publish' ) ); ?>
     791        <p class="submit"><?php
     792        submit_button( __( 'Crop and Publish' ), 'primary', 'submit', false );
     793        if ( isset( $oitar ) && 1 == $oitar )
     794                submit_button( __( 'Skip Cropping, Use Image as Is' ), 'primary', 'skip-cropping', false );
     795        ?>
    792796        </p>
    793797</form>
    794798</div>
     
    867871                else
    868872                        $dst_width = get_theme_support( 'custom-header', 'width' );
    869873
    870                 $cropped = wp_crop_image( $attachment_id, (int) $_POST['x1'], (int) $_POST['y1'], (int) $_POST['width'], (int) $_POST['height'], $dst_width, $dst_height );
     874                if ( ! isset( $_POST['skip-cropping'] ) )
     875                        $cropped = wp_crop_image( $attachment_id, (int) $_POST['x1'], (int) $_POST['y1'], (int) $_POST['width'], (int) $_POST['height'], $dst_width, $dst_height );
     876                else
     877                        $cropped = _copy_image_file( $attachment_id );
     878
    871879                if ( ! $cropped || is_wp_error( $cropped ) )
    872880                        wp_die( __( 'Image could not be processed. Please go back and try again.' ), __( 'Image Processing Error' ) );
    873881
    874882                $cropped = apply_filters('wp_create_file_in_uploads', $cropped, $attachment_id); // For replication
    875                 $is_cropped = ( get_attached_file( $attachment_id ) != $cropped );
    876883
    877884                $parent = get_post($attachment_id);
    878885                $parent_url = $parent->guid;
     
    913920                $medium = str_replace( basename( $original ), 'midsize-' . basename( $original ), $original );
    914921                if ( file_exists( $medium ) )
    915922                        @unlink( apply_filters( 'wp_delete_file', $medium ) );
    916                 if ( empty( $_POST['new-attachment'] ) && $is_cropped )
     923                if ( empty( $_POST['new-attachment'] ) )
    917924                        @unlink( apply_filters( 'wp_delete_file', $original ) );
    918925
    919926                return $this->finished();
  • wp-admin/includes/image.php

     
    4444 * @return string|WP_Error|false New filepath on success, WP_Error or false on failure.
    4545 */
    4646function wp_crop_image( $src, $src_x, $src_y, $src_w, $src_h, $dst_w, $dst_h, $src_abs = false, $dst_file = false ) {
    47         if ( 0 == $src_x && 0 == $src_y && $src_w == $dst_w && $src_h == $dst_h )
    48                 return ( is_numeric( $src ) ) ? get_attached_file( $src ) : $src;
    49 
    5047        if ( is_numeric( $src ) ) { // Handle int as attachment ID
    5148                $src_file = get_attached_file( $src );
    5249                if ( ! file_exists( $src_file ) ) {
     
    364361        return apply_filters('file_is_displayable_image', $result, $path);
    365362}
    366363
    367 function load_image_to_edit($post_id, $mime_type, $size = 'full') {
    368         $filepath = get_attached_file($post_id);
    369 
    370         if ( $filepath && file_exists($filepath) ) {
    371                 if ( 'full' != $size && ( $data = image_get_intermediate_size($post_id, $size) ) ) {
    372                         $filepath = apply_filters('load_image_to_edit_filesystempath', path_join( dirname($filepath), $data['file'] ), $post_id, $size);
    373                 }
    374         } elseif ( function_exists('fopen') && function_exists('ini_get') && true == ini_get('allow_url_fopen') ) {
    375                 $filepath = apply_filters('load_image_to_edit_attachmenturl', wp_get_attachment_url($post_id) , $post_id, $size);
    376         }
    377 
    378         $filepath = apply_filters('load_image_to_edit_path', $filepath, $post_id, $size);
    379         if ( empty($filepath) )
     364/**
     365 * Load an image resource for editing.
     366 *
     367 * @since 2.9.0
     368 *
     369 * @param string $attachment_id Attachment ID.
     370 * @param string $mime_type Image mime type.
     371 * @param string $size Optional. Image size, defaults to 'full'.
     372 * @return resource|false The resulting image resource on success, false on failure.
     373 */
     374function load_image_to_edit( $attachment_id, $mime_type, $size = 'full' ) {
     375        $filepath = _load_image_to_edit_path( $attachment_id, $size );
     376        if ( empty( $filepath ) )
    380377                return false;
    381378
    382379        switch ( $mime_type ) {
     
    394391                        break;
    395392        }
    396393        if ( is_resource($image) ) {
    397                 $image = apply_filters('load_image_to_edit', $image, $post_id, $size);
     394                $image = apply_filters('load_image_to_edit', $image, $attachment_id, $size);
    398395                if ( function_exists('imagealphablending') && function_exists('imagesavealpha') ) {
    399396                        imagealphablending($image, false);
    400397                        imagesavealpha($image, true);
     
    402399        }
    403400        return $image;
    404401}
     402
     403/**
     404 * Attempt to load an attachment from URL (for replication plugins).
     405 *
     406 * @since 3.4.0
     407 * @access private
     408 *
     409 * @param string $attachment_id Attachment ID.
     410 * @param string $size Optional. Image size, defaults to 'full'.
     411 * @return string|false Local file path on success, false on failure.
     412 */
     413function _load_image_to_edit_path( $attachment_id, $size = 'full' ) {
     414        $filepath = get_attached_file( $attachment_id );
     415
     416        if ( $filepath && file_exists( $filepath ) ) {
     417                if ( 'full' != $size && ( $data = image_get_intermediate_size( $attachment_id, $size ) ) ) {
     418                        $filepath = apply_filters( 'load_image_to_edit_filesystempath', path_join( dirname( $filepath ), $data['file'] ), $attachment_id, $size );
     419                }
     420        } elseif ( function_exists( 'fopen' ) && function_exists( 'ini_get' ) && true == ini_get( 'allow_url_fopen' ) ) {
     421                $filepath = apply_filters( 'load_image_to_edit_attachmenturl', wp_get_attachment_url( $attachment_id ), $attachment_id, $size );
     422        }
     423
     424        return apply_filters( 'load_image_to_edit_path', $filepath, $attachment_id, $size );
     425}
     426
     427/**
     428 * Copy an existing image file.
     429 *
     430 * @since 3.4.0
     431 * @access private
     432 *
     433 * @param string $attachment_id Attachment ID.
     434 * @return string|false New file path on success, false on failure.
     435 */
     436function _copy_image_file( $attachment_id ) {
     437        $src_file = get_attached_file( $attachment_id );
     438        if ( ! file_exists( $src_file ) )
     439                $src_file = _load_image_to_edit_path( $attachment_id );
     440
     441        if ( $src_file ) {
     442                $dst_file = str_replace( basename( $src_file ), 'copy-' . basename( $src_file ), $src_file );
     443                $dst_file = dirname( $dst_file ) . '/' . wp_unique_filename( dirname( $dst_file ), basename( $dst_file ) );
     444                if ( ! copy( $src_file, $dst_file ) )
     445                        $dst_file = false;
     446        } else {
     447                $dst_file = false;
     448        }
     449
     450        return $dst_file;
     451}