mirror of
https://code.castopod.org/adaures/castopod.git
synced 2024-09-27 20:21:59 +02:00
feat: prefill season and episode numbers + set episode number as mandatory for serial podcasts
closes #134, #136
This commit is contained in:
parent
d0cb964b0f
commit
07d740b79f
@ -268,6 +268,32 @@ class EpisodeModel extends Model
|
|||||||
: false;
|
: 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
|
* @param mixed[] $data
|
||||||
*
|
*
|
||||||
|
@ -97,10 +97,12 @@ class EpisodeController extends BaseController
|
|||||||
{
|
{
|
||||||
helper(['form']);
|
helper(['form']);
|
||||||
|
|
||||||
|
$currentSeasonNumber = (new EpisodeModel())->getCurrentSeasonNumber($this->podcast->id);
|
||||||
$data = [
|
$data = [
|
||||||
'podcast' => $this->podcast,
|
'podcast' => $this->podcast,
|
||||||
|
'currentSeasonNumber' => $currentSeasonNumber,
|
||||||
|
'nextEpisodeNumber' => (new EpisodeModel())->getNextEpisodeNumber($this->podcast->id, $currentSeasonNumber),
|
||||||
];
|
];
|
||||||
|
|
||||||
replace_breadcrumb_params([
|
replace_breadcrumb_params([
|
||||||
0 => $this->podcast->title,
|
0 => $this->podcast->title,
|
||||||
]);
|
]);
|
||||||
@ -118,6 +120,10 @@ class EpisodeController extends BaseController
|
|||||||
'chapters_file' => 'ext_in[chapters,json]|permit_empty',
|
'chapters_file' => 'ext_in[chapters,json]|permit_empty',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
if ($this->podcast->type === 'serial') {
|
||||||
|
$rules['episode_number'] = 'required';
|
||||||
|
}
|
||||||
|
|
||||||
if (! $this->validate($rules)) {
|
if (! $this->validate($rules)) {
|
||||||
return redirect()
|
return redirect()
|
||||||
->back()
|
->back()
|
||||||
@ -239,6 +245,10 @@ class EpisodeController extends BaseController
|
|||||||
'chapters_file' => 'ext_in[chapters_file,json]|permit_empty',
|
'chapters_file' => 'ext_in[chapters_file,json]|permit_empty',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
if ($this->podcast->type === 'serial') {
|
||||||
|
$rules['episode_number'] = 'required';
|
||||||
|
}
|
||||||
|
|
||||||
if (! $this->validate($rules)) {
|
if (! $this->validate($rules)) {
|
||||||
return redirect()
|
return redirect()
|
||||||
->back()
|
->back()
|
||||||
|
@ -56,12 +56,15 @@
|
|||||||
name="season_number"
|
name="season_number"
|
||||||
label="<?= lang('Episode.form.season_number') ?>"
|
label="<?= lang('Episode.form.season_number') ?>"
|
||||||
type="number"
|
type="number"
|
||||||
|
value="<?= $currentSeasonNumber ?>"
|
||||||
/>
|
/>
|
||||||
<Forms.Field
|
<Forms.Field
|
||||||
class="flex-1 w-0"
|
class="flex-1 w-0"
|
||||||
name="episode_number"
|
name="episode_number"
|
||||||
label="<?= lang('Episode.form.episode_number') ?>"
|
label="<?= lang('Episode.form.episode_number') ?>"
|
||||||
type="number"
|
type="number"
|
||||||
|
value="<?= $nextEpisodeNumber ?>"
|
||||||
|
required="<?= $podcast->type === 'serial' ? 'true' : 'false' ?>"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -68,6 +68,7 @@
|
|||||||
label="<?= lang('Episode.form.episode_number') ?>"
|
label="<?= lang('Episode.form.episode_number') ?>"
|
||||||
type="number"
|
type="number"
|
||||||
value="<?= $episode->number ?>"
|
value="<?= $episode->number ?>"
|
||||||
|
required="<?= $podcast->type === 'serial' ? 'true' : 'false' ?>"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user