Merge pull request #1041 from consul/select-featured-debates
Select featured debates
This commit is contained in:
@@ -152,4 +152,5 @@ module CommentableActions
|
|||||||
def index_customization
|
def index_customization
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -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
|
|
||||||
@@ -18,6 +18,10 @@ class DebatesController < ApplicationController
|
|||||||
helper_method :resource_model, :resource_name
|
helper_method :resource_model, :resource_name
|
||||||
respond_to :html, :js
|
respond_to :html, :js
|
||||||
|
|
||||||
|
def index_customization
|
||||||
|
@featured_debates = @debates.featured
|
||||||
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
super
|
super
|
||||||
redirect_to debate_path(@debate), status: :moved_permanently if request.path != debate_path(@debate)
|
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)
|
set_debate_votes(@debate)
|
||||||
end
|
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
|
private
|
||||||
|
|
||||||
def debate_params
|
def debate_params
|
||||||
|
|||||||
6
app/helpers/debates_helper.rb
Normal file
6
app/helpers/debates_helper.rb
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
module DebatesHelper
|
||||||
|
|
||||||
|
def has_featured?
|
||||||
|
Debate.all.featured.count > 0
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -30,6 +30,9 @@ module Abilities
|
|||||||
can :confirm_hide, User
|
can :confirm_hide, User
|
||||||
cannot :confirm_hide, User, hidden_at: nil
|
cannot :confirm_hide, User, hidden_at: nil
|
||||||
|
|
||||||
|
can :mark_featured, Debate
|
||||||
|
can :unmark_featured, Debate
|
||||||
|
|
||||||
can :comment_as_administrator, [Debate, Comment, Proposal]
|
can :comment_as_administrator, [Debate, Comment, Proposal]
|
||||||
|
|
||||||
can [:search, :create, :index, :destroy], ::Moderator
|
can [:search, :create, :index, :destroy], ::Moderator
|
||||||
|
|||||||
@@ -36,7 +36,8 @@ class Debate < ActiveRecord::Base
|
|||||||
scope :sort_by_random, -> { reorder("RANDOM()") }
|
scope :sort_by_random, -> { reorder("RANDOM()") }
|
||||||
scope :sort_by_relevance, -> { all }
|
scope :sort_by_relevance, -> { all }
|
||||||
scope :sort_by_flags, -> { order(flags_count: :desc, updated_at: :desc) }
|
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
|
# Ahoy setup
|
||||||
visitable # Ahoy will automatically assign visit_id on create
|
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') }
|
self.tags.each{ |t| t.increment_custom_counter_for('Debate') }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def featured?
|
||||||
|
self.featured_at.present?
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -8,3 +8,14 @@
|
|||||||
<%= link_to t("admin.actions.hide_author").capitalize, hide_moderation_user_path(debate.author_id),
|
<%= link_to t("admin.actions.hide_author").capitalize, hide_moderation_user_path(debate.author_id),
|
||||||
method: :put, data: { confirm: t('admin.actions.confirm') } %>
|
method: :put, data: { confirm: t('admin.actions.confirm') } %>
|
||||||
<% end %>
|
<% 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 %>
|
||||||
|
|||||||
13
app/views/debates/_featured_debates.html.erb
Normal file
13
app/views/debates/_featured_debates.html.erb
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<div id="featured-debates" class="row featured-debates">
|
||||||
|
|
||||||
|
<div class="small-12 column">
|
||||||
|
<h2><%= t("debates.index.featured_debates") %></h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<% @featured_debates.each do |debate| %>
|
||||||
|
<div class="small-12 medium-6 column end">
|
||||||
|
<h3><%= link_to debate.title, debate %></h3>
|
||||||
|
<%= link_to debate.author.name, user_path(debate.author)%>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
<div id="featured-debates" class="row featured-debates">
|
|
||||||
|
|
||||||
<div class="small-12 column">
|
|
||||||
<h2><%= t("debates.index.featured_debates") %></h2>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="small-12 medium-6 column">
|
|
||||||
<h3><%= link_to "#Túpreguntas: Manuela Carmena, Alcaldesa de Madrid.", "https://decide.madrid.es/debates/4320" %></h3>
|
|
||||||
<%= link_to "Manuela Carmena ", "https://decide.madrid.es/users/21452"%>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="small-12 medium-6 column">
|
|
||||||
<h3><%= link_to "¿Y si pudieras entrevistar a Manuela Carmena o a los otros concejales?", "https://decide.madrid.es/debates/4299" %></h3>
|
|
||||||
<%= link_to "ParticipaciónYTransparenciaAytoMadrid", "https://decide.madrid.es/users/52055"%>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
@@ -25,8 +25,8 @@
|
|||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<% unless @tag_filter || @search_terms %>
|
<% unless @tag_filter || @search_terms || !has_featured? %>
|
||||||
<%= render "featured_debates_static" %>
|
<%= render "featured_debates" %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<%= render "shared/advanced_search", search_path: debates_path(page: 1) %>
|
<%= render "shared/advanced_search", search_path: debates_path(page: 1) %>
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ en:
|
|||||||
hide: Hide
|
hide: Hide
|
||||||
hide_author: Hide author
|
hide_author: Hide author
|
||||||
restore: Restore
|
restore: Restore
|
||||||
|
mark_featured: Featured
|
||||||
|
unmark_featured: Unmark featured
|
||||||
activity:
|
activity:
|
||||||
show:
|
show:
|
||||||
action: Action
|
action: Action
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ es:
|
|||||||
hide: Ocultar
|
hide: Ocultar
|
||||||
hide_author: Bloquear al autor
|
hide_author: Bloquear al autor
|
||||||
restore: Volver a mostrar
|
restore: Volver a mostrar
|
||||||
|
mark_featured: Destacar
|
||||||
|
unmark_featured: Quitar destacado
|
||||||
activity:
|
activity:
|
||||||
show:
|
show:
|
||||||
action: Acción
|
action: Acción
|
||||||
|
|||||||
@@ -36,6 +36,8 @@ Rails.application.routes.draw do
|
|||||||
post :vote
|
post :vote
|
||||||
put :flag
|
put :flag
|
||||||
put :unflag
|
put :unflag
|
||||||
|
put :mark_featured
|
||||||
|
put :unmark_featured
|
||||||
end
|
end
|
||||||
collection do
|
collection do
|
||||||
get :map
|
get :map
|
||||||
|
|||||||
5
db/migrate/20160315084335_add_featured_at_to_debates.rb
Normal file
5
db/migrate/20160315084335_add_featured_at_to_debates.rb
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
class AddFeaturedAtToDebates < ActiveRecord::Migration
|
||||||
|
def change
|
||||||
|
add_column :debates, :featured_at, :datetime
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -120,6 +120,7 @@ ActiveRecord::Schema.define(version: 20160422094733) do
|
|||||||
t.integer "confidence_score", default: 0
|
t.integer "confidence_score", default: 0
|
||||||
t.integer "geozone_id"
|
t.integer "geozone_id"
|
||||||
t.tsvector "tsv"
|
t.tsvector "tsv"
|
||||||
|
t.datetime "featured_at"
|
||||||
end
|
end
|
||||||
|
|
||||||
add_index "debates", ["author_id", "hidden_at"], name: "index_debates_on_author_id_and_hidden_at", using: :btree
|
add_index "debates", ["author_id", "hidden_at"], name: "index_debates_on_author_id_and_hidden_at", using: :btree
|
||||||
|
|||||||
@@ -1008,4 +1008,53 @@ feature 'Debates' do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
scenario 'Matk/Unmark a debate as featured' do
|
||||||
|
admin = create(:administrator)
|
||||||
|
login_as(admin.user)
|
||||||
|
|
||||||
|
debate = create(:debate)
|
||||||
|
|
||||||
|
visit debates_path
|
||||||
|
expect(page).to_not have_content 'Featured'
|
||||||
|
|
||||||
|
click_link debate.title
|
||||||
|
|
||||||
|
click_link 'Featured'
|
||||||
|
|
||||||
|
visit debates_path
|
||||||
|
expect(page).to have_content 'Featured'
|
||||||
|
within('#featured-debates') do
|
||||||
|
expect(page).to have_content debate.title
|
||||||
|
end
|
||||||
|
|
||||||
|
visit debate_path(debate)
|
||||||
|
click_link 'Unmark featured'
|
||||||
|
|
||||||
|
expect(page).to_not have_content 'Featured'
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
scenario 'Index include featured debates' do
|
||||||
|
admin = create(:administrator)
|
||||||
|
login_as(admin.user)
|
||||||
|
|
||||||
|
debate1 = create(:debate, featured_at: Time.now)
|
||||||
|
debate2 = create(:debate)
|
||||||
|
|
||||||
|
visit debates_path
|
||||||
|
expect(page).to have_content("Featured")
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
scenario 'Index do not show featured debates if none is marked as featured' do
|
||||||
|
admin = create(:administrator)
|
||||||
|
login_as(admin.user)
|
||||||
|
|
||||||
|
debate1 = create(:debate)
|
||||||
|
debate2 = create(:debate)
|
||||||
|
|
||||||
|
visit debates_path
|
||||||
|
expect(page).to_not have_content("Featured")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user