Commit a64414ccdff78a3c7548505bdfd8a049180047b0

Authored by Victor Costa
1 parent bb753fab

Generalize ranking

lib/gamification_plugin/dashboard_helper.rb
... ... @@ -15,14 +15,14 @@ module GamificationPlugin::DashboardHelper
15 15 HashWithIndifferentAccess.new(Merit::PointRules::AVAILABLE_RULES)[point.score.category][:description]
16 16 end
17 17  
18   - def ranking(from_date=nil, limit=10)
  18 + def ranking(target, from_date=nil, limit=10)
19 19 # FIXME move these queries to profile model
20   - ranking = Profile.select('profiles.*, sum(num_points) as gamification_points, ROW_NUMBER() OVER(order by sum(num_points) DESC) as gamification_position').joins(:sash => {:scores => :score_points}).where(:type => 'Person').order('sum(num_points) DESC').group('profiles.id')
  20 + ranking = Profile.select('profiles.*, sum(num_points) as gamification_points, ROW_NUMBER() OVER(order by sum(num_points) DESC) as gamification_position').joins(:sash => {:scores => :score_points}).where(:type => target.class).order('sum(num_points) DESC').group('profiles.id')
21 21 ranking = ranking.where("merit_score_points.created_at >= ?", from_date) if from_date.present?
22   - profile_ranking = Profile.from("(#{ranking.to_sql}) profiles").where('profiles.id' => profile.id).first
  22 + target_ranking = Profile.from("(#{ranking.to_sql}) profiles").where('profiles.id' => target.id).first
23 23 ranking = ranking.limit(limit)
24 24  
25   - render :partial => 'gamification/ranking', :locals => {:ranking => ranking, :profile_ranking => profile_ranking}
  25 + render :partial => 'gamification/ranking', :locals => {:ranking => ranking, :target_ranking => target_ranking}
26 26 end
27 27  
28 28 end
... ...
views/gamification/_ranking.html.erb
1 1 <ul class="ranking">
2   - <% if profile_ranking.present? %>
  2 + <% if target_ranking.present? %>
3 3 <span><%= _('Your position: ') %></span>
4   - <span><%= profile_ranking.gamification_position %></span>
  4 + <span><%= target_ranking.gamification_position %></span>
5 5 <% else %>
6 6 <%= _('Not scored yet') %>
7 7 <% end %>
... ...
views/gamification/dashboard.html.erb
... ... @@ -50,21 +50,23 @@
50 50 <% end %>
51 51 </div>
52 52  
  53 +<% if @target.kind_of?(Profile) %>
53 54 <div class="rankings">
54 55 <h3><%= _('Ranking') %></h3>
55 56 <div class="ranking week">
56 57 <h4><%= _('Week') %></h4>
57   - <%= ranking(Time.zone.now.at_beginning_of_week) %>
  58 + <%= ranking(@target, Time.zone.now.at_beginning_of_week) %>
58 59 </div>
59 60 <div class="ranking month">
60 61 <h4><%= _('Month') %></h4>
61   - <%= ranking(Time.zone.now.at_beginning_of_month) %>
  62 + <%= ranking(@target, Time.zone.now.at_beginning_of_month) %>
62 63 </div>
63 64 <div class="ranking all-time">
64 65 <h4><%= _('All Time') %></h4>
65   - <%= ranking %>
  66 + <%= ranking(@target) %>
66 67 </div>
67 68 </div>
  69 +<% end %>
68 70  
69 71 <script>
70 72 $('.gamification .badge-list').slick({
... ...