<?= $this->extend('Modules\Admin\Views\_layout') ?> <?= $this->section('title') ?> <?= lang('Episode.edit') ?> <?= $this->endSection() ?> <?= $this->section('pageTitle') ?> <?= lang('Episode.edit') ?> <?= $this->endSection() ?> <?= $this->section('content') ?> <?= form_open_multipart(route_to('episode-edit', $podcast->id, $episode->id), [ 'method' => 'post', 'class' => 'flex flex-col', ]) ?> <?= csrf_field() ?> <div class="inline-flex w-full p-2 mb-4 text-sm font-semibold text-yellow-800 bg-red-100 border border-red-300 rounded" role="alert"> <?= icon('alert', 'mr-2 text-lg flex-shrink-0') . lang('Episode.form.warning') ?> </div> <?= form_section( lang('Episode.form.info_section_title'), '<img src="' . $episode->image->medium_url . '" alt="' . $episode->title . '" class="w-48" />', ) ?> <?= component( 'Forms/Label', ['text' => lang('Episode.form.audio_file'), 'hint' => lang('Episode.form.audio_file_hint'),], ['for' => 'audio_file'], ) ?> <?= form_input([ 'id' => 'audio_file', 'name' => 'audio_file', 'class' => 'form-input mb-4', 'type' => 'file', 'accept' => '.mp3,.m4a', ]) ?> <?= component( 'Forms/Label', ['text' => lang('Episode.form.image'), 'hint' => lang('Episode.form.image_hint'), 'isOptional' => true,], ['for' => 'image',] ) ?> <?= form_input([ 'id' => 'image', 'name' => 'image', 'class' => 'form-input', 'type' => 'file', 'accept' => '.jpg,.jpeg,.png', ]) ?> <small class="mb-4 text-gray-600"><?= lang( 'Common.forms.image_size_hint', ) ?></small> <?= component( 'Forms/Label', ['text' => lang('Episode.form.title'), 'hint' => lang('Episode.form.title_hint'),], ['for' => 'title',] ) ?> <?= form_input([ 'id' => 'title', 'name' => 'title', 'class' => 'form-input mb-4', 'value' => old('title', $episode->title), 'required' => 'required', 'data-slugify' => 'title', ]) ?> <?= component( 'Forms/Label', [ 'text' => lang('Episode.form.permalink') ], ['for' => 'slug',] ) ?> <permalink-edit class="inline-flex items-center mb-4 text-xs" edit-label="<?= lang('Common.edit') ?>" copy-label="<?= lang('Common.copy') ?>" copied-label="<?= lang('Common.copied') ?>"> <span slot="domain"><?= base_url('/@' . $podcast->handle . '/episodes') . '/' ?></span> <?= form_input([ 'id' => 'slug', 'name' => 'slug', 'class' => 'form-input flex-1 w-0 text-xs', 'value' => old('slug', $episode->slug), 'required' => 'required', 'data-slugify' => 'slug', 'slot' => 'slug-input' ]) ?> </permalink-edit> <div class="flex flex-col mb-4 gap-x-2 gap-y-4 md:flex-row"> <div class="flex flex-col flex-1"> <?= component('Forms/Label', ['text' => lang('Episode.form.season_number')], ['for' => 'season_number']) ?> <?= form_input([ 'id' => 'season_number', 'name' => 'season_number', 'class' => 'form-input w-full', 'value' => old('season_number', $episode->season_number), 'type' => 'number', ]) ?> </div> <div class="flex flex-col flex-1"> <?= component('Forms/Label', ['text' => lang('Episode.form.episode_number')], ['for' => 'episode_number']) ?> <?= form_input([ 'id' => 'episode_number', 'name' => 'episode_number', 'class' => 'form-input w-full', 'value' => old('episode_number', $episode->number), 'type' => 'number', ]) ?> </div> </div> <?= form_fieldset('', ['class' => 'flex mb-4 gap-1']) ?> <legend> <?= lang('Episode.form.type.label') . hint_tooltip(lang('Episode.form.type.hint'), 'ml-1') ?> </legend> <?= form_radio( ['id' => 'full', 'name' => 'type', 'class' => 'form-radio-btn'], 'full', old('type') ? old('type') === 'full' : $episode->type === 'full', ) ?> <label for="full" class="inline-flex items-center"> <?= lang('Episode.form.type.full') ?> </label> <?= form_radio( ['id' => 'trailer', 'name' => 'type', 'class' => 'form-radio-btn'], 'trailer', old('type') ? old('type') === 'trailer' : $episode->type === 'trailer', ) ?> <label for="trailer" class="inline-flex items-center"> <?= lang('Episode.form.type.trailer') ?> </label> <?= form_radio( ['id' => 'bonus', 'name' => 'type', 'class' => 'form-radio-btn'], 'bonus', old('type') ? old('type') === 'bonus' : $episode->type === 'bonus', ) ?> <label for="bonus" class="inline-flex items-center"> <?= lang('Episode.form.type.bonus') ?> </label> <?= form_fieldset_close() ?> <?= form_fieldset('', ['class' => 'mb-6']) ?> <legend> <?= lang('Episode.form.parental_advisory.label') . hint_tooltip(lang('Episode.form.parental_advisory.hint'), 'ml-1') ?> </legend> <?= form_radio( [ 'id' => 'undefined', 'name' => 'parental_advisory', 'class' => 'form-radio-btn', ], 'undefined', old('parental_advisory') ? old('parental_advisory') === 'undefined' : $episode->parental_advisory === null, ) ?> <label for="undefined"><?= lang( 'Episode.form.parental_advisory.undefined', ) ?></label> <?= form_radio( [ 'id' => 'clean', 'name' => 'parental_advisory', 'class' => 'form-radio-btn', ], 'clean', old('parental_advisory') ? old('parental_advisory') === 'clean' : $episode->parental_advisory === 'clean', ) ?> <label for="clean"><?= lang( 'Episode.form.parental_advisory.clean', ) ?></label> <?= form_radio( [ 'id' => 'explicit', 'name' => 'parental_advisory', 'class' => 'form-radio-btn', ], 'explicit', old('parental_advisory') ? old('parental_advisory') === 'explicit' : $episode->parental_advisory === 'explicit', ) ?> <label for="explicit"><?= lang( 'Episode.form.parental_advisory.explicit', ) ?></label> <?= form_fieldset_close() ?> <?= form_section_close() ?> <?= form_section( lang('Episode.form.show_notes_section_title'), lang('Episode.form.show_notes_section_subtitle'), ) ?> <div class="mb-4"> <?= component('Forms/Label', ['text' => lang('Episode.form.description')], ['for' => 'description']) ?> <?= component( 'Forms/MarkdownEditor', [ 'content' => old('description', $episode->description_markdown, false), ], [ 'id' => 'description', 'name' => 'description', 'required' => 'required', ], ) ?> </div> <div class="mb-4"> <?= component('Forms/Label', [ 'text' => lang('Episode.form.description_footer'), 'hint' => lang('Episode.form.description_footer_hint'), 'isOptional' => true ], ['for' => 'description_footer'], ) ?> <?= component( 'Forms/MarkdownEditor', [ 'content' => old( 'description_footer', $podcast->episode_description_footer_markdown ?? '', false, ), ], [ 'id' => 'description_footer', 'name' => 'description_footer', 'rows' => 6 ], ) ?> </div> <?= form_section_close() ?> <?= form_section( lang('Episode.form.location_section_title'), lang('Episode.form.location_section_subtitle'), ) ?> <?= component('Forms/Label', [ 'text' => lang('Episode.form.location_name'), 'hint' => lang('Episode.form.location_name_hint'), 'isOptional' => true ], ['for' => 'location_name'] ) ?> <?= form_input([ 'id' => 'location_name', 'name' => 'location_name', 'class' => 'form-input mb-4', 'value' => old('location_name', $episode->location_name), ]) ?> <?= form_section_close() ?> <?= form_section( lang('Episode.form.additional_files_section_title'), lang('Episode.form.additional_files_section_subtitle', [ 'podcastNamespaceLink' => '“<a href="https://github.com/Podcastindex-org/podcast-namespace" target="_blank" rel="noreferrer noopener" style="text-decoration: underline;">podcast namespace</a>”', ]), ) ?> <?= form_fieldset('', ['class' => 'flex flex-col mb-4']) ?> <legend><?= lang('Episode.form.transcript') . '<small class="ml-1 lowercase">(' . lang('Common.optional') . ')</small>' . hint_tooltip(lang('Episode.form.transcript_hint'), 'ml-1') ?></legend> <div class="mb-4 form-input-tabs"> <input type="radio" name="transcript-choice" id="transcript-file-upload-choice" aria-controls="transcript-file-upload-choice" value="upload-file" <?= $episode->transcript_file_remote_url ? '' : 'checked' ?> /> <label for="transcript-file-upload-choice"><?= lang( 'Common.forms.upload_file', ) ?></label> <input type="radio" name="transcript-choice" id="transcript-file-remote-url-choice" aria-controls="transcript-file-remote-url-choice" value="remote-url" <?= $episode->transcript_file_remote_url ? 'checked' : '' ?> /> <label for="transcript-file-remote-url-choice"><?= lang( 'Common.forms.remote_url', ) ?></label> <div class="py-2 tab-panels"> <section id="transcript-file-upload" class="flex items-center tab-panel"> <?php if ($episode->transcript_file) : ?> <div class="flex justify-between"> <?= anchor( $episode->transcript_file_url, icon('file', 'mr-2 text-gray-500') . $episode->transcript_file, [ 'class' => 'inline-flex items-center text-xs', 'target' => '_blank', 'rel' => 'noreferrer noopener', ], ) . anchor( route_to( 'transcript-delete', $podcast->id, $episode->id, ), icon('delete-bin', 'mx-auto'), [ 'class' => 'p-1 bg-red-200 rounded-full text-red-700 hover:text-red-900', 'data-toggle' => 'tooltip', 'data-placement' => 'bottom', 'title' => lang( 'Episode.form.transcript_file_delete', ), ], ) ?> </div> <?php endif; ?> <?= component( 'Forms/Label', [ 'text' => lang('Episode.form.transcript_file'), 'isOptional' => true ], ['for' => 'transcript_file', 'class' => 'sr-only'], ) ?> <?= form_input([ 'id' => 'transcript_file', 'name' => 'transcript_file', 'class' => 'form-input', 'type' => 'file', 'accept' => '.txt,.html,.srt,.json', ]) ?> </section> <section id="transcript-file-remote-url" class="tab-panel"> <?= component( 'Forms/Label', [ 'text' => lang('Episode.form.transcript_file_remote_url'), 'isOptional' => true ], ['for' => 'transcript_file_remote_url', 'class' => 'sr-only'], ) ?> <?= form_input([ 'id' => 'transcript_file_remote_url', 'name' => 'transcript_file_remote_url', 'class' => 'form-input w-full', 'type' => 'url', 'placeholder' => 'https://...', 'value' => old( 'transcript_file_remote_url', $episode->transcript_file_remote_url, ), ]) ?> </section> </div> </div> <?= form_fieldset_close() ?> <?= form_fieldset('', ['class' => 'flex flex-col mb-4']) ?> <legend><?= lang('Episode.form.chapters') . '<small class="ml-1 lowercase">(' . lang('Common.optional') . ')</small>' . hint_tooltip(lang('Episode.form.chapters_hint'), 'ml-1') ?></legend> <div class="mb-4 form-input-tabs"> <input type="radio" name="chapters-choice" id="chapters-file-upload-choice" aria-controls="chapters-file-upload-choice" value="upload-file" <?= $episode->chapters_file_remote_url ? '' : 'checked' ?> /> <label for="chapters-file-upload-choice"><?= lang( 'Common.forms.upload_file', ) ?></label> <input type="radio" name="chapters-choice" id="chapters-file-remote-url-choice" aria-controls="chapters-file-remote-url-choice" value="remote-url" <?= $episode->chapters_file_remote_url ? 'checked' : '' ?> /> <label for="chapters-file-remote-url-choice"><?= lang( 'Common.forms.remote_url', ) ?></label> <div class="py-2 tab-panels"> <section id="chapters-file-upload" class="flex items-center tab-panel"> <?php if ($episode->chapters_file) : ?> <div class="flex justify-between"> <?= anchor( $episode->chapters_file_url, icon('file', 'mr-2') . $episode->chapters_file, [ 'class' => 'inline-flex items-center text-xs', 'target' => '_blank', 'rel' => 'noreferrer noopener', ], ) . anchor( route_to( 'chapters-delete', $podcast->id, $episode->id, ), icon('delete-bin', 'mx-auto'), [ 'class' => 'p-1 bg-red-200 rounded-full text-red-700 hover:text-red-900', 'data-toggle' => 'tooltip', 'data-placement' => 'bottom', 'title' => lang( 'Episode.form.chapters_file_delete', ), ], ) ?> </div> <?php endif; ?> <?= component( 'Forms/Label', [ 'text' => lang('Episode.form.chapters_file'), 'isOptional' => true ], ['for' => 'chapters_file', 'class' => 'sr-only'], ) ?> <?= form_input([ 'id' => 'chapters_file', 'name' => 'chapters_file', 'class' => 'form-input', 'type' => 'file', 'accept' => '.json', ]) ?> </section> <section id="chapters-file-remote-url" class="tab-panel"> <?= component( 'Forms/Label', [ 'text' => lang('Episode.form.chapters_file_remote_url'), 'isOptional' => true ], [ 'for' => 'chapters_file_remote_url', 'class' => 'sr-only' ], ) ?> <?= form_input([ 'id' => 'chapters_file_remote_url', 'name' => 'chapters_file_remote_url', 'class' => 'form-input w-full', 'type' => 'url', 'placeholder' => 'https://...', 'value' => old( 'chapters_file_remote_url', $episode->chapters_file_remote_url, ), ]) ?> </section> </div> </div> <?= form_fieldset_close() ?> <?= form_section_close() ?> <?= form_section( lang('Episode.form.advanced_section_title'), lang('Episode.form.advanced_section_subtitle'), ) ?> <?= component('Forms/Label', [ 'text' => lang('Episode.form.custom_rss'), 'hint' => lang('Episode.form.custom_rss_hint'), 'isOptional' => true, ], [ 'for' => 'custom_rss', ] ) ?> <?= component('Forms/XMLEditor', [ 'content' => old('custom_rss', $episode->custom_rss_string) ], [ 'id' => 'custom_rss', 'name' => 'custom_rss', ] ) ?> <?= form_section_close() ?> <?= component( 'Forms/Toggler', [ 'label' => lang('Episode.form.block'), 'hint' => lang('Episode.form.block_hint') ], [ 'id' => 'block', 'name' => 'block', 'value' => 'yes', 'checked' => old('block', $episode->is_blocked), ] ) ?> <?= button( lang('Episode.form.submit_edit'), '', ['variant' => 'primary'], ['type' => 'submit', 'class' => 'self-end'], ) ?> <?= form_close() ?> <?= $this->endSection() ?>