Commit 7ab9ee86794fe72b6f570f79e83d6c4177a950c2
1 parent
60b56e2f
Exists in
master
and in
1 other branch
Display badges separated by the owner in dashboard
Showing
3 changed files
with
56 additions
and
17 deletions
Show diff stats
lib/gamification_plugin/dashboard_helper.rb
@@ -35,4 +35,16 @@ module GamificationPlugin::DashboardHelper | @@ -35,4 +35,16 @@ module GamificationPlugin::DashboardHelper | ||
35 | (context_ranking.blank? ? '' : render(:partial => 'gamification/ranking', :locals => {:ranking => context_ranking, :target_ranking => target_ranking, :ranking_class => 'context'})) | 35 | (context_ranking.blank? ? '' : render(:partial => 'gamification/ranking', :locals => {:ranking => context_ranking, :target_ranking => target_ranking, :ranking_class => 'context'})) |
36 | end | 36 | end |
37 | 37 | ||
38 | + def badges_title(owner) | ||
39 | + return _('Badges for %s' % owner.name) if owner.kind_of?(Organization) | ||
40 | + _('Badges') | ||
41 | + end | ||
42 | + | ||
43 | + def grouped_badges | ||
44 | + environment.gamification_plugin_badges.all.group_by(&:owner).sort do |a, b| | ||
45 | + return -1 if a.first.kind_of?(Environment) | ||
46 | + a.first.name <=> b.first.name | ||
47 | + end | ||
48 | + end | ||
49 | + | ||
38 | end | 50 | end |
@@ -0,0 +1,25 @@ | @@ -0,0 +1,25 @@ | ||
1 | +require_relative "../test_helper" | ||
2 | + | ||
3 | +class DashboardHelperTest < ActiveSupport::TestCase | ||
4 | + | ||
5 | + include GamificationPlugin::DashboardHelper | ||
6 | + | ||
7 | + should 'return title for global badges' do | ||
8 | + owner = Environment.new | ||
9 | + assert_equal 'Badges', badges_title(owner) | ||
10 | + end | ||
11 | + | ||
12 | + should 'return title for organization badges' do | ||
13 | + owner = Organization.new(:name => 'organization') | ||
14 | + assert_equal 'Badges for organization', badges_title(owner) | ||
15 | + end | ||
16 | + | ||
17 | + should 'return badges grouped by owner' do | ||
18 | + environment = Environment.default | ||
19 | + expects(:environment).at_least_once.returns(environment) | ||
20 | + badge1 = GamificationPlugin::Badge.create!(:owner => fast_create(Organization)) | ||
21 | + badge2 = GamificationPlugin::Badge.create!(:owner => environment) | ||
22 | + assert_equal [[badge2.owner, [badge2]], [badge1.owner, [badge1]]], grouped_badges | ||
23 | + end | ||
24 | + | ||
25 | +end |
views/gamification/dashboard.html.erb
@@ -34,24 +34,26 @@ | @@ -34,24 +34,26 @@ | ||
34 | 34 | ||
35 | <% unless environment.gamification_plugin_badges.empty? %> | 35 | <% unless environment.gamification_plugin_badges.empty? %> |
36 | <div class="badges"> | 36 | <div class="badges"> |
37 | - <h3><%= _('Badges') %></h3> | ||
38 | - <ul class="badge-list"> | ||
39 | - <% environment.gamification_plugin_badges.group(:name).count.each do |badge_name, amount| %> | ||
40 | - <% person_badge = @target.badges.where(:name => badge_name).last %> | ||
41 | - <% badge = environment.gamification_plugin_badges.where(:name => badge_name).last %> | ||
42 | - <li class="badge <%= badge.name %>"> | ||
43 | - <div class="badge" title="<%= badge.description %>"> | ||
44 | - <div class="image <%= badge.name %>"></div> | ||
45 | - <ul class="level rating"> | ||
46 | - <% 1.upto(badge.level).map do |n|%> | ||
47 | - <span class="star <%= (person_badge && person_badge.level >= n) ? 'earned' : 'not-earned' %>" >★</span> | ||
48 | - <% end %> | ||
49 | - </ul> | ||
50 | - <div class="title"><%= badge.title %></div> | ||
51 | - </div> | ||
52 | - </li> | 37 | + <% grouped_badges.each do |owner, badges| %> |
38 | + <h3><%= badges_title owner %></h3> | ||
39 | + <ul class="badge-list"> | ||
40 | + <% badges.group_by(&:name).each do |badge_name, badges_group| %> | ||
41 | + <% badge = badges_group.sort_by(&:level).last %> | ||
42 | + <% person_badge = @target.badges.where(:name => badge.name).last %> | ||
43 | + <li class="badge <%= badge.name %>"> | ||
44 | + <div class="badge" title="<%= badge.description %>"> | ||
45 | + <div class="image <%= badge.name %>"></div> | ||
46 | + <ul class="level rating"> | ||
47 | + <% 1.upto(badge.level).map do |n|%> | ||
48 | + <span class="star <%= (person_badge && person_badge.level >= n) ? 'earned' : 'not-earned' %>" >★</span> | ||
49 | + <% end %> | ||
50 | + </ul> | ||
51 | + <div class="title"><%= badge.title %></div> | ||
52 | + </div> | ||
53 | + </li> | ||
54 | + <% end %> | ||
55 | + </ul> | ||
53 | <% end %> | 56 | <% end %> |
54 | - </ul> | ||
55 | </div> | 57 | </div> |
56 | <% end %> | 58 | <% end %> |
57 | </div> | 59 | </div> |