From b07ac093b2cae646f9a897bc9dfeeaef6eda6561 Mon Sep 17 00:00:00 2001 From: Yassine Doghri <yassine@doghri.fr> Date: Wed, 19 Oct 2022 14:46:54 +0000 Subject: [PATCH] fix: validate slug length when submitting episode form + clean permalink edit prefix --- app/Resources/js/modules/permalink-edit.ts | 7 ++++++- modules/Admin/Controllers/EpisodeController.php | 2 ++ themes/cp_admin/episode/create.php | 4 ++-- themes/cp_admin/episode/edit.php | 4 ++-- themes/cp_admin/page/create.php | 4 ++-- themes/cp_admin/page/edit.php | 4 ++-- 6 files changed, 16 insertions(+), 9 deletions(-) diff --git a/app/Resources/js/modules/permalink-edit.ts b/app/Resources/js/modules/permalink-edit.ts index fdda43cf35..2ea12f2d55 100644 --- a/app/Resources/js/modules/permalink-edit.ts +++ b/app/Resources/js/modules/permalink-edit.ts @@ -25,6 +25,9 @@ export class PermalinkEdit extends LitElement { @property({ attribute: "copy-label" }) copyLabel = "Copy"; + @property({ attribute: "permalink-base" }) + permalinkBase = ""; + @state() isEditable = false; @@ -68,6 +71,8 @@ export class PermalinkEdit extends LitElement { } firstUpdated(): void { + this.permalinkBase += this.permalinkBase.endsWith("/") ? "" : "/"; + // set permalink value this.setPermalink(); @@ -130,7 +135,7 @@ export class PermalinkEdit extends LitElement { } setPermalink(): void { - this.permalink = this._domain[0].innerHTML + this._slugInput[0].value; + this.permalink = this.permalinkBase + this._slugInput[0].value; } static styles = css` diff --git a/modules/Admin/Controllers/EpisodeController.php b/modules/Admin/Controllers/EpisodeController.php index 23a90cc693..903cab0d5a 100644 --- a/modules/Admin/Controllers/EpisodeController.php +++ b/modules/Admin/Controllers/EpisodeController.php @@ -135,6 +135,7 @@ class EpisodeController extends BaseController public function attemptCreate(): RedirectResponse { $rules = [ + 'slug' => 'max_length[128]', 'audio_file' => 'uploaded[audio_file]|ext_in[audio_file,mp3,m4a]', 'cover' => 'is_image[cover]|ext_in[cover,jpg,png]|min_dims[cover,1400,1400]|is_image_ratio[cover,1,1]', @@ -272,6 +273,7 @@ class EpisodeController extends BaseController public function attemptEdit(): RedirectResponse { $rules = [ + 'slug' => 'max_length[128]', 'audio_file' => 'uploaded[audio_file]|ext_in[audio_file,mp3,m4a]|permit_empty', 'cover' => diff --git a/themes/cp_admin/episode/create.php b/themes/cp_admin/episode/create.php index 4953d28b38..64e3f99500 100644 --- a/themes/cp_admin/episode/create.php +++ b/themes/cp_admin/episode/create.php @@ -45,8 +45,8 @@ <div> <Forms.Label for="slug"><?= lang('Episode.form.permalink') ?></Forms.Label> - <permalink-edit class="inline-flex items-center text-xs" edit-label="<?= lang('Common.edit') ?>" copy-label="<?= lang('Common.copy') ?>" copied-label="<?= lang('Common.copied') ?>"> - <span slot="domain"><?= base_url('/@' . esc($podcast->handle) . '/episodes') . '/' ?></span> + <permalink-edit class="inline-flex items-center w-full text-xs" edit-label="<?= lang('Common.edit') ?>" copy-label="<?= lang('Common.copy') ?>" copied-label="<?= lang('Common.copied') ?>" permalink-base="<?= url_to('podcast-episodes', $podcast->handle) ?>"> + <span slot="domain"><?= '…/' . esc($podcast->at_handle) . '/' ?></span> <Forms.Input name="slug" required="true" data-slugify="slug" slot="slug-input" class="flex-1 text-xs" /> </permalink-edit> </div> diff --git a/themes/cp_admin/episode/edit.php b/themes/cp_admin/episode/edit.php index ab7d6a449c..346ec7dab2 100644 --- a/themes/cp_admin/episode/edit.php +++ b/themes/cp_admin/episode/edit.php @@ -49,8 +49,8 @@ <div> <Forms.Label for="slug"><?= lang('Episode.form.permalink') ?></Forms.Label> - <permalink-edit class="inline-flex items-center text-xs" edit-label="<?= lang('Common.edit') ?>" copy-label="<?= lang('Common.copy') ?>" copied-label="<?= lang('Common.copied') ?>"> - <span slot="domain"><?= base_url('/@' . esc($podcast->handle) . '/episodes') . '/' ?></span> + <permalink-edit class="inline-flex items-center w-full text-xs" edit-label="<?= lang('Common.edit') ?>" copy-label="<?= lang('Common.copy') ?>" copied-label="<?= lang('Common.copied') ?>" permalink-base="<?= url_to('podcast-episodes', esc($podcast->handle)) ?>"> + <span slot="domain"><?= '…/' . esc($podcast->handle) . '/' ?></span> <Forms.Input name="slug" value="<?= esc($episode->slug) ?>" required="true" data-slugify="slug" slot="slug-input" class="flex-1 text-xs" /> </permalink-edit> </div> diff --git a/themes/cp_admin/page/create.php b/themes/cp_admin/page/create.php index 50c6351b73..125196c562 100644 --- a/themes/cp_admin/page/create.php +++ b/themes/cp_admin/page/create.php @@ -23,8 +23,8 @@ <div class="flex flex-col max-w-sm"> <Forms.Label for="slug"><?= lang('Page.form.permalink') ?></Forms.Label> - <permalink-edit class="inline-flex items-center text-xs" edit-label="<?= lang('Common.edit') ?>" copy-label="<?= lang('Common.copy') ?>" copied-label="<?= lang('Common.copied') ?>"> - <span slot="domain" class="flex-shrink-0"><?= base_url('pages') . '/' ?></span> + <permalink-edit class="inline-flex items-center w-full text-xs" edit-label="<?= lang('Common.edit') ?>" copy-label="<?= lang('Common.copy') ?>" copied-label="<?= lang('Common.copied') ?>" permalink-base="<?= base_url('pages') ?>"> + <span slot="domain" class="flex-shrink-0">…/pages/</span> <Forms.Input name="slug" required="true" data-slugify="slug" slot="slug-input" class="flex-1 text-xs" /> </permalink-edit> </div> diff --git a/themes/cp_admin/page/edit.php b/themes/cp_admin/page/edit.php index e1864e210e..8047a1d0f3 100644 --- a/themes/cp_admin/page/edit.php +++ b/themes/cp_admin/page/edit.php @@ -25,8 +25,8 @@ <div class="flex flex-col max-w-sm"> <Forms.Label for="slug"><?= lang('Page.form.permalink') ?></Forms.Label> - <permalink-edit class="inline-flex items-center text-xs" edit-label="<?= lang('Common.edit') ?>" copy-label="<?= lang('Common.copy') ?>" copied-label="<?= lang('Common.copied') ?>"> - <span slot="domain" class="flex-shrink-0"><?= base_url('pages') . '/' ?></span> + <permalink-edit class="inline-flex items-center text-xs" edit-label="<?= lang('Common.edit') ?>" copy-label="<?= lang('Common.copy') ?>" copied-label="<?= lang('Common.copied') ?>" permalink-base="<?= base_url('pages') ?>"> + <span slot="domain" class="flex-shrink-0">…/pages/<span> <Forms.Input name="slug" value="<?= esc($page->slug) ?>" required="true" data-slugify="slug" slot="slug-input" class="flex-1 text-xs" value="<?= esc($page->slug) ?>"/> </permalink-edit> </div> -- GitLab