WordPress.org

Make WordPress Core

Ticket #2794: 2794.diff

File 2794.diff, 9.8 KB (added by mdawaffe, 8 years ago)
  • wp-includes/default-filters.php

     
    114114// Misc filters 
    115115add_filter('option_ping_sites', 'privacy_ping_filter'); 
    116116 
     117// Attachments 
     118add_filter('wp_thumbnail_attachment_image/jpeg', 'wp_image_thumbnail', 10, -1); 
     119add_filter('wp_thumbnail_attachment_image/gif', 'wp_image_thumbnail', 10, -1); 
     120add_filter('wp_thumbnail_attachment_image/png', 'wp_image_thumbnail', 10, -1); 
     121 
    117122// Actions 
    118123add_action('wp_head', 'rsd_link'); 
    119124add_action('publish_future_post', 'wp_publish_post', 10, 1); 
  • wp-includes/functions-post.php

     
    355355 
    356356        clean_post_cache($post_ID); 
    357357 
    358         if ( $update) { 
     358        if ( $update ) 
    359359                do_action('edit_attachment', $post_ID); 
    360         } else { 
     360        else 
    361361                do_action('add_attachment', $post_ID); 
    362         } 
    363362 
    364363        return $post_ID; 
    365364} 
    366365 
     366function wp_thumbnail_attachment( $post_ID ) { 
     367        $attachment =& get_post( $post_ID ); 
     368        $meta = get_post_meta( $post_ID, '_wp_attachment_metadata', true ); 
     369        $file = get_post_meta( $post_ID, '_wp_attached_file', true ); 
     370 
     371        $meta = apply_filters( 'wp_thumbnail_attachment_' . strtolower($attachment->post_mime_type), $meta, $post_ID, $file ); 
     372 
     373        if ( !$meta || is_wp_error( $meta ) ) 
     374                add_post_meta( $post_ID, '_wp_attachment_metadata', array() ); 
     375        else 
     376                add_post_meta( $post_ID, '_wp_attachment_metadata', $meta ); 
     377        return $meta; 
     378} 
     379 
    367380function wp_delete_attachment($postid) { 
    368381        global $wpdb; 
    369382        $postid = (int) $postid; 
  • wp-admin/inline-uploading.php

     
    7171        ); 
    7272 
    7373// Save the data 
    74 $id = wp_insert_attachment($attachment, $file, $post); 
     74$id = wp_insert_attachment( $attachment, $file, $post ); 
    7575 
    76 if ( preg_match('!^image/!', $attachment['post_mime_type']) ) { 
    77         // Generate the attachment's postmeta. 
    78         $imagesize = getimagesize($file); 
    79         $imagedata['width'] = $imagesize['0']; 
    80         $imagedata['height'] = $imagesize['1']; 
    81         list($uwidth, $uheight) = get_udims($imagedata['width'], $imagedata['height']); 
    82         $imagedata['hwstring_small'] = "height='$uheight' width='$uwidth'"; 
    83         $imagedata['file'] = $file; 
     76$error = wp_thumbnail_attachment( $id ); 
    8477 
    85         add_post_meta($id, '_wp_attachment_metadata', $imagedata); 
    86  
    87         if ( $imagedata['width'] * $imagedata['height'] < 3 * 1024 * 1024 ) { 
    88                 if ( $imagedata['width'] > 128 && $imagedata['width'] >= $imagedata['height'] * 4 / 3 ) 
    89                         $thumb = wp_create_thumbnail($file, 128); 
    90                 elseif ( $imagedata['height'] > 96 ) 
    91                         $thumb = wp_create_thumbnail($file, 96); 
    92  
    93                 if ( @file_exists($thumb) ) { 
    94                         $newdata = $imagedata; 
    95                         $newdata['thumb'] = basename($thumb); 
    96                         update_post_meta($id, '_wp_attachment_metadata', $newdata, $imagedata); 
    97                 } else { 
    98                         $error = $thumb; 
    99                 } 
    100         } 
    101 } else { 
    102         add_post_meta($id, '_wp_attachment_metadata', array()); 
     78if ( is_wp_error( $error ) ) { 
     79        echo "<div class='error'>\n\t<ul>\n"; 
     80        foreach ( $error->get_error_messages() as $message ) 
     81                 echo "\t\t<li>$message</li>\n"; 
     82        echo "\t</ul>\n\t<a href='" . basename(__FILE__) . "?post=$post&all=$all&action=view&start=0". "'>" . __('Continue') . "</a>\n</div>\n"; 
     83        die(); 
    10384} 
    10485 
     86 
    10587header("Location: " . basename(__FILE__) . "?post=$post&all=$all&action=view&start=0"); 
    10688die(); 
    10789 
  • wp-admin/admin-functions.php

     
    771771        return $wpdb->get_col("SELECT cat_ID FROM $wpdb->categories WHERE category_parent = $parent ORDER BY link_count DESC"); 
    772772} 
    773773 
    774 function wp_create_thumbnail($file, $max_side, $effect = '') { 
     774function wp_image_thumbnail( $meta, $post_ID, $file ) { 
     775        $attachment =& get_post( $post_ID ); 
    775776 
    776                 // 1 = GIF, 2 = JPEG, 3 = PNG 
     777        if ( is_wp_error( $meta ) || isset($meta['thumb']) ) 
     778                return $meta; 
     779        if ( !is_array($meta) ) 
     780                $meta = array(); 
    777781 
    778         if (file_exists($file)) { 
    779                 $type = getimagesize($file); 
     782        if ( preg_match('!^image/!', $attachment->post_mime_type) ) { 
     783                // Generate the attachment's postmeta. 
     784                $imagesize = getimagesize($file); 
     785                $meta['width'] = $imagesize['0']; 
     786                $meta['height'] = $imagesize['1']; 
     787                list($uwidth, $uheight) = get_udims( $meta['width'], $meta['height'] ); 
     788                $meta['hwstring_small'] = "height='$uheight' width='$uwidth'"; 
     789                $meta['file'] = $file; 
    780790 
    781                 // if the associated function doesn't exist - then it's not 
    782                 // handle. duh. i hope. 
    783  
    784                 if (!function_exists('imagegif') && $type[2] == 1) { 
    785                         $error = __('Filetype not supported. Thumbnail not created.'); 
     791                if ( $meta['width'] * $meta['height'] < 3 * 1024 * 1024 ) { 
     792                        if ( $meta['width'] > 128 && $meta['width'] >= $meta['height'] * 4 / 3 ) 
     793                                $thumb = wp_create_thumbnail( $file, 128 ); 
     794                        elseif ( $meta['height'] > 96 ) 
     795                                $thumb = wp_create_thumbnail( $file, 96 ); 
     796                        if ( @file_exists($thumb) ) 
     797                                $meta['thumb'] = basename($thumb); 
     798                        else 
     799                                return $thumb; 
    786800                } 
    787                 elseif (!function_exists('imagejpeg') && $type[2] == 2) { 
    788                         $error = __('Filetype not supported. Thumbnail not created.'); 
    789                 } 
    790                 elseif (!function_exists('imagepng') && $type[2] == 3) { 
    791                         $error = __('Filetype not supported. Thumbnail not created.'); 
    792                 } else { 
     801        } 
     802        return $meta; 
     803} 
    793804 
    794                         // create the initial copy from the original file 
    795                         if ($type[2] == 1) { 
    796                                 $image = imagecreatefromgif($file); 
    797                         } 
    798                         elseif ($type[2] == 2) { 
    799                                 $image = imagecreatefromjpeg($file); 
    800                         } 
    801                         elseif ($type[2] == 3) { 
    802                                 $image = imagecreatefrompng($file); 
    803                         } 
     805function wp_create_thumbnail( $file, $max_side, $effect = '' ) { 
     806        if ( !file_exists($file) ) 
     807                return new WP_Error( 'thumbnail', __('File not found') ); 
    804808 
    805                         if (function_exists('imageantialias')) 
    806                                 imageantialias($image, TRUE); 
     809        $image_attr = getimagesize($file); 
    807810 
    808                         $image_attr = getimagesize($file); 
     811        // If the associated function doesn't exist - then it's not handled. 
     812        switch ( $image_attr[2] ) : // 1 = GIF, 2 = JPEG, 3 = PNG 
     813        case 1: 
     814                $image_func = 'imagegif'; 
     815                $image_create_func = 'imagecreatefromgif'; 
     816                break; 
     817        case 2: 
     818                $image_func = 'imagejpeg'; 
     819                $image_create_func = 'imagecreatefromjpeg'; 
     820                break; 
     821        case 3: 
     822                $image_func = 'imagepng'; 
     823                $image_create_func = 'imagecreatefrompng'; 
     824                break; 
     825        default: 
     826                return new WP_Error( 'thumbnail', __('Unknown filetype. Thumbnail not created.') ); 
     827                break; 
     828        endswitch; 
    809829 
    810                         // figure out the longest side 
     830        if ( !function_exists($image_func) ) 
     831                return new WP_Error( 'thumbnail', __('Filetype not supported. Thumbnail not created.') ); 
    811832 
    812                         if ($image_attr[0] > $image_attr[1]) { 
    813                                 $image_width = $image_attr[0]; 
    814                                 $image_height = $image_attr[1]; 
    815                                 $image_new_width = $max_side; 
     833        // create the initial copy from the original file 
     834        $image = $image_create_func($file); 
    816835 
    817                                 $image_ratio = $image_width / $image_new_width; 
    818                                 $image_new_height = $image_height / $image_ratio; 
    819                                 //width is > height 
    820                         } else { 
    821                                 $image_width = $image_attr[0]; 
    822                                 $image_height = $image_attr[1]; 
    823                                 $image_new_height = $max_side; 
     836        if ( function_exists('imageantialias') ) 
     837                imageantialias($image, TRUE); 
    824838 
    825                                 $image_ratio = $image_height / $image_new_height; 
    826                                 $image_new_width = $image_width / $image_ratio; 
    827                                 //height > width 
    828                         } 
     839        // figure out the longest side 
     840        if ( $image_attr[0] > $image_attr[1] ) { // width > height 
     841                $image_width = $image_attr[0]; 
     842                $image_height = $image_attr[1]; 
     843                $image_new_width = $max_side; 
    829844 
    830                         $thumbnail = imagecreatetruecolor($image_new_width, $image_new_height); 
    831                         @ imagecopyresampled($thumbnail, $image, 0, 0, 0, 0, $image_new_width, $image_new_height, $image_attr[0], $image_attr[1]); 
     845                $image_ratio = $image_width / $image_new_width; 
     846                $image_new_height = $image_height / $image_ratio; 
     847        } else { // height > width 
     848                $image_width = $image_attr[0]; 
     849                $image_height = $image_attr[1]; 
     850                $image_new_height = $max_side; 
    832851 
    833                         // If no filters change the filename, we'll do a default transformation. 
    834                         if ( basename($file) == $thumb = apply_filters('thumbnail_filename', basename($file)) ) 
    835                                 $thumb = preg_replace('!(\.[^.]+)?$!', __('.thumbnail').'$1', basename($file), 1); 
     852                $image_ratio = $image_height / $image_new_height; 
     853                $image_new_width = $image_width / $image_ratio; 
     854        } 
    836855 
    837                         $thumbpath = str_replace(basename($file), $thumb, $file); 
     856        $thumbnail = imagecreatetruecolor($image_new_width, $image_new_height); 
     857        @ imagecopyresampled($thumbnail, $image, 0, 0, 0, 0, $image_new_width, $image_new_height, $image_attr[0], $image_attr[1]); 
    838858 
    839                         // move the thumbnail to it's final destination 
    840                         if ($type[2] == 1) { 
    841                                 if (!imagegif($thumbnail, $thumbpath)) { 
    842                                         $error = __("Thumbnail path invalid"); 
    843                                 } 
    844                         } 
    845                         elseif ($type[2] == 2) { 
    846                                 if (!imagejpeg($thumbnail, $thumbpath)) { 
    847                                         $error = __("Thumbnail path invalid"); 
    848                                 } 
    849                         } 
    850                         elseif ($type[2] == 3) { 
    851                                 if (!imagepng($thumbnail, $thumbpath)) { 
    852                                         $error = __("Thumbnail path invalid"); 
    853                                 } 
    854                         } 
     859        // If no filters change the filename, we'll do a default transformation. 
     860        if ( basename($file) == $thumb = apply_filters( 'thumbnail_filename', basename($file) ) ) 
     861                $thumb = preg_replace('!(\.[^.]+)?$!', __('.thumbnail').'$1', basename($file), 1); 
    855862 
    856                 } 
    857         } else { 
    858                 $error = __('File not found'); 
    859         } 
     863        $thumbpath = str_replace(basename($file), $thumb, $file); 
    860864 
    861         if (!empty ($error)) { 
    862                 return $error; 
    863         } else { 
    864                 return $thumbpath; 
    865         } 
     865        // move the thumbnail to it's final destination 
     866        if ( !$image_func($thumbnail, $thumbpath) ) 
     867                return new WP_Error( 'thumbnail', __("Thumbnail path invalid") ); 
     868 
     869        return $thumbpath; 
    866870} 
    867871 
    868872// Some postmeta stuff