diff --git a/app/Models/EpisodeModel.php b/app/Models/EpisodeModel.php index 44ec3b26c0da115c5dfaab0e0310211de8b36b9a..4edebdecd36eb1aeb2006be6483de26f100f6465 100644 --- a/app/Models/EpisodeModel.php +++ b/app/Models/EpisodeModel.php @@ -268,6 +268,32 @@ class EpisodeModel extends Model : false; } + public function getCurrentSeasonNumber(int $podcastId): ?int + { + $result = $this->select('MAX(season_number) as current_season_number') + ->where([ + 'podcast_id' => $podcastId, + $this->deletedField => null, + ]) + ->get() + ->getResultArray(); + + return $result[0]['current_season_number'] ? (int) $result[0]['current_season_number'] : null; + } + + public function getNextEpisodeNumber(int $podcastId, ?int $seasonNumber): int + { + $result = $this->select('MAX(number) as next_episode_number') + ->where([ + 'podcast_id' => $podcastId, + 'season_number' => $seasonNumber, + $this->deletedField => null, + ])->get() + ->getResultArray(); + + return (int) $result[0]['next_episode_number'] + 1; + } + /** * @param mixed[] $data * diff --git a/modules/Admin/Controllers/EpisodeController.php b/modules/Admin/Controllers/EpisodeController.php index 2d297ff98d66ccb3b84a8d9e03e96be3935feb1b..01dbb051a6f2a39f1ef299d5901ec843c09f6c04 100644 --- a/modules/Admin/Controllers/EpisodeController.php +++ b/modules/Admin/Controllers/EpisodeController.php @@ -97,10 +97,12 @@ class EpisodeController extends BaseController { helper(['form']); + $currentSeasonNumber = (new EpisodeModel())->getCurrentSeasonNumber($this->podcast->id); $data = [ 'podcast' => $this->podcast, + 'currentSeasonNumber' => $currentSeasonNumber, + 'nextEpisodeNumber' => (new EpisodeModel())->getNextEpisodeNumber($this->podcast->id, $currentSeasonNumber), ]; - replace_breadcrumb_params([ 0 => $this->podcast->title, ]); @@ -118,6 +120,10 @@ class EpisodeController extends BaseController 'chapters_file' => 'ext_in[chapters,json]|permit_empty', ]; + if ($this->podcast->type === 'serial') { + $rules['episode_number'] = 'required'; + } + if (! $this->validate($rules)) { return redirect() ->back() @@ -239,6 +245,10 @@ class EpisodeController extends BaseController 'chapters_file' => 'ext_in[chapters_file,json]|permit_empty', ]; + if ($this->podcast->type === 'serial') { + $rules['episode_number'] = 'required'; + } + if (! $this->validate($rules)) { return redirect() ->back() diff --git a/themes/cp_admin/episode/create.php b/themes/cp_admin/episode/create.php index fdc20326958bf14b0d6c58a26f92d178fc6ab4dc..39a440cf5cfe6d1c0c6b3cb3323fedebe3a44d6c 100644 --- a/themes/cp_admin/episode/create.php +++ b/themes/cp_admin/episode/create.php @@ -51,17 +51,20 @@ </div> <div class="flex flex-col gap-x-2 gap-y-4 md:flex-row"> - <Forms.Field + <Forms.Field class="flex-1 w-0" name="season_number" label="<?= lang('Episode.form.season_number') ?>" type="number" + value="<?= $currentSeasonNumber ?>" /> - <Forms.Field + <Forms.Field class="flex-1 w-0" name="episode_number" label="<?= lang('Episode.form.episode_number') ?>" type="number" + value="<?= $nextEpisodeNumber ?>" + required="<?= $podcast->type === 'serial' ? 'true' : 'false' ?>" /> </div> diff --git a/themes/cp_admin/episode/edit.php b/themes/cp_admin/episode/edit.php index acc4eb423679cf361efa2276ebc2b9057d4696c6..b693cb9a09fabcbb9c482d2a1f53a89b358fb5ad 100644 --- a/themes/cp_admin/episode/edit.php +++ b/themes/cp_admin/episode/edit.php @@ -55,19 +55,20 @@ </div> <div class="flex flex-col gap-x-2 gap-y-4 md:flex-row"> - <Forms.Field + <Forms.Field class="flex-1 w-0" name="season_number" label="<?= lang('Episode.form.season_number') ?>" type="number" value="<?= $episode->season_number ?>" /> - <Forms.Field + <Forms.Field class="flex-1 w-0" name="episode_number" label="<?= lang('Episode.form.episode_number') ?>" type="number" value="<?= $episode->number ?>" + required="<?= $podcast->type === 'serial' ? 'true' : 'false' ?>" /> </div>