From 05340e423c93e2ad3b1c984bf60b11e87dbe5525 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Fuentes?= Date: Wed, 8 Aug 2018 10:57:42 +0200 Subject: [PATCH] Add select to Legislation::Proposals Add admin interface for mark any proposal as selected Add filter to public interface for selected proposals --- .../admin/legislation/proposals_controller.rb | 18 ++++++++- .../legislation/processes_controller.rb | 6 ++- app/models/legislation/proposal.rb | 4 ++ .../legislation/proposals/index.html.erb | 40 +++++++++++++++++++ .../processes/_proposals_content.html.erb | 1 + .../shared/_wide_order_selector.html.erb | 1 + config/locales/en/activerecord.yml | 3 ++ config/locales/en/admin.yml | 14 +++++++ config/locales/en/legislation.yml | 3 ++ config/locales/es/activerecord.yml | 3 ++ config/locales/es/admin.yml | 14 +++++++ config/locales/es/legislation.yml | 3 ++ ...1_add_selected_to_legislation_proposals.rb | 5 +++ db/schema.rb | 1 + 14 files changed, 114 insertions(+), 2 deletions(-) create mode 100644 db/migrate/20180807104331_add_selected_to_legislation_proposals.rb diff --git a/app/controllers/admin/legislation/proposals_controller.rb b/app/controllers/admin/legislation/proposals_controller.rb index 7f4441bce..bd46d28fe 100644 --- a/app/controllers/admin/legislation/proposals_controller.rb +++ b/app/controllers/admin/legislation/proposals_controller.rb @@ -1,7 +1,23 @@ class Admin::Legislation::ProposalsController < Admin::Legislation::BaseController + + has_orders %w{id title supports}, only: :index + load_and_authorize_resource :process, class: "Legislation::Process" load_and_authorize_resource :proposal, class: "Legislation::Proposal", through: :process def index + @proposals = @proposals.send("sort_by_#{@current_order}").page(params[:page]) end -end + + def update + @proposal.selected = !@proposal.selected + + if @proposal.save + notice = t('admin.legislation.proposals.update.notice') + else + notice = t('admin.legislation.proposals.update.error') + end + redirect_to admin_legislation_process_proposals_path, notice: notice + end + +end \ No newline at end of file diff --git a/app/controllers/legislation/processes_controller.rb b/app/controllers/legislation/processes_controller.rb index f30b9d894..11b1be0d6 100644 --- a/app/controllers/legislation/processes_controller.rb +++ b/app/controllers/legislation/processes_controller.rb @@ -1,5 +1,7 @@ class Legislation::ProcessesController < Legislation::BaseController has_filters %w{open next past}, only: :index + has_filters %w{all selected}, only: :proposals + load_and_authorize_resource before_action :set_random_seed, only: :proposals @@ -91,7 +93,9 @@ class Legislation::ProcessesController < Legislation::BaseController @proposals = ::Legislation::Proposal.where(process: @process) @proposals = @proposals.search(params[:search]) if params[:search].present? - @proposals = @proposals.order('random()').page(params[:page]) + @proposals = @proposals.send(@current_filter).order('random()').page(params[:page]) + + @valid_filters = [] unless @proposals.map(&:selected).include? true if @process.proposals_phase.started? || (current_user && current_user.administrator?) legislation_proposal_votes(@proposals) diff --git a/app/models/legislation/proposal.rb b/app/models/legislation/proposal.rb index a345a5904..ad6691578 100644 --- a/app/models/legislation/proposal.rb +++ b/app/models/legislation/proposal.rb @@ -45,9 +45,13 @@ class Legislation::Proposal < ActiveRecord::Base scope :sort_by_confidence_score, -> { reorder(confidence_score: :desc) } scope :sort_by_created_at, -> { reorder(created_at: :desc) } scope :sort_by_most_commented, -> { reorder(comments_count: :desc) } + scope :sort_by_title, -> { reorder(title: :asc) } + scope :sort_by_id, -> { reorder(id: :asc) } + scope :sort_by_supports, -> { reorder(cached_votes_up: :asc) } scope :sort_by_random, -> { reorder("RANDOM()") } scope :sort_by_flags, -> { order(flags_count: :desc, updated_at: :desc) } scope :last_week, -> { where("proposals.created_at >= ?", 7.days.ago)} + scope :selected, -> { where(selected: true) } def to_param "#{id}-#{title}".parameterize diff --git a/app/views/admin/legislation/proposals/index.html.erb b/app/views/admin/legislation/proposals/index.html.erb index aae66e008..d5f4c39fe 100644 --- a/app/views/admin/legislation/proposals/index.html.erb +++ b/app/views/admin/legislation/proposals/index.html.erb @@ -11,4 +11,44 @@ <%= render 'admin/legislation/processes/subnav', process: @process, active: 'proposals' %> <%= render 'form' %> + +<% if @proposals.any? %> +

<%= page_entries_info @proposals %>

+ + <%= render 'shared/wide_order_selector', i18n_namespace: "admin.legislation.processes.proposals" %> + + + + + + + + + + + + + <% @proposals.each do |proposal| %> + + + + + + + <% end %> + +
<%= t("admin.legislation.proposals.index.id") %><%= t("admin.legislation.proposals.index.title") %><%= t("admin.legislation.proposals.index.supports") %><%= t("admin.legislation.proposals.index.selected") %>
<%= proposal.id %><%= proposal.title %><%= proposal.cached_votes_up %> + <% if proposal.selected? + button_text = t("admin.legislation.proposals.index.selected") + clas = 'button expanded' + else + button_text = t("admin.legislation.proposals.index.select") + clas = 'button hollow expanded' + end %> + <%= link_to button_text, admin_legislation_process_proposal_path(@process, proposal), method: 'PUT', class: clas %> +
+ + <%= paginate @proposals %> +<% end %> + diff --git a/app/views/legislation/processes/_proposals_content.html.erb b/app/views/legislation/processes/_proposals_content.html.erb index 63a7ac926..cd36125d0 100644 --- a/app/views/legislation/processes/_proposals_content.html.erb +++ b/app/views/legislation/processes/_proposals_content.html.erb @@ -8,6 +8,7 @@

<%= t("legislation.processes.proposals.empty_proposals") %>

<% else %> + <%= render 'shared/filter_subnav', i18n_namespace: "legislation.processes.proposals" %> <%= render proposals %> <%= paginate proposals %> <% end %> diff --git a/app/views/shared/_wide_order_selector.html.erb b/app/views/shared/_wide_order_selector.html.erb index d5b1405eb..0594f4301 100644 --- a/app/views/shared/_wide_order_selector.html.erb +++ b/app/views/shared/_wide_order_selector.html.erb @@ -2,6 +2,7 @@ # # i18n_namespace: for example "moderation.debates.index" %> + <% if @valid_orders.present? && @valid_orders.count > 1 %>
diff --git a/config/locales/en/activerecord.yml b/config/locales/en/activerecord.yml index d3d19f1ed..84dee7a77 100644 --- a/config/locales/en/activerecord.yml +++ b/config/locales/en/activerecord.yml @@ -76,6 +76,9 @@ en: legislation/process: one: "Process" other: "Processes" + legislation/proposal: + one: "Proposal" + other: "Proposals" legislation/draft_versions: one: "Draft version" other: "Draft versions" diff --git a/config/locales/en/admin.yml b/config/locales/en/admin.yml index 261aca613..fa4e84b62 100644 --- a/config/locales/en/admin.yml +++ b/config/locales/en/admin.yml @@ -394,6 +394,12 @@ en: back: Back title: Create new collaborative legislation process submit_button: Create process + proposals: + select_order: Sort by + orders: + id: Id + title: Title + supports: Supports process: title: Process comments: Comments @@ -411,6 +417,14 @@ en: index: title: Proposals back: Back + id: Id + title: Title + supports: Supports + select: Select + selected: Selected + update: + notice: 'Proposal updated successfully' + error: Proposal couldn't be updated form: custom_categories: Categories custom_categories_description: Categories that users can select creating the proposal. diff --git a/config/locales/en/legislation.yml b/config/locales/en/legislation.yml index 479517a9d..212e3b9ca 100644 --- a/config/locales/en/legislation.yml +++ b/config/locales/en/legislation.yml @@ -52,6 +52,9 @@ en: more_info: More information and context proposals: empty_proposals: There are no proposals + filters: + all: All + selected: Selected debate: empty_questions: There aren't any questions participate: Participate in the debate diff --git a/config/locales/es/activerecord.yml b/config/locales/es/activerecord.yml index 52bb51e9f..2af5c034f 100644 --- a/config/locales/es/activerecord.yml +++ b/config/locales/es/activerecord.yml @@ -76,6 +76,9 @@ es: legislation/process: one: "Proceso" other: "Procesos" + legislation/proposal: + one: "Propuesta" + other: "Propuestas" legislation/draft_versions: one: "Versión borrador" other: "Versiones borrador" diff --git a/config/locales/es/admin.yml b/config/locales/es/admin.yml index 58ea76f13..e6fce5ceb 100644 --- a/config/locales/es/admin.yml +++ b/config/locales/es/admin.yml @@ -395,6 +395,12 @@ es: back: Volver title: Crear nuevo proceso de legislación colaborativa submit_button: Crear proceso + proposals: + select_order: Ordenar por + orders: + id: Id + title: Título + supports: Apoyos process: title: Proceso comments: Comentarios @@ -412,6 +418,14 @@ es: index: title: Propuestas back: Volver + id: Id + title: Título + supports: Apoyos + select: Seleccionar + selected: Seleccionado + update: + notice: Propuesta actualizada correctamente. + error: No se ha podido actualizar la propuesta form: custom_categories: Categorías custom_categories_description: Categorías que el usuario puede seleccionar al crear la propuesta. diff --git a/config/locales/es/legislation.yml b/config/locales/es/legislation.yml index cb7d9785d..db250f604 100644 --- a/config/locales/es/legislation.yml +++ b/config/locales/es/legislation.yml @@ -52,6 +52,9 @@ es: more_info: Más información y contexto proposals: empty_proposals: No hay propuestas + filters: + all: Todos + selected: Seleccionados debate: empty_questions: No hay preguntas participate: Realiza tus aportaciones al debate previo participando en los siguientes temas. diff --git a/db/migrate/20180807104331_add_selected_to_legislation_proposals.rb b/db/migrate/20180807104331_add_selected_to_legislation_proposals.rb new file mode 100644 index 000000000..6696c2796 --- /dev/null +++ b/db/migrate/20180807104331_add_selected_to_legislation_proposals.rb @@ -0,0 +1,5 @@ +class AddSelectedToLegislationProposals < ActiveRecord::Migration + def change + add_column :legislation_proposals, :selected, :boolean + end +end diff --git a/db/schema.rb b/db/schema.rb index b4e58d0e7..ea0b1bbbd 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -687,6 +687,7 @@ ActiveRecord::Schema.define(version: 20180924071722) do t.datetime "updated_at", null: false t.integer "cached_votes_total", default: 0 t.integer "cached_votes_down", default: 0 + t.boolean "selected" end add_index "legislation_proposals", ["legislation_process_id"], name: "index_legislation_proposals_on_legislation_process_id", using: :btree