Commit fbd4ea85e65f682fa9b87f6ed8cd5e79d2adab36

Authored by Victor Costa
1 parent c59a0c49

Admin page for point rules

controllers/gamification_plugin_admin_controller.rb 0 → 100644
@@ -0,0 +1,16 @@ @@ -0,0 +1,16 @@
  1 +
  2 +class GamificationPluginAdminController < PluginAdminController
  3 +
  4 + def index
  5 + settings = params[:settings]
  6 + settings ||= {}
  7 +
  8 + @settings = Noosfero::Plugin::Settings.new(environment, GamificationPlugin, settings)
  9 + if request.post?
  10 + @settings.save!
  11 + session[:notice] = 'Settings succefully saved.'
  12 + redirect_to :action => 'index'
  13 + end
  14 + end
  15 +
  16 +end
lib/merit/point_rules.rb
@@ -17,42 +17,37 @@ module Merit @@ -17,42 +17,37 @@ module Merit
17 :action => 'comment#create', 17 :action => 'comment#create',
18 :undo_action => 'comment#destroy', 18 :undo_action => 'comment#destroy',
19 :to => :author, 19 :to => :author,
20 - :value => 1 20 + :value => 1,
  21 + :default_weight => 10
21 }, 22 },
22 :article_author => { 23 :article_author => {
23 :action => 'article#create', 24 :action => 'article#create',
24 :undo_action => 'article#destroy', 25 :undo_action => 'article#destroy',
25 :to => :author, 26 :to => :author,
26 - :value => 1 27 + :value => 1,
  28 + :default_weight => 50
27 }, 29 },
28 :vote_voteable_author => { 30 :vote_voteable_author => {
29 :action => 'vote#create', 31 :action => 'vote#create',
30 :undo_action => 'vote#destroy', 32 :undo_action => 'vote#destroy',
31 :to => lambda {|vote| vote.voteable.author}, 33 :to => lambda {|vote| vote.voteable.author},
32 :profile => lambda {|vote| vote.voteable.profile}, 34 :profile => lambda {|vote| vote.voteable.profile},
33 - :value => lambda {|vote| vote.vote} 35 + :value => lambda {|vote| vote.vote},
  36 + :default_weight => 5
34 }, 37 },
35 :vote_voteable => { 38 :vote_voteable => {
36 :action => 'vote#create', 39 :action => 'vote#create',
37 :undo_action => 'vote#destroy', 40 :undo_action => 'vote#destroy',
38 :to => lambda {|vote| vote.voteable}, 41 :to => lambda {|vote| vote.voteable},
39 :profile => lambda {|vote| vote.voteable.profile}, 42 :profile => lambda {|vote| vote.voteable.profile},
40 - :value => lambda {|vote| vote.vote} 43 + :value => lambda {|vote| vote.vote},
  44 + :default_weight => 5
41 }, 45 },
42 } 46 }
43 47
44 # FIXME get value from environment 48 # FIXME get value from environment
45 def weight(category) 49 def weight(category)
46 - case category  
47 - when :comment_author  
48 - 10  
49 - when :article_author  
50 - 50  
51 - when :vote_voteable  
52 - 5  
53 - when :vote_voteable_author  
54 - 5  
55 - end 50 + AVAILABLE_RULES[category][:default_weight]
56 end 51 end
57 52
58 def calculate_score(target, category, value) 53 def calculate_score(target, category, value)
test/functional/gamification_plugin_admin_controller_test.rb 0 → 100644
@@ -0,0 +1,35 @@ @@ -0,0 +1,35 @@
  1 +require_relative '../test_helper'
  2 +
  3 +class GamificationPluginAdminControllerTest < ActionController::TestCase
  4 +
  5 + def setup
  6 + @environment = Environment.default
  7 + @person = create_user_with_permission('profile', 'edit_environment_features', Environment.default)
  8 + login_as(@person.identifier)
  9 + end
  10 +
  11 + attr_accessor :person, :environment
  12 +
  13 + should 'save point rules' do
  14 + post :index, :settings => {:point_rules => {'comment_author' => {'weight' => '10'}}}
  15 + @settings = Noosfero::Plugin::Settings.new(environment.reload, GamificationPlugin)
  16 + assert_equal({:point_rules => {'comment_author' => {'weight' => '10'}}}, @settings.settings)
  17 + end
  18 +
  19 + should 'load default weights for point rules' do
  20 + get :index
  21 + Merit::PointRules::AVAILABLE_RULES.each do |category, setting|
  22 + assert_select 'input[name=?][value=?]', "settings[point_rules][#{category}[weight]]", setting[:default_weight]
  23 + end
  24 + end
  25 +
  26 + should 'load saved weights for point rules' do
  27 + settings = Noosfero::Plugin::Settings.new(environment, GamificationPlugin, {})
  28 + settings.set_setting(:point_rules, {'comment_author' => {'weight' => '500'}})
  29 + settings.save!
  30 + get :index
  31 + assert_select 'input[name=?][value=?]', "settings[point_rules][comment_author[weight]]", 500
  32 + end
  33 +
  34 +end
  35 +
views/gamification_plugin_admin/index.html.erb 0 → 100644
@@ -0,0 +1,17 @@ @@ -0,0 +1,17 @@
  1 +<h1><%= _('Gamification Settings')%></h1>
  2 +
  3 +<%= form_for(:settings) do |f| %>
  4 + <%= f.fields_for :point_rules do |p| %>
  5 + <div class="point-rules">
  6 + <h3><%= _('Point Rules') %></h3>
  7 + <% Merit::PointRules::AVAILABLE_RULES.each do |category, setting| %>
  8 + <%= labelled_form_field(_(category), p.text_field("#{category}[weight]", :value => @settings.settings.fetch(:point_rules, {}).fetch(category.to_s, {}).fetch('weight', setting[:default_weight]))) %>
  9 + <% end %>
  10 + </div>
  11 + <% end %>
  12 +
  13 + <% button_bar do %>
  14 + <%= submit_button(:save, c_('Save'), :cancel => {:controller => 'plugins', :action => 'index'}) %>
  15 + <% end %>
  16 +
  17 +<% end %>