Commit 07d740b7 authored by Yassine Doghri's avatar Yassine Doghri
Browse files

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

closes #134, #136
parent d0cb964b
Loading
Loading
Loading
Loading
Loading
+26 −0
Original line number Diff line number Diff line
@@ -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
     *
+11 −1
Original line number Diff line number Diff line
@@ -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()
+5 −2
Original line number Diff line number Diff line
@@ -56,12 +56,15 @@
        name="season_number"
        label="<?= lang('Episode.form.season_number') ?>"
        type="number"
        value="<?= $currentSeasonNumber ?>"
    />
    <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>

+3 −2
Original line number Diff line number Diff line
@@ -68,6 +68,7 @@
        label="<?= lang('Episode.form.episode_number') ?>"
        type="number"
        value="<?= $episode->number ?>"
        required="<?= $podcast->type === 'serial' ? 'true' : 'false' ?>"
    />
</div>