From daf1324ab2bdc89ab717f1c681d93e60a75f191d Mon Sep 17 00:00:00 2001 From: evazion Date: Mon, 28 Nov 2016 01:36:59 -0600 Subject: [PATCH 1/2] Refactor available_min_user_levels to view helper. --- app/helpers/forum_topics_helper.rb | 10 ++++++++++ app/models/forum_topic.rb | 17 ----------------- app/views/forum_topics/_form.html.erb | 2 +- 3 files changed, 11 insertions(+), 18 deletions(-) diff --git a/app/helpers/forum_topics_helper.rb b/app/helpers/forum_topics_helper.rb index 12673c391..1a7bbf623 100644 --- a/app/helpers/forum_topics_helper.rb +++ b/app/helpers/forum_topics_helper.rb @@ -2,4 +2,14 @@ module ForumTopicsHelper def forum_topic_category_select(object, field) select(object, field, ForumTopic.reverse_category_mapping.to_a) end + + def available_min_user_levels + if CurrentUser.is_admin? + [["Moderator", User::Levels::MODERATOR], ["Admin", User::Levels::ADMIN]] + elsif CurrentUser.is_moderator? + [["Moderator", User::Levels::MODERATOR]] + else + [] + end + end end diff --git a/app/models/forum_topic.rb b/app/models/forum_topic.rb index 506ba23a0..3b773018b 100644 --- a/app/models/forum_topic.rb +++ b/app/models/forum_topic.rb @@ -119,27 +119,10 @@ class ForumTopic < ActiveRecord::Base end end - module UserLevelMethods - extend ActiveSupport::Concern - - module ClassMethods - def available_min_user_levels - if CurrentUser.is_admin? - [["Moderator", User::Levels::MODERATOR], ["Admin", User::Levels::ADMIN]] - elsif CurrentUser.is_moderator? - [["Moderator", User::Levels::MODERATOR]] - else - [] - end - end - end - end - extend SearchMethods include CategoryMethods include VisitMethods include SubscriptionMethods - include UserLevelMethods def editable_by?(user) (creator_id == user.id || user.is_moderator?) && visible?(user) diff --git a/app/views/forum_topics/_form.html.erb b/app/views/forum_topics/_form.html.erb index e4e58a006..87f896436 100644 --- a/app/views/forum_topics/_form.html.erb +++ b/app/views/forum_topics/_form.html.erb @@ -18,7 +18,7 @@ <% end %> <% if CurrentUser.is_moderator? %> - <%= f.input :min_level, :as => :select, :collection => ForumTopic.available_min_user_levels.to_a %> + <%= f.input :min_level, :as => :select, :collection => available_min_user_levels.to_a %> <%= f.input :is_sticky, :label => "Sticky" %> <%= f.input :is_locked, :label => "Locked" %> <% end %> From 1cce7211141b4cd7b6f47bb47bbccf84da53a521 Mon Sep 17 00:00:00 2001 From: evazion Date: Mon, 28 Nov 2016 02:09:23 -0600 Subject: [PATCH 2/2] Fix #2772: Topics set as mod+ can't be reverted to public ones. --- app/helpers/forum_topics_helper.rb | 8 +------- app/models/forum_topic.rb | 8 +++++++- app/views/forum_topics/_form.html.erb | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/helpers/forum_topics_helper.rb b/app/helpers/forum_topics_helper.rb index 1a7bbf623..98b9ad8ed 100644 --- a/app/helpers/forum_topics_helper.rb +++ b/app/helpers/forum_topics_helper.rb @@ -4,12 +4,6 @@ module ForumTopicsHelper end def available_min_user_levels - if CurrentUser.is_admin? - [["Moderator", User::Levels::MODERATOR], ["Admin", User::Levels::ADMIN]] - elsif CurrentUser.is_moderator? - [["Moderator", User::Levels::MODERATOR]] - else - [] - end + ForumTopic::MIN_LEVELS.select { |name, level| level <= CurrentUser.level }.to_a end end diff --git a/app/models/forum_topic.rb b/app/models/forum_topic.rb index 3b773018b..6eca89c88 100644 --- a/app/models/forum_topic.rb +++ b/app/models/forum_topic.rb @@ -5,6 +5,12 @@ class ForumTopic < ActiveRecord::Base 2 => "Bugs & Features" } + MIN_LEVELS = { + None: 0, + Moderator: User::Levels::MODERATOR, + Admin: User::Levels::ADMIN, + } + attr_accessible :title, :original_post_attributes, :category_id, :as => [:member, :builder, :gold, :platinum, :janitor, :moderator, :admin, :default] attr_accessible :is_sticky, :is_locked, :is_deleted, :min_level, :as => [:admin, :moderator] belongs_to :creator, :class_name => "User" @@ -18,7 +24,7 @@ class ForumTopic < ActiveRecord::Base validates_presence_of :title, :creator_id validates_associated :original_post validates_inclusion_of :category_id, :in => CATEGORIES.keys - validates_inclusion_of :min_level, :in => [0, User::Levels::MODERATOR, User::Levels::ADMIN] + validates_inclusion_of :min_level, :in => MIN_LEVELS.values accepts_nested_attributes_for :original_post after_update :update_orignal_post diff --git a/app/views/forum_topics/_form.html.erb b/app/views/forum_topics/_form.html.erb index 87f896436..b278db828 100644 --- a/app/views/forum_topics/_form.html.erb +++ b/app/views/forum_topics/_form.html.erb @@ -18,7 +18,7 @@ <% end %> <% if CurrentUser.is_moderator? %> - <%= f.input :min_level, :as => :select, :collection => available_min_user_levels.to_a %> + <%= f.input :min_level, :include_blank => false, :collection => available_min_user_levels %> <%= f.input :is_sticky, :label => "Sticky" %> <%= f.input :is_locked, :label => "Locked" %> <% end %>