From 3b3c218b9c868e9f12c54d7670e69d84c9ee79c0 Mon Sep 17 00:00:00 2001
From: Yassine Doghri <yassine@doghri.fr>
Date: Thu, 8 Apr 2021 10:45:58 +0000
Subject: [PATCH] fix(episode-form): show warning to set `memory_limit`,
 `upload_max_filesize` & `post_max_size`

remove undefined "my-podcasts" route

closes #5, #86
---
 app/Config/Routes.php              |  4 --
 app/Controllers/Admin/Episode.php  |  8 ++--
 app/Language/en/Episode.php        |  2 +
 app/Language/fr/Episode.php        |  2 +
 app/Views/admin/episode/create.php | 63 ++++++++++++++------------
 app/Views/admin/episode/edit.php   | 72 ++++++++++++++++--------------
 app/Views/admin/podcast/import.php |  9 ++--
 7 files changed, 85 insertions(+), 75 deletions(-)

diff --git a/app/Config/Routes.php b/app/Config/Routes.php
index 2d986c4026..4c1fb43023 100644
--- a/app/Config/Routes.php
+++ b/app/Config/Routes.php
@@ -90,10 +90,6 @@ $routes->group(
             'as' => 'admin',
         ]);
 
-        $routes->get('my-podcasts', 'Podcast::myPodcasts', [
-            'as' => 'my-podcasts',
-        ]);
-
         $routes->group('persons', function ($routes) {
             $routes->get('/', 'Person', [
                 'as' => 'person-list',
diff --git a/app/Controllers/Admin/Episode.php b/app/Controllers/Admin/Episode.php
index a2742d48f5..01c8412f80 100644
--- a/app/Controllers/Admin/Episode.php
+++ b/app/Controllers/Admin/Episode.php
@@ -111,8 +111,8 @@ class Episode extends BaseController
             'enclosure' => 'uploaded[enclosure]|ext_in[enclosure,mp3,m4a]',
             'image' =>
                 'is_image[image]|ext_in[image,jpg,png]|min_dims[image,1400,1400]|is_image_squared[image]',
-            'transcript' => 'ext_in[transcript,txt,html,srt,json]',
-            'chapters' => 'ext_in[chapters,json]',
+            'transcript' => 'ext_in[transcript,txt,html,srt,json]|permit_empty',
+            'chapters' => 'ext_in[chapters,json]|permit_empty',
         ];
 
         if (!$this->validate($rules)) {
@@ -205,8 +205,8 @@ class Episode extends BaseController
                 'uploaded[enclosure]|ext_in[enclosure,mp3,m4a]|permit_empty',
             'image' =>
                 'is_image[image]|ext_in[image,jpg,png]|min_dims[image,1400,1400]|is_image_squared[image]',
-            'transcript' => 'ext_in[transcript,txt,html,srt,json]',
-            'chapters' => 'ext_in[chapters,json]',
+            'transcript' => 'ext_in[transcript,txt,html,srt,json]|permit_empty',
+            'chapters' => 'ext_in[chapters,json]|permit_empty',
         ];
 
         if (!$this->validate($rules)) {
diff --git a/app/Language/en/Episode.php b/app/Language/en/Episode.php
index 457df6fe7b..83210875ed 100644
--- a/app/Language/en/Episode.php
+++ b/app/Language/en/Episode.php
@@ -43,6 +43,8 @@ return [
         'not_published' => 'Not published',
     ],
     'form' => [
+        'warning' =>
+            'In case of fatal error, try increasing the `memory_limit`, `upload_max_filesize` and `post_max_size` values in your php configuration file then restart your web server.<br />These values must be higher than the audio file you wish to upload.',
         'enclosure' => 'Audio file',
         'enclosure_hint' => 'Choose an .mp3 or .m4a audio file.',
         'info_section_title' => 'Episode info',
diff --git a/app/Language/fr/Episode.php b/app/Language/fr/Episode.php
index f9d3868496..a2989f6797 100644
--- a/app/Language/fr/Episode.php
+++ b/app/Language/fr/Episode.php
@@ -43,6 +43,8 @@ return [
         'not_published' => 'Non publié',
     ],
     'form' => [
+        'warning' =>
+            'En cas d’erreur fatale, essayez d’augmenter les valeurs de `memory_limit`, `upload_max_filesize` et `post_max_size` dans votre fichier de configuration php puis redémarrez votre serveur web.<br />Les valeurs doivent être plus grandes que le fichier audio que vous souhaitez téléverser.',
         'enclosure' => 'Fichier audio',
         'enclosure_hint' => 'Sélectionnez un fichier audio .mp3 ou .m4a.',
         'info_section_title' => 'Informations épisode',
diff --git a/app/Views/admin/episode/create.php b/app/Views/admin/episode/create.php
index 37de291c8d..4d6061c924 100644
--- a/app/Views/admin/episode/create.php
+++ b/app/Views/admin/episode/create.php
@@ -18,16 +18,21 @@
 <?= csrf_field() ?>
 <?= form_hidden('client_timezone', 'UTC') ?>
 
+<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'),
-    lang('Episode.form.info_section_subtitle')
+    lang('Episode.form.info_section_subtitle'),
 ) ?>
 
 <?= form_label(
     lang('Episode.form.enclosure'),
     'enclosure',
     [],
-    lang('Episode.form.enclosure_hint')
+    lang('Episode.form.enclosure_hint'),
 ) ?>
 <?= form_input([
     'id' => 'enclosure',
@@ -43,7 +48,7 @@
     'image',
     [],
     lang('Episode.form.image_hint'),
-    true
+    true,
 ) ?>
 <?= form_input([
     'id' => 'image',
@@ -53,14 +58,14 @@
     'accept' => '.jpg,.jpeg,.png',
 ]) ?>
 <small class="mb-4 text-gray-600"><?= lang(
-    'Common.forms.image_size_hint'
+    'Common.forms.image_size_hint',
 ) ?></small>
 
 <?= form_label(
     lang('Episode.form.title'),
     'title',
     [],
-    lang('Episode.form.title_hint')
+    lang('Episode.form.title_hint'),
 ) ?>
 <?= form_input([
     'id' => 'title',
@@ -75,7 +80,7 @@
     lang('Episode.form.slug'),
     'slug',
     [],
-    lang('Episode.form.slug_hint')
+    lang('Episode.form.slug_hint'),
 ) ?>
 <?= form_input([
     'id' => 'slug',
@@ -118,7 +123,7 @@
     <?= form_radio(
         ['id' => 'full', 'name' => 'type', 'class' => 'form-radio-btn'],
         'full',
-        old('type') ? old('type') == 'full' : true
+        old('type') ? old('type') == 'full' : true,
     ) ?>
     <label for="full" class="inline-flex items-center">
         <?= lang('Episode.form.type.full') ?>
@@ -126,7 +131,7 @@
     <?= form_radio(
         ['id' => 'trailer', 'name' => 'type', 'class' => 'form-radio-btn'],
         'trailer',
-        old('type') ? old('type') == 'trailer' : false
+        old('type') ? old('type') == 'trailer' : false,
     ) ?>
     <label for="trailer" class="inline-flex items-center">
         <?= lang('Episode.form.type.trailer') ?>
@@ -134,7 +139,7 @@
     <?= form_radio(
         ['id' => 'bonus', 'name' => 'type', 'class' => 'form-radio-btn'],
         'bonus',
-        old('type') ? old('type') == 'bonus' : false
+        old('type') ? old('type') == 'bonus' : false,
     ) ?>
     <label for="bonus" class="inline-flex items-center">
         <?= lang('Episode.form.type.bonus') ?>
@@ -155,10 +160,10 @@
         'undefined',
         old('parental_advisory')
             ? old('parental_advisory') === 'undefined'
-            : true
+            : true,
     ) ?>
     <label for="undefined"><?= lang(
-        'Episode.form.parental_advisory.undefined'
+        'Episode.form.parental_advisory.undefined',
     ) ?></label>
     <?= form_radio(
         [
@@ -167,10 +172,10 @@
             'class' => 'form-radio-btn',
         ],
         'clean',
-        old('parental_advisory') ? old('parental_advisory') === 'clean' : false
+        old('parental_advisory') ? old('parental_advisory') === 'clean' : false,
     ) ?>
     <label for="clean"><?= lang(
-        'Episode.form.parental_advisory.clean'
+        'Episode.form.parental_advisory.clean',
     ) ?></label>
     <?= form_radio(
         [
@@ -181,10 +186,10 @@
         'explicit',
         old('parental_advisory')
             ? old('parental_advisory') === 'explicit'
-            : false
+            : false,
     ) ?>
     <label for="explicit"><?= lang(
-        'Episode.form.parental_advisory.explicit'
+        'Episode.form.parental_advisory.explicit',
     ) ?></label>
 <?= form_fieldset_close() ?>
 
@@ -193,7 +198,7 @@
 
 <?= form_section(
     lang('Episode.form.show_notes_section_title'),
-    lang('Episode.form.show_notes_section_subtitle')
+    lang('Episode.form.show_notes_section_subtitle'),
 ) ?>
 
 <div class="mb-4">
@@ -206,7 +211,7 @@
             'required' => 'required',
         ],
         old('description', '', false),
-        'data-editor="markdown"'
+        'data-editor="markdown"',
     ) ?>
 </div>
 
@@ -215,7 +220,7 @@
         lang('Episode.form.description_footer'),
         'description_footer',
         [],
-        lang('Episode.form.description_footer_hint')
+        lang('Episode.form.description_footer_hint'),
     ) ?>
     <?= form_textarea(
         [
@@ -226,9 +231,9 @@
         old(
             'description_footer',
             $podcast->episode_description_footer_markdown ?? '',
-            false
+            false,
         ),
-        'data-editor="markdown"'
+        'data-editor="markdown"',
     ) ?>
 </div>
 
@@ -236,7 +241,7 @@
 
 <?= form_section(
     lang('Episode.form.location_section_title'),
-    lang('Episode.form.location_section_subtitle')
+    lang('Episode.form.location_section_subtitle'),
 ) ?>
 
 <?= form_label(
@@ -244,7 +249,7 @@
     'location_name',
     [],
     lang('Episode.form.location_name_hint'),
-    true
+    true,
 ) ?>
 <?= form_input([
     'id' => 'location_name',
@@ -256,14 +261,14 @@
 
 <?= form_section(
     lang('Episode.form.additional_files_section_title'),
-    lang('Episode.form.additional_files_section_subtitle')
+    lang('Episode.form.additional_files_section_subtitle'),
 ) ?>
 <?= form_label(
     lang('Episode.form.transcript'),
     'transcript',
     [],
     lang('Episode.form.transcript_hint'),
-    true
+    true,
 ) ?>
 <?= form_input([
     'id' => 'transcript',
@@ -277,7 +282,7 @@
     'chapters',
     [],
     lang('Episode.form.chapters_hint'),
-    true
+    true,
 ) ?>
 <?= form_input([
     'id' => 'chapters',
@@ -290,14 +295,14 @@
 
 <?= form_section(
     lang('Episode.form.advanced_section_title'),
-    lang('Episode.form.advanced_section_subtitle')
+    lang('Episode.form.advanced_section_subtitle'),
 ) ?>
 <?= form_label(
     lang('Episode.form.custom_rss'),
     'custom_rss',
     [],
     lang('Episode.form.custom_rss_hint'),
-    true
+    true,
 ) ?>
 <?= form_textarea([
     'id' => 'custom_rss',
@@ -312,14 +317,14 @@
         hint_tooltip(lang('Episode.form.block_hint'), 'ml-1'),
     ['id' => 'block', 'name' => 'block'],
     'yes',
-    old('block', false)
+    old('block', false),
 ) ?>
 
 <?= button(
     lang('Episode.form.submit_create'),
     null,
     ['variant' => 'primary'],
-    ['type' => 'submit', 'class' => 'self-end']
+    ['type' => 'submit', 'class' => 'self-end'],
 ) ?>
 
 <?= form_close() ?>
diff --git a/app/Views/admin/episode/edit.php b/app/Views/admin/episode/edit.php
index 59d6678e46..7a75b95107 100644
--- a/app/Views/admin/episode/edit.php
+++ b/app/Views/admin/episode/edit.php
@@ -17,16 +17,21 @@
 ]) ?>
 <?= 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'),
-    lang('Episode.form.info_section_subtitle')
+    lang('Episode.form.info_section_subtitle'),
 ) ?>
 
 <?= form_label(
     lang('Episode.form.enclosure'),
     'enclosure',
     [],
-    lang('Episode.form.enclosure_hint')
+    lang('Episode.form.enclosure_hint'),
 ) ?>
 <?= form_input([
     'id' => 'enclosure',
@@ -41,7 +46,7 @@
     'image',
     [],
     lang('Episode.form.image_hint'),
-    true
+    true,
 ) ?>
 <img
     src="<?= $episode->image->thumbnail_url ?>"
@@ -51,19 +56,20 @@
 <?= 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'
+    'Common.forms.image_size_hint',
 ) ?></small>
 
 <?= form_label(
     lang('Episode.form.title'),
     'title',
     [],
-    lang('Episode.form.title_hint')
+    lang('Episode.form.title_hint'),
 ) ?>
 <?= form_input([
     'id' => 'title',
@@ -78,7 +84,7 @@
     lang('Episode.form.slug'),
     'slug',
     [],
-    lang('Episode.form.slug_hint')
+    lang('Episode.form.slug_hint'),
 ) ?>
 <?= form_input([
     'id' => 'slug',
@@ -120,7 +126,7 @@
     <?= form_radio(
         ['id' => 'full', 'name' => 'type', 'class' => 'form-radio-btn'],
         'full',
-        old('type') ? old('type') === 'full' : $episode->type === 'full'
+        old('type') ? old('type') === 'full' : $episode->type === 'full',
     ) ?>
     <label for="full" class="inline-flex items-center">
         <?= lang('Episode.form.type.full') ?>
@@ -128,7 +134,7 @@
     <?= form_radio(
         ['id' => 'trailer', 'name' => 'type', 'class' => 'form-radio-btn'],
         'trailer',
-        old('type') ? old('type') === 'trailer' : $episode->type === 'trailer'
+        old('type') ? old('type') === 'trailer' : $episode->type === 'trailer',
     ) ?>
     <label for="trailer" class="inline-flex items-center">
         <?= lang('Episode.form.type.trailer') ?>
@@ -136,7 +142,7 @@
     <?= form_radio(
         ['id' => 'bonus', 'name' => 'type', 'class' => 'form-radio-btn'],
         'bonus',
-        old('type') ? old('type') === 'bonus' : $episode->type === 'bonus'
+        old('type') ? old('type') === 'bonus' : $episode->type === 'bonus',
     ) ?>
     <label for="bonus" class="inline-flex items-center">
         <?= lang('Episode.form.type.bonus') ?>
@@ -157,10 +163,10 @@
         'undefined',
         old('parental_advisory')
             ? old('parental_advisory') === 'undefined'
-            : $episode->parental_advisory === null
+            : $episode->parental_advisory === null,
     ) ?>
     <label for="undefined"><?= lang(
-        'Episode.form.parental_advisory.undefined'
+        'Episode.form.parental_advisory.undefined',
     ) ?></label>
     <?= form_radio(
         [
@@ -171,10 +177,10 @@
         'clean',
         old('parental_advisory')
             ? old('parental_advisory') === 'clean'
-            : $episode->parental_advisory === 'clean'
+            : $episode->parental_advisory === 'clean',
     ) ?>
     <label for="clean"><?= lang(
-        'Episode.form.parental_advisory.clean'
+        'Episode.form.parental_advisory.clean',
     ) ?></label>
     <?= form_radio(
         [
@@ -185,10 +191,10 @@
         'explicit',
         old('parental_advisory')
             ? old('parental_advisory') === 'explicit'
-            : $episode->parental_advisory === 'explicit'
+            : $episode->parental_advisory === 'explicit',
     ) ?>
     <label for="explicit"><?= lang(
-        'Episode.form.parental_advisory.explicit'
+        'Episode.form.parental_advisory.explicit',
     ) ?></label>
 <?= form_fieldset_close() ?>
 
@@ -197,7 +203,7 @@
 
 <?= form_section(
     lang('Episode.form.show_notes_section_title'),
-    lang('Episode.form.show_notes_section_subtitle')
+    lang('Episode.form.show_notes_section_subtitle'),
 ) ?>
 
 <div class="mb-4">
@@ -210,7 +216,7 @@
             'required' => 'required',
         ],
         old('description', $episode->description_markdown, false),
-        'data-editor="markdown"'
+        'data-editor="markdown"',
     ) ?>
 </div>
 
@@ -219,7 +225,7 @@
         lang('Episode.form.description_footer'),
         'description_footer',
         [],
-        lang('Episode.form.description_footer_hint')
+        lang('Episode.form.description_footer_hint'),
     ) ?>
     <?= form_textarea(
         [
@@ -230,9 +236,9 @@
         old(
             'description_footer',
             $podcast->episode_description_footer_markdown ?? '',
-            false
+            false,
         ),
-        'data-editor="markdown"'
+        'data-editor="markdown"',
     ) ?>
 </div>
 
@@ -240,7 +246,7 @@
 
 <?= form_section(
     lang('Episode.form.location_section_title'),
-    lang('Episode.form.location_section_subtitle')
+    lang('Episode.form.location_section_subtitle'),
 ) ?>
 
 <?= form_label(
@@ -248,7 +254,7 @@
     'location_name',
     [],
     lang('Episode.form.location_name_hint'),
-    true
+    true,
 ) ?>
 <?= form_input([
     'id' => 'location_name',
@@ -264,7 +270,7 @@
     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>”',
-    ])
+    ]),
 ) ?>
 <div class="flex flex-col flex-1">
 <?= form_label(
@@ -272,7 +278,7 @@
     'transcript',
     [],
     lang('Episode.form.transcript_hint'),
-    true
+    true,
 ) ?>
 <?php if ($episode->transcript): ?>
     <div class="flex justify-between">
@@ -283,7 +289,7 @@
                 'class' => 'inline-flex items-center text-xs',
                 'target' => '_blank',
                 'rel' => 'noreferrer noopener',
-            ]
+            ],
         ) .
             anchor(
                 route_to('transcript-delete', $podcast->id, $episode->id),
@@ -294,7 +300,7 @@
                     'data-toggle' => 'tooltip',
                     'data-placement' => 'bottom',
                     'title' => lang('Episode.form.transcript_delete'),
-                ]
+                ],
             ) ?>
     </div>
 <?php endif; ?>
@@ -312,7 +318,7 @@
     'chapters',
     [],
     lang('Episode.form.chapters_hint'),
-    true
+    true,
 ) ?>
 <?php if ($episode->chapters): ?>
     <div class="flex justify-between">
@@ -323,7 +329,7 @@
                 'class' => 'inline-flex items-center text-xs',
                 'target' => '_blank',
                 'rel' => 'noreferrer noopener',
-            ]
+            ],
         ) .
             anchor(
                 route_to('chapters-delete', $podcast->id, $episode->id),
@@ -334,7 +340,7 @@
                     'data-toggle' => 'tooltip',
                     'data-placement' => 'bottom',
                     'title' => lang('Episode.form.chapters_delete'),
-                ]
+                ],
             ) ?>
     </div>
 <?php endif; ?>
@@ -350,14 +356,14 @@
 
 <?= form_section(
     lang('Episode.form.advanced_section_title'),
-    lang('Episode.form.advanced_section_subtitle')
+    lang('Episode.form.advanced_section_subtitle'),
 ) ?>
 <?= form_label(
     lang('Episode.form.custom_rss'),
     'custom_rss',
     [],
     lang('Episode.form.custom_rss_hint'),
-    true
+    true,
 ) ?>
 <?= form_textarea([
     'id' => 'custom_rss',
@@ -372,14 +378,14 @@
         hint_tooltip(lang('Episode.form.block_hint'), 'ml-1'),
     ['id' => 'block', 'name' => 'block'],
     'yes',
-    old('block', $episode->is_blocked)
+    old('block', $episode->is_blocked),
 ) ?>
 
 <?= button(
     lang('Episode.form.submit_edit'),
     null,
     ['variant' => 'primary'],
-    ['type' => 'submit', 'class' => 'self-end']
+    ['type' => 'submit', 'class' => 'self-end'],
 ) ?>
 
 <?= form_close() ?>
diff --git a/app/Views/admin/podcast/import.php b/app/Views/admin/podcast/import.php
index 7bffc4a6cb..c7a30c887f 100644
--- a/app/Views/admin/podcast/import.php
+++ b/app/Views/admin/podcast/import.php
@@ -16,6 +16,10 @@
 ]) ?>
 <?= csrf_field() ?>
 
+<div class="inline-flex w-full p-2 mb-6 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('PodcastImport.warning') ?>
+</div>
 
 <?= form_section(
     lang('PodcastImport.old_podcast_section_title'),
@@ -215,11 +219,6 @@
 
 <?= form_section_close() ?>
 
-<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('PodcastImport.warning') ?>
-</div>
-
 <?= button(
     lang('PodcastImport.submit'),
     null,
-- 
GitLab