diff --git a/app/Controllers/Admin/Episode.php b/app/Controllers/Admin/Episode.php index 6dc61de177b18870f31b6ea986dea16f8292d83a..0e1d348f61ee19eeac0ffd31e59df2ea408a0b5a 100644 --- a/app/Controllers/Admin/Episode.php +++ b/app/Controllers/Admin/Episode.php @@ -118,8 +118,12 @@ class Episode extends BaseController $this->request->getPost('parental_advisory') !== 'undefined' ? $this->request->getPost('parental_advisory') : null, - 'number' => $this->request->getPost('episode_number'), - 'season_number' => $this->request->getPost('season_number'), + 'number' => $this->request->getPost('episode_number') + ? $this->request->getPost('episode_number') + : null, + 'season_number' => $this->request->getPost('season_number') + ? $this->request->getPost('season_number') + : null, 'type' => $this->request->getPost('type'), 'is_blocked' => $this->request->getPost('block') == 'yes', 'created_by' => user(), @@ -204,7 +208,9 @@ class Episode extends BaseController $this->request->getPost('parental_advisory') !== 'undefined' ? $this->request->getPost('parental_advisory') : null; - $this->episode->number = $this->request->getPost('episode_number'); + $this->episode->number = $this->request->getPost('episode_number') + ? $this->request->getPost('episode_number') + : null; $this->episode->season_number = $this->request->getPost('season_number') ? $this->request->getPost('season_number') : null; diff --git a/app/Controllers/Admin/Podcast.php b/app/Controllers/Admin/Podcast.php index c46ed1e8a56c158cd44f372667991636c08a1fb7..a6e9e2023b7eca6a23dabbcb29ab43cd6705f91e 100644 --- a/app/Controllers/Admin/Podcast.php +++ b/app/Controllers/Admin/Podcast.php @@ -384,7 +384,9 @@ class Podcast extends BaseController 'number' => $this->request->getPost('force_renumber') === 'yes' ? $itemNumber - : $nsItunes->episode, + : (!empty($nsItunes->episode) + ? $nsItunes->episode + : null), 'season_number' => empty( $this->request->getPost('season_number') ) diff --git a/app/Helpers/components_helper.php b/app/Helpers/components_helper.php index 0e31cb651a4388ac27031ed6fbca9520677c0893..ae528dc4a5f92676f052505f5a31061d2f880d28 100644 --- a/app/Helpers/components_helper.php +++ b/app/Helpers/components_helper.php @@ -259,9 +259,9 @@ if (!function_exists('data_table')) { if (!function_exists('publication_pill')) { /** - * Data table component + * Publication pill component * - * Creates a stylized table. + * Shows the stylized publication datetime in regards to current datetime. * * @param \CodeIgniter\I18n\Time $publicationDate publication datetime of the episode * @param boolean $isPublished whether or not the episode has been published @@ -303,4 +303,66 @@ if (!function_exists('publication_pill')) { '</span>'; } } + +// ------------------------------------------------------------------------ + +if (!function_exists('episode_numbering')) { + /** + * Returns relevant translated episode numbering. + * + * @param int|null $episodeNumber + * @param int|null $seasonNumber + * @param string $class styling classes + * @param string $is_abbr component will show abbreviated numbering if true + * + * @return string + */ + function episode_numbering( + $episodeNumber = null, + $seasonNumber = null, + $class = '', + $isAbbr = false + ): string { + if (!$episodeNumber && !$seasonNumber) { + return ''; + } + + $transKey = ''; + $args = []; + if ($episodeNumber && $seasonNumber) { + $transKey = 'Episode.season_episode'; + $args = [ + 'seasonNumber' => $seasonNumber, + 'episodeNumber' => $episodeNumber, + ]; + } elseif ($episodeNumber && !$seasonNumber) { + $transKey = 'Episode.number'; + $args = [ + 'episodeNumber' => $episodeNumber, + ]; + } elseif (!$episodeNumber && $seasonNumber) { + $transKey = 'Episode.season'; + $args = [ + 'seasonNumber' => $seasonNumber, + ]; + } + + if ($isAbbr) { + return '<abbr class="' . + $class . + '" title="' . + lang($transKey, $args) . + '">' . + lang($transKey . '_abbr', $args) . + '</abbr>'; + } + + return '<span class="' . + $class . + '">' . + lang($transKey, $args) . + '</span>'; + } +} + // ------------------------------------------------------------------------ diff --git a/app/Helpers/id3_helper.php b/app/Helpers/id3_helper.php index 2e7b18596908ebeeef4c1939639cd2782ff32bad..5046c72c46c14cdae4799e883fd2e9e0aa612eb5 100644 --- a/app/Helpers/id3_helper.php +++ b/app/Helpers/id3_helper.php @@ -70,7 +70,7 @@ function write_enclosure_tags($episode) $episode->published_at ? $episode->published_at->format('Y') : '', ], 'genre' => ['Podcast'], - 'comment' => [$episode->description_html], + 'comment' => [$episode->description], 'track_number' => [strval($episode->number)], 'copyright_message' => [$episode->podcast->copyright], 'publisher' => [ diff --git a/app/Helpers/rss_helper.php b/app/Helpers/rss_helper.php index 93dbbdcefce6df5edb54d61e1dfad3915a85ac79..f09da92b97b3c910fedefb0c3ebe0d2c4e5c2738 100644 --- a/app/Helpers/rss_helper.php +++ b/app/Helpers/rss_helper.php @@ -142,7 +142,8 @@ function get_rss_feed($podcast, $serviceName = '') $itunes_namespace ); - $item->addChild('episode', $episode->number, $itunes_namespace); + $episode->number && + $item->addChild('episode', $episode->number, $itunes_namespace); $episode->season_number && $item->addChild( 'season', diff --git a/app/Language/en/Episode.php b/app/Language/en/Episode.php index 61f0132db020d2b2686abf32943bd36d6f1a9cb3..652bad3ac932aa0cd4d627f4926fcc325a5d23aa 100644 --- a/app/Language/en/Episode.php +++ b/app/Language/en/Episode.php @@ -12,6 +12,7 @@ return [ 'next_episode' => 'Next episode', 'next_season' => 'Next season', 'season' => 'Season {seasonNumber}', + 'season_abbr' => 'S{seasonNumber}', 'number' => 'Episode {episodeNumber}', 'number_abbr' => 'Ep. {episodeNumber}', 'season_episode' => 'Season {seasonNumber} episode {episodeNumber}', diff --git a/app/Language/fr/Episode.php b/app/Language/fr/Episode.php index 2b5716cd766daa4acc8abd3c1784b5fde89fc13a..a98e63b974bbf45058fd1d21db64119c2af939e8 100644 --- a/app/Language/fr/Episode.php +++ b/app/Language/fr/Episode.php @@ -12,6 +12,7 @@ return [ 'next_episode' => 'Épisode suivant', 'next_season' => 'Saison suivante', 'season' => 'Saison {seasonNumber}', + 'season_abbr' => 'S{seasonNumber}', 'number' => 'Épisode {episodeNumber}', 'number_abbr' => 'Ep. {episodeNumber}', 'season_episode' => 'Saison {seasonNumber} épisode {episodeNumber}', diff --git a/app/Views/admin/episode/create.php b/app/Views/admin/episode/create.php index a948b1fa088b89b75fe5396e17d1ec9a4de7cdd6..6d1e50c96edd403134d0c4823a23c12ab0a53876 100644 --- a/app/Views/admin/episode/create.php +++ b/app/Views/admin/episode/create.php @@ -104,7 +104,6 @@ 'name' => 'episode_number', 'class' => 'form-input w-full', 'value' => old('episode_number'), - 'required' => 'required', 'type' => 'number', ]) ?> </div> diff --git a/app/Views/admin/episode/edit.php b/app/Views/admin/episode/edit.php index b2f9382faa078cfe25cf99d87248ff2ecdbe7ce0..2b5db05fdf3caf0c8b486eaf9270e6c28e857859 100644 --- a/app/Views/admin/episode/edit.php +++ b/app/Views/admin/episode/edit.php @@ -108,7 +108,6 @@ 'name' => 'episode_number', 'class' => 'form-input w-full', 'value' => old('episode_number', $episode->number), - 'required' => 'required', 'type' => 'number', ]) ?> </div> diff --git a/app/Views/admin/episode/list.php b/app/Views/admin/episode/list.php index 9f0330086b33b4c0efa8fcd4ba26f46f81c0d686..dff7ceffb1e889f612f4786975f64b8631ab3e59 100644 --- a/app/Views/admin/episode/list.php +++ b/app/Views/admin/episode/list.php @@ -11,12 +11,10 @@ <?= $this->endSection() ?> <?= $this->section('headerRight') ?> -<?= button( - lang('Episode.create'), - route_to('episode-create', $podcast->id), - - ['variant' => 'primary', 'iconLeft' => 'add'] -) ?> +<?= button(lang('Episode.create'), route_to('episode-create', $podcast->id), [ + 'variant' => 'primary', + 'iconLeft' => 'add', +]) ?> <?= $this->endSection() ?> @@ -43,34 +41,12 @@ ) ?>"> <h2 class="inline-flex justify-between w-full font-bold leading-none group"> <span class="mr-1 group-hover:underline"><?= $episode->title ?></span> - <?php if ( - $episode->season_number && - $episode->number - ): ?> - <abbr class="text-xs font-bold text-gray-600" title="<?= lang( - 'Episode.season_episode', - [ - 'seasonNumber' => - $episode->season_number, - 'episodeNumber' => $episode->number, - ] - ) ?>"><?= lang('Episode.season_episode_abbr', [ - 'seasonNumber' => $episode->season_number, - 'episodeNumber' => $episode->number, -]) ?></abbr> - <?php elseif ( - !$episode->season_number && - $episode->number - ): ?> - <abbr class="text-xs font-bold text-gray-600" title="<?= lang( - 'Episode.number', - [ - 'episodeNumber' => $episode->number, - ] - ) ?>"><?= lang('Episode.number_abbr', [ - 'episodeNumber' => $episode->number, -]) ?></abbr> - <?php endif; ?> + <?= episode_numbering( + $episode->number, + $episode->season_number, + 'text-xs font-bold text-gray-600', + true + ) ?> </h2> </a> <div class="relative" data-toggle="dropdown"> diff --git a/app/Views/admin/podcast/latest_episodes.php b/app/Views/admin/podcast/latest_episodes.php index b4dadbfa8cd849fb7be792a262748fa48f0b47de..9613909276c048de0646eee1303434df757e54ce 100644 --- a/app/Views/admin/podcast/latest_episodes.php +++ b/app/Views/admin/podcast/latest_episodes.php @@ -27,37 +27,12 @@ ><?= $episode->title ?> </a> <div class="text-xs"> - <?php if ( - $episode->season_number && - $episode->number - ): ?> - <abbr class="font-bold text-gray-600" title="<?= lang( - 'Episode.season_episode', - [ - 'seasonNumber' => - $episode->season_number, - 'episodeNumber' => $episode->number, - ] - ) ?>"><?= lang( - 'Episode.season_episode_abbr', - [ - 'seasonNumber' => $episode->season_number, - 'episodeNumber' => $episode->number, - ] -) ?></abbr> - <?php elseif ( - !$episode->season_number && - $episode->number - ): ?> - <abbr class="font-bold text-gray-600" title="<?= lang( - 'Episode.number', - [ - 'episodeNumber' => $episode->number, - ] - ) ?>"><?= lang('Episode.number_abbr', [ - 'episodeNumber' => $episode->number, -]) ?></abbr> - <?php endif; ?> + <?= episode_numbering( + $episode->number, + $episode->season_number, + 'font-bold text-gray-600', + true + ) ?> <span class="mx-1">•</span> <time pubdate diff --git a/app/Views/episode.php b/app/Views/episode.php index 2bebb296d99fd19f619019f38dd365a0635e2ddf..93d3166c9497649d94b3c89777d7068064634234 100644 --- a/app/Views/episode.php +++ b/app/Views/episode.php @@ -63,24 +63,11 @@ alt="<?= $episode->title ?>" class="object-cover w-full max-w-xs mb-2 rounded-lg md:mb-0 md:mr-4" /> <div class="flex flex-col w-full max-w-sm"> <h1 class="text-lg font-semibold md:text-2xl"><?= $episode->title ?></h1> - <?php if ($episode->number): ?> - <p class="text-gray-600"> - <?php if ($episode->season_number): ?> - <a class="mr-1 underline hover:no-underline" href="<?= route_to( - 'podcast', - $podcast->name - ) . - '?season=' . - $episode->season_number ?>"> - <?= lang('Episode.season', [ - 'seasonNumber' => $episode->season_number, - ]) ?></a> - <?php endif; ?> - <?= lang('Episode.number', [ - 'episodeNumber' => $episode->number, - ]) ?> - </p> - <?php endif; ?> + <?= episode_numbering( + $episode->number, + $episode->season_number, + 'text-gray-600' + ) ?> <div class="text-sm"> <time pubdate diff --git a/app/Views/podcast.php b/app/Views/podcast.php index 2d02c189bf13ae7a517d219451b5e3fd3810429a..98258d0dd90237d95932540d3c4e8bcdabcb3ee2 100644 --- a/app/Views/podcast.php +++ b/app/Views/podcast.php @@ -117,7 +117,12 @@ <a class="text-sm hover:underline" href="<?= $episode->link ?>"> <h2 class="inline-flex justify-between w-full font-bold leading-none group"> <span class="mr-1 group-hover:underline"><?= $episode->title ?></span> - <span class="font-bold text-gray-600">#<?= $episode->number ?></span> + <?= episode_numbering( + $episode->number, + $episode->season_number, + 'text-xs font-bold text-gray-600', + true + ) ?> </h2> </a> <div class="mb-2 text-xs">