WordPress.org

Make WordPress Core

Ticket #16434: 16434.11.diff

File 16434.11.diff, 5.5 KB (added by jipmoors, 21 months ago)

when the current attachment has been re-selected just refresh metadata

  • src/wp-admin/includes/class-wp-site-icon.php

     
    320320        public function set_site_icon() { 
    321321                check_admin_referer( 'set-site-icon' ); 
    322322 
    323                 // Delete any existing site icon images. 
    324                 $this->delete_site_icon(); 
    325  
    326323                $attachment_id = absint( $_POST['attachment_id'] ); 
     324                $current_site_icon_id = get_option( 'site_icon' ); 
    327325 
    328                 // TODO 
    329                 if ( empty( $_POST['skip-cropping'] ) ) { 
    330                         $crop_ratio = (float) $_POST['crop_ratio']; 
    331                         $crop_data = $this->convert_coordinates_from_resized_to_full( $_POST['crop-x'], $_POST['crop-y'], $_POST['crop-w'], $_POST['crop-h'], $crop_ratio ); 
    332                         $cropped = wp_crop_image( $attachment_id, $crop_data['crop_x'], $crop_data['crop_y'], $crop_data['crop_width'], $crop_data['crop_height'], $this->min_size, $this->min_size ); 
    333                 } elseif ( ! empty( $_POST['create-new-attachment'] ) ) { 
    334                         $cropped = _copy_image_file( $attachment_id ); 
    335                 } else { 
    336                         $cropped = get_attached_file( $attachment_id ); 
    337                 } 
     326                /* 
     327                 * If the current attachment as been set as site icon don't delete it. 
     328                 */ 
     329                if ( $current_site_icon_id != $attachment_id ) { 
     330                        // Delete any existing site icon images. 
     331                        $this->delete_site_icon(); 
    338332 
    339                 if ( ! $cropped || is_wp_error( $cropped ) ) { 
    340                         wp_die( __( 'Image could not be processed. Please go back and try again.' ), __( 'Image Processing Error' ) ); 
    341                 } 
    342333 
    343                 $object = $this->create_attachment_object( $cropped, $attachment_id ); 
     334                        // TODO 
     335                        if ( empty( $_POST['skip-cropping'] ) ) { 
     336                                $crop_ratio = (float) $_POST['crop_ratio']; 
     337                                $crop_data  = $this->convert_coordinates_from_resized_to_full( 
     338                                        $_POST['crop-x'], 
     339                                        $_POST['crop-y'], 
     340                                        $_POST['crop-w'], 
     341                                        $_POST['crop-h'], 
     342                                        $crop_ratio 
     343                                ); 
     344                                $cropped = wp_crop_image( 
     345                                        $attachment_id, 
     346                                        $crop_data['crop_x'], 
     347                                        $crop_data['crop_y'], 
     348                                        $crop_data['crop_width'], 
     349                                        $crop_data['crop_height'], 
     350                                        $this->min_size, 
     351                                        $this->min_size 
     352                                ); 
     353                        } elseif ( ! empty( $_POST['create-new-attachment'] ) ) { 
     354                                $cropped = _copy_image_file( $attachment_id ); 
     355                        } else { 
     356                                $cropped = get_attached_file( $attachment_id ); 
     357                        } 
    344358 
    345                 if ( ! empty( $_POST['create-new-attachment'] ) ) { 
    346                         unset( $object['ID'] ); 
    347                 } 
     359                        if ( ! $cropped || is_wp_error( $cropped ) ) { 
     360                                wp_die( __( 'Image could not be processed. Please go back and try again.' ), __( 'Image Processing Error' ) ); 
     361                        } 
    348362 
    349                 // Update the attachment 
    350                 add_filter( 'intermediate_image_sizes_advanced', array( $this, 'additional_sizes' ) ); 
    351                 $attachment_id = $this->insert_attachment( $object, $cropped ); 
    352                 remove_filter( 'intermediate_image_sizes_advanced', array( $this, 'additional_sizes' ) ); 
     363                        $object = $this->create_attachment_object( $cropped, $attachment_id ); 
    353364 
    354                 // Save the site_icon data into option 
    355                 update_option( 'site_icon', $attachment_id ); 
     365                        if ( ! empty( $_POST['create-new-attachment'] ) ) { 
     366                                unset( $object['ID'] ); 
     367                        } 
    356368 
     369                        // Update the attachment 
     370                        add_filter( 'intermediate_image_sizes_advanced', array( $this, 'additional_sizes' ) ); 
     371                        $attachment_id = $this->insert_attachment( $object, $cropped ); 
     372                        remove_filter( 'intermediate_image_sizes_advanced', array( $this, 'additional_sizes' ) ); 
     373 
     374                        // Save the site_icon data into option 
     375                        update_option( 'site_icon', $attachment_id ); 
     376 
     377                } else { 
     378 
     379                        // Get the file path 
     380                        $image_url = get_attached_file( $attachment_id ); 
     381 
     382                        // Update meta-data and possibly regenerate intermediate sizes 
     383                        add_filter( 'intermediate_image_sizes_advanced', array( $this, 'additional_sizes' ) ); 
     384                        $this->update_attachment_metadata( $attachment_id, $image_url ); 
     385                        remove_filter( 'intermediate_image_sizes_advanced', array( $this, 'additional_sizes' ) ); 
     386                } 
     387 
    357388                add_settings_error( 'site-icon', 'icon-updated', __( 'Site Icon updated.' ), 'updated' ); 
    358389        } 
    359390 
     
    489520        } 
    490521 
    491522        /** 
    492          * Insert an attachment and its metadata. 
     523         * Insert an attachment 
    493524         * 
    494525         * @since 4.3.0 
    495526         * 
    496527         * @param array  $object  Attachment object. 
    497          * @param string $cropped Cropped image URL. 
     528         * @param string $image_url Cropped image URL. 
    498529         * @return int Attachment ID. 
    499530         */ 
    500         public function insert_attachment( $object, $cropped ) { 
    501                 $attachment_id = wp_insert_attachment( $object, $cropped ); 
    502                 $metadata      = wp_generate_attachment_metadata( $attachment_id, $cropped ); 
     531        public function insert_attachment( $object, $image_url ) { 
     532                $attachment_id = wp_insert_attachment( $object, $image_url ); 
    503533 
     534                $updated = $this->update_attachment_metadata( $attachment_id, $image_url ); 
     535                if ( false !== $updated ) { 
     536                        return $attachment_id; 
     537                } 
     538 
     539                return false; 
     540        } 
     541 
     542        /** 
     543         * Update the metadata of an attachment 
     544         * 
     545         * @since 4.3.0 
     546         * 
     547         * @param int $attachment_id Attachment ID 
     548         * @param string $image_url Cropped image URL. 
     549         * 
     550         * @return bool|int 
     551         */ 
     552        public function update_attachment_metadata( $attachment_id, $image_url ) { 
     553                $metadata = wp_generate_attachment_metadata( $attachment_id, $image_url ); 
     554 
    504555                /** 
    505556                 * Filter the site icon attachment metadata. 
    506557                 * 
     
    511562                 * @param array $metadata Attachment metadata. 
    512563                 */ 
    513564                $metadata = apply_filters( 'site_icon_attachment_metadata', $metadata ); 
    514                 wp_update_attachment_metadata( $attachment_id, $metadata ); 
     565                $updated = wp_update_attachment_metadata( $attachment_id, $metadata ); 
    515566 
    516                 return $attachment_id; 
     567                return $updated; 
    517568        } 
    518569 
    519570        /**