diff --git a/app/Models/EpisodeModel.php b/app/Models/EpisodeModel.php index 44ec3b26..4edebdec 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 2d297ff9..01dbb051 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 fdc20326..39a440cf 100644 --- a/themes/cp_admin/episode/create.php +++ b/themes/cp_admin/episode/create.php @@ -51,17 +51,20 @@
- -
diff --git a/themes/cp_admin/episode/edit.php b/themes/cp_admin/episode/edit.php index acc4eb42..b693cb9a 100644 --- a/themes/cp_admin/episode/edit.php +++ b/themes/cp_admin/episode/edit.php @@ -55,19 +55,20 @@
- -