From 609d2083f845df8841060878df679d9459972c4d Mon Sep 17 00:00:00 2001 From: decabeza Date: Tue, 4 Dec 2018 17:46:46 +0100 Subject: [PATCH 1/2] Changes proposals controller to always load featured proposals --- app/controllers/proposals_controller.rb | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/app/controllers/proposals_controller.rb b/app/controllers/proposals_controller.rb index 798aeebf2..6eb1de7e1 100644 --- a/app/controllers/proposals_controller.rb +++ b/app/controllers/proposals_controller.rb @@ -44,8 +44,7 @@ class ProposalsController < ApplicationController def index_customization discard_archived load_retired - load_successful_proposals - load_featured unless @proposal_successful_exists + load_featured end def vote @@ -131,7 +130,8 @@ class ProposalsController < ApplicationController def load_featured return unless !@advanced_search_terms && @search_terms.blank? && @tag_filter.blank? && params[:retired].blank? && @current_order != "recommendations" - @featured_proposals = Proposal.not_archived.sort_by_confidence_score.limit(3) + @featured_proposals = Proposal.not_archived.unsuccessful + .sort_by_confidence_score.limit(Setting['featured_proposals_number']) if @featured_proposals.present? set_featured_proposal_votes(@featured_proposals) @resources = @resources.where('proposals.id NOT IN (?)', @featured_proposals.map(&:id)) @@ -142,10 +142,6 @@ class ProposalsController < ApplicationController @view = (params[:view] == "minimal") ? "minimal" : "default" end - def load_successful_proposals - @proposal_successful_exists = Proposal.successful.exists? - end - def destroy_map_location_association map_location = params[:proposal][:map_location_attributes] if map_location && (map_location[:longitude] && map_location[:latitude]).blank? && !map_location[:id].blank? From 37da986014beeda580f34635c04d736f14f2d09f Mon Sep 17 00:00:00 2001 From: decabeza Date: Thu, 29 Nov 2018 19:11:58 +0100 Subject: [PATCH 2/2] Adds settings for featured proposals --- app/controllers/proposals_controller.rb | 12 +++++++----- config/locales/en/settings.yml | 4 ++++ config/locales/es/settings.yml | 6 +++++- db/dev_seeds/settings.rb | 3 +++ db/seeds.rb | 4 ++++ lib/tasks/settings.rake | 6 ++++++ spec/features/proposals_spec.rb | 3 +++ spec/support/common_actions/proposals.rb | 6 +++--- 8 files changed, 35 insertions(+), 9 deletions(-) diff --git a/app/controllers/proposals_controller.rb b/app/controllers/proposals_controller.rb index 6eb1de7e1..fe0599eab 100644 --- a/app/controllers/proposals_controller.rb +++ b/app/controllers/proposals_controller.rb @@ -130,11 +130,13 @@ class ProposalsController < ApplicationController def load_featured return unless !@advanced_search_terms && @search_terms.blank? && @tag_filter.blank? && params[:retired].blank? && @current_order != "recommendations" - @featured_proposals = Proposal.not_archived.unsuccessful - .sort_by_confidence_score.limit(Setting['featured_proposals_number']) - if @featured_proposals.present? - set_featured_proposal_votes(@featured_proposals) - @resources = @resources.where('proposals.id NOT IN (?)', @featured_proposals.map(&:id)) + if Setting['feature.featured_proposals'] + @featured_proposals = Proposal.not_archived.unsuccessful + .sort_by_confidence_score.limit(Setting['featured_proposals_number']) + if @featured_proposals.present? + set_featured_proposal_votes(@featured_proposals) + @resources = @resources.where('proposals.id NOT IN (?)', @featured_proposals.map(&:id)) + end end end diff --git a/config/locales/en/settings.yml b/config/locales/en/settings.yml index d8f6717b3..f8b9bf0d7 100644 --- a/config/locales/en/settings.yml +++ b/config/locales/en/settings.yml @@ -20,6 +20,8 @@ en: max_votes_for_debate_edit_description: "From this number of votes the author of a Debate can no longer edit it" proposal_code_prefix: "Prefix for Proposal codes" proposal_code_prefix_description: "This prefix will appear in the Proposals before the creation date and its ID" + featured_proposals_number: "Number of featured proposals" + featured_proposals_number_description: "Number of featured proposals that will be displayed if the Featured proposals feature is active" votes_for_proposal_success: "Number of votes necessary for approval of a Proposal" votes_for_proposal_success_description: "When a proposal reaches this number of supports it will no longer be able to receive more supports and is considered successful" months_to_archive_proposals: "Months to archive Proposals" @@ -85,6 +87,8 @@ en: google_login_description: "Allow users to sign up with their Google Account" proposals: "Proposals" proposals_description: "Citizens' proposals are an opportunity for neighbours and collectives to decide directly how they want their city to be, after getting sufficient support and submitting to a citizens' vote" + featured_proposals: "Featured proposals" + featured_proposals_description: "Shows featured proposals on index proposals page" debates: "Debates" debates_description: "The citizens' debate space is aimed at anyone who can present issues that concern them and about which they want to share their views with others" polls: "Polls" diff --git a/config/locales/es/settings.yml b/config/locales/es/settings.yml index 3e9c926c6..f0dff19f7 100644 --- a/config/locales/es/settings.yml +++ b/config/locales/es/settings.yml @@ -20,7 +20,9 @@ es: max_votes_for_debate_edit_description: "A partir de este número de votos el autor de un Debate ya no podrá editarlo" proposal_code_prefix: "Prefijo para los códigos de Propuestas" proposal_code_prefix_description: "Este prefijo aparecerá en las Propuestas delante de la fecha de creación y su ID" - votes_for_proposal_success: "Número de votos necesarios para aprobar una Propuesta" + featured_proposals_number: "Número de propuestas destacadas" + featured_proposals_number_description: "Número de propuestas destacadas que se mostrarán si la funcionalidad Propuestas destacadas está activa" + votes_for_proposal_success: "Número de apoyos necesarios para aprobar una Propuesta" votes_for_proposal_success_description: "Cuando una propuesta alcance este número de apoyos ya no podrá recibir más y se considera exitosa" months_to_archive_proposals: "Meses para archivar las Propuestas" months_to_archive_proposals_description: Pasado este número de meses las Propuestas se archivarán y ya no podrán recoger apoyos @@ -85,6 +87,8 @@ es: google_login_description: "Permitir que los usuarios se registren con su cuenta de Google" proposals: "Propuestas" proposals_description: "Las propuestas ciudadanas son una oportunidad para que los vecinos y colectivos decidan directamente cómo quieren que sea su ciudad, después de conseguir los apoyos suficientes y de someterse a votación ciudadana" + featured_proposals: "Propuestas destacadas" + featured_proposals_description: "Muestra propuestas destacadas en la página principal de propuestas" debates: "Debates" debates_description: "El espacio de debates ciudadanos está dirigido a que cualquier persona pueda exponer temas que le preocupan y sobre los que quiera compartir puntos de vista con otras personas" polls: "Votaciones" diff --git a/db/dev_seeds/settings.rb b/db/dev_seeds/settings.rb index 388742217..ce9bdd7c2 100644 --- a/db/dev_seeds/settings.rb +++ b/db/dev_seeds/settings.rb @@ -30,6 +30,7 @@ section "Creating Settings" do Setting.create(key: 'feature.debates', value: "true") Setting.create(key: 'feature.proposals', value: "true") + Setting.create(key: 'feature.featured_proposals', value: "true") Setting.create(key: 'feature.polls', value: "true") Setting.create(key: 'feature.spending_proposals', value: nil) Setting.create(key: 'feature.spending_proposal_features.voting_allowed', value: nil) @@ -65,6 +66,8 @@ section "Creating Settings" do Setting.create(key: 'map_latitude', value: 40.41) Setting.create(key: 'map_longitude', value: -3.7) Setting.create(key: 'map_zoom', value: 10) + Setting.create(key: 'featured_proposals_number', value: 3) + Setting.create(key: 'related_content_score_threshold', value: -0.3) Setting['feature.homepage.widgets.feeds.proposals'] = true diff --git a/db/seeds.rb b/db/seeds.rb index 8d4377c53..5bf0b205f 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -72,6 +72,7 @@ Setting["meta_keywords"] = nil # Feature flags Setting['feature.debates'] = true Setting['feature.proposals'] = true +Setting['feature.featured_proposals'] = true Setting['feature.spending_proposals'] = nil Setting['feature.polls'] = true Setting['feature.twitter_login'] = true @@ -115,6 +116,9 @@ Setting['mailer_from_address'] = 'noreply@consul.dev' Setting['verification_offices_url'] = 'http://oficinas-atencion-ciudadano.url/' Setting['min_age_to_participate'] = 16 +# Featured proposals +Setting['featured_proposals_number'] = 3 + # Proposal improvement url path ('/help/proposal-improvement') Setting['proposal_improvement_path'] = nil diff --git a/lib/tasks/settings.rake b/lib/tasks/settings.rake index ab33e5a36..729615133 100644 --- a/lib/tasks/settings.rake +++ b/lib/tasks/settings.rake @@ -25,4 +25,10 @@ namespace :settings do Setting['feature.help_page'] = true end + desc "Enable Featured proposals" + task enable_featured_proposals: :environment do + Setting['feature.featured_proposals'] = true + Setting['featured_proposals_number'] = 3 + end + end diff --git a/spec/features/proposals_spec.rb b/spec/features/proposals_spec.rb index 3d567911f..eb8b5c0de 100644 --- a/spec/features/proposals_spec.rb +++ b/spec/features/proposals_spec.rb @@ -18,6 +18,8 @@ feature 'Proposals' do before do Setting['feature.allow_images'] = true + Setting['feature.featured_proposals'] = true + Setting['featured_proposals_number'] = 3 end after do @@ -92,6 +94,7 @@ feature 'Proposals' do click_link "Next", exact: false end + expect(page).to have_selector('#proposals .proposal-featured', count: 3) expect(page).to have_selector('#proposals .proposal', count: 2) end diff --git a/spec/support/common_actions/proposals.rb b/spec/support/common_actions/proposals.rb index 4729a2451..93797935b 100644 --- a/spec/support/common_actions/proposals.rb +++ b/spec/support/common_actions/proposals.rb @@ -17,8 +17,8 @@ module Proposals end def create_featured_proposals - [create(:proposal, :with_confidence_score, cached_votes_up: 100), - create(:proposal, :with_confidence_score, cached_votes_up: 90), - create(:proposal, :with_confidence_score, cached_votes_up: 80)] + [create(:proposal, :with_confidence_score, cached_votes_up: 200), + create(:proposal, :with_confidence_score, cached_votes_up: 100), + create(:proposal, :with_confidence_score, cached_votes_up: 90)] end end