From c5016df0fd4f3ad8ba263f4548a4ddf99d38c864 Mon Sep 17 00:00:00 2001 From: Victor Costa Date: Fri, 3 Oct 2014 15:51:22 -0300 Subject: [PATCH] proposals_discussion: added filter criterias --- plugins/proposals_discussion/controllers/public/proposals_discussion_plugin_public_controller.rb | 6 ++++++ plugins/proposals_discussion/lib/proposals_discussion_plugin/proposals_list_helper.rb | 4 ++++ plugins/proposals_discussion/test/functional/proposals_discussion_plugin_public_controller_test.rb | 44 ++++++++++++++++++++++++++++++++++++++++++++ plugins/proposals_discussion/views/content_viewer/_proposals_list.html.erb | 2 +- 4 files changed, 55 insertions(+), 1 deletion(-) diff --git a/plugins/proposals_discussion/controllers/public/proposals_discussion_plugin_public_controller.rb b/plugins/proposals_discussion/controllers/public/proposals_discussion_plugin_public_controller.rb index dc4bf7a..2ce0ee2 100644 --- a/plugins/proposals_discussion/controllers/public/proposals_discussion_plugin_public_controller.rb +++ b/plugins/proposals_discussion/controllers/public/proposals_discussion_plugin_public_controller.rb @@ -20,6 +20,12 @@ class ProposalsDiscussionPluginPublicController < ApplicationController case order when 'alphabetical' proposals.reorder('name') + when 'recent' + proposals.reorder('created_at DESC') + when 'most_commented' + proposals.reorder('comments_count DESC') + when 'most_recently_commented' + proposals.joins("LEFT OUTER JOIN comments ON comments.source_id=articles.id AND comments.created_at >= '#{5.days.ago}'").group('articles.id').reorder('count(comments.id) DESC') else set_seed proposals.reorder('random()') diff --git a/plugins/proposals_discussion/lib/proposals_discussion_plugin/proposals_list_helper.rb b/plugins/proposals_discussion/lib/proposals_discussion_plugin/proposals_list_helper.rb index 2bb568e..b867c7b 100644 --- a/plugins/proposals_discussion/lib/proposals_discussion_plugin/proposals_list_helper.rb +++ b/plugins/proposals_discussion/lib/proposals_discussion_plugin/proposals_list_helper.rb @@ -1,5 +1,9 @@ module ProposalsDiscussionPlugin::ProposalsListHelper + def sort_criteria + [[_('Random'), :random], [_('Alphabetical'), :alphabetical], [_('Recent'), :recent], [_('Most Commented'), :most_commented], [_('Most Recently Commented'), :most_recently_commented]] + end + def more_proposals(text, holder, order, page=1) link_to text, url_for({:controller => 'proposals_discussion_plugin_public', :action => 'load_proposals', :holder_id => holder.id, :profile => profile.identifier, :order => order, :page => page }) end diff --git a/plugins/proposals_discussion/test/functional/proposals_discussion_plugin_public_controller_test.rb b/plugins/proposals_discussion/test/functional/proposals_discussion_plugin_public_controller_test.rb index 981647d..11d394c 100644 --- a/plugins/proposals_discussion/test/functional/proposals_discussion_plugin_public_controller_test.rb +++ b/plugins/proposals_discussion/test/functional/proposals_discussion_plugin_public_controller_test.rb @@ -35,4 +35,48 @@ class ProposalsDiscussionPluginPublicControllerTest < ActionController::TestCase assert_equal [proposal2, proposal3, proposal1], assigns(:proposals) end + should 'load proposals with most commented order' do + proposal1 = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'proposal1', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id) + proposal2 = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'proposal2', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id) + proposal3 = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'proposal3', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id) + + author = fast_create(Person) + Comment.create!(:source => proposal2, :body => 'text', :author => author) + Comment.create!(:source => proposal2, :body => 'text', :author => author) + Comment.create!(:source => proposal3, :body => 'text', :author => author) + + get :load_proposals, :profile => profile.identifier, :holder_id => topic.id, :order => 'most_commented' + assert_equal [proposal2, proposal3, proposal1], assigns(:proposals) + end + + should 'load proposals with most recent order' do + proposal1 = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'z', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id) + proposal2 = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'b', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id) + proposal3 = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'k', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id) + + author = fast_create(Person) + Comment.create!(:source => proposal2, :body => 'text', :author => author) + Comment.create!(:source => proposal2, :body => 'text', :author => author) + Comment.create!(:source => proposal3, :body => 'text', :author => author) + + get :load_proposals, :profile => profile.identifier, :holder_id => topic.id, :order => 'recent' + assert_equal [proposal3, proposal2, proposal1], assigns(:proposals) + end + + should 'load proposals with most recently commented order' do + proposal1 = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'proposal1', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id) + proposal2 = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'proposal2', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id) + proposal3 = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'proposal3', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id) + + author = fast_create(Person) + Comment.create!({:source => proposal2, :body => 'text', :author => author, :created_at => 10.days.ago}, :without_protection => true) + Comment.create!({:source => proposal2, :body => 'text', :author => author, :created_at => 10.days.ago}, :without_protection => true) + Comment.create!(:source => proposal3, :body => 'text', :author => author) + Comment.create!(:source => proposal3, :body => 'text', :author => author) + Comment.create!(:source => proposal1, :body => 'text', :author => author) + + get :load_proposals, :profile => profile.identifier, :holder_id => topic.id, :order => 'most_recently_commented' + assert_equal [proposal3, proposal1, proposal2], assigns(:proposals) + end + end diff --git a/plugins/proposals_discussion/views/content_viewer/_proposals_list.html.erb b/plugins/proposals_discussion/views/content_viewer/_proposals_list.html.erb index de49c47..5d0bea0 100644 --- a/plugins/proposals_discussion/views/content_viewer/_proposals_list.html.erb +++ b/plugins/proposals_discussion/views/content_viewer/_proposals_list.html.erb @@ -12,7 +12,7 @@ <% order ||= 'random' %>
- <% [[_('Random'), :random], [_('Aplhabetical'), :alphabetical]].each_with_index do |order, i| %> + <% sort_criteria.each_with_index do |order, i| %> <%= 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 #{order.second} #{i==0 ? 'selected':''}" %> <% end %>
-- libgit2 0.21.2