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> | ... | ... |