diff --git a/app/controllers/debates_controller.rb b/app/controllers/debates_controller.rb
index 1180b9b6c..c94558ab2 100644
--- a/app/controllers/debates_controller.rb
+++ b/app/controllers/debates_controller.rb
@@ -44,6 +44,14 @@ class DebatesController < ApplicationController
redirect_to request.query_parameters.merge(action: :index)
end
+ def disable_recommendations
+ if current_user.update(recommended_debates: false)
+ redirect_to debates_path, notice: t('debates.index.recommendations.actions.success')
+ else
+ redirect_to debates_path, error: t('debates.index.recommendations.actions.error')
+ end
+ end
+
private
def debate_params
diff --git a/app/controllers/proposals_controller.rb b/app/controllers/proposals_controller.rb
index c280f9962..01e8043b1 100644
--- a/app/controllers/proposals_controller.rb
+++ b/app/controllers/proposals_controller.rb
@@ -80,6 +80,14 @@ class ProposalsController < ApplicationController
@tag_cloud = tag_cloud
end
+ def disable_recommendations
+ if current_user.update(recommended_proposals: false)
+ redirect_to proposals_path, notice: t('proposals.index.recommendations.actions.success')
+ else
+ redirect_to proposals_path, error: t('proposals.index.recommendations.actions.error')
+ end
+ end
+
private
def proposal_params
diff --git a/app/models/abilities/everyone.rb b/app/models/abilities/everyone.rb
index 23cfdc971..afc1eeeb3 100644
--- a/app/models/abilities/everyone.rb
+++ b/app/models/abilities/everyone.rb
@@ -29,6 +29,7 @@ module Abilities
can [:read], Legislation::Question
can [:read, :map, :share], Legislation::Proposal
can [:search, :comments, :read, :create, :new_comment], Legislation::Annotation
+ can :disable_recommendations, [Debate, Proposal]
end
end
end
diff --git a/app/views/debates/index.html.erb b/app/views/debates/index.html.erb
index edf2a93d6..41c6fc42a 100644
--- a/app/views/debates/index.html.erb
+++ b/app/views/debates/index.html.erb
@@ -36,7 +36,9 @@
<% end %>
<% if @recommended_debates.present? %>
- <%= render "shared/recommended_index", recommended: @recommended_debates %>
+ <%= render "shared/recommended_index", recommended: @recommended_debates,
+ disable_recommendations_path: recommendations_disable_debates_path,
+ namespace: "debates" %>
<% end %>
diff --git a/app/views/proposals/index.html.erb b/app/views/proposals/index.html.erb
index 2d4121c30..45896130a 100644
--- a/app/views/proposals/index.html.erb
+++ b/app/views/proposals/index.html.erb
@@ -38,7 +38,9 @@
<% end %>
<% if @recommended_proposals.present? %>
- <%= render "shared/recommended_index", recommended: @recommended_proposals %>
+ <%= render "shared/recommended_index", recommended: @recommended_proposals,
+ disable_recommendations_path: recommendations_disable_proposals_path,
+ namespace: "proposals" %>
<% end %>
diff --git a/app/views/shared/_recommended_index.html.erb b/app/views/shared/_recommended_index.html.erb
index 48f39cbf2..e7c7d3835 100644
--- a/app/views/shared/_recommended_index.html.erb
+++ b/app/views/shared/_recommended_index.html.erb
@@ -5,9 +5,13 @@
- <%= link_to "#", title: t("shared.recommended_index.hide"),
- class: "float-right-medium small hide-recommendations",
- data: { toggle: "recommendations" } do %>
+ <%= link_to disable_recommendations_path, title: t("shared.recommended_index.hide"),
+ class: "float-right-medium small hide-recommendations",
+ data: {
+ toggle: "recommendations",
+ confirm: t("#{namespace}.index.recommendations.disable")
+ },
+ method: :put do %>
<%= t("shared.recommended_index.hide") %>
<% end %>
diff --git a/config/locales/en/general.yml b/config/locales/en/general.yml
index b0afb62c7..7d4182e45 100644
--- a/config/locales/en/general.yml
+++ b/config/locales/en/general.yml
@@ -113,6 +113,10 @@ en:
recommendations:
without_results: There are not debates related to your interests
without_interests: Follow proposals so we can give you recommendations
+ disable: "If you dismiss debates recommendations, the setting will be automatically disabled. Do you wish to continue?"
+ actions:
+ success: "Recommendations for debates are now disabled for this account"
+ error: "An error has occured. Please go to 'Your account' page to manually disable recommendations for debates"
search_form:
button: Search
placeholder: Search debates...
@@ -364,6 +368,10 @@ en:
recommendations:
without_results: There are not proposals related to your interests
without_interests: Follow proposals so we can give you recommendations
+ disable: "If you dismiss proposals recommendations, the setting will be automatically disabled. Do you wish to continue?"
+ actions:
+ success: "Recommendations for proposals are now disabled for this account"
+ error: "An error has occured. Please go to 'Your account' page to manually disable recommendations for proposals"
retired_proposals: Retired proposals
retired_proposals_link: "Proposals retired by the author"
retired_links:
diff --git a/config/locales/es/general.yml b/config/locales/es/general.yml
index 2708e1903..001ce2aa5 100644
--- a/config/locales/es/general.yml
+++ b/config/locales/es/general.yml
@@ -113,6 +113,10 @@ es:
recommendations:
without_results: No existen debates relacionados con tus intereses
without_interests: Sigue propuestas para que podamos darte recomendaciones
+ disable: "Si ocultas las recomendaciones para debates, se desactivará automáticamente el ajuste. ¿Deseas continuar?"
+ actions:
+ success: "Las recomendaciones de debates han sido desactivadas"
+ error: "Ha ocurrido un error. Por favor dirígete al apartado 'Mi cuenta' para desactivar las recomendaciones manualmente"
search_form:
button: Buscar
placeholder: Buscar debates...
@@ -364,6 +368,10 @@ es:
recommendations:
without_results: No existen propuestas relacionadas con tus intereses
without_interests: Sigue propuestas para que podamos darte recomendaciones
+ disable: "Si ocultas las recomendaciones para propuestas, se desactivará automáticamente el ajuste. ¿Deseas continuar?"
+ actions:
+ success: "Las recomendaciones de propuestas han sido desactivadas"
+ error: "Ha ocurrido un error. Por favor dirígete al apartado 'Mi cuenta' para desactivar las recomendaciones manualmente"
retired_proposals: Propuestas retiradas
retired_proposals_link: "Propuestas retiradas por sus autores"
retired_links:
diff --git a/config/routes/debate.rb b/config/routes/debate.rb
index 2345d150f..4167ed68c 100644
--- a/config/routes/debate.rb
+++ b/config/routes/debate.rb
@@ -10,5 +10,6 @@ resources :debates do
collection do
get :map
get :suggest
+ put 'recommendations/disable', only: :index, controller: 'debates', action: :disable_recommendations
end
end
diff --git a/config/routes/proposal.rb b/config/routes/proposal.rb
index d3408ed29..b0736ec0e 100644
--- a/config/routes/proposal.rb
+++ b/config/routes/proposal.rb
@@ -13,5 +13,6 @@ resources :proposals do
get :map
get :suggest
get :summary
+ put 'recommendations/disable', only: :index, controller: 'proposals', action: :disable_recommendations
end
end
diff --git a/spec/features/debates_spec.rb b/spec/features/debates_spec.rb
index af4c719ae..447e47ca6 100644
--- a/spec/features/debates_spec.rb
+++ b/spec/features/debates_spec.rb
@@ -488,7 +488,7 @@ feature 'Debates' do
expect(page).not_to have_link('recommendations')
end
- scenario 'shown on index header are dismissable', :js do
+ scenario 'are automatically disabled when dismissed from index', :js do
user = create(:user)
proposal = create(:proposal, tag_list: 'Sport')
create(:follow, followable: proposal, user: user)
@@ -502,13 +502,19 @@ feature 'Debates' do
expect(page).to have_content('Medium')
expect(page).to have_css('.recommendation', count: 3)
- find('.icon-x').click
-
- expect(page).not_to have_content('Best')
- expect(page).not_to have_content('Worst')
- expect(page).not_to have_content('Medium')
- expect(page).not_to have_css('.recommendation', count: 3)
+ accept_confirm { click_link 'Hide recommendations' }
end
+
+ expect(page).not_to have_link('recommendations')
+ expect(page).not_to have_css('.recommendation', count: 3)
+ expect(page).to have_content('Recommendations for debates are now disabled for this account')
+
+ user.reload
+
+ visit account_path
+
+ expect(find("#account_recommended_debates")).not_to be_checked
+ expect(user.recommended_debates).to be(false)
end
end
end
diff --git a/spec/features/proposals_spec.rb b/spec/features/proposals_spec.rb
index c8a7c47cd..d3d51a96b 100644
--- a/spec/features/proposals_spec.rb
+++ b/spec/features/proposals_spec.rb
@@ -812,7 +812,7 @@ feature 'Proposals' do
expect(page).not_to have_link('recommendations')
end
- scenario 'shown on index header are dismissable', :js do
+ scenario 'are automatically disabled when dismissed from index', :js do
user = create(:user)
proposal = create(:proposal, tag_list: 'Sport')
create(:follow, followable: proposal, user: user)
@@ -826,13 +826,19 @@ feature 'Proposals' do
expect(page).to have_content('Medium')
expect(page).to have_css('.recommendation', count: 3)
- find('.icon-x').click
-
- expect(page).not_to have_content('Best')
- expect(page).not_to have_content('Worst')
- expect(page).not_to have_content('Medium')
- expect(page).not_to have_css('.recommendation', count: 3)
+ accept_confirm { click_link 'Hide recommendations' }
end
+
+ expect(page).not_to have_link('recommendations')
+ expect(page).not_to have_css('.recommendation', count: 3)
+ expect(page).to have_content('Recommendations for proposals are now disabled for this account')
+
+ user.reload
+
+ visit account_path
+
+ expect(find("#account_recommended_proposals")).not_to be_checked
+ expect(user.recommended_proposals).to be(false)
end
end
end