From 713bf1e3fe7bf7ce214d608dba3fa88326f43126 Mon Sep 17 00:00:00 2001 From: Victor Costa Date: Tue, 12 Aug 2014 11:10:52 -0300 Subject: [PATCH] proposals_discussion: added a order option --- controllers/public/proposals_discussion_plugin_public_controller.rb | 16 +++++++++++++--- public/style.css | 12 ++++++++++++ test/functional/proposals_discussion_plugin_public_controller_test.rb | 8 ++++++++ views/content_viewer/_proposals_list.html.erb | 40 +++++++++++++++++++++++++++++++--------- views/content_viewer/_proposals_list_content.html.erb | 2 +- 5 files changed, 65 insertions(+), 13 deletions(-) diff --git a/controllers/public/proposals_discussion_plugin_public_controller.rb b/controllers/public/proposals_discussion_plugin_public_controller.rb index c02c243..0c4a6ae 100644 --- a/controllers/public/proposals_discussion_plugin_public_controller.rb +++ b/controllers/public/proposals_discussion_plugin_public_controller.rb @@ -6,13 +6,13 @@ class ProposalsDiscussionPluginPublicController < ApplicationController holder = profile.articles.find(params[:holder_id]) page = (params[:page] || 1).to_i set_rand_cookie if page == 1 + order = params[:order] - set_seed - @proposals = holder.proposals.public.reorder('random()') + @proposals = order_proposals(holder.proposals.public, order) @proposals = @proposals.page(page).per_page(5) unless @proposals.empty? - render :partial => 'content_viewer/proposals_list_content', :locals => {:proposals => @proposals, :holder => holder, :page => page+1} + render :partial => 'content_viewer/proposals_list_content', :locals => {:proposals => @proposals, :holder => holder, :page => page+1, :order => order} else render :text => '' end @@ -20,6 +20,16 @@ class ProposalsDiscussionPluginPublicController < ApplicationController private + def order_proposals(proposals, order) + case order + when 'alphabetical' + proposals.reorder('name') + else + set_seed + proposals.reorder('random()') + end + end + def set_seed #XXX postgresql specific seed_val = profile.connection.quote(cookies[:_noosfero_proposals_discussion_rand_seed]) diff --git a/public/style.css b/public/style.css index 087bdfb..ae82319 100644 --- a/public/style.css +++ b/public/style.css @@ -109,3 +109,15 @@ form .proposals-discussion-plugin .body textarea { font-weight: bold; font-size: 14px; } + +.proposals_list .filters { + float: right; +} +#article .proposals_list .filters a { + text-decoration: none; + border-left: 1px solid rgb(185, 185, 185); + padding: 0 5px; +} +.proposals_list .filters a.selected { + font-weight: bold; +} diff --git a/test/functional/proposals_discussion_plugin_public_controller_test.rb b/test/functional/proposals_discussion_plugin_public_controller_test.rb index be5cb94..2461186 100644 --- a/test/functional/proposals_discussion_plugin_public_controller_test.rb +++ b/test/functional/proposals_discussion_plugin_public_controller_test.rb @@ -27,4 +27,12 @@ class ProposalsDiscussionPluginPublicControllerTest < ActionController::TestCase assert_equal '', response.body end + should 'load proposals with alphabetical order' do + proposal1 = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'z proposal', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id) + proposal2 = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'abc proposal', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id) + proposal3 = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'abd proposal', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id) + get :load_proposals, :profile => profile.identifier, :holder_id => discussion.id, :order => 'alphabetical' + assert_equal [proposal2, proposal3, proposal1], assigns(:proposals) + end + end diff --git a/views/content_viewer/_proposals_list.html.erb b/views/content_viewer/_proposals_list.html.erb index 0c4123e..b5e1f60 100644 --- a/views/content_viewer/_proposals_list.html.erb +++ b/views/content_viewer/_proposals_list.html.erb @@ -1,12 +1,24 @@ <% private_proposals = user ? @page.proposals.private(user) : [] %> @@ -17,10 +29,20 @@ <% end %> -
<%= _('Proposals') %>
-
-
- Loading<%= _("Loading...") %> - <%= link_to '', url_for({:controller => 'proposals_discussion_plugin_public', :action => 'load_proposals', :holder_id => holder.id, :profile => profile.identifier }) %> +<% order ||= 'random' %> +
+
<%= _('Proposals') %>
+
+ <% [[_('Random'), :random], [_('Aplhabetical'), :alphabetical]].each do |order| %> + <%= link_to order.first, url_for({:controller => 'proposals_discussion_plugin_public', :action => 'load_proposals', :holder_id => holder.id, :profile => profile.identifier, :order => order.second}), :remote => true, :class => 'order' %> + <% end %> +
+
+ +
+
+ Loading<%= _("Loading...") %> + <%= link_to '', url_for({:controller => 'proposals_discussion_plugin_public', :action => 'load_proposals', :holder_id => holder.id, :profile => profile.identifier, :order => order }) %> +
diff --git a/views/content_viewer/_proposals_list_content.html.erb b/views/content_viewer/_proposals_list_content.html.erb index 08ecf91..5031b3a 100644 --- a/views/content_viewer/_proposals_list_content.html.erb +++ b/views/content_viewer/_proposals_list_content.html.erb @@ -1,5 +1,5 @@ <%= render :partial => 'content_viewer/proposal_card', :collection => proposals %>
- <%= link_to _('More'), url_for({:controller => 'proposals_discussion_plugin_public', :action => 'load_proposals', :holder_id => holder.id, :profile => profile.identifier, :page => page }) %> + <%= link_to _('More'), url_for({:controller => 'proposals_discussion_plugin_public', :action => 'load_proposals', :holder_id => holder.id, :profile => profile.identifier, :page => page, :order => order }) %>
-- libgit2 0.21.2