Commit d3db6fc31ef9748faa05e9ae4136230770dfb977

Authored by Victor Costa
1 parent abab689d

site_tour: added configuration for environments at plugin settings

plugins/site_tour/controllers/site_tour_plugin_admin_controller.rb 0 → 100644
@@ -0,0 +1,38 @@ @@ -0,0 +1,38 @@
  1 +require 'csv'
  2 +
  3 +class SiteTourPluginAdminController < AdminController
  4 +
  5 + no_design_blocks
  6 +
  7 + def index
  8 + settings = params[:settings]
  9 + settings ||= {}
  10 +
  11 + @settings = Noosfero::Plugin::Settings.new(environment, SiteTourPlugin, settings)
  12 + @settings.actions_csv = convert_to_csv(@settings.actions)
  13 +
  14 + if request.post?
  15 + @settings.actions = convert_from_csv(settings[:actions_csv])
  16 + @settings.settings.delete(:actions_csv)
  17 +
  18 + @settings.save!
  19 + session[:notice] = 'Settings succefully saved.'
  20 + redirect_to :action => 'index'
  21 + end
  22 + end
  23 +
  24 + protected
  25 +
  26 + def convert_to_csv(actions)
  27 + CSV.generate do |csv|
  28 + (@settings.actions||[]).each { |action| csv << action.values }
  29 + end
  30 + end
  31 +
  32 + def convert_from_csv(actions_csv)
  33 + CSV.parse(actions_csv).map do |action|
  34 + {:language => action[0], :group_name => action[1], :selector => action[2], :description => action[3]}
  35 + end
  36 + end
  37 +
  38 +end
plugins/site_tour/lib/site_tour_plugin.rb
@@ -25,11 +25,11 @@ class SiteTourPlugin &lt; Noosfero::Plugin @@ -25,11 +25,11 @@ class SiteTourPlugin &lt; Noosfero::Plugin
25 def body_ending 25 def body_ending
26 proc do 26 proc do
27 tour_file = "/plugins/site_tour/tour/#{language}/tour.js" 27 tour_file = "/plugins/site_tour/tour/#{language}/tour.js"
28 - if File.exists?(Rails.root.join("public#{tour_file}").to_s)  
29 - javascript_include_tag(tour_file)  
30 - else  
31 - ""  
32 - end 28 + js_file = File.exists?(Rails.root.join("public#{tour_file}").to_s) ? tour_file : ""
  29 + settings = Noosfero::Plugin::Settings.new(environment, SiteTourPlugin)
  30 + actions = (settings.actions||[]).select {|action| action[:language] == language}
  31 +
  32 + render(:file => 'tour_actions', :locals => { :actions => actions, :js_file => js_file})
33 end 33 end
34 end 34 end
35 35
@@ -37,4 +37,8 @@ class SiteTourPlugin &lt; Noosfero::Plugin @@ -37,4 +37,8 @@ class SiteTourPlugin &lt; Noosfero::Plugin
37 { SiteTourPlugin::TourBlock => {} } 37 { SiteTourPlugin::TourBlock => {} }
38 end 38 end
39 39
  40 + def self.actions_csv_default_setting
  41 + 'en,tour_plugin,.site-tour-plugin_tour-block .tour-button,"Click to start tour!"'
  42 + end
  43 +
40 end 44 end
plugins/site_tour/test/functional/site_tour_plugin_admin_controller_test.rb 0 → 100644
@@ -0,0 +1,36 @@ @@ -0,0 +1,36 @@
  1 +require File.dirname(__FILE__) + '/../test_helper'
  2 +
  3 +class SiteTourPluginAdminControllerTest < ActionController::TestCase
  4 +
  5 + def setup
  6 + @environment = Environment.default
  7 + @profile = create_user('profile').person
  8 + login_as(@profile.identifier)
  9 + end
  10 +
  11 + attr_reader :environment
  12 +
  13 + should 'parse csv and save actions array in plugin settings' do
  14 + actions_csv = "en,tour_plugin,.tour-button,Click"
  15 + post :index, :settings => {"actions_csv" => actions_csv}
  16 + @settings = Noosfero::Plugin::Settings.new(environment.reload, SiteTourPlugin)
  17 + assert_equal [{:language => 'en', :group_name => 'tour_plugin', :selector => '.tour-button', :description => 'Click'}], @settings.actions
  18 + end
  19 +
  20 + should 'do not store actions_csv' do
  21 + actions_csv = "en,tour_plugin,.tour-button,Click"
  22 + post :index, :settings => {"actions_csv" => actions_csv}
  23 + @settings = Noosfero::Plugin::Settings.new(environment.reload, SiteTourPlugin)
  24 + assert_equal nil, @settings.settings[:actions_csv]
  25 + end
  26 +
  27 + should 'convert actions array to csv to enable user edition' do
  28 + @settings = Noosfero::Plugin::Settings.new(environment.reload, SiteTourPlugin)
  29 + @settings.actions = [{:language => 'en', :group_name => 'tour_plugin', :selector => '.tour-button', :description => 'Click'}]
  30 + @settings.save!
  31 +
  32 + get :index
  33 + assert_tag :tag => 'textarea', :content => "\nen,tour_plugin,.tour-button,Click\n"
  34 + end
  35 +
  36 +end
plugins/site_tour/test/unit/site_tour_plugin_test.rb
1 require File.dirname(__FILE__) + '/../test_helper' 1 require File.dirname(__FILE__) + '/../test_helper'
2 2
3 -class SiteTourPluginTest < ActiveSupport::TestCase 3 +class SiteTourPluginTest < ActionView::TestCase
4 4
5 def setup 5 def setup
6 @plugin = SiteTourPlugin.new 6 @plugin = SiteTourPlugin.new
@@ -26,15 +26,16 @@ class SiteTourPluginTest &lt; ActiveSupport::TestCase @@ -26,15 +26,16 @@ class SiteTourPluginTest &lt; ActiveSupport::TestCase
26 file = '/plugins/site_tour/tour/pt/tour.js' 26 file = '/plugins/site_tour/tour/pt/tour.js'
27 expects(:language).returns('pt') 27 expects(:language).returns('pt')
28 File.expects(:exists?).with(Rails.root.join("public#{file}").to_s).returns(true) 28 File.expects(:exists?).with(Rails.root.join("public#{file}").to_s).returns(true)
29 - expects(:javascript_include_tag).with(file)  
30 - instance_exec(&plugin.body_ending) 29 + expects(:environment).returns(Environment.default)
  30 + assert_tag_in_string instance_exec(&plugin.body_ending), :tag => 'script'
31 end 31 end
32 32
33 - should 'not include javascript file do not exists' do 33 + should 'not include javascript file that not exists' do
34 file = '/plugins/site_tour/tour/pt/tour.js' 34 file = '/plugins/site_tour/tour/pt/tour.js'
35 expects(:language).returns('pt') 35 expects(:language).returns('pt')
36 File.expects(:exists?).with(Rails.root.join("public#{file}").to_s).returns(false) 36 File.expects(:exists?).with(Rails.root.join("public#{file}").to_s).returns(false)
37 - assert_equal "", instance_exec(&plugin.body_ending) 37 + expects(:environment).returns(Environment.default)
  38 + assert_no_tag_in_string instance_exec(&plugin.body_ending), :tag => "script"
38 end 39 end
39 40
40 end 41 end
plugins/site_tour/views/blocks/tour.html.erb
@@ -7,11 +7,5 @@ @@ -7,11 +7,5 @@
7 <% edit_mode = controller.send(:boxes_editor?) && controller.send(:uses_design_blocks?) %> 7 <% edit_mode = controller.send(:boxes_editor?) && controller.send(:uses_design_blocks?) %>
8 8
9 <% unless edit_mode %> 9 <% unless edit_mode %>
10 - <script>  
11 - jQuery( document ).ready(function( $ ) {  
12 - <% block.actions.each_with_index do |action, index| %>  
13 - <%= "siteTourPlugin.add('#{j action[:group_name]}','#{j action[:selector]}', '#{j action[:description]}', #{index + 1});" %>  
14 - <% end %>  
15 - });  
16 - </script> 10 + <%= render :file => 'tour_actions', :locals => {:actions => block.actions} %>
17 <% end %> 11 <% end %>
plugins/site_tour/views/site_tour_plugin_admin/index.html.erb 0 → 100644
@@ -0,0 +1,12 @@ @@ -0,0 +1,12 @@
  1 +<h1><%= _('Site Tour Settings')%></h1>
  2 +
  3 +<%= form_for(:settings) do |f| %>
  4 +
  5 + <%= labelled_form_field _('Tooltips (CSV format: language, group name, selector, description)'), f.text_area(:actions_csv, :style => 'width: 100%', :class => 'actions-csv') %>
  6 +
  7 + <% button_bar do %>
  8 + <%= submit_button(:save, _('Save'), :cancel => {:controller => 'plugins', :action => 'index'}) %>
  9 + <% end %>
  10 +
  11 +<% end %>
  12 +
plugins/site_tour/views/tour_actions.html.erb 0 → 100644
@@ -0,0 +1,12 @@ @@ -0,0 +1,12 @@
  1 +<% js_file = defined?(:js_file) ? js_file : nil %>
  2 +<%= javascript_include_tag(js_file) if js_file.present? %>
  3 +
  4 +<% if actions.present? %>
  5 +<script>
  6 + jQuery( document ).ready(function( $ ) {
  7 + <% actions.each_with_index do |action, index| %>
  8 + <%= "siteTourPlugin.add('#{j action[:group_name]}','#{j action[:selector]}', '#{j action[:description]}', #{index + 1});" %>
  9 + <% end %>
  10 + });
  11 +</script>
  12 +<% end %>