diff --git a/app/Http/Controllers/Admin/EpisodeController.php b/app/Http/Controllers/Admin/EpisodeController.php index 963ca4e..101c8b9 100644 --- a/app/Http/Controllers/Admin/EpisodeController.php +++ b/app/Http/Controllers/Admin/EpisodeController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers\Admin; +use App\Enums\UserRole; use App\Http\Controllers\Controller; use App\Jobs\DiscordReleaseNotification; use App\Models\Episode; @@ -63,6 +64,17 @@ class EpisodeController extends Controller public function update(Request $request): RedirectResponse { $episode = Episode::with('hentai')->where('id', $request->input('episode_id'))->firstOrFail(); + + if ($request->user()->hasRole(UserRole::MODERATOR)) { + $this->episodeService->updateEpisodeModerator($request, $episode->id); + + cache()->flush(); + + return to_route('hentai.index', [ + 'title' => $episode->slug, + ]); + } + $studio = $this->episodeService->getOrCreateStudio(json_decode($request->input('studio'))[0]->value); $oldinterpolated = $episode->interpolated; diff --git a/app/Services/EpisodeService.php b/app/Services/EpisodeService.php index 2be96e7..a9dc2c4 100644 --- a/app/Services/EpisodeService.php +++ b/app/Services/EpisodeService.php @@ -5,6 +5,7 @@ namespace App\Services; use App\Models\Episode; use App\Models\Hentai; use App\Models\Studios; +use App\Models\ModLog; use Illuminate\Http\Request; use Illuminate\Support\Carbon; use Illuminate\Support\Facades\Storage; @@ -62,6 +63,34 @@ class EpisodeService return $episode; } + private function applyTags(Request $request, Episode $episode): void + { + $tags = json_decode($request->input('tags')); + $newtags = []; + foreach ($tags as $t) { + $newtags[] = $t->value; + } + + $newTagsTemp = $newtags; + $oldTagsTemp = $episode->tagNames(); + + sort($newTagsTemp); + sort($oldTagsTemp); + + if ($newTagsTemp !== $oldTagsTemp) { + ModLog::create([ + 'moderator' => $request->user()->name, + 'data' => sprintf( + 'Updated Episode tags from %s to %s', + implode(', ', $oldTagsTemp), + implode(', ', $newTagsTemp), + ), + ]); + } + + $episode->retag($newtags); + } + public function updateEpisode(Request $request, Studios $studio, int $episodeId): Episode { $episode = Episode::where('id', $episodeId)->firstOrFail(); @@ -75,17 +104,29 @@ class EpisodeService $episode->dmca_takedown = $request->input('dmca_takedown') == 'true'; $episode->save(); - // Tagging - $tags = json_decode($request->input('tags')); - $newtags = []; - foreach ($tags as $t) { - $newtags[] = $t->value; - } - $episode->retag($newtags); + $this->applyTags($request, $episode); return $episode; } + public function updateEpisodeModerator(Request $request, int $episodeId): void + { + $episode = Episode::where('id', $episodeId)->firstOrFail(); + $oldDescription = $episode->description; + $episode->description = $request->input('description'); + $episode->save(); + + if ($episode->description !== $oldDescription) { + // Log to ModLog + ModLog::create([ + 'moderator' => $request->user()->name, + 'data' => "Updated Episode description from {$oldDescription} to {$episode->description}", + ]); + } + + $this->applyTags($request, $episode); + } + public function getOrCreateStudio(string $studioName): Studios { return Studios::firstOrCreate( diff --git a/resources/views/admin/modals/edit-episode.blade.php b/resources/views/admin/modals/edit-episode.blade.php index 32ef781..3089663 100644 --- a/resources/views/admin/modals/edit-episode.blade.php +++ b/resources/views/admin/modals/edit-episode.blade.php @@ -5,17 +5,18 @@