diff --git a/app/controllers/concerns/commentable_actions.rb b/app/controllers/concerns/commentable_actions.rb index 01066c8ad..332d031a5 100644 --- a/app/controllers/concerns/commentable_actions.rb +++ b/app/controllers/concerns/commentable_actions.rb @@ -152,4 +152,5 @@ module CommentableActions def index_customization nil end + end diff --git a/app/controllers/debate_links_controller.rb b/app/controllers/debate_links_controller.rb deleted file mode 100644 index f6f7c3af8..000000000 --- a/app/controllers/debate_links_controller.rb +++ /dev/null @@ -1,31 +0,0 @@ -class DebateLinksController < ApplicationController - include FeatureFlags - include CommentableActions - - before_action :authenticate_user!, except: [:show] - - load_and_authorize_resource class: "Debate" - - feature_flag :debates - - respond_to :html, :js - - private - - def create_params - params.require(:debate).permit(:title, :external_link, :tag_list, :terms_of_service, :captcha, :captcha_key).merge(link_required: true) - end - - def debate_params - params.require(:debate).permit(:title, :external_link, :tag_list, :terms_of_service, :captcha, :captcha_key).merge(link_required: true) - end - - def after_create_path - debate_path(@resource) - end - - def resource_model - Debate - end - -end diff --git a/app/controllers/debates_controller.rb b/app/controllers/debates_controller.rb index b5a0ae25a..b747cd903 100644 --- a/app/controllers/debates_controller.rb +++ b/app/controllers/debates_controller.rb @@ -18,6 +18,10 @@ class DebatesController < ApplicationController helper_method :resource_model, :resource_name respond_to :html, :js + def index_customization + @featured_debates = @debates.featured + end + def show super redirect_to debate_path(@debate), status: :moved_permanently if request.path != debate_path(@debate) @@ -28,6 +32,16 @@ class DebatesController < ApplicationController set_debate_votes(@debate) end + def unmark_featured + @debate.update_attribute(:featured_at, nil) + redirect_to request.query_parameters.merge(action: :index) + end + + def mark_featured + @debate.update_attribute(:featured_at, Time.now) + redirect_to request.query_parameters.merge(action: :index) + end + private def debate_params diff --git a/app/helpers/debates_helper.rb b/app/helpers/debates_helper.rb new file mode 100644 index 000000000..3c1aa02a7 --- /dev/null +++ b/app/helpers/debates_helper.rb @@ -0,0 +1,6 @@ +module DebatesHelper + + def has_featured? + Debate.all.featured.count > 0 + end +end \ No newline at end of file diff --git a/app/models/abilities/administrator.rb b/app/models/abilities/administrator.rb index ee5e963f2..f043a3c86 100644 --- a/app/models/abilities/administrator.rb +++ b/app/models/abilities/administrator.rb @@ -30,6 +30,9 @@ module Abilities can :confirm_hide, User cannot :confirm_hide, User, hidden_at: nil + can :mark_featured, Debate + can :unmark_featured, Debate + can :comment_as_administrator, [Debate, Comment, Proposal] can [:search, :create, :index, :destroy], ::Moderator diff --git a/app/models/debate.rb b/app/models/debate.rb index ceec9946b..cdae527f7 100644 --- a/app/models/debate.rb +++ b/app/models/debate.rb @@ -36,7 +36,8 @@ class Debate < ActiveRecord::Base scope :sort_by_random, -> { reorder("RANDOM()") } scope :sort_by_relevance, -> { all } scope :sort_by_flags, -> { order(flags_count: :desc, updated_at: :desc) } - scope :last_week, -> { where("created_at >= ?", 7.days.ago)} + scope :last_week, -> { where("created_at >= ?", 7.days.ago)} + scope :featured, -> { where("featured_at is not null")} # Ahoy setup visitable # Ahoy will automatically assign visit_id on create @@ -132,4 +133,8 @@ class Debate < ActiveRecord::Base self.tags.each{ |t| t.increment_custom_counter_for('Debate') } end + def featured? + self.featured_at.present? + end + end diff --git a/app/views/debates/_actions.html.erb b/app/views/debates/_actions.html.erb index db9821ad0..1b61e045b 100644 --- a/app/views/debates/_actions.html.erb +++ b/app/views/debates/_actions.html.erb @@ -8,3 +8,14 @@ <%= link_to t("admin.actions.hide_author").capitalize, hide_moderation_user_path(debate.author_id), method: :put, data: { confirm: t('admin.actions.confirm') } %> <% end %> + +<% if can? :mark_featured, debate %> + | + <% if debate.featured? %> + <%= link_to t("admin.actions.unmark_featured").capitalize, unmark_featured_debate_path(debate), + method: :put, data: { confirm: t('admin.actions.confirm') } %> + <% else %> + <%= link_to t("admin.actions.mark_featured").capitalize, mark_featured_debate_path(debate), + method: :put, data: { confirm: t('admin.actions.confirm') } %> + <% end %> +<% end %> diff --git a/app/views/debates/_featured_debates.html.erb b/app/views/debates/_featured_debates.html.erb new file mode 100644 index 000000000..577a6da77 --- /dev/null +++ b/app/views/debates/_featured_debates.html.erb @@ -0,0 +1,13 @@ +