Commit 7ab9ee86794fe72b6f570f79e83d6c4177a950c2

Authored by Victor Costa
1 parent 60b56e2f

Display badges separated by the owner in dashboard

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
... ...
test/unit/dashboard_helper_test.rb 0 → 100644
... ... @@ -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>
... ...