MOON
Server: Apache
System: Linux nserver.cafsindia.com 4.18.0-553.104.1.lve.el8.x86_64 #1 SMP Tue Feb 10 20:07:30 UTC 2026 x86_64
User: cafsindia (1002)
PHP: 8.2.30
Disabled: NONE
Upload Files
File: //home/cafsindia/www/wp-content/plugins/imageseo/src/Services/File/UpdateFile.php
<?php

namespace ImageSeoWP\Services\File;

if (!defined('ABSPATH')) {
    exit;
}

class UpdateFile
{
    /**
     * @param int    $attachmentId
     * @param string $newFilename
     *
     * @return bool
     */
    public function updateFilename($attachmentId, $newFilename)
    {
        list($filenameWithoutExtension, $extension) = explode('.', $newFilename);
        $metadata = wp_get_attachment_metadata($attachmentId);

        $uploadDirectoryData = wp_get_upload_dir();

        $fileRootDirectories = explode('/', $metadata['file']);
        $oldFilename = $basicOldFileName = $fileRootDirectories[count($fileRootDirectories) - 1];
        $fileRoot = str_replace($oldFilename, '', $metadata['file']);

        if (isset($metadata['original_image'])) {
            $oldFilename = $metadata['original_image'];
        }

        $src = sprintf('%s/%s%s', $uploadDirectoryData['basedir'], $fileRoot, $basicOldFileName);

        if (!file_exists($src)) {
            return;
        }

        try {
            $newMetadata = $metadata;

            list($oldFilenameWithoutExtension, $oldExtension) = explode('.', $oldFilename);

            // Basic file
            $newBasicFile = \str_replace($oldFilenameWithoutExtension, $filenameWithoutExtension, $basicOldFileName);
            $destination = \str_replace($oldFilenameWithoutExtension, $filenameWithoutExtension, $src);

            $oldUrl = wp_get_attachment_image_src($attachmentId, 'full')[0];
            $newUrl = \str_replace($oldFilenameWithoutExtension, $filenameWithoutExtension, $oldUrl);

            rename($src, $destination);

            $this->updatePostmetas($oldUrl, $newUrl);
            $this->updatePosts($oldUrl, $newUrl);

            $newMetadata['file'] = \sprintf('%s%s', $fileRoot, $newBasicFile);

            $filesSizesAlreadyCheck = [];
            // Multiple Sizes
            foreach ($metadata['sizes'] as $key => $size) {
                $srcBySize = sprintf('%s/%s%s', $uploadDirectoryData['basedir'], $fileRoot, $size['file']);

                if (!file_exists($srcBySize) && !isset($filesSizesAlreadyCheck[$size['file']])) {
                    continue;
                }

                if (!isset($filesSizesAlreadyCheck[$size['file']])) {
                    $newFileBySize = str_replace($oldFilenameWithoutExtension, $filenameWithoutExtension, $size['file']);
                    $destinationBySize = \str_replace($oldFilenameWithoutExtension, $filenameWithoutExtension, $srcBySize);

                    $filesSizesAlreadyCheck[$size['file']] = $newFileBySize;
                    $newMetadata['sizes'][$key]['file'] = $newFileBySize;
                    rename($srcBySize, $destinationBySize);

                    $oldUrl = wp_get_attachment_image_src($attachmentId, $key)[0];
                    $newUrl = \str_replace($oldFilenameWithoutExtension, $filenameWithoutExtension, $oldUrl);

                    $this->updatePostmetas($oldUrl, $newUrl);
                    $this->updatePosts($oldUrl, $newUrl);
                } else {
                    $newMetadata['sizes'][$key]['file'] = $filesSizesAlreadyCheck[$size['file']];
                }
            }

            // Original Image
            if (isset($metadata['original_image'])) {
                $srcOriginal = sprintf('%s/%s%s', $uploadDirectoryData['basedir'], $fileRoot, $metadata['original_image']);
                if (\file_exists($srcOriginal)) {
                    $newFileOriginal = str_replace($oldFilenameWithoutExtension, $filenameWithoutExtension, $metadata['original_image']);
                    $srcOriginal = sprintf('%s/%s%s', $uploadDirectoryData['basedir'], $fileRoot, $metadata['original_image']);
                    $destinationOriginal = \str_replace($oldFilenameWithoutExtension, $filenameWithoutExtension, $srcOriginal);

                    rename($srcOriginal, $destinationOriginal);

                    $newMetadata['original_image'] = $newFileOriginal;

                    $oldUrl = wp_get_original_image_url($attachmentId);
                    $newUrl = \str_replace($oldFilenameWithoutExtension, $filenameWithoutExtension, $oldUrl);

                    $this->updatePostmetas($oldUrl, $newUrl);
                    $this->updatePosts($oldUrl, $newUrl);
                }
            }
        } catch (\Exception $th) {
        }

        wp_update_attachment_metadata($attachmentId, $newMetadata);
        update_attached_file($attachmentId, $newMetadata['file']);
        wp_update_post([
            'ID'         => $attachmentId,
            'post_title' => $filenameWithoutExtension,
            'post_name'  => sanitize_title($filenameWithoutExtension),
        ]);

        update_post_meta($attachmentId, '_old_wp_attachment_metadata', $metadata);
        update_post_meta($attachmentId, '_old_wp_attached_file', $metadata['file']);
    }

    /**
     * @param int    $attachmentId
     * @param string $newFilename
     *
     * @return bool
     */
    public function updateFilenameForNextGen($attachmentId, $newFilename)
    {
        list($filenameWithoutExtension, $extension) = explode('.', $newFilename);
        $storage = \C_Gallery_Storage::get_instance();
        $imageObj = imageseo_get_service('QueryNextGen')->getImage($attachmentId);
        $oldPaths = [
            'backup' => $storage->get_backup_abspath($imageObj),
            'full'   => $storage->get_image_abspath($imageObj),
            'thumbs' => $storage->get_image_abspath($imageObj, 'thumbs'),
        ];

        $imageObj->image_slug = $filenameWithoutExtension;
        $imageObj->filename = $newFilename;

        $newFilenameThumbs = sprintf('thumbs_%s', $newFilename);
        $newFilenameBackup = sprintf('%s_backup', $newFilename);

        if (isset($imageObj->meta_data['backup'])) {
            $imageObj->meta_data['backup']['filename'] = $newFilename; // No use backup var
        }
        if (isset($imageObj->meta_data['full'])) {
            $imageObj->meta_data['full']['filename'] = $newFilename;
        }
        if (isset($imageObj->meta_data['thumbnail'])) {
            $imageObj->meta_data['thumbnail']['filename'] = $newFilenameThumbs;
        }

        try {
            foreach ($oldPaths as $key => $srcPath) {
                if (!file_exists($srcPath)) {
                    continue;
                }
                $fileRootDirectories = explode('/', $srcPath);
                $oldFilename = $fileRootDirectories[count($fileRootDirectories) - 1];
                $fileRoot = str_replace($oldFilename, '', $srcPath);

                list($oldFilenameWithoutExtension, $oldExtension) = explode('.', $oldFilename);

                switch ($key) {
                    case 'thumbs':
                        $destinationPath = \str_replace($oldFilenameWithoutExtension, sprintf('thumbs_%s', $filenameWithoutExtension), $srcPath);
                        break;
                    default:
                        $destinationPath = \str_replace($oldFilenameWithoutExtension, $filenameWithoutExtension, $srcPath);
                        break;
                }

                @rename($srcPath, $destinationPath);
            }
        } catch (\Exception $e) {
            return;
        }

        $image_mapper = \C_Image_Mapper::get_instance();
        $image_mapper->save($imageObj);
    }

    // Mass update of all the meta with the new filenames
    public function updatePostmetas($baseImageUrl, $newImageUrl)
    {
        global $wpdb;
        $query = $wpdb->prepare("UPDATE $wpdb->postmeta
			SET meta_value = '%s'
			WHERE meta_key <> '_original_filename'
			AND (TRIM(meta_value) = '%s'
			OR TRIM(meta_value) = '%s'
		);", $newImageUrl, $baseImageUrl, str_replace(' ', '%20', $baseImageUrl));
        $query_revert = $wpdb->prepare("UPDATE $wpdb->postmeta
			SET meta_value = '%s'
			WHERE meta_key <> '_original_filename'
			AND meta_value = '%s';
		", $baseImageUrl, $newImageUrl);
        $wpdb->query($query);
    }

    // Mass update of all the articles with the new filenames
    public function updatePosts($baseImageUrl, $newImageUrl)
    {
        global $wpdb;

        // Content
        $query = $wpdb->prepare("UPDATE $wpdb->posts
			SET post_content = REPLACE(post_content, '%s', '%s')
			WHERE post_status != 'inherit'
			AND post_status != 'trash'
			AND post_type != 'attachment'
			AND post_type NOT LIKE '%acf-%'
			AND post_type NOT LIKE '%edd_%'
			AND post_type != 'shop_order'
			AND post_type != 'shop_order_refund'
			AND post_type != 'nav_menu_item'
			AND post_type != 'revision'
			AND post_type != 'auto-draft'", $baseImageUrl, $newImageUrl);
        $query_revert = $wpdb->prepare("UPDATE $wpdb->posts
			SET post_content = REPLACE(post_content, '%s', '%s')
			WHERE post_status != 'inherit'
			AND post_status != 'trash'
			AND post_type != 'attachment'
			AND post_type NOT LIKE '%acf-%'
			AND post_type NOT LIKE '%edd_%'
			AND post_type != 'shop_order'
			AND post_type != 'shop_order_refund'
			AND post_type != 'nav_menu_item'
			AND post_type != 'revision'
			AND post_type != 'auto-draft'", $newImageUrl, $baseImageUrl);
        $wpdb->query($query);

        // Excerpt
        $query = $wpdb->prepare("UPDATE $wpdb->posts
			SET post_excerpt = REPLACE(post_excerpt, '%s', '%s')
			WHERE post_status != 'inherit'
			AND post_status != 'trash'
			AND post_type != 'attachment'
			AND post_type NOT LIKE '%acf-%'
			AND post_type NOT LIKE '%edd_%'
			AND post_type != 'shop_order'
			AND post_type != 'shop_order_refund'
			AND post_type != 'nav_menu_item'
			AND post_type != 'revision'
			AND post_type != 'auto-draft'", $baseImageUrl, $newImageUrl);
        $query_revert = $wpdb->prepare("UPDATE $wpdb->posts
			SET post_excerpt = REPLACE(post_excerpt, '%s', '%s')
			WHERE post_status != 'inherit'
			AND post_status != 'trash'
			AND post_type != 'attachment'
			AND post_type NOT LIKE '%acf-%'
			AND post_type NOT LIKE '%edd_%'
			AND post_type != 'shop_order'
			AND post_type != 'shop_order_refund'
			AND post_type != 'nav_menu_item'
			AND post_type != 'revision'
			AND post_type != 'auto-draft'", $newImageUrl, $baseImageUrl);
        $wpdb->query($query);
    }
}