diff --git a/app/controllers/admin/proposals_controller.rb b/app/controllers/admin/proposals_controller.rb index e76efce21..7e53d1a46 100644 --- a/app/controllers/admin/proposals_controller.rb +++ b/app/controllers/admin/proposals_controller.rb @@ -6,8 +6,22 @@ class Admin::ProposalsController < Admin::BaseController has_orders %w[created_at] + before_action :load_proposal, except: :index + def show - @proposal = Proposal.find(params[:id]) + end + + def update + if @proposal.update(proposal_params) + redirect_to admin_proposal_path(@proposal), notice: t("admin.proposals.update.notice") + else + render :show + end + end + + def toggle_selection + @proposal.toggle :selected + @proposal.save! end private @@ -15,4 +29,13 @@ class Admin::ProposalsController < Admin::BaseController def resource_model Proposal end + + def load_proposal + @proposal = Proposal.find(params[:id]) + end + + def proposal_params + params.require(:proposal).permit(:selected) + end + end diff --git a/app/controllers/proposals_controller.rb b/app/controllers/proposals_controller.rb index 5cc9b7e10..fc596c5f0 100644 --- a/app/controllers/proposals_controller.rb +++ b/app/controllers/proposals_controller.rb @@ -51,7 +51,9 @@ class ProposalsController < ApplicationController discard_draft discard_archived load_retired + load_selected load_featured + remove_archived_from_order_links end def vote @@ -127,7 +129,9 @@ class ProposalsController < ApplicationController end def discard_archived - @resources = @resources.not_archived unless @current_order == "archival_date" + unless @current_order == "archival_date" || params[:selected].present? + @resources = @resources.not_archived + end end def load_retired @@ -139,6 +143,14 @@ class ProposalsController < ApplicationController end end + def load_selected + if params[:selected].present? + @resources = @resources.selected + else + @resources = @resources.not_selected + end + end + def load_featured return unless !@advanced_search_terms && @search_terms.blank? && @tag_filter.blank? && params[:retired].blank? && @current_order != "recommendations" if Setting["feature.featured_proposals"] @@ -151,6 +163,10 @@ class ProposalsController < ApplicationController end end + def remove_archived_from_order_links + @valid_orders.delete("archival_date") + end + def set_view @view = (params[:view] == "minimal") ? "minimal" : "default" end diff --git a/app/helpers/legislation_helper.rb b/app/helpers/legislation_helper.rb index 415de8e74..943f1b35d 100644 --- a/app/helpers/legislation_helper.rb +++ b/app/helpers/legislation_helper.rb @@ -11,22 +11,6 @@ module LegislationHelper t("proposals.index.start_proposal") end - def link_to_toggle_legislation_proposal_selection(proposal) - if proposal.selected? - button_text = t("admin.legislation.proposals.index.selected") - html_class = "button expanded" - else - button_text = t("admin.legislation.proposals.index.select") - html_class = "button hollow expanded" - end - - link_to button_text, - toggle_selection_admin_legislation_process_proposal_path(proposal.process, proposal), - remote: true, - method: :patch, - class: html_class - end - def legislation_process_tabs(process) { "info" => edit_admin_legislation_process_path(process), diff --git a/app/helpers/proposals_helper.rb b/app/helpers/proposals_helper.rb index 633f469a3..ecd8a1490 100644 --- a/app/helpers/proposals_helper.rb +++ b/app/helpers/proposals_helper.rb @@ -64,4 +64,50 @@ module ProposalsHelper proposals_current_view == "default" ? "minimal" : "default" end + def link_to_toggle_proposal_selection(proposal) + if proposal.selected? + button_text = t("admin.proposals.index.selected") + html_class = "button expanded" + else + button_text = t("admin.proposals.index.select") + html_class = "button hollow expanded" + end + + case proposal.class.to_s + when "Proposal" + path = toggle_selection_admin_proposal_path(proposal) + when "Legislation::Proposal" + path = toggle_selection_admin_legislation_process_proposal_path(proposal.process, proposal) + end + + link_to button_text, path, remote: true, method: :patch, class: html_class + end + + def css_for_proposal_info_row(proposal) + if proposal.image.present? + if params[:selected].present? + "small-12 medium-9 column" + else + "small-12 medium-6 large-7 column" + end + else + if params[:selected].present? + "small-12 column" + else + "small-12 medium-9 column" + end + end + end + + def show_proposal_votes? + params[:selected].blank? + end + + def show_featured_proposals? + params[:selected].blank? && @featured_proposals.present? + end + + def show_recommended_proposals? + params[:selected].blank? && feature?("user.recommendations") && @recommended_proposals.present? + end end diff --git a/app/models/proposal.rb b/app/models/proposal.rb index dfc81e2ea..deb829058 100644 --- a/app/models/proposal.rb +++ b/app/models/proposal.rb @@ -74,6 +74,8 @@ class Proposal < ApplicationRecord scope :successful, -> { where("cached_votes_up >= ?", Proposal.votes_needed_for_success) } scope :unsuccessful, -> { where("cached_votes_up < ?", Proposal.votes_needed_for_success) } scope :public_for_api, -> { all } + scope :selected, -> { where(selected: true) } + scope :not_selected, -> { where(selected: false) } scope :not_supported_by_user, ->(user) { where.not(id: user.find_voted_items(votable_type: "Proposal").compact.map(&:id)) } scope :published, -> { where.not(published_at: nil) } scope :draft, -> { where(published_at: nil) } diff --git a/app/views/admin/legislation/proposals/_proposals.html.erb b/app/views/admin/legislation/proposals/_proposals.html.erb index 8682eeab6..a740cbd38 100644 --- a/app/views/admin/legislation/proposals/_proposals.html.erb +++ b/app/views/admin/legislation/proposals/_proposals.html.erb @@ -9,7 +9,7 @@ <%= t("admin.legislation.proposals.index.id") %> <%= t("admin.legislation.proposals.index.title") %> <%= t("admin.legislation.proposals.index.supports") %> - <%= t("admin.legislation.proposals.index.selected") %> + <%= t("admin.proposals.index.selected") %> diff --git a/app/views/admin/legislation/proposals/_select_proposal.html.erb b/app/views/admin/legislation/proposals/_select_proposal.html.erb index 0d5eb845d..d5d2069ab 100644 --- a/app/views/admin/legislation/proposals/_select_proposal.html.erb +++ b/app/views/admin/legislation/proposals/_select_proposal.html.erb @@ -1 +1 @@ -<%= link_to_toggle_legislation_proposal_selection(proposal) %> +<%= link_to_toggle_proposal_selection(proposal) %> diff --git a/app/views/admin/proposals/_form.html.erb b/app/views/admin/proposals/_form.html.erb new file mode 100644 index 000000000..b6dc1c442 --- /dev/null +++ b/app/views/admin/proposals/_form.html.erb @@ -0,0 +1,9 @@ +<%= form_for [:admin, @proposal] do |f| %> + + <%= render "shared/errors", resource: @proposal %> + + <%= f.check_box :selected %> + + <%= f.submit t("admin.proposals.form.update"), class: "button success" %> + +<% end %> diff --git a/app/views/admin/proposals/_select_proposal.html.erb b/app/views/admin/proposals/_select_proposal.html.erb new file mode 100644 index 000000000..d5d2069ab --- /dev/null +++ b/app/views/admin/proposals/_select_proposal.html.erb @@ -0,0 +1 @@ +<%= link_to_toggle_proposal_selection(proposal) %> diff --git a/app/views/admin/proposals/index.html.erb b/app/views/admin/proposals/index.html.erb index 8a8372713..bc59de812 100644 --- a/app/views/admin/proposals/index.html.erb +++ b/app/views/admin/proposals/index.html.erb @@ -16,6 +16,7 @@ <%= t("admin.proposals.index.title") %> <%= t("admin.proposals.index.author") %> <%= t("admin.proposals.index.milestones") %> + <%= t("admin.proposals.index.selected") %> @@ -26,6 +27,7 @@ <%= link_to proposal.title, admin_proposal_path(proposal) %> <%= proposal.author.username %> <%= proposal.milestones.count %> + <%= render "select_proposal", proposal: proposal %> <% end %> diff --git a/app/views/admin/proposals/show.html.erb b/app/views/admin/proposals/show.html.erb index 13fbce01e..afb2379e3 100644 --- a/app/views/admin/proposals/show.html.erb +++ b/app/views/admin/proposals/show.html.erb @@ -26,4 +26,10 @@ <%= render "proposals/info", proposal: @proposal %> +
+
+ <%= render "form" %> +
+
+ <%= render "admin/milestones/milestones", milestoneable: @proposal %> diff --git a/app/views/admin/proposals/toggle_selection.js.erb b/app/views/admin/proposals/toggle_selection.js.erb new file mode 100644 index 000000000..4963b7b7c --- /dev/null +++ b/app/views/admin/proposals/toggle_selection.js.erb @@ -0,0 +1 @@ +$("#<%= dom_id(@proposal) %> .js-select").html('<%= j render("select_proposal", proposal: @proposal) %>'); diff --git a/app/views/proposals/_popular.html.erb b/app/views/proposals/_popular.html.erb deleted file mode 100644 index 7f46ea802..000000000 --- a/app/views/proposals/_popular.html.erb +++ /dev/null @@ -1,6 +0,0 @@ - - - -

- <%= link_to t("proposals.index.top_link_proposals"), summary_proposals_path, class: "small" %>
-

diff --git a/app/views/proposals/_proposal.html.erb b/app/views/proposals/_proposal.html.erb index 97224172a..496f0f4a1 100644 --- a/app/views/proposals/_proposal.html.erb +++ b/app/views/proposals/_proposal.html.erb @@ -12,10 +12,10 @@ alt: proposal.image.title.unicode_normalize %> -
+
<% else %>
-
+
<% end %>
<% cache [locale_and_user_status(proposal), "index", proposal, proposal.author] do %> @@ -62,24 +62,27 @@
-
- <% if proposal.successful? %> -
-

- <%= t("proposals.proposal.successful") %> -

-
- <% elsif proposal.archived? %> -
- <%= t("proposals.proposal.supports", count: proposal.total_votes) %> -

<%= t("proposals.proposal.archived") %>

-
- <% else %> - <%= render "votes", - { proposal: proposal, vote_url: vote_proposal_path(proposal, value: "yes") } %> - <% end %> -
+ <% if show_proposal_votes? %> +
+ <% if proposal.successful? %> +
+
+ <%= render "proposals/supports", proposal: proposal %> +
+
+ <% elsif proposal.archived? %> +
+ <%= t("proposals.proposal.supports", count: proposal.total_votes) %> +

<%= t("proposals.proposal.archived") %>

+
+ <% else %> + <%= render "votes", + { proposal: proposal, vote_url: vote_proposal_path(proposal, value: "yes") } %> + <% end %> +
+ <% end %> +
diff --git a/app/views/proposals/_proposals_lists.html.erb b/app/views/proposals/_proposals_lists.html.erb new file mode 100644 index 000000000..9966582ca --- /dev/null +++ b/app/views/proposals/_proposals_lists.html.erb @@ -0,0 +1,16 @@ + + + +

+ <%= link_to t("proposals.index.top_link_proposals"), + summary_proposals_path, + class: "small" %> +
+ <%= link_to t("proposals.index.archived_proposals"), + proposals_path(order: "archival_date"), + class: "small" %> +
+ <%= link_to t("proposals.index.retired_proposals_link"), + proposals_path(retired: "all"), + class: "small" %> +

diff --git a/app/views/proposals/_retired.html.erb b/app/views/proposals/_retired.html.erb index 78d5c2af0..21b588b0c 100644 --- a/app/views/proposals/_retired.html.erb +++ b/app/views/proposals/_retired.html.erb @@ -1,9 +1,7 @@ - - +<% if params[:retired].present? %> + + -<% if params[:retired].blank? %> -

<%= link_to t("proposals.index.retired_proposals_link"), proposals_path(retired: "all"), class: "small" %>

-<% else %>