WordPress.org

Make WordPress Core

Ticket #5911: 5911-4.diff

File 5911-4.diff, 3.7 KB (added by andy, 10 years ago)

update mime-to-icon matching

  • wp-includes/post.php

     
    23342334 * @return string|bool {@internal Missing Description}}
    23352335 */
    23362336function wp_mime_type_icon( $mime = 0 ) {
    2337         $post_id = 0;
     2337        if ( !is_numeric($mime) )
     2338                $icon = wp_cache_get("mime_type_icon_$mime");
    23382339
    2339         $icon = wp_cache_get('mime_type_icon');
    2340        
    23412340        if ( empty($icon) ) {
     2341                $post_id = 0;
     2342                $post_mimes = array();
    23422343                if ( is_numeric($mime) ) {
    23432344                        $mime = (int) $mime;
    2344                         if ( !$post =& get_post( $mime ) )
    2345                                 return false;
    2346                         $post_id = (int) $post->ID;
    2347                         $mime = $post->post_mime_type;
    2348                         $ext = preg_replace('/^.+?\.([^.]+)$/', '$1', $post->guid);
     2345                        if ( $post =& get_post( $mime ) ) {
     2346                                $post_id = (int) $post->ID;
     2347                                $ext = preg_replace('/^.+?\.([^.]+)$/', '$1', $post->guid);
     2348                                if ( !empty($ext) )
     2349                                        $post_mimes[] = $ext;
     2350                                $mime = $post->post_mime_type;
     2351                        } else {
     2352                                $mime = 0;
     2353                        }
     2354                } else {
     2355                        $post_mimes[] = $mime;
    23492356                }
    2350        
    2351                 $types = array();
    2352        
    2353                 if ( !empty($ext) )
    2354                         $types[] = $ext;
    2355        
    2356                 $icon_dir = apply_filters( 'icon_dir', get_template_directory() . '/images' );
    2357                 $icon_dir_uri = apply_filters( 'icon_dir_uri', get_template_directory_uri() . '/images' );
    2358                 $image_dir = apply_filters( 'image_dir', ABSPATH . WPINC . '/images' );
    2359                 $image_dir_uri = apply_filters( 'image_dir', get_option('siteurl') . '/' . WPINC . '/images' );
    2360                 $dirs = array($icon_dir => $icon_dir_uri, $image_dir => $image_dir_uri);
    2361        
    2362        
    2363                 if ( ! empty($mime) ) {
    2364                         $types[] = substr($mime, 0, strpos($mime, '/'));
    2365                         $types[] = substr($mime, strpos($mime, '/') + 1);
    2366                         $types[] = str_replace('/', '_', $mime);
    2367                 }
    2368        
    2369                 $types[] = 'default';
    2370        
    2371                 $exts = array('png', 'gif', 'jpg');
    23722357
    2373                 foreach ( $types as $type ) {
    2374                         foreach ( $exts as $ext ) {
    2375                                 foreach ( $dirs as $dir => $uri ) {
    2376                                         $src_file = "$dir/$type.$ext";
    2377                                         if ( file_exists($src_file) ) {
    2378                                                 $icon = "$uri/$type.$ext";
    2379                                                 break 3;
     2358                $icon_files = wp_cache_get('icon_files');
     2359
     2360                if ( !is_array($icon_files) ) {
     2361                        $icon_dir = apply_filters( 'icon_dir', ABSPATH . WPINC . '/images' );
     2362                        $icon_dir_uri = apply_filters( 'icon_dir_uri', trailingslashit(get_option('siteurl')) . WPINC . '/images' );
     2363                        $dirs = apply_filters( 'icon_dirs', array($icon_dir => $icon_dir_uri) );
     2364                        $icon_files = array();
     2365                        foreach ( $dirs as $dir => $uri) {
     2366                                if ( $dh = opendir($dir) ) {
     2367                                        while ( false !== $file = readdir($dh) ) {
     2368                                                $file = basename($file);
     2369                                                if ( !in_array(strtolower(substr($file, -4)), array('.png', '.gif', '.jpg') ) ) {
     2370                                                        if ( is_dir($file) )
     2371                                                                $dirs["$dir/$file"] = "$uri/$file";
     2372                                                        continue;
     2373                                                }
     2374                                                $icon_files["$dir/$file"] = "$uri/$file";
    23802375                                        }
     2376                                        closedir($dh);
    23812377                                }
    23822378                        }
     2379                        wp_cache_set('icon_files', $icon_files, 600);
    23832380                }
     2381
     2382                // Icon basename - extension = MIME wildcard
     2383                foreach ( $icon_files as $file => $uri )
     2384                        $types[ preg_replace('/^([^.]*).*$/', '$1', basename($file)) ] =& $icon_files[$file];
     2385
     2386                if ( ! empty($mime) ) {
     2387                        $post_mimes[] = substr($mime, 0, strpos($mime, '/'));
     2388                        $post_mimes[] = substr($mime, strpos($mime, '/') + 1);
     2389                        $post_mimes[] = str_replace('/', '_', $mime);
     2390                }
     2391
     2392                $post_mimes[] = 'default';
     2393
     2394                $matches = wp_match_mime_types(array_keys($types), $post_mimes);
     2395
     2396                foreach ( $matches as $match => $wilds ) {
     2397                        if ( isset($types[$wilds[0]])) {
     2398                                $icon = $types[$wilds[0]];
     2399                                if ( !is_numeric($mime) )
     2400                                        wp_cache_set("mime_type_icon_$mime", $icon);
     2401                                break;
     2402                        }
     2403                }
    23842404        }
    23852405
    23862406        return apply_filters( 'wp_mime_type_icon', $icon, $mime, $post_id ); // Last arg is 0 if function pass mime type.