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 %>