diff --git a/controllers/admin/gamification_plugin_badges_controller.rb b/controllers/admin/gamification_plugin_badges_controller.rb new file mode 100644 index 0000000..4267481 --- /dev/null +++ b/controllers/admin/gamification_plugin_badges_controller.rb @@ -0,0 +1,48 @@ +class GamificationPluginBadgesController < PluginAdminController + + def index + @gamification_plugin_badges = environment.gamification_plugin_badges + end + + def show + @gamification_plugin_badge = environment.gamification_plugin_badges.find(params[:id]) + end + + def new + @gamification_plugin_badge = GamificationPlugin::Badge.new + end + + def edit + @gamification_plugin_badge = environment.gamification_plugin_badges.find(params[:id]) + end + + def create + @gamification_plugin_badge = GamificationPlugin::Badge.new(params[:gamification_plugin_badge]) + @gamification_plugin_badge.owner = environment + + if @gamification_plugin_badge.save + session[:notice] = _('Badge was successfully created.') + redirect_to :action => :index + else + render action: "new" + end + end + + def update + @gamification_plugin_badge = environment.gamification_plugin_badges.find(params[:id]) + + if @gamification_plugin_badge.update_attributes(params[:gamification_plugin_badge]) + session[:notice] = _('Badge was successfully updated.') + redirect_to :action => :index + else + render action: "edit" + end + end + + def destroy + @gamification_plugin_badge = environment.gamification_plugin_badges.find(params[:id]) + @gamification_plugin_badge.destroy + + redirect_to :action => :index + end +end diff --git a/controllers/gamification_plugin_admin_controller.rb b/controllers/gamification_plugin_admin_controller.rb index 4acd339..e3a725a 100644 --- a/controllers/gamification_plugin_admin_controller.rb +++ b/controllers/gamification_plugin_admin_controller.rb @@ -13,4 +13,16 @@ class GamificationPluginAdminController < PluginAdminController end end + def new_badge + if request.post? + badge = GamificationPlugin::Badge.new(params[:badge]) + badge.owner = environment + badge.save! + session[:notice] = 'Settings succefully saved.' + redirect_to :action => 'index' + else + render :file => 'gamification_plugin_admin/new_badge' + end + end + end diff --git a/lib/gamification_plugin.rb b/lib/gamification_plugin.rb index 6f9329f..f187f42 100644 --- a/lib/gamification_plugin.rb +++ b/lib/gamification_plugin.rb @@ -29,12 +29,14 @@ class GamificationPlugin < Noosfero::Plugin }] end - Merit.setup do |config| - config.checks_on_each_request = false - config.user_model_name = 'Profile' - config.current_user_method = 'current_person' - end + ActionDispatch::Reloader.to_prepare do + Merit.setup do |config| + config.checks_on_each_request = false + config.user_model_name = 'Profile' + config.current_user_method = 'current_person' + end - require 'merit_ext' + require_dependency 'merit_ext' + end end diff --git a/lib/gamification_plugin/badge.rb b/lib/gamification_plugin/badge.rb index d80fa5e..3da5113 100644 --- a/lib/gamification_plugin/badge.rb +++ b/lib/gamification_plugin/badge.rb @@ -6,4 +6,8 @@ class GamificationPlugin::Badge < Noosfero::Plugin::ActiveRecord serialize :custom_fields + def threshold + (custom_fields || {}).fetch(:threshold, '') + end + end diff --git a/test/functional/gamification_plugin_badges_controller_test.rb b/test/functional/gamification_plugin_badges_controller_test.rb new file mode 100644 index 0000000..719f48d --- /dev/null +++ b/test/functional/gamification_plugin_badges_controller_test.rb @@ -0,0 +1,48 @@ +require 'test_helper' + +class GamificationPluginBadgesControllerTest < ActionController::TestCase + + setup do + @environment = Environment.default + @gamification_plugin_badge = GamificationPlugin::Badge.create!(:name => 'sample_badge', :owner => @environment) + login_as(create_admin_user(@environment)) + end + + should "should get index" do + get :index + assert_response :success + assert_not_nil assigns(:gamification_plugin_badges) + end + + should "should get new" do + get :new + assert_response :success + end + + should "should create gamification_plugin_badge" do + assert_difference('GamificationPlugin::Badge.count') do + post :create, gamification_plugin_badge: { description: @gamification_plugin_badge.description, level: @gamification_plugin_badge.level, name: @gamification_plugin_badge.name, custom_fields: {threshold: @gamification_plugin_badge.threshold} } + end + end + + should "should show gamification_plugin_badge" do + get :show, id: @gamification_plugin_badge + assert_response :success + end + + should "should get edit" do + get :edit, id: @gamification_plugin_badge + assert_response :success + end + + should "should update gamification_plugin_badge" do + put :update, id: @gamification_plugin_badge, gamification_plugin_badge: { description: @gamification_plugin_badge.description, level: @gamification_plugin_badge.level, name: @gamification_plugin_badge.name, custom_fields: {threshold: @gamification_plugin_badge.threshold} } + assert assigns(:gamification_plugin_badge) + end + + should "should destroy gamification_plugin_badge" do + assert_difference('GamificationPlugin::Badge.count', -1) do + delete :destroy, id: @gamification_plugin_badge + end + end +end diff --git a/views/gamification_plugin_admin/index.html.erb b/views/gamification_plugin_admin/index.html.erb index 51de870..130f4ce 100644 --- a/views/gamification_plugin_admin/index.html.erb +++ b/views/gamification_plugin_admin/index.html.erb @@ -15,3 +15,5 @@ <% end %> <% end %> + +<%= link_to _('Badges'), :controller => 'gamification_plugin_badges' %> diff --git a/views/gamification_plugin_badges/_form.html.erb b/views/gamification_plugin_badges/_form.html.erb new file mode 100644 index 0000000..c74dd37 --- /dev/null +++ b/views/gamification_plugin_badges/_form.html.erb @@ -0,0 +1,35 @@ +<%= form_for(@gamification_plugin_badge, :url => {:action => @gamification_plugin_badge.new_record? ? :create : :update}) do |f| %> + <% if @gamification_plugin_badge.errors.any? %> +
Name | +Description | +Level | +Threshold | ++ | + | + |
---|---|---|---|---|---|---|
<%= gamification_plugin_badge.name %> | +<%= gamification_plugin_badge.description %> | +<%= gamification_plugin_badge.level %> | +<%= gamification_plugin_badge.threshold %> | +<%= link_to 'Show', :action => :show, :id => gamification_plugin_badge.id %> | +<%= link_to 'Edit', :action => :edit, :id => gamification_plugin_badge.id %> | +<%= link_to 'Destroy', :action => :destroy, :id => gamification_plugin_badge.id, method: :delete, data: { confirm: 'Are you sure?' } %> | +
<%= notice %>
+ ++ Name: + <%= @gamification_plugin_badge.name %> +
+ ++ Description: + <%= @gamification_plugin_badge.description %> +
+ ++ Level: + <%= @gamification_plugin_badge.level %> +
+ ++ Threshold: + <%= @gamification_plugin_badge.threshold %> +
+ + +<%= link_to 'Edit', :action => :edit, :id => @gamification_plugin_badge.id %> | +<%= link_to 'Back', :action => :index %> -- libgit2 0.21.2