Commit 09ea859aee3116ee433d68407cb85c002f8b4c71
1 parent
6d387ddc
Exists in
staging
and in
4 other branches
proposals_discussion: added a order option
Showing
5 changed files
with
65 additions
and
13 deletions
Show diff stats
plugins/proposals_discussion/controllers/public/proposals_discussion_plugin_public_controller.rb
| @@ -6,13 +6,13 @@ class ProposalsDiscussionPluginPublicController < ApplicationController | @@ -6,13 +6,13 @@ class ProposalsDiscussionPluginPublicController < ApplicationController | ||
| 6 | holder = profile.articles.find(params[:holder_id]) | 6 | holder = profile.articles.find(params[:holder_id]) |
| 7 | page = (params[:page] || 1).to_i | 7 | page = (params[:page] || 1).to_i |
| 8 | set_rand_cookie if page == 1 | 8 | set_rand_cookie if page == 1 |
| 9 | + order = params[:order] | ||
| 9 | 10 | ||
| 10 | - set_seed | ||
| 11 | - @proposals = holder.proposals.public.reorder('random()') | 11 | + @proposals = order_proposals(holder.proposals.public, order) |
| 12 | @proposals = @proposals.page(page).per_page(5) | 12 | @proposals = @proposals.page(page).per_page(5) |
| 13 | 13 | ||
| 14 | unless @proposals.empty? | 14 | unless @proposals.empty? |
| 15 | - render :partial => 'content_viewer/proposals_list_content', :locals => {:proposals => @proposals, :holder => holder, :page => page+1} | 15 | + render :partial => 'content_viewer/proposals_list_content', :locals => {:proposals => @proposals, :holder => holder, :page => page+1, :order => order} |
| 16 | else | 16 | else |
| 17 | render :text => '' | 17 | render :text => '' |
| 18 | end | 18 | end |
| @@ -20,6 +20,16 @@ class ProposalsDiscussionPluginPublicController < ApplicationController | @@ -20,6 +20,16 @@ class ProposalsDiscussionPluginPublicController < ApplicationController | ||
| 20 | 20 | ||
| 21 | private | 21 | private |
| 22 | 22 | ||
| 23 | + def order_proposals(proposals, order) | ||
| 24 | + case order | ||
| 25 | + when 'alphabetical' | ||
| 26 | + proposals.reorder('name') | ||
| 27 | + else | ||
| 28 | + set_seed | ||
| 29 | + proposals.reorder('random()') | ||
| 30 | + end | ||
| 31 | + end | ||
| 32 | + | ||
| 23 | def set_seed | 33 | def set_seed |
| 24 | #XXX postgresql specific | 34 | #XXX postgresql specific |
| 25 | seed_val = profile.connection.quote(cookies[:_noosfero_proposals_discussion_rand_seed]) | 35 | seed_val = profile.connection.quote(cookies[:_noosfero_proposals_discussion_rand_seed]) |
plugins/proposals_discussion/public/style.css
| @@ -109,3 +109,15 @@ form .proposals-discussion-plugin .body textarea { | @@ -109,3 +109,15 @@ form .proposals-discussion-plugin .body textarea { | ||
| 109 | font-weight: bold; | 109 | font-weight: bold; |
| 110 | font-size: 14px; | 110 | font-size: 14px; |
| 111 | } | 111 | } |
| 112 | + | ||
| 113 | +.proposals_list .filters { | ||
| 114 | + float: right; | ||
| 115 | +} | ||
| 116 | +#article .proposals_list .filters a { | ||
| 117 | + text-decoration: none; | ||
| 118 | + border-left: 1px solid rgb(185, 185, 185); | ||
| 119 | + padding: 0 5px; | ||
| 120 | +} | ||
| 121 | +.proposals_list .filters a.selected { | ||
| 122 | + font-weight: bold; | ||
| 123 | +} |
plugins/proposals_discussion/test/functional/proposals_discussion_plugin_public_controller_test.rb
| @@ -27,4 +27,12 @@ class ProposalsDiscussionPluginPublicControllerTest < ActionController::TestCase | @@ -27,4 +27,12 @@ class ProposalsDiscussionPluginPublicControllerTest < ActionController::TestCase | ||
| 27 | assert_equal '', response.body | 27 | assert_equal '', response.body |
| 28 | end | 28 | end |
| 29 | 29 | ||
| 30 | + should 'load proposals with alphabetical order' do | ||
| 31 | + proposal1 = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'z proposal', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id) | ||
| 32 | + proposal2 = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'abc proposal', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id) | ||
| 33 | + proposal3 = fast_create(ProposalsDiscussionPlugin::Proposal, :name => 'abd proposal', :abstract => 'proposal abstract', :profile_id => profile.id, :parent_id => topic.id) | ||
| 34 | + get :load_proposals, :profile => profile.identifier, :holder_id => discussion.id, :order => 'alphabetical' | ||
| 35 | + assert_equal [proposal2, proposal3, proposal1], assigns(:proposals) | ||
| 36 | + end | ||
| 37 | + | ||
| 30 | end | 38 | end |
plugins/proposals_discussion/views/content_viewer/_proposals_list.html.erb
| 1 | <script src="/javascripts/plugins/proposals_discussion/jquery.jscroll.min.js" type="text/javascript"></script> | 1 | <script src="/javascripts/plugins/proposals_discussion/jquery.jscroll.min.js" type="text/javascript"></script> |
| 2 | <script> | 2 | <script> |
| 3 | jQuery(document).ready(function($) { | 3 | jQuery(document).ready(function($) { |
| 4 | - $('.proposals').jscroll({ | ||
| 5 | - loadingHtml: '<img src="/images/loading.gif" alt="Loading" /> <%= _("Loading...") %>', | ||
| 6 | - nextSelector: 'div.more a' | 4 | + function proposalsScroll() { |
| 5 | + $('.proposals').data('jscroll', null); | ||
| 6 | + $('.proposals').jscroll({ | ||
| 7 | + loadingHtml: '<img src="/images/loading.gif" alt="Loading" /> <%= _("Loading...") %>', | ||
| 8 | + nextSelector: 'div.more a' | ||
| 9 | + }); | ||
| 10 | + $('.proposals').trigger('scroll.jscroll'); | ||
| 11 | + } | ||
| 12 | + proposalsScroll(); | ||
| 13 | + | ||
| 14 | + $('.proposals_list .filters a.order').on('ajax:success', function(event, data, status, xhr) { | ||
| 15 | + $('.proposals_list .filters a.order').removeClass('selected'); | ||
| 16 | + $(this).addClass('selected'); | ||
| 17 | + $(this).parents('div.proposals_list').find('.proposals').html(data); | ||
| 18 | + proposalsScroll(); | ||
| 7 | }); | 19 | }); |
| 8 | - $('.proposals').trigger('scroll.jscroll'); | ||
| 9 | }); | 20 | }); |
| 21 | + | ||
| 10 | </script> | 22 | </script> |
| 11 | 23 | ||
| 12 | <% private_proposals = user ? @page.proposals.private(user) : [] %> | 24 | <% private_proposals = user ? @page.proposals.private(user) : [] %> |
| @@ -17,10 +29,20 @@ | @@ -17,10 +29,20 @@ | ||
| 17 | </div> | 29 | </div> |
| 18 | <% end %> | 30 | <% end %> |
| 19 | 31 | ||
| 20 | -<h5><%= _('Proposals') %></h5> | ||
| 21 | -<div class="proposals"> | ||
| 22 | - <div class="more"> | ||
| 23 | - <img src="/images/loading.gif" alt="Loading" /><%= _("Loading...") %> | ||
| 24 | - <%= link_to '', url_for({:controller => 'proposals_discussion_plugin_public', :action => 'load_proposals', :holder_id => holder.id, :profile => profile.identifier }) %> | 32 | +<% order ||= 'random' %> |
| 33 | +<div class="proposals_list"> | ||
| 34 | + <h5><%= _('Proposals') %></h5> | ||
| 35 | + <div class="filters"> | ||
| 36 | + <% [[_('Random'), :random], [_('Aplhabetical'), :alphabetical]].each do |order| %> | ||
| 37 | + <%= 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' %> | ||
| 38 | + <% end %> | ||
| 39 | + </div> | ||
| 40 | + <div class="clear"></div> | ||
| 41 | + | ||
| 42 | + <div class="proposals"> | ||
| 43 | + <div class="more"> | ||
| 44 | + <img src="/images/loading.gif" alt="Loading" /><%= _("Loading...") %> | ||
| 45 | + <%= link_to '', url_for({:controller => 'proposals_discussion_plugin_public', :action => 'load_proposals', :holder_id => holder.id, :profile => profile.identifier, :order => order }) %> | ||
| 46 | + </div> | ||
| 25 | </div> | 47 | </div> |
| 26 | </div> | 48 | </div> |
plugins/proposals_discussion/views/content_viewer/_proposals_list_content.html.erb
| 1 | <%= render :partial => 'content_viewer/proposal_card', :collection => proposals %> | 1 | <%= render :partial => 'content_viewer/proposal_card', :collection => proposals %> |
| 2 | 2 | ||
| 3 | <div class="more"> | 3 | <div class="more"> |
| 4 | - <%= link_to _('More'), url_for({:controller => 'proposals_discussion_plugin_public', :action => 'load_proposals', :holder_id => holder.id, :profile => profile.identifier, :page => page }) %> | 4 | + <%= link_to _('More'), url_for({:controller => 'proposals_discussion_plugin_public', :action => 'load_proposals', :holder_id => holder.id, :profile => profile.identifier, :page => page, :order => order }) %> |
| 5 | </div> | 5 | </div> |