WordPress.org

Make WordPress Core

Ticket #2682: 2682b.patch

File 2682b.patch, 15.8 KB (added by ryanscheuermann, 8 years ago)

refactor last patch: wp_delete_attachment uses get_attachment now (for filtering)

  • wp-admin/admin-functions.php

     
    19051905                return array((int) ($width / $height * $hmax), $hmax); 
    19061906} 
    19071907 
     1908function wp_attach_upload($file_array, $post) { 
     1909         
     1910        $url = $file_array['url']; 
     1911        $type = $file_array['type']; 
     1912        $imgtitle = $file_array['title']; 
     1913        $descr = $file_array['description']; 
     1914        $file = addslashes($file_array['file']); 
     1915        $filename = basename($file); 
     1916 
     1917        // Construct the attachment array 
     1918        $attachment = array( 
     1919                'post_title' => $imgtitle ? $imgtitle : $filename, 
     1920                'post_content' => $descr, 
     1921                'post_type' => 'attachment', 
     1922                'post_parent' => $post, 
     1923                'post_mime_type' => $type, 
     1924                'guid' => $url 
     1925                ); 
     1926 
     1927        //remove ABSPATH from db storage 
     1928        $relfile = str_replace(addslashes(ABSPATH), '', $file); 
     1929         
     1930        // Save the data (also inserts _wp_attached_file meta data as $relfile) 
     1931        $id = wp_insert_attachment($attachment, $relfile, $post); 
     1932         
     1933        if ( preg_match('!^image/!', $type) ) { 
     1934 
     1935                $imagesize = getimagesize($file); 
     1936                $attachdata['width'] = $imagesize['0']; 
     1937                $attachdata['height'] = $imagesize['1']; 
     1938 
     1939                if ( $attachdata['width'] * $attachdata['height'] < 3 * 1024 * 1024 ) { 
     1940                        if ( $attachdata['width'] > 128 && $attachdata['width'] >= $attachdata['height'] * 4 / 3 ) 
     1941                                $thumb = wp_create_thumbnail($file, 128); 
     1942                        elseif ( $attachdata['height'] > 96 ) 
     1943                                $thumb = wp_create_thumbnail($file, 96); 
     1944                 
     1945                        if ( @file_exists($thumb) ) { 
     1946                                $attachdata['thumb'] = basename($thumb); 
     1947                        } 
     1948                } 
     1949 
     1950                add_post_meta($id, '_wp_attachment_metadata', $attachdata); 
     1951        } 
     1952         
     1953        do_action('wp_attach_upload', $id); 
     1954         
     1955        return $id; 
     1956} 
     1957 
    19081958function wp_import_cleanup($id) { 
    19091959        wp_delete_attachment($id); 
    19101960} 
     
    19592009} 
    19602010 
    19612011function the_attachment_links($id = false) { 
    1962         $id = (int) $id; 
    1963         $post = & get_post($id); 
     2012        $post = get_attachment($id); 
    19642013 
    19652014        if ( $post->post_type != 'attachment' ) 
    19662015                return false; 
     
    19812030<?php 
    19822031} 
    19832032 
     2033// deprecated, use wp_shrink_dimensions 
    19842034function get_udims($width, $height) { 
    1985         if ( $height <= 96 && $width <= 128 ) 
    1986                 return array($width, $height); 
    1987         elseif ( $width / $height > 4 / 3 ) 
    1988                 return array(128, (int) ($height / $width * 128)); 
    1989         else 
    1990                 return array((int) ($width / $height * 96), 96); 
     2035        return wp_shrink_dimensions($width, $height); 
    19912036} 
    19922037 
    19932038?> 
  • wp-admin/inline-uploading.php

     
    5050 
    5151$overrides = array('action'=>'save'); 
    5252 
    53 $file = wp_handle_upload($_FILES['image'], $overrides); 
     53$file_array = wp_handle_upload($_FILES['image'], $overrides); 
    5454 
    55 if ( isset($file['error']) ) 
    56         die($file['error'] . '<br /><a href="' . basename(__FILE__) . '?action=upload&post=' . $post . '">'.__('Back to Image Uploading').'</a>'); 
     55if ( isset($file_array['error']) ) 
     56        die($file_array['error'] . '<br /><a href="' . basename(__FILE__) . '?action=upload&post=' . $post . '">'.__('Back to Image Uploading').'</a>'); 
    5757 
    58 $url = $file['url']; 
    59 $type = $file['type']; 
    60 $file = $file['file']; 
    61 $filename = basename($file); 
     58$file_array['title'] = $imgtitle; 
     59$file_array['description'] = $descr; 
    6260 
    63 // Construct the attachment array 
    64 $attachment = array( 
    65         'post_title' => $imgtitle ? $imgtitle : $filename, 
    66         'post_content' => $descr, 
    67         'post_type' => 'attachment', 
    68         'post_parent' => $post, 
    69         'post_mime_type' => $type, 
    70         'guid' => $url 
    71         ); 
     61$id = wp_attach_upload($file_array, $post); 
    7262 
    73 // Save the data 
    74 $id = wp_insert_attachment($attachment, $file, $post); 
    75  
    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; 
    84  
    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()); 
    103 } 
    104  
    10563header("Location: " . basename(__FILE__) . "?post=$post&all=$all&action=view&start=0"); 
    10664die(); 
    10765 
     
    13896if ( '' == $sort ) 
    13997        $sort = "post_date_gmt DESC"; 
    14098 
    141 $attachments = $wpdb->get_results("SELECT ID, post_date, post_title, post_mime_type, guid FROM $wpdb->posts WHERE post_type = 'attachment' $and_type $and_post $and_user ORDER BY $sort LIMIT $start, $double", ARRAY_A); 
     99$attachments = $wpdb->get_results("SELECT ID FROM $wpdb->posts WHERE post_type = 'attachment' $and_type $and_post $and_user ORDER BY $sort LIMIT $start, $double", ARRAY_A); 
    142100 
    143101if ( count($attachments) == 0 ) { 
    144102        header("Location: " . basename(__FILE__) ."?post=$post&action=upload" ); 
     
    200158"; 
    201159        foreach ( $attachments as $key => $attachment ) { 
    202160                $ID = $attachment['ID']; 
    203                 $href = get_attachment_link($ID); 
    204                 $meta = get_post_meta($ID, '_wp_attachment_metadata', true); 
    205                 if (!is_array($meta)) { 
    206                         $meta = get_post_meta($ID, 'imagedata', true); // Try 1.6 Alpha meta key 
    207                         if (!is_array($meta)) { 
    208                                 $meta = array(); 
    209                         } 
    210                         add_post_meta($ID, '_wp_attachment_metadata', $meta); 
    211                 } 
    212                 $attachment = array_merge($attachment, $meta); 
     161                $att_post = get_attachment($ID); 
     162                $title = $att_post->post_title; 
     163                $description = $att_post->post_content; 
     164                $mime = $att_post->post_mime_type; 
     165                $guid = $att_post->guid; 
     166                $attachment = $att_post->attachment_metadata; 
    213167                $noscript = "<noscript> 
    214168                <div class='caption'><a href=\"".basename(__FILE__)."?action=links&amp;attachment={$ID}&amp;post={$post}&amp;all={$all}&amp;start={$start}\">Choose Links</a></div> 
    215169                </noscript> 
     
    219173                <a onclick=\"popup.style.display='none';return false;\" href=\"javascript:void()\">$__close</a> 
    220174"; 
    221175                $uwidth_sum += 128; 
    222                 if ( preg_match('!^image/!', $attachment['post_mime_type'] ) ) { 
     176                if ( preg_match('!^image/!', $mime ) ) { 
    223177                        $image = & $attachment; 
    224178                        if ( ($image['width'] > 128 || $image['height'] > 96) && !empty($image['thumb']) && file_exists(dirname($image['file']).'/'.$image['thumb']) ) { 
    225                                 $src = str_replace(basename($image['guid']), $image['thumb'], $image['guid']); 
     179                                $src = str_replace(basename($guid), $image['thumb'], $guid); 
    226180                                $script .= "srca[{$ID}] = '$src'; 
    227 srcb[{$ID}] = '{$image['guid']}'; 
     181srcb[{$ID}] = '{$guid}'; 
    228182"; 
    229183                                $thumb = 'true'; 
    230184                                $thumbtext = $__using_thumbnail; 
    231185                        } else { 
    232                                 $src = $image['guid']; 
     186                                $src = $guid; 
    233187                                $thumb = 'false'; 
    234188                                $thumbtext = $__no_thumbnail; 
    235189                        } 
    236                         list($image['uwidth'], $image['uheight']) = get_udims($image['width'], $image['height']); 
     190                        list($image['uwidth'], $image['uheight']) = wp_shrink_dimensions($image['width'], $image['height']); 
    237191                        $height_width = 'height="'.$image['uheight'].'" width="'.$image['uwidth'].'"'; 
    238192                        $xpadding = (128 - $image['uwidth']) / 2; 
    239193                        $ypadding = (96 - $image['uheight']) / 2; 
    240194                        $style .= "#target{$ID} img { padding: {$ypadding}px {$xpadding}px; }\n"; 
    241                         $title = wp_specialchars($image['post_title'], ENT_QUOTES); 
    242                         $script .= "aa[{$ID}] = '<a id=\"p{$ID}\" rel=\"attachment\" class=\"imagelink\" href=\"$href\" onclick=\"doPopup({$ID});return false;\" title=\"{$title}\">'; 
    243 ab[{$ID}] = '<a class=\"imagelink\" href=\"{$image['guid']}\" onclick=\"doPopup({$ID});return false;\" title=\"{$title}\">'; 
     195                        $title = wp_specialchars($title, ENT_QUOTES); 
     196                        $script .= "aa[{$ID}] = '<a id=\"p{$ID}\" rel=\"attachment\" class=\"imagelink\" href=\"{$image['link']}\" onclick=\"doPopup({$ID});return false;\" title=\"{$title}\">'; 
     197ab[{$ID}] = '<a class=\"imagelink\" href=\"{$guid}\" onclick=\"doPopup({$ID});return false;\" title=\"{$title}\">'; 
    244198imga[{$ID}] = '<img id=\"image{$ID}\" src=\"$src\" alt=\"{$title}\" $height_width />'; 
    245 imgb[{$ID}] = '<img id=\"image{$ID}\" src=\"{$image['guid']}\" alt=\"{$title}\" $height_width />'; 
     199imgb[{$ID}] = '<img id=\"image{$ID}\" src=\"{$guid}\" alt=\"{$title}\" $height_width />'; 
    246200"; 
    247201                        $html .= "<div id='target{$ID}' class='attwrap left'> 
    248202        <div id='div{$ID}' class='imagewrap' onclick=\"doPopup({$ID});\"> 
     
    258212</div> 
    259213"; 
    260214                } else { 
    261                         $title = wp_specialchars($attachment['post_title'], ENT_QUOTES); 
    262                         $filename = basename($attachment['guid']); 
     215                        $title = wp_specialchars($title, ENT_QUOTES); 
     216                        $filename = basename($guid); 
    263217                        $icon = get_attachment_icon($ID); 
    264218                        $toggle_icon = "<a id=\"I{$ID}\" onclick=\"toggleOtherIcon({$ID});return false;\" href=\"javascript:void()\">$__using_title</a>"; 
    265                         $script .= "aa[{$ID}] = '<a id=\"p{$ID}\" rel=\"attachment\" href=\"$href\" onclick=\"doPopup({$ID});return false;\" title=\"{$title}\">'; 
    266 ab[{$ID}] = '<a id=\"p{$ID}\" href=\"{$filename}\" onclick=\"doPopup({$ID});return false;\" title=\"{$title}\">'; 
     219                        $script .= "aa[{$ID}] = '<a id=\"p{$ID}\" rel=\"attachment\" href=\"{$attachment['link']}\" onclick=\"doPopup({$ID});return false;\" title=\"{$title}\">'; 
     220ab[{$ID}] = '<a id=\"p{$ID}\" href=\"{$guid}\" onclick=\"doPopup({$ID});return false;\" title=\"{$title}\">'; 
    267221title[{$ID}] = '{$title}'; 
    268222filename[{$ID}] = '{$filename}'; 
    269223icon[{$ID}] = '{$icon}'; 
    270224"; 
    271225                        $html .= "<div id='target{$ID}' class='attwrap left'> 
    272226        <div id='div{$ID}' class='otherwrap usingtext' onmousedown=\"selectLink({$ID})\" onclick=\"doPopup({$ID});return false;\"> 
    273                 <a id=\"p{$ID}\" href=\"{$attachment['guid']}\" onmousedown=\"selectLink({$ID});\" onclick=\"return false;\">{$title}</a> 
     227                <a id=\"p{$ID}\" href=\"{$guid}\" onmousedown=\"selectLink({$ID});\" onclick=\"return false;\">{$title}</a> 
    274228        </div> 
    275229        {$noscript} 
    276230</div> 
    277231"; 
    278232                        $popups .= "<div id='popup{$ID}' class='popup'> 
    279         <div class='filetype'>".__('File Type:').' '.str_replace('/',"/\n",$attachment['post_mime_type'])."</div> 
     233        <div class='filetype'>".__('File Type:').' '.str_replace('/',"/\n",$mime)."</div> 
    280234        <a id=\"L{$ID}\" onclick=\"toggleOtherLink({$ID});return false;\" href=\"javascript:void()\">$__linked_to_file</a> 
    281235        {$toggle_icon} 
    282236        {$send_delete_cancel} 
     
    644598<body> 
    645599<ul id="upload-menu"> 
    646600<li<?php echo $current_1; ?>><a href="<?php echo basename(__FILE__) . "?action=upload&amp;post=$post&amp;all=$all&amp;start=$start"; ?>"><?php _e('Upload'); ?></a></li> 
    647 <?php if ( $attachments = $wpdb->get_results("SELECT ID FROM $wpdb->posts WHERE post_parent = '$post'") ) { ?> 
     601<?php if ( $attachments = $wpdb->get_results("SELECT ID FROM $wpdb->posts WHERE post_parent = '$post' AND post_type = 'attachment'") ) { ?> 
    648602<li<?php echo $current_2; ?>><a href="<?php echo basename(__FILE__) . "?action=view&amp;post=$post&amp;all=false"; ?>"><?php _e('Browse'); ?></a></li> 
    649603<?php } ?> 
    650604<?php if ($wpdb->get_var("SELECT count(ID) FROM $wpdb->posts WHERE post_type = 'attachment'")) { ?> 
  • wp-includes/functions-post.php

     
    371371        if ( 'attachment' != $post->post_type ) 
    372372                return false; 
    373373 
    374         $meta = get_post_meta($postid, '_wp_attachment_metadata', true); 
    375         $file = get_post_meta($postid, '_wp_attached_file', true); 
     374        $attachment = get_attachment($postid); 
     375        $meta = $attachment->attachment_metadata; 
     376        $file = $meta['file']; 
    376377 
    377378        $wpdb->query("DELETE FROM $wpdb->posts WHERE ID = '$postid'"); 
    378379 
     
    390391                        @ unlink($thumbfile); 
    391392                } 
    392393        } 
    393  
     394         
    394395        $file = apply_filters('wp_delete_file', $file); 
    395396 
    396397        if ( ! empty($file) ) 
  • wp-includes/functions.php

     
    16711671        echo '<input type="hidden" name="_wpnonce" value="' . wp_create_nonce($action) . '" />'; 
    16721672} 
    16731673 
     1674function get_attachment($id) { 
     1675        $id = (int) $id; 
     1676        $post = & get_post($id); 
     1677 
     1678        if ( $post->post_type != 'attachment' ) 
     1679                return false; 
     1680                 
     1681        $meta = get_post_meta($id, '_wp_attachment_metadata', true); 
     1682        if (!is_array($meta)) { 
     1683                $meta = get_post_meta($id, 'imagedata', true); // Try 1.6 Alpha meta key 
     1684                if (!is_array($meta)) { 
     1685                        $meta = array(); 
     1686                } 
     1687                add_post_meta($id, '_wp_attachment_metadata', $meta); 
     1688        } 
     1689 
     1690        // remove file meta data from serialized array 
     1691        if(isset($meta['file'])) { 
     1692                unset($meta['file']); 
     1693                update_post_meta($id, '_wp_attachment_metadata', $meta);         
     1694        } 
     1695        // use _wp_attached_file instead & add ABSPATH back 
     1696        $meta['file'] = addslashes(ABSPATH) . get_post_meta($id, '_wp_attached_file', true); 
     1697        $meta['link'] = get_attachment_link($id); 
     1698 
     1699        $post->attachment_metadata = $meta; 
     1700         
     1701        return apply_filters('get_attachment',$post); 
     1702} 
     1703 
    16741704?> 
  • wp-includes/template-functions-post.php

     
    444444} 
    445445 
    446446function get_the_attachment_link($id = 0, $fullsize = false, $max_dims = false) { 
    447         $id = (int) $id; 
    448         $_post = & get_post($id); 
     447        $_post = get_attachment($id); 
    449448 
    450449        if ( ('attachment' != $_post->post_type) || ('' == $_post->guid) ) 
    451450                return __('Missing Attachment'); 
     
    462461} 
    463462 
    464463function get_attachment_icon($id = 0, $fullsize = false, $max_dims = false) { 
    465         $id = (int) $id; 
    466         $post = & get_post($id); 
    467  
     464        $post = get_attachment($id); 
     465        $imagedata = $post->attachment_metadata; 
     466         
     467        $title = $post->post_title; 
    468468        $mime = $post->post_mime_type; 
    469  
    470         $imagedata = get_post_meta($post->ID, '_wp_attachment_metadata', true); 
    471  
    472         $file = get_post_meta($post->ID, '_wp_attached_file', true); 
    473  
     469        $guid = $post->guid; 
     470         
    474471        if ( !$fullsize && !empty($imagedata['thumb']) 
    475                         && ($thumbfile = str_replace(basename($file), $imagedata['thumb'], $file)) 
     472                        && ($thumbfile = str_replace(basename($imagedata['file']), $imagedata['thumb'], $imagedata['file'])) 
    476473                        && file_exists($thumbfile) ) { 
    477474 
    478475                // We have a thumbnail desired, specified and existing 
    479476 
    480                 $src = str_replace(basename($post->guid), $imagedata['thumb'], $post->guid); 
     477                $src = str_replace(basename($guid), $imagedata['thumb'], $guid); 
    481478                $src_file = $thumbfile; 
    482479                $class = 'attachmentthumb'; 
    483480 
    484481        } elseif ( substr($mime, 0, 6) == 'image/' 
    485                         && file_exists($file) ) { 
     482                        && file_exists($imagedata['file']) ) { 
    486483 
    487484                // We have an image without a thumbnail 
    488485 
    489                 $src = $post->guid; 
    490                 $src_file = & $file; 
     486                $src = $guid; 
     487                $src_file = & $imagedata['file']; 
    491488                $class = 'attachmentimage'; 
    492489        } elseif (! empty($mime) ) { 
    493490 
     
    523520                        if ( $actual_aspect >= $desired_aspect ) { 
    524521                                $height = $actual_aspect * $max_dims[0]; 
    525522                                $constraint = "width=\"{$max_dims[0]}\" "; 
    526                                 $post->iconsize = array($max_dims[0], $height); 
    527523                        } else { 
    528524                                $width = $max_dims[1] / $actual_aspect; 
    529525                                $constraint = "height=\"{$max_dims[1]}\" "; 
    530                                 $post->iconsize = array($width, $max_dims[1]); 
    531526                        } 
    532                 } else { 
    533                         $post->iconsize = array($imagesize[0], $imagesize[1]); 
    534527                } 
    535528        } 
    536529 
    537         $icon = "<img src=\"{$src}\" title=\"{$post->post_title}\" alt=\"{$post->post_title}\" {$constraint}/>"; 
     530        $icon = "<img src=\"{$src}\" title=\"{$title}\" alt=\"{$title}\" {$constraint}/>"; 
    538531 
    539532        return apply_filters('attachment_icon', $icon, $post->ID); 
    540533} 
     
    545538        if ( $innerHTML = get_attachment_icon($id, $fullsize, $max_dims)) 
    546539                return $innerHTML; 
    547540 
    548         $post = & get_post($id); 
     541        $post = get_attachment($id); 
    549542 
    550543        $innerHTML = $post->post_title; 
    551544