title = $referenceEpisode->title ?? $request->input('title'); $episode->title_search = preg_replace("/[^A-Za-z0-9 ]/", '', $episode->title); $episode->title_jpn = $referenceEpisode->title_jpn ?? $request->input('title_jpn'); $episode->slug = "{$hentai->slug}-{$episodeNumber}"; $episode->hentai_id = $hentai->id; $episode->studios_id = $referenceEpisode->studio->id ?? $studio->id; $episode->episode = $episodeNumber; $episode->description = $referenceEpisode ? $request->input('description') : $request->input("description{$episodeNumber}"); $episode->url = $referenceEpisode ? $request->input('baseurl') : rtrim($request->input('baseurl'), '/').'/E'.str_pad($episodeNumber, 2, '0', STR_PAD_LEFT); $episode->view_count = 0; $episode->interpolated = true; $episode->is_dvd_aspect = false; $episode->release_date = $referenceEpisode->release_date ?? Carbon::parse($request->input('releasedate'))->format('Y-m-d'); $episode->cover_url = "/images/hentai/{$hentai->slug}/cover-ep-{$episodeNumber}.webp"; $episode->save(); // Tagging $tags = $referenceEpisode ? $referenceEpisode->tags : json_decode($request->input('tags')); foreach ($tags as $t) { $episode->tag($referenceEpisode ? $t->name : $t->value); } return $episode; } public function updateEpisode(Request $request, Studios $studio, int $episodeId): Episode { $episode = Episode::where('id', $episodeId)->firstOrFail(); $episode->studios_id = $studio->id; $episode->description = $request->input('description'); $episode->url = $request->input('baseurl'); $episode->release_date = Carbon::parse($request->input('releasedate'))->format('Y-m-d'); $episode->interpolated = $request->input('interpolated') == 'yes'; $episode->interpolated_uhd = $request->input('downloadUHDi1') ? true : false; $episode->is_dvd_aspect = $request->input('dvd') == 'yes'; $episode->save(); // Tagging $tags = json_decode($request->input('tags')); $newtags = []; foreach ($tags as $t) { $newtags[] = $t->value; } $episode->retag($newtags); return $episode; } public function getOrCreateStudio(string $studioName): Studios { return Studios::firstOrCreate( ['name' => $studioName], ['slug' => Str::slug($studioName)] ); } public function createOrUpdateCover(Request $request, Episode $episode, string $slug, int $episodeNumber): void { if (! $request->hasFile("episodecover{$episodeNumber}")) { return; } // Create Folder for Image Upload if (! Storage::disk('public')->exists("/images/hentai/{$slug}")) { Storage::disk('public')->makeDirectory("/images/hentai/{$slug}"); } // Encode and save cover image Image::read($request->file("episodecover{$episodeNumber}")->getRealPath()) ->cover(268, 394) ->encode(new WebpEncoder()) ->save(Storage::disk('public')->path($episode->cover_url)); } }