Ticket #21819: 21819.diff
File 21819.diff, 5.9 KB (added by , 8 years ago) |
---|
-
src/wp-admin/custom-header.php
diff --git src/wp-admin/custom-header.php src/wp-admin/custom-header.php index a06756a280..8b2973fc11 100644
wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?> 1164 1164 'post_title' => basename($cropped), 1165 1165 'post_mime_type' => $image_type, 1166 1166 'guid' => $url, 1167 'context' => 'custom-header' 1167 'context' => 'custom-header', 1168 'post_parent' => $parent_attachment_id, 1168 1169 ); 1169 1170 1170 1171 return $object; … … wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?> 1180 1181 * @return int Attachment ID. 1181 1182 */ 1182 1183 final public function insert_attachment( $object, $cropped ) { 1184 $parent_id = isset( $object['post_parent'] ) ? $object['post_parent'] : null; 1185 unset( $object['post_parent'] ); 1186 1183 1187 $attachment_id = wp_insert_attachment( $object, $cropped ); 1184 1188 $metadata = wp_generate_attachment_metadata( $attachment_id, $cropped ); 1189 1185 1190 /** 1186 1191 * Filters the header image attachment metadata. 1187 1192 * … … wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?> 1193 1198 */ 1194 1199 $metadata = apply_filters( 'wp_header_image_attachment_metadata', $metadata ); 1195 1200 wp_update_attachment_metadata( $attachment_id, $metadata ); 1201 1202 if ( $parent_id ) { 1203 $meta = add_post_meta( $attachment_id, '_wp_attachment_parent', $parent_id, true ); 1204 } 1205 1196 1206 return $attachment_id; 1197 1207 } 1198 1208 … … wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?> 1241 1251 1242 1252 $object = $this->create_attachment_object( $cropped, $attachment_id ); 1243 1253 1244 unset( $object['ID'] ); 1254 $previous = $this->get_previous_crop( $object ); 1255 1256 if ( $previous ) { 1257 $object['ID'] = $previous; 1258 } else { 1259 unset( $object['ID'] ); 1260 } 1245 1261 1246 1262 $new_attachment_id = $this->insert_attachment( $object, $cropped ); 1247 1263 … … wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?> 1396 1412 1397 1413 return $header_images; 1398 1414 } 1415 1416 /** 1417 * Get the ID of a previous crop from the same base image. 1418 * 1419 * @since 4.9.0 1420 * 1421 * @param array $object A crop attachment object. 1422 * @return int|false An attachment ID if one exists. False if none. 1423 */ 1424 public function get_previous_crop( $object ) { 1425 $header_images = $this->get_uploaded_header_images(); 1426 1427 // Bail early if there are no header images. 1428 if ( empty( $header_images ) ) { 1429 return false; 1430 } 1431 1432 $previous = false; 1433 1434 foreach ( $header_images as $image ) { 1435 if ( $image['attachment_parent'] === $object['post_parent'] ) { 1436 $previous = $image['attachment_id']; 1437 break; 1438 } 1439 } 1440 1441 return $previous; 1442 } 1399 1443 } -
src/wp-includes/js/customize-models.js
diff --git src/wp-includes/js/customize-models.js src/wp-includes/js/customize-models.js index 372cad6273..e2a5dfbcd3 100644
164 164 165 165 this.on('control:setImage', this.setImage, this); 166 166 this.on('control:removeImage', this.removeImage, this); 167 this.on('add', this.maybeRemoveOldCrop, this); 167 168 this.on('add', this.maybeAddRandomChoice, this); 168 169 169 170 _.each(this.data, function(elt, index) { … … 187 188 } 188 189 }, 189 190 191 maybeRemoveOldCrop: function( model ) { 192 var newID = model.get( 'header' ).attachment_id || false, 193 oldCrop; 194 195 // Bail early if we don't have a new attachment ID. 196 if ( ! newID ) { 197 return; 198 } 199 200 oldCrop = this.find( function( item ) { 201 return ( item.cid !== model.cid && item.get( 'header' ).attachment_id === newID ); 202 } ); 203 204 // If we found an old crop, remove it from the collection. 205 if ( oldCrop ) { 206 this.remove( oldCrop ); 207 } 208 }, 209 190 210 maybeAddRandomChoice: function() { 191 211 if (this.size() === 1) { 192 212 this.addRandomChoice(); -
src/wp-includes/theme.php
diff --git src/wp-includes/theme.php src/wp-includes/theme.php index 89eab5f790..bbe27707f5 100644
function get_uploaded_header_images() { 1214 1214 $header_images[$header_index]['url'] = $url; 1215 1215 $header_images[$header_index]['thumbnail_url'] = $url; 1216 1216 $header_images[$header_index]['alt_text'] = get_post_meta( $header->ID, '_wp_attachment_image_alt', true ); 1217 $header_images[$header_index]['attachment_parent'] = (int) get_post_meta( $header->ID, '_wp_attachment_parent', true ); 1217 1218 1218 1219 if ( isset( $header_data['width'] ) ) 1219 1220 $header_images[$header_index]['width'] = $header_data['width']; -
tests/phpunit/tests/image/header.php
diff --git tests/phpunit/tests/image/header.php tests/phpunit/tests/image/header.php index a76ee2cd6e..a6467c49a6 100644
class Tests_Image_Header extends WP_UnitTestCase { 137 137 $this->assertGreaterThan( 0, $cropped_id ); 138 138 } 139 139 140 /** 141 * @ticket 21819 142 */ 143 function test_check_get_previous_crop() { 144 $id = wp_insert_attachment( array( 145 'post_status' => 'publish', 146 'post_title' => 'foo.png', 147 'post_type' => 'post', 148 'guid' => 'http://localhost/foo.png' 149 ) ); 150 151 // Create inital crop object. 152 $cropped_1 = 'foo-cropped-1.png'; 153 $object = $this->custom_image_header->create_attachment_object( $cropped_1, $id ); 154 155 // Ensure no previous crop exists. 156 $previous = $this->custom_image_header->get_previous_crop( $object ); 157 $this->assertFalse( $previous ); 158 159 // Create the inital crop attachment and set it as the header. 160 $cropped_1_id = $this->custom_image_header->insert_attachment( $object, $cropped_1 ); 161 $key = '_wp_attachment_custom_header_last_used_' . get_stylesheet(); 162 update_post_meta( $cropped_1_id, $key, time() ); 163 update_post_meta( $cropped_1_id, '_wp_attachment_is_custom_header', get_stylesheet() ); 164 165 // Create second crop. 166 $cropped_2 = 'foo-cropped-2.png'; 167 $object = $this->custom_image_header->create_attachment_object( $cropped_2, $id ); 168 169 // Test that a previous crop is found. 170 $previous = $this->custom_image_header->get_previous_crop( $object ); 171 $this->assertSame( $previous, $cropped_1_id ); 172 } 140 173 }