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 | 35 | (context_ranking.blank? ? '' : render(:partial => 'gamification/ranking', :locals => {:ranking => context_ranking, :target_ranking => target_ranking, :ranking_class => 'context'})) |
36 | 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 | 50 | end | ... | ... |
... | ... | @@ -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 | 34 | |
35 | 35 | <% unless environment.gamification_plugin_badges.empty? %> |
36 | 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 | 56 | <% end %> |
54 | - </ul> | |
55 | 57 | </div> |
56 | 58 | <% end %> |
57 | 59 | </div> | ... | ... |