From 50c261678f38bfbe27561982d302df120198249b Mon Sep 17 00:00:00 2001 From: amir-ys Date: Fri, 8 Nov 2024 02:16:34 +0330 Subject: [PATCH] feat: complete upgrade media-library packages --- app/Console/Commands/AddUUIDToMedia.php | 34 ++++++++ .../{medialibrary.php => media-library.php} | 0 ..._conversions_disk_field_to_media_table.php | 32 ++++++++ ...ary_original_to_media_library_original.php | 81 +++++++++++++++++++ ...d_generated_conversions_to_media_table.php | 57 +++++++++++++ 5 files changed, 204 insertions(+) create mode 100755 app/Console/Commands/AddUUIDToMedia.php rename config/{medialibrary.php => media-library.php} (100%) create mode 100644 database/migrations/2024_11_08_000144_add_conversions_disk_field_to_media_table.php create mode 100644 database/migrations/2024_11_08_000151_responsive_images_was_changed_from_medialibrary_original_to_media_library_original.php create mode 100644 database/migrations/2024_11_08_000159_add_generated_conversions_to_media_table.php diff --git a/app/Console/Commands/AddUUIDToMedia.php b/app/Console/Commands/AddUUIDToMedia.php new file mode 100755 index 00000000..18bf381f --- /dev/null +++ b/app/Console/Commands/AddUUIDToMedia.php @@ -0,0 +1,34 @@ +cursor()->each( + fn(Media $media) => $media->update(['uuid' => Str::uuid()]) + ); + } +} diff --git a/config/medialibrary.php b/config/media-library.php similarity index 100% rename from config/medialibrary.php rename to config/media-library.php diff --git a/database/migrations/2024_11_08_000144_add_conversions_disk_field_to_media_table.php b/database/migrations/2024_11_08_000144_add_conversions_disk_field_to_media_table.php new file mode 100644 index 00000000..0fe71973 --- /dev/null +++ b/database/migrations/2024_11_08_000144_add_conversions_disk_field_to_media_table.php @@ -0,0 +1,32 @@ +char('uuid', 36)->nullable()->after('id'); + $table->string('conversions_disk', 255)->nullable()->after('disk'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('transfers', function (Blueprint $table) { + $table->dropColumn('conversions_disk'); + }); + } +}; diff --git a/database/migrations/2024_11_08_000151_responsive_images_was_changed_from_medialibrary_original_to_media_library_original.php b/database/migrations/2024_11_08_000151_responsive_images_was_changed_from_medialibrary_original_to_media_library_original.php new file mode 100644 index 00000000..dd54cee3 --- /dev/null +++ b/database/migrations/2024_11_08_000151_responsive_images_was_changed_from_medialibrary_original_to_media_library_original.php @@ -0,0 +1,81 @@ +change(self::OLD_COLLECTION_NAME, self::NEW_COLLECTION_NAME); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + $this->change(self::NEW_COLLECTION_NAME, self::OLD_COLLECTION_NAME); + } + + public function change(string $from, string $to) + { + /** @var Factory $filesystem */ + $filesystem = app(Factory::class); + + + // Find media with the old collection name is present + Media::query() + ->withoutGlobalScopes() + ->whereNotNull('responsive_images->' . $from) + ->cursor() + ->each(function ($media) use ($from, $to, $filesystem) { + // Change the old collection key + $responsive_images = array_merge( + $media->responsive_images, + [ + $to => $media->responsive_images[$from], + $from => null + ] + ); + // Remove it completely + unset($responsive_images[$from]); + + // Responsive image path for this media + $pathGenerator = PathGeneratorFactory::create($media); + $directory = $pathGenerator->getPathForResponsiveImages($media); + // Media disk + $disk = $filesystem->disk($media->disk); + + foreach ($responsive_images[$to]['urls'] as &$filename) { + // Replace the old collection name with the new one + $newFilename = str_replace( + $from, + $to, + $filename + ); + // If the old file exists move it on disk + if ($disk->exists($directory . $filename)) { + $disk->move($directory . $filename, $directory . $newFilename); + // Update the new array by ref + $filename = $newFilename; + } + } + // Save the new array + $media->responsive_images = $responsive_images; + $media->save(); + }); + } +}; diff --git a/database/migrations/2024_11_08_000159_add_generated_conversions_to_media_table.php b/database/migrations/2024_11_08_000159_add_generated_conversions_to_media_table.php new file mode 100644 index 00000000..684ba3a2 --- /dev/null +++ b/database/migrations/2024_11_08_000159_add_generated_conversions_to_media_table.php @@ -0,0 +1,57 @@ +json('generated_conversions')->nullable(); + }); + } + + Media::query() + ->where(function ($query) { + $query->whereNull('generated_conversions') + ->orWhere('generated_conversions', '') + ->orWhereRaw("JSON_TYPE(generated_conversions) = 'NULL'"); + }) + ->whereRaw("JSON_LENGTH(custom_properties) > 0") + ->update([ + 'generated_conversions' => DB::raw("JSON_EXTRACT(custom_properties, '$.generated_conversions')"), + // OPTIONAL: Remove the generated conversions from the custom_properties field as well: + // 'custom_properties' => DB::raw("JSON_REMOVE(custom_properties, '$.generated_conversions')") + ]); + } + + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + /* Restore the 'generated_conversions' field in the 'custom_properties' column if you removed them in this migration + Media::query() + ->whereRaw("JSON_TYPE(generated_conversions) != 'NULL'") + ->update([ + 'custom_properties' => DB::raw("JSON_SET(custom_properties, '$.generated_conversions', generated_conversions)") + ]); + */ + + Schema::table('media', function (Blueprint $table) { + $table->dropColumn('generated_conversions'); + }); + } +};