From d3db6fc31ef9748faa05e9ae4136230770dfb977 Mon Sep 17 00:00:00 2001 From: Victor Costa Date: Fri, 16 Jan 2015 11:50:39 -0300 Subject: [PATCH] site_tour: added configuration for environments at plugin settings --- plugins/site_tour/controllers/site_tour_plugin_admin_controller.rb | 38 ++++++++++++++++++++++++++++++++++++++ plugins/site_tour/lib/site_tour_plugin.rb | 14 +++++++++----- plugins/site_tour/test/functional/site_tour_plugin_admin_controller_test.rb | 36 ++++++++++++++++++++++++++++++++++++ plugins/site_tour/test/unit/site_tour_plugin_test.rb | 11 ++++++----- plugins/site_tour/views/blocks/tour.html.erb | 8 +------- plugins/site_tour/views/site_tour_plugin_admin/index.html.erb | 12 ++++++++++++ plugins/site_tour/views/tour_actions.html.erb | 12 ++++++++++++ 7 files changed, 114 insertions(+), 17 deletions(-) create mode 100644 plugins/site_tour/controllers/site_tour_plugin_admin_controller.rb create mode 100644 plugins/site_tour/test/functional/site_tour_plugin_admin_controller_test.rb create mode 100644 plugins/site_tour/views/site_tour_plugin_admin/index.html.erb create mode 100644 plugins/site_tour/views/tour_actions.html.erb diff --git a/plugins/site_tour/controllers/site_tour_plugin_admin_controller.rb b/plugins/site_tour/controllers/site_tour_plugin_admin_controller.rb new file mode 100644 index 0000000..912878e --- /dev/null +++ b/plugins/site_tour/controllers/site_tour_plugin_admin_controller.rb @@ -0,0 +1,38 @@ +require 'csv' + +class SiteTourPluginAdminController < AdminController + + no_design_blocks + + def index + settings = params[:settings] + settings ||= {} + + @settings = Noosfero::Plugin::Settings.new(environment, SiteTourPlugin, settings) + @settings.actions_csv = convert_to_csv(@settings.actions) + + if request.post? + @settings.actions = convert_from_csv(settings[:actions_csv]) + @settings.settings.delete(:actions_csv) + + @settings.save! + session[:notice] = 'Settings succefully saved.' + redirect_to :action => 'index' + end + end + + protected + + def convert_to_csv(actions) + CSV.generate do |csv| + (@settings.actions||[]).each { |action| csv << action.values } + end + end + + def convert_from_csv(actions_csv) + CSV.parse(actions_csv).map do |action| + {:language => action[0], :group_name => action[1], :selector => action[2], :description => action[3]} + end + end + +end diff --git a/plugins/site_tour/lib/site_tour_plugin.rb b/plugins/site_tour/lib/site_tour_plugin.rb index 3b55db8..cc9f1ad 100644 --- a/plugins/site_tour/lib/site_tour_plugin.rb +++ b/plugins/site_tour/lib/site_tour_plugin.rb @@ -25,11 +25,11 @@ class SiteTourPlugin < Noosfero::Plugin def body_ending proc do tour_file = "/plugins/site_tour/tour/#{language}/tour.js" - if File.exists?(Rails.root.join("public#{tour_file}").to_s) - javascript_include_tag(tour_file) - else - "" - end + js_file = File.exists?(Rails.root.join("public#{tour_file}").to_s) ? tour_file : "" + settings = Noosfero::Plugin::Settings.new(environment, SiteTourPlugin) + actions = (settings.actions||[]).select {|action| action[:language] == language} + + render(:file => 'tour_actions', :locals => { :actions => actions, :js_file => js_file}) end end @@ -37,4 +37,8 @@ class SiteTourPlugin < Noosfero::Plugin { SiteTourPlugin::TourBlock => {} } end + def self.actions_csv_default_setting + 'en,tour_plugin,.site-tour-plugin_tour-block .tour-button,"Click to start tour!"' + end + end diff --git a/plugins/site_tour/test/functional/site_tour_plugin_admin_controller_test.rb b/plugins/site_tour/test/functional/site_tour_plugin_admin_controller_test.rb new file mode 100644 index 0000000..6a7cf2b --- /dev/null +++ b/plugins/site_tour/test/functional/site_tour_plugin_admin_controller_test.rb @@ -0,0 +1,36 @@ +require File.dirname(__FILE__) + '/../test_helper' + +class SiteTourPluginAdminControllerTest < ActionController::TestCase + + def setup + @environment = Environment.default + @profile = create_user('profile').person + login_as(@profile.identifier) + end + + attr_reader :environment + + should 'parse csv and save actions array in plugin settings' do + actions_csv = "en,tour_plugin,.tour-button,Click" + post :index, :settings => {"actions_csv" => actions_csv} + @settings = Noosfero::Plugin::Settings.new(environment.reload, SiteTourPlugin) + assert_equal [{:language => 'en', :group_name => 'tour_plugin', :selector => '.tour-button', :description => 'Click'}], @settings.actions + end + + should 'do not store actions_csv' do + actions_csv = "en,tour_plugin,.tour-button,Click" + post :index, :settings => {"actions_csv" => actions_csv} + @settings = Noosfero::Plugin::Settings.new(environment.reload, SiteTourPlugin) + assert_equal nil, @settings.settings[:actions_csv] + end + + should 'convert actions array to csv to enable user edition' do + @settings = Noosfero::Plugin::Settings.new(environment.reload, SiteTourPlugin) + @settings.actions = [{:language => 'en', :group_name => 'tour_plugin', :selector => '.tour-button', :description => 'Click'}] + @settings.save! + + get :index + assert_tag :tag => 'textarea', :content => "\nen,tour_plugin,.tour-button,Click\n" + end + +end diff --git a/plugins/site_tour/test/unit/site_tour_plugin_test.rb b/plugins/site_tour/test/unit/site_tour_plugin_test.rb index 2f0222c..3fd3c35 100644 --- a/plugins/site_tour/test/unit/site_tour_plugin_test.rb +++ b/plugins/site_tour/test/unit/site_tour_plugin_test.rb @@ -1,6 +1,6 @@ require File.dirname(__FILE__) + '/../test_helper' -class SiteTourPluginTest < ActiveSupport::TestCase +class SiteTourPluginTest < ActionView::TestCase def setup @plugin = SiteTourPlugin.new @@ -26,15 +26,16 @@ class SiteTourPluginTest < ActiveSupport::TestCase file = '/plugins/site_tour/tour/pt/tour.js' expects(:language).returns('pt') File.expects(:exists?).with(Rails.root.join("public#{file}").to_s).returns(true) - expects(:javascript_include_tag).with(file) - instance_exec(&plugin.body_ending) + expects(:environment).returns(Environment.default) + assert_tag_in_string instance_exec(&plugin.body_ending), :tag => 'script' end - should 'not include javascript file do not exists' do + should 'not include javascript file that not exists' do file = '/plugins/site_tour/tour/pt/tour.js' expects(:language).returns('pt') File.expects(:exists?).with(Rails.root.join("public#{file}").to_s).returns(false) - assert_equal "", instance_exec(&plugin.body_ending) + expects(:environment).returns(Environment.default) + assert_no_tag_in_string instance_exec(&plugin.body_ending), :tag => "script" end end diff --git a/plugins/site_tour/views/blocks/tour.html.erb b/plugins/site_tour/views/blocks/tour.html.erb index d8e35da..346ddf3 100644 --- a/plugins/site_tour/views/blocks/tour.html.erb +++ b/plugins/site_tour/views/blocks/tour.html.erb @@ -7,11 +7,5 @@ <% edit_mode = controller.send(:boxes_editor?) && controller.send(:uses_design_blocks?) %> <% unless edit_mode %> - + <%= render :file => 'tour_actions', :locals => {:actions => block.actions} %> <% end %> diff --git a/plugins/site_tour/views/site_tour_plugin_admin/index.html.erb b/plugins/site_tour/views/site_tour_plugin_admin/index.html.erb new file mode 100644 index 0000000..30dd022 --- /dev/null +++ b/plugins/site_tour/views/site_tour_plugin_admin/index.html.erb @@ -0,0 +1,12 @@ +

<%= _('Site Tour Settings')%>

+ +<%= form_for(:settings) do |f| %> + + <%= labelled_form_field _('Tooltips (CSV format: language, group name, selector, description)'), f.text_area(:actions_csv, :style => 'width: 100%', :class => 'actions-csv') %> + + <% button_bar do %> + <%= submit_button(:save, _('Save'), :cancel => {:controller => 'plugins', :action => 'index'}) %> + <% end %> + +<% end %> + diff --git a/plugins/site_tour/views/tour_actions.html.erb b/plugins/site_tour/views/tour_actions.html.erb new file mode 100644 index 0000000..61768d1 --- /dev/null +++ b/plugins/site_tour/views/tour_actions.html.erb @@ -0,0 +1,12 @@ +<% js_file = defined?(:js_file) ? js_file : nil %> +<%= javascript_include_tag(js_file) if js_file.present? %> + +<% if actions.present? %> + +<% end %> -- libgit2 0.21.2