Commit d882981b authored by Yassine Doghri's avatar Yassine Doghri
Browse files

fix(episodes): add publication status + set publication date to null when none has been set

- replace $is_published attribute by $publication_status to better handle episode's publication
state
- update publication date datepicker to include a clear button

fixes #70
parent 5dc0f196
Loading
Loading
Loading
Loading
Loading
+18 −10
Original line number Diff line number Diff line
@@ -117,6 +117,7 @@ class Episode extends BaseController
                ->with('errors', $this->validator->getErrors());
        }

        $publicationDate = $this->request->getPost('publication_date');
        $newEpisode = new \App\Entities\Episode([
            'podcast_id' => $this->podcast->id,
            'title' => $this->request->getPost('title'),
@@ -141,11 +142,13 @@ class Episode extends BaseController
            'is_blocked' => $this->request->getPost('block') == 'yes',
            'created_by' => user(),
            'updated_by' => user(),
            'published_at' => Time::createFromFormat(
            'published_at' => $publicationDate
                ? Time::createFromFormat(
                    'Y-m-d H:i',
                $this->request->getPost('publication_date'),
                    $publicationDate,
                    $this->request->getPost('client_timezone')
            )->setTimezone('UTC'),
                )->setTimezone('UTC')
                : null,
        ]);

        $episodeModel = new EpisodeModel();
@@ -231,11 +234,16 @@ class Episode extends BaseController
            : null;
        $this->episode->type = $this->request->getPost('type');
        $this->episode->is_blocked = $this->request->getPost('block') == 'yes';
        $this->episode->published_at = Time::createFromFormat(

        $publicationDate = $this->request->getPost('publication_date');
        $this->episode->published_at = $publicationDate
            ? Time::createFromFormat(
                'Y-m-d H:i',
            $this->request->getPost('publication_date'),
                $publicationDate,
                $this->request->getPost('client_timezone')
        )->setTimezone('UTC');
            )->setTimezone('UTC')
            : null;

        $this->episode->updated_by = user();

        $enclosure = $this->request->getFile('enclosure');
+13 −8
Original line number Diff line number Diff line
@@ -89,9 +89,9 @@ class Episode extends Entity
    protected $description;

    /**
     * @var boolean
     * @var string
     */
    protected $is_published;
    protected $publication_status;

    protected $dates = [
        'published_at',
@@ -462,16 +462,21 @@ class Episode extends Entity
        return $this;
    }

    public function getIsPublished()
    public function getPublicationStatus()
    {
        if ($this->is_published) {
            return $this->is_published;
        if ($this->publication_status) {
            return $this->publication_status;
        }

        helper('date');
        if (!$this->published_at) {
            return 'not_published';
        }

        $this->is_published = $this->published_at->isBefore(Time::now());
        helper('date');
        if ($this->published_at->isBefore(Time::now())) {
            return 'published';
        }

        return $this->is_published;
        return 'scheduled';
    }
}
+17 −14
Original line number Diff line number Diff line
@@ -271,27 +271,30 @@ if (!function_exists('publication_pill')) {
     */
    function publication_pill(
        $publicationDate,
        $isPublished,
        $publicationStatus,
        $customClass = ''
    ): string {
        $class = $isPublished
        $class =
            $publicationStatus === 'published'
                ? 'text-green-500 border-green-500'
                : 'text-orange-600 border-orange-600';

        $label = lang(
            $isPublished ? 'Episode.published' : 'Episode.scheduled',
            [
                '<time
                pubdate
                datetime="' .
        $transParam = [];
        if ($publicationDate) {
            $transParam = [
                '<time pubdate datetime="' .
                $publicationDate->format(DateTime::ATOM) .
                '"
                title="' .
                '" title="' .
                $publicationDate .
                '">' .
                lang('Common.mediumDate', [$publicationDate]) .
                '</time>',
            ]
            ];
        }

        $label = lang(
            'Episode.publication_status.' . $publicationStatus,
            $transParam
        );

        return '<span class="px-1 border ' .
+6 −2
Original line number Diff line number Diff line
@@ -23,8 +23,11 @@ return [
    'delete' => 'Delete',
    'go_to_page' => 'Go to page',
    'create' => 'Add an episode',
    'publication_status' => [
        'published' => 'Published on {0}',
        'scheduled' => 'Scheduled for {0}',
        'not_published' => 'Not published',
    ],
    'form' => [
        'enclosure' => 'Audio file',
        'enclosure_hint' => 'Choose an .mp3 or .m4a audio file.',
@@ -58,6 +61,7 @@ return [
        'publication_section_title' => 'Publication info',
        'publication_section_subtitle' => '',
        'publication_date' => 'Publication date',
        'publication_date_clear' => 'Clear publication date',
        'publication_date_hint' =>
            'You can schedule the episode release by setting a future publication date. This field must be formatted as YYYY-MM-DD HH:mm',
        'parental_advisory' => [
+6 −2
Original line number Diff line number Diff line
@@ -23,8 +23,11 @@ return [
    'delete' => 'Supprimer',
    'go_to_page' => 'Voir',
    'create' => 'Ajouter un épisode',
    'publication_status' => [
        'published' => 'Publié le {0}',
        'scheduled' => 'Planifié pour le {0}',
        'not_published' => 'Non publié',
    ],
    'form' => [
        'enclosure' => 'Fichier audio',
        'enclosure_hint' => 'Sélectionnez un fichier audio .mp3 ou .m4a.',
@@ -58,6 +61,7 @@ return [
        'publication_section_title' => 'Information de publication',
        'publication_section_subtitle' => '',
        'publication_date' => 'Date de publication',
        'publication_date_clear' => 'Effacer la date de publication',
        'publication_date_hint' =>
            'Vous pouvez planifier la sortie de l’épisode en saisissant une date de publication future. Ce champ doit être au format YYYY-MM-DD HH:mm',
        'parental_advisory' => [
Loading