hasFile('episodegallery'.$galleryInputNumber)) { $this->saveGalleryFiles($hentai, $episode, $episodeNumber, $request->file('episodegallery'.$galleryInputNumber)); } } /** * Save a gallery for the given episode from a list of uploaded files. * * @param array $files */ public function saveGalleryFiles(Hentai $hentai, Episode $episode, int $episodeNumber, array $files): void { $this->deleteOldGallery($episode); $this->createGalleryFolder($hentai); $counter = 0; foreach ($files as $file) { $gallery = $this->createGallery($hentai, $episode, $episodeNumber, $counter); $this->saveGalleryImage($gallery, $file); $counter += 1; } } private function createGalleryFolder(Hentai $hentai): void { // Create Folder for Image Upload if (! Storage::disk('public')->exists("/images/hentai/{$hentai->slug}")) { Storage::disk('public')->makeDirectory("/images/hentai/{$hentai->slug}"); } } private function createGallery(Hentai $hentai, Episode $episode, int $episodeNumber, int $counter): Gallery { $gallery = new Gallery; $gallery->hentai_id = $hentai->id; $gallery->episode_id = $episode->id; $gallery->image_url = "/images/hentai/{$hentai->slug}/gallery-ep-{$episodeNumber}-{$counter}.webp"; $gallery->thumbnail_url = "/images/hentai/{$hentai->slug}/gallery-ep-{$episodeNumber}-{$counter}-thumbnail.webp"; $gallery->save(); return $gallery; } private function saveGalleryImage(Gallery $gallery, UploadedFile|TemporaryUploadedFile $sourceImage): void { Image::read($sourceImage->getRealPath()) ->cover(1920, 1080) ->encode(new WebpEncoder) ->save(Storage::disk('public')->path($gallery->image_url)); Image::read($sourceImage->getRealPath()) ->cover(960, 540) ->encode(new WebpEncoder) ->save(Storage::disk('public')->path($gallery->thumbnail_url)); } private function deleteOldGallery(Episode $episode): void { $oldGallery = Gallery::where('episode_id', $episode->id)->get(); foreach ($oldGallery as $oldImage) { Storage::disk('public')->delete($oldImage->image_url); Storage::disk('public')->delete($oldImage->thumbnail_url); $oldImage->delete(); } } }