From 07d740b79f9283e389e723954f680f909ce5de4a Mon Sep 17 00:00:00 2001 From: Yassine Doghri <yassine@doghri.fr> Date: Wed, 5 Jan 2022 16:01:44 +0000 Subject: [PATCH] feat: prefill season and episode numbers + set episode number as mandatory for serial podcasts closes #134, #136 --- app/Models/EpisodeModel.php | 26 +++++++++++++++++++ .../Admin/Controllers/EpisodeController.php | 12 ++++++++- themes/cp_admin/episode/create.php | 7 +++-- themes/cp_admin/episode/edit.php | 5 ++-- 4 files changed, 45 insertions(+), 5 deletions(-) diff --git a/app/Models/EpisodeModel.php b/app/Models/EpisodeModel.php index 44ec3b26c0..4edebdecd3 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 2d297ff98d..01dbb051a6 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 fdc2032695..39a440cf5c 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 acc4eb4236..b693cb9a09 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> -- GitLab