WordPress.org

Make WordPress Core

Ticket #16434: 16434.11.diff

File 16434.11.diff, 5.5 KB (added by jipmoors, 3 years 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        /**