From 7ab793c1ff0a58e4a87b3bc94246261f8ce4d4a2 Mon Sep 17 00:00:00 2001 From: Oleg Valter Date: Wed, 23 Jul 2025 06:00:25 +0300 Subject: [PATCH 1/6] added top_level_post_types scope to Category --- app/models/category.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/models/category.rb b/app/models/category.rb index d88c3d46f..bb915ad1d 100644 --- a/app/models/category.rb +++ b/app/models/category.rb @@ -22,6 +22,10 @@ def public? trust_level <= 0 end + def top_level_post_types + post_types.where(is_top_level: true) + end + def new_posts_for?(user) key = "#{community_id}/#{user.id}/#{id}/last_visit" Rails.cache.fetch key, expires_in: 5.minutes do From 230f94a5889e0ec530a3bb68003889924a89f6a7 Mon Sep 17 00:00:00 2001 From: Oleg Valter Date: Wed, 23 Jul 2025 06:43:28 +0300 Subject: [PATCH 2/6] switched CategoriesController#post_types to top_level_post_types --- app/controllers/categories_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/categories_controller.rb b/app/controllers/categories_controller.rb index 26fef7f0a..2d2eb1d68 100644 --- a/app/controllers/categories_controller.rb +++ b/app/controllers/categories_controller.rb @@ -127,7 +127,7 @@ def rss_feed end def post_types - @post_types = @category.post_types.where(is_top_level: true) + @post_types = @category.top_level_post_types if @post_types.one? redirect_to new_category_post_path(post_type: @post_types.first, category: @category) end From 55a033b1b72fc54852a3490d673412d2f7aa1f6f Mon Sep 17 00:00:00 2001 From: Oleg Valter Date: Wed, 23 Jul 2025 06:43:56 +0300 Subject: [PATCH 3/6] disabled the 'create post' button if there are no available post types for the current category --- app/views/layouts/_header.html.erb | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/app/views/layouts/_header.html.erb b/app/views/layouts/_header.html.erb index c7f6a9665..2c4b58ddc 100644 --- a/app/views/layouts/_header.html.erb +++ b/app/views/layouts/_header.html.erb @@ -282,9 +282,16 @@ $(() => { <% end %> <% end %>
- <%= link_to category_post_types_path(current_cat.id), - class: 'category-header--nav-item is-button' do %> - <%= current_cat.button_text.present? ? current_cat.button_text : 'Create Post' %> + <% button_text = current_cat.button_text.present? ? current_cat.button_text : 'Create Post' %> + <% if current_cat&.top_level_post_types.any? %> + <%= link_to category_post_types_path(current_cat.id), + class: "category-header--nav-item is-button" do %> + <%= button_text %> + <% end %> + <% else %> + <%= button_tag button_text, class: "button is-muted is-outlined", + disabled: true, + title: "The category doesn't have any allowed post types" %> <% end %> From 25eb7a163012a85f2f4bdeed61fcd7ead4c216e5 Mon Sep 17 00:00:00 2001 From: Oleg Valter Date: Wed, 23 Jul 2025 06:51:19 +0300 Subject: [PATCH 4/6] allow admins to click on the 'create post' button even if the category doesn't have any types allowed --- app/views/layouts/_header.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/layouts/_header.html.erb b/app/views/layouts/_header.html.erb index 2c4b58ddc..e658ad977 100644 --- a/app/views/layouts/_header.html.erb +++ b/app/views/layouts/_header.html.erb @@ -283,7 +283,7 @@ $(() => { <% end %>
<% button_text = current_cat.button_text.present? ? current_cat.button_text : 'Create Post' %> - <% if current_cat&.top_level_post_types.any? %> + <% if current_cat&.top_level_post_types.any? || admin? %> <%= link_to category_post_types_path(current_cat.id), class: "category-header--nav-item is-button" do %> <%= button_text %> From 8f2facb5a7add0657cee3eed57ce5dfcd3b601c7 Mon Sep 17 00:00:00 2001 From: Oleg Valter Date: Wed, 23 Jul 2025 06:58:05 +0300 Subject: [PATCH 5/6] admins are now redirected to category post types edit page upon attempting to create a post without any allowed --- app/controllers/categories_controller.rb | 2 ++ .../categories/category_post_types.html.erb | 19 ++++++++++++++----- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/app/controllers/categories_controller.rb b/app/controllers/categories_controller.rb index 2d2eb1d68..7d5e4834f 100644 --- a/app/controllers/categories_controller.rb +++ b/app/controllers/categories_controller.rb @@ -130,6 +130,8 @@ def post_types @post_types = @category.top_level_post_types if @post_types.one? redirect_to new_category_post_path(post_type: @post_types.first, category: @category) + elsif @post_types.empty? && current_user&.admin? + redirect_to edit_category_post_types_path(@category, no_return: '1') end end diff --git a/app/views/categories/category_post_types.html.erb b/app/views/categories/category_post_types.html.erb index 808630027..c9d53c8d9 100644 --- a/app/views/categories/category_post_types.html.erb +++ b/app/views/categories/category_post_types.html.erb @@ -1,8 +1,17 @@ -

- <%= link_to edit_category_path(@category) do %> - « Back to category edit - <% end %> -

+<%# + View for managing allowed category post types + + Parameters: + params[:no_return] : whether to suppress the return link +%> + +<% unless params[:no_return] == '1' %> +

+ <%= link_to edit_category_path(@category) do %> + « Back to category edit + <% end %> +

+<% end %>

Allowed post types for <%= @category.name %>

Only post types listed here are allowed to be posted in this category. Not all will be displayed as available options From 8279bc24ce772bff33d4461a7e82d11dc3240968 Mon Sep 17 00:00:00 2001 From: Oleg Valter Date: Wed, 23 Jul 2025 07:04:26 +0300 Subject: [PATCH 6/6] fixed up the 0 allowed post types case for the category post types view just in case --- app/views/categories/post_types.html.erb | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/app/views/categories/post_types.html.erb b/app/views/categories/post_types.html.erb index 3b594b327..3ab6bd43f 100644 --- a/app/views/categories/post_types.html.erb +++ b/app/views/categories/post_types.html.erb @@ -1,6 +1,12 @@ -

What kind of post?

+<% header_title = @post_types.any? ? 'What kind of post?' : 'No allowed post types' + header_subtitle = @post_types.any? \ + ? 'This category has more than one type of post available. Pick a post type to get started.' + : 'This category does not have any post types available.' +%> + +

<%= header_title %>

- This category has more than one type of post available. Pick a post type to get started. + <%= header_subtitle %>

<% @post_types.each do |pt| %>