mirror of
https://code.castopod.org/adaures/castopod.git
synced 2024-09-27 20:21:59 +02:00
feat: add episode_numbering() component helper to display episode and season numbers
This commit is contained in:
parent
e1f65cd3b5
commit
3f4a6bd0b9
@ -118,8 +118,12 @@ class Episode extends BaseController
|
|||||||
$this->request->getPost('parental_advisory') !== 'undefined'
|
$this->request->getPost('parental_advisory') !== 'undefined'
|
||||||
? $this->request->getPost('parental_advisory')
|
? $this->request->getPost('parental_advisory')
|
||||||
: null,
|
: null,
|
||||||
'number' => $this->request->getPost('episode_number'),
|
'number' => $this->request->getPost('episode_number')
|
||||||
'season_number' => $this->request->getPost('season_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'),
|
'type' => $this->request->getPost('type'),
|
||||||
'is_blocked' => $this->request->getPost('block') == 'yes',
|
'is_blocked' => $this->request->getPost('block') == 'yes',
|
||||||
'created_by' => user(),
|
'created_by' => user(),
|
||||||
@ -204,7 +208,9 @@ class Episode extends BaseController
|
|||||||
$this->request->getPost('parental_advisory') !== 'undefined'
|
$this->request->getPost('parental_advisory') !== 'undefined'
|
||||||
? $this->request->getPost('parental_advisory')
|
? $this->request->getPost('parental_advisory')
|
||||||
: null;
|
: 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->episode->season_number = $this->request->getPost('season_number')
|
||||||
? $this->request->getPost('season_number')
|
? $this->request->getPost('season_number')
|
||||||
: null;
|
: null;
|
||||||
|
@ -384,7 +384,9 @@ class Podcast extends BaseController
|
|||||||
'number' =>
|
'number' =>
|
||||||
$this->request->getPost('force_renumber') === 'yes'
|
$this->request->getPost('force_renumber') === 'yes'
|
||||||
? $itemNumber
|
? $itemNumber
|
||||||
: $nsItunes->episode,
|
: (!empty($nsItunes->episode)
|
||||||
|
? $nsItunes->episode
|
||||||
|
: null),
|
||||||
'season_number' => empty(
|
'season_number' => empty(
|
||||||
$this->request->getPost('season_number')
|
$this->request->getPost('season_number')
|
||||||
)
|
)
|
||||||
|
@ -259,9 +259,9 @@ if (!function_exists('data_table')) {
|
|||||||
|
|
||||||
if (!function_exists('publication_pill')) {
|
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 \CodeIgniter\I18n\Time $publicationDate publication datetime of the episode
|
||||||
* @param boolean $isPublished whether or not the episode has been published
|
* @param boolean $isPublished whether or not the episode has been published
|
||||||
@ -303,4 +303,66 @@ if (!function_exists('publication_pill')) {
|
|||||||
'</span>';
|
'</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>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
|
@ -70,7 +70,7 @@ function write_enclosure_tags($episode)
|
|||||||
$episode->published_at ? $episode->published_at->format('Y') : '',
|
$episode->published_at ? $episode->published_at->format('Y') : '',
|
||||||
],
|
],
|
||||||
'genre' => ['Podcast'],
|
'genre' => ['Podcast'],
|
||||||
'comment' => [$episode->description_html],
|
'comment' => [$episode->description],
|
||||||
'track_number' => [strval($episode->number)],
|
'track_number' => [strval($episode->number)],
|
||||||
'copyright_message' => [$episode->podcast->copyright],
|
'copyright_message' => [$episode->podcast->copyright],
|
||||||
'publisher' => [
|
'publisher' => [
|
||||||
|
@ -142,7 +142,8 @@ function get_rss_feed($podcast, $serviceName = '')
|
|||||||
$itunes_namespace
|
$itunes_namespace
|
||||||
);
|
);
|
||||||
|
|
||||||
$item->addChild('episode', $episode->number, $itunes_namespace);
|
$episode->number &&
|
||||||
|
$item->addChild('episode', $episode->number, $itunes_namespace);
|
||||||
$episode->season_number &&
|
$episode->season_number &&
|
||||||
$item->addChild(
|
$item->addChild(
|
||||||
'season',
|
'season',
|
||||||
|
@ -12,6 +12,7 @@ return [
|
|||||||
'next_episode' => 'Next episode',
|
'next_episode' => 'Next episode',
|
||||||
'next_season' => 'Next season',
|
'next_season' => 'Next season',
|
||||||
'season' => 'Season {seasonNumber}',
|
'season' => 'Season {seasonNumber}',
|
||||||
|
'season_abbr' => 'S{seasonNumber}',
|
||||||
'number' => 'Episode {episodeNumber}',
|
'number' => 'Episode {episodeNumber}',
|
||||||
'number_abbr' => 'Ep. {episodeNumber}',
|
'number_abbr' => 'Ep. {episodeNumber}',
|
||||||
'season_episode' => 'Season {seasonNumber} episode {episodeNumber}',
|
'season_episode' => 'Season {seasonNumber} episode {episodeNumber}',
|
||||||
|
@ -12,6 +12,7 @@ return [
|
|||||||
'next_episode' => 'Épisode suivant',
|
'next_episode' => 'Épisode suivant',
|
||||||
'next_season' => 'Saison suivante',
|
'next_season' => 'Saison suivante',
|
||||||
'season' => 'Saison {seasonNumber}',
|
'season' => 'Saison {seasonNumber}',
|
||||||
|
'season_abbr' => 'S{seasonNumber}',
|
||||||
'number' => 'Épisode {episodeNumber}',
|
'number' => 'Épisode {episodeNumber}',
|
||||||
'number_abbr' => 'Ep. {episodeNumber}',
|
'number_abbr' => 'Ep. {episodeNumber}',
|
||||||
'season_episode' => 'Saison {seasonNumber} épisode {episodeNumber}',
|
'season_episode' => 'Saison {seasonNumber} épisode {episodeNumber}',
|
||||||
|
@ -104,7 +104,6 @@
|
|||||||
'name' => 'episode_number',
|
'name' => 'episode_number',
|
||||||
'class' => 'form-input w-full',
|
'class' => 'form-input w-full',
|
||||||
'value' => old('episode_number'),
|
'value' => old('episode_number'),
|
||||||
'required' => 'required',
|
|
||||||
'type' => 'number',
|
'type' => 'number',
|
||||||
]) ?>
|
]) ?>
|
||||||
</div>
|
</div>
|
||||||
|
@ -108,7 +108,6 @@
|
|||||||
'name' => 'episode_number',
|
'name' => 'episode_number',
|
||||||
'class' => 'form-input w-full',
|
'class' => 'form-input w-full',
|
||||||
'value' => old('episode_number', $episode->number),
|
'value' => old('episode_number', $episode->number),
|
||||||
'required' => 'required',
|
|
||||||
'type' => 'number',
|
'type' => 'number',
|
||||||
]) ?>
|
]) ?>
|
||||||
</div>
|
</div>
|
||||||
|
@ -11,12 +11,10 @@
|
|||||||
<?= $this->endSection() ?>
|
<?= $this->endSection() ?>
|
||||||
|
|
||||||
<?= $this->section('headerRight') ?>
|
<?= $this->section('headerRight') ?>
|
||||||
<?= button(
|
<?= button(lang('Episode.create'), route_to('episode-create', $podcast->id), [
|
||||||
lang('Episode.create'),
|
'variant' => 'primary',
|
||||||
route_to('episode-create', $podcast->id),
|
'iconLeft' => 'add',
|
||||||
|
]) ?>
|
||||||
['variant' => 'primary', 'iconLeft' => 'add']
|
|
||||||
) ?>
|
|
||||||
<?= $this->endSection() ?>
|
<?= $this->endSection() ?>
|
||||||
|
|
||||||
|
|
||||||
@ -43,34 +41,12 @@
|
|||||||
) ?>">
|
) ?>">
|
||||||
<h2 class="inline-flex justify-between w-full font-bold leading-none group">
|
<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="mr-1 group-hover:underline"><?= $episode->title ?></span>
|
||||||
<?php if (
|
<?= episode_numbering(
|
||||||
$episode->season_number &&
|
$episode->number,
|
||||||
$episode->number
|
$episode->season_number,
|
||||||
): ?>
|
'text-xs font-bold text-gray-600',
|
||||||
<abbr class="text-xs font-bold text-gray-600" title="<?= lang(
|
true
|
||||||
'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; ?>
|
|
||||||
</h2>
|
</h2>
|
||||||
</a>
|
</a>
|
||||||
<div class="relative" data-toggle="dropdown">
|
<div class="relative" data-toggle="dropdown">
|
||||||
|
@ -27,37 +27,12 @@
|
|||||||
><?= $episode->title ?>
|
><?= $episode->title ?>
|
||||||
</a>
|
</a>
|
||||||
<div class="text-xs">
|
<div class="text-xs">
|
||||||
<?php if (
|
<?= episode_numbering(
|
||||||
$episode->season_number &&
|
$episode->number,
|
||||||
$episode->number
|
$episode->season_number,
|
||||||
): ?>
|
'font-bold text-gray-600',
|
||||||
<abbr class="font-bold text-gray-600" title="<?= lang(
|
true
|
||||||
'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; ?>
|
|
||||||
<span class="mx-1">•</span>
|
<span class="mx-1">•</span>
|
||||||
<time
|
<time
|
||||||
pubdate
|
pubdate
|
||||||
|
@ -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" />
|
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">
|
<div class="flex flex-col w-full max-w-sm">
|
||||||
<h1 class="text-lg font-semibold md:text-2xl"><?= $episode->title ?></h1>
|
<h1 class="text-lg font-semibold md:text-2xl"><?= $episode->title ?></h1>
|
||||||
<?php if ($episode->number): ?>
|
<?= episode_numbering(
|
||||||
<p class="text-gray-600">
|
$episode->number,
|
||||||
<?php if ($episode->season_number): ?>
|
$episode->season_number,
|
||||||
<a class="mr-1 underline hover:no-underline" href="<?= route_to(
|
'text-gray-600'
|
||||||
'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; ?>
|
|
||||||
<div class="text-sm">
|
<div class="text-sm">
|
||||||
<time
|
<time
|
||||||
pubdate
|
pubdate
|
||||||
|
@ -117,7 +117,12 @@
|
|||||||
<a class="text-sm hover:underline" href="<?= $episode->link ?>">
|
<a class="text-sm hover:underline" href="<?= $episode->link ?>">
|
||||||
<h2 class="inline-flex justify-between w-full font-bold leading-none group">
|
<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="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>
|
</h2>
|
||||||
</a>
|
</a>
|
||||||
<div class="mb-2 text-xs">
|
<div class="mb-2 text-xs">
|
||||||
|
Loading…
Reference in New Issue
Block a user