Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -18,28 +18,28 @@ def index
.includes(:category, :scope, :attachments, :coauthorships)
.order(position: :asc)
render "decidim/proposals/proposals/participatory_texts/participatory_text"
elsif verify_dataspace? && data.present?
external_proposals = data["contributions"]
@authors = data["authors"]
proposals = search.result
proposals = reorder(proposals)
proposals = ordered_proposals(proposals).includes(:component, :coauthorships, :attachments)
@total_count = proposals.size + external_proposals.size
@current_page = params[:page].to_i
@current_page = 1 if @current_page < 1
@total_pages = (@total_count.to_f / per_page).ceil
@proposals, @external_proposals = define_proposals_and_external_proposals(proposals, external_proposals, @current_page, per_page)
# Create a pagination object for view
@pagination = create_pagination_object(@total_count, @current_page, per_page)
else
if verify_dataspace? && data.present?
external_proposals = data["contributions"]
@authors = data["authors"]
proposals = search.result
proposals = reorder(proposals.includes(:component, :coauthorships, :attachments))
@total_count = proposals.size + external_proposals.size
@current_page = params[:page].to_i
@current_page = 1 if @current_page < 1
@total_pages = (@total_count.to_f / per_page).ceil
@proposals, @external_proposals = define_proposals_and_external_proposals(proposals, external_proposals, @current_page, per_page)
# Create a pagination object for view
@pagination = create_pagination_object(@total_count, @current_page, per_page)
else
@proposals = search.result
@proposals = reorder(@proposals)
@proposals = paginate(@proposals)
@proposals = @proposals.includes(:component, :coauthorships, :attachments)
end

@voted_proposals = voted_proposals
@proposals = search.result
@proposals = reorder(@proposals)
@proposals = ordered_proposals(@proposals).page(params[:page])
.per(per_page)
.includes(:component, :coauthorships, :attachments)
@proposals = paginate(@proposals)
end
@voted_proposals = voted_proposals
end

def external_proposal
Expand Down Expand Up @@ -67,6 +67,12 @@ def dataspace_enabled
redirect_to(root_url) && return unless verify_dataspace?
end

def ordered_proposals(proposals)
# integrate the modifications from decidim-app lib/extends/controllers/decidim/proposals/proposals_controller_extends.rb
ids = proposals.ids
Decidim::Proposals::Proposal.where(id: ids).order(Arel.sql("position(decidim_proposals_proposals.id::text in '#{ids.join(",")}')"))
end

def voted_proposals
if current_user
Decidim::Proposals::ProposalVote.where(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,7 @@ module Proposals
expect(response).to have_http_status(:ok)
expect(subject).to render_template(:index)
expect(assigns(:proposals).size).to eq(12)
expect(assigns(:proposals).order_values).to eq [Decidim::Proposals::Proposal.arel_table[Decidim::Proposals::Proposal.primary_key] * Arel.sql("RANDOM()")]
expect(assigns(:proposals).order_values.map(&:to_sql)).to eq ["\"decidim_proposals_proposals\".\"id\" * RANDOM()"]
expect(assigns(:proposals).order_values).to eq(["position(decidim_proposals_proposals.id::text in '#{assigns(:proposals).ids.join(",")}')"])
end

it "sets two different collections" do
Expand All @@ -84,8 +83,7 @@ module Proposals
expect(response).to have_http_status(:ok)
expect(subject).to render_template(:index)
expect(assigns(:proposals).size).to eq(2)
expect(assigns(:proposals).order_values).to eq [Decidim::Proposals::Proposal.arel_table[Decidim::Proposals::Proposal.primary_key] * Arel.sql("RANDOM()")]
expect(assigns(:proposals).order_values.map(&:to_sql)).to eq ["\"decidim_proposals_proposals\".\"id\" * RANDOM()"]
expect(assigns(:proposals).order_values).to eq(["position(decidim_proposals_proposals.id::text in '#{assigns(:proposals).ids.join(",")}')"])
end
end

Expand Down Expand Up @@ -173,8 +171,7 @@ module Proposals
get :index
expect(response).to have_http_status(:ok)
expect(subject).to render_template(:index)
expect(assigns(:proposals).order_values).to eq [Decidim::Proposals::Proposal.arel_table[Decidim::Proposals::Proposal.primary_key] * Arel.sql("RANDOM()")]
expect(assigns(:proposals).order_values.map(&:to_sql)).to eq ["\"decidim_proposals_proposals\".\"id\" * RANDOM()"]
expect(assigns(:proposals).order_values).to eq ["position(decidim_proposals_proposals.id::text in '#{assigns(:proposals).ids.join(",")}')"]
expect(assigns(:authors).count).to eq 2
expect(assigns(:authors).first[:reference]).to eq "JD-MEET-2025-09-6"
expect(assigns(:authors).last[:reference]).to eq "JD-MEET-2025-09-23"
Expand Down
2 changes: 1 addition & 1 deletion spec/system/proposals_index_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@
before do
# Decidim::Paginable::OPTIONS.first is 25
create_list(:proposal, Decidim::Paginable::OPTIONS.first, component:)
# we have already create 3 proposals, so we will have a total of 28 proposals
# we have already created 3 proposals, so we will have a total of 28 proposals
end

it "paginates them with proposals first and external proposals at the end" do
Expand Down
Loading