feat: prefill season and episode numbers + set episode number as mandatory for serial podcasts

closes #134, #136
This commit is contained in:
Yassine Doghri 2022-01-05 16:01:44 +00:00
parent d0cb964b0f
commit 07d740b79f
4 changed files with 45 additions and 5 deletions

View File

@ -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
*

View File

@ -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()

View File

@ -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>

View File

@ -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>