From 67e61db1dca8d8a2f94730535b2ead1c78344860 Mon Sep 17 00:00:00 2001 From: Maksim Date: Tue, 10 Jul 2018 15:21:50 +0300 Subject: [PATCH 1/3] [custom_slug] Makes it possible to have non-unique custom slugs --- pages/app/models/refinery/page.rb | 10 +++++++++- pages/config/locales/en.yml | 1 + pages/config/locales/ru.yml | 1 + 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/pages/app/models/refinery/page.rb b/pages/app/models/refinery/page.rb index 29b64538b0..c58bd360fd 100644 --- a/pages/app/models/refinery/page.rb +++ b/pages/app/models/refinery/page.rb @@ -56,7 +56,7 @@ def should_generate_new_friendly_id? end validates :title, presence: true - validates :custom_slug, uniqueness: true, allow_blank: true + validate :custom_slug_siblings before_destroy :deletable? after_save :reposition_parts! @@ -64,6 +64,14 @@ def should_generate_new_friendly_id? after_save :update_all_descendants after_move :update_all_descendants + def custom_slug_siblings + return if custom_slug.blank? + same_slug_count = siblings.where(custom_slug: custom_slug).count + errors.add(:custom_slug, + ::I18n.t('refinery.admin.pages.form_advanced_options.custom_slug_error') + ) unless same_slug_count.zero? + end + class << self # Live pages are 'allowed' to be shown in the frontend of your website. # By default, this is all pages that are not set as 'draft'. diff --git a/pages/config/locales/en.yml b/pages/config/locales/en.yml index 709be9a48f..691a57a8dc 100644 --- a/pages/config/locales/en.yml +++ b/pages/config/locales/en.yml @@ -58,6 +58,7 @@ en: parent_page: Parent page menu_title: Menu title custom_slug: Custom slug + custom_slug_error: should be unique in scope of parent show_in_menu_title: Show in menu show_in_menu_description: Display this page in the site menu show_in_menu_help: Uncheck this box if you want to remove a page from your site menu. This can be handy if you have a page you want to link people to directly but don't want to show the page in the menu. diff --git a/pages/config/locales/ru.yml b/pages/config/locales/ru.yml index 470a74ec25..84775120ce 100644 --- a/pages/config/locales/ru.yml +++ b/pages/config/locales/ru.yml @@ -58,6 +58,7 @@ ru: parent_page: Родительская страница menu_title: Заголовок в меню custom_slug: Пользовательский slug + custom_slug_error: не может повторяться на одном уровне show_in_menu_title: Показывать в меню show_in_menu_description: Отображать эту страницу в меню сайта show_in_menu_help: "Снимите отметку, если вы хотите убрать страницу из меню вашего сайта." From 552d095e56c62cd9ae171ea462a5ba3dda970941 Mon Sep 17 00:00:00 2001 From: Maksim Date: Wed, 25 Jul 2018 14:53:34 +0300 Subject: [PATCH 2/3] merge commit --- pages/app/models/refinery/page.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pages/app/models/refinery/page.rb b/pages/app/models/refinery/page.rb index c58bd360fd..2bc9f89f18 100644 --- a/pages/app/models/refinery/page.rb +++ b/pages/app/models/refinery/page.rb @@ -65,6 +65,8 @@ def should_generate_new_friendly_id? after_move :update_all_descendants def custom_slug_siblings + return if !ActiveRecord::Base.connection.column_exists?(:refinery_page_translations, + :custom_slug) return if custom_slug.blank? same_slug_count = siblings.where(custom_slug: custom_slug).count errors.add(:custom_slug, From 4d1c70d2367354cbb7fafc2f884f68a850182fb8 Mon Sep 17 00:00:00 2001 From: Maksim Date: Wed, 25 Jul 2018 16:10:15 +0300 Subject: [PATCH 3/3] Makes specs green --- pages/app/models/refinery/page.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/app/models/refinery/page.rb b/pages/app/models/refinery/page.rb index 2bc9f89f18..9d53367576 100644 --- a/pages/app/models/refinery/page.rb +++ b/pages/app/models/refinery/page.rb @@ -65,7 +65,7 @@ def should_generate_new_friendly_id? after_move :update_all_descendants def custom_slug_siblings - return if !ActiveRecord::Base.connection.column_exists?(:refinery_page_translations, + return if !::ActiveRecord::Base.connection.column_exists?(:refinery_page_translations, :custom_slug) return if custom_slug.blank? same_slug_count = siblings.where(custom_slug: custom_slug).count