From aa47fe88392602658ea693cb762e6dc5c50ed674 Mon Sep 17 00:00:00 2001 From: Joenio Costa Date: Fri, 13 Jun 2014 21:29:28 -0300 Subject: [PATCH] added piwik plugin --- app/views/layouts/application-ng.html.erb | 5 +++++ lib/noosfero/plugin.rb | 6 ++++++ plugins/piwik/controllers/piwik_plugin_admin_controller.rb | 16 ++++++++++++++++ plugins/piwik/lib/ext/environment.rb | 7 +++++++ plugins/piwik/lib/piwik_plugin.rb | 24 ++++++++++++++++++++++++ plugins/piwik/test/functional/piwik_plugin_test.rb | 31 +++++++++++++++++++++++++++++++ plugins/piwik/test/unit/piwik_plugin_test.rb | 42 ++++++++++++++++++++++++++++++++++++++++++ plugins/piwik/views/piwik_plugin_admin/index.html.erb | 13 +++++++++++++ plugins/piwik/views/tracking-code.rhtml | 15 +++++++++++++++ 9 files changed, 159 insertions(+), 0 deletions(-) create mode 100644 plugins/piwik/controllers/piwik_plugin_admin_controller.rb create mode 100644 plugins/piwik/lib/ext/environment.rb create mode 100644 plugins/piwik/lib/piwik_plugin.rb create mode 100644 plugins/piwik/test/functional/piwik_plugin_test.rb create mode 100644 plugins/piwik/test/unit/piwik_plugin_test.rb create mode 100644 plugins/piwik/views/piwik_plugin_admin/index.html.erb create mode 100644 plugins/piwik/views/tracking-code.rhtml diff --git a/app/views/layouts/application-ng.html.erb b/app/views/layouts/application-ng.html.erb index 44666c0..2bad06a 100644 --- a/app/views/layouts/application-ng.html.erb +++ b/app/views/layouts/application-ng.html.erb @@ -83,5 +83,10 @@ <%= noosfero_layout_features %> <%= theme_javascript_ng %> <%= addthis_javascript %> + <%= + @plugins.dispatch(:body_ending).map do |content| + if content.respond_to?(:call) then instance_exec(&content).html_safe else content.html_safe end + end.join("\n") + %> diff --git a/lib/noosfero/plugin.rb b/lib/noosfero/plugin.rb index a3608de..20be127 100644 --- a/lib/noosfero/plugin.rb +++ b/lib/noosfero/plugin.rb @@ -277,6 +277,12 @@ class Noosfero::Plugin nil end + # -> Adds content to the ending of the page + # returns = lambda block that creates html code or raw rhtml/html.erb + def body_ending + nil + end + # -> Adds content to the ending of the page head # returns = lambda block that creates html code or raw rhtml/html.erb def head_ending diff --git a/plugins/piwik/controllers/piwik_plugin_admin_controller.rb b/plugins/piwik/controllers/piwik_plugin_admin_controller.rb new file mode 100644 index 0000000..b7d5d38 --- /dev/null +++ b/plugins/piwik/controllers/piwik_plugin_admin_controller.rb @@ -0,0 +1,16 @@ +class PiwikPluginAdminController < AdminController + + append_view_path File.join(File.dirname(__FILE__) + '/../views') + + def index + if request.post? + if @environment.update_attributes(params[:environment]) + session[:notice] = _('Piwik plugin settings updated successfully.') + else + session[:notice] = _('Piwik plugin settings could not be saved.') + end + redirect_to :controller => 'plugins', :action => 'index' + end + end + +end diff --git a/plugins/piwik/lib/ext/environment.rb b/plugins/piwik/lib/ext/environment.rb new file mode 100644 index 0000000..33157e1 --- /dev/null +++ b/plugins/piwik/lib/ext/environment.rb @@ -0,0 +1,7 @@ +require_dependency 'environment' + +class Environment + settings_items :piwik_domain + settings_items :piwik_site_id + attr_accessible :piwik_domain, :piwik_site_id +end diff --git a/plugins/piwik/lib/piwik_plugin.rb b/plugins/piwik/lib/piwik_plugin.rb new file mode 100644 index 0000000..a7c3500 --- /dev/null +++ b/plugins/piwik/lib/piwik_plugin.rb @@ -0,0 +1,24 @@ +class PiwikPlugin < Noosfero::Plugin + + include ActionView::Helpers::JavaScriptHelper + include ActionView::Helpers::FormHelper + include ActionView::Helpers::UrlHelper + include ActionView::Helpers::TagHelper + + def self.plugin_name + "Piwik" + end + + def self.plugin_description + _("Tracking and web analytics to your Noosfero's environment") + end + + def body_ending + domain = context.environment.piwik_domain + site_id = context.environment.piwik_site_id + unless domain.blank? || site_id.blank? + expanded_template('tracking-code.rhtml',{:domain => domain, :site_id => site_id}) + end + end + +end diff --git a/plugins/piwik/test/functional/piwik_plugin_test.rb b/plugins/piwik/test/functional/piwik_plugin_test.rb new file mode 100644 index 0000000..0267f95 --- /dev/null +++ b/plugins/piwik/test/functional/piwik_plugin_test.rb @@ -0,0 +1,31 @@ +require File.dirname(__FILE__) + '/../../../../test/test_helper' +require File.dirname(__FILE__) + '/../../controllers/piwik_plugin_admin_controller' + +# Re-raise errors caught by the controller. +class PiwikPluginAdminController; def rescue_action(e) raise e end; end + +class PiwikPluginAdminControllerTest < ActionController::TestCase + + def setup + @environment = Environment.default + user_login = create_admin_user(@environment) + login_as(user_login) + @environment.enabled_plugins = ['PiwikPlugin'] + @environment.save! + end + + should 'access index action' do + get :index + assert_template 'index' + assert_response :success + end + + should 'update piwik plugin settings' do + assert_nil @environment.reload.piwik_domain + assert_nil @environment.reload.piwik_site_id + post :index, :environment => { :piwik_domain => 'http://something', :piwik_site_id => 10 } + assert_not_nil @environment.reload.piwik_domain + assert_not_nil @environment.reload.piwik_site_id + end + +end diff --git a/plugins/piwik/test/unit/piwik_plugin_test.rb b/plugins/piwik/test/unit/piwik_plugin_test.rb new file mode 100644 index 0000000..f3eca89 --- /dev/null +++ b/plugins/piwik/test/unit/piwik_plugin_test.rb @@ -0,0 +1,42 @@ +require File.dirname(__FILE__) + '/../../../../test/test_helper' + +class PiwikPluginTest < ActiveSupport::TestCase + + def setup + @plugin = PiwikPlugin.new + @context = mock() + @plugin.context = @context + @environment = Environment.new + @context.stubs(:environment).returns(@environment) + end + + should 'add content at the body ending unless domain and site_id are blank' do + @environment.piwik_domain = 'piwik.domain.example.com' + @environment.piwik_site_id = 5 + @plugin.stubs(:expanded_template).returns('content') + assert_equal 'content', @plugin.body_ending + end + + should 'not add any content at the body ending if domain is blank' do + @environment.piwik_domain = nil + @environment.piwik_site_id = 5 + @plugin.stubs(:expanded_template).returns('content') + assert_equal nil, @plugin.body_ending + end + + should 'not add any content at the body ending if site_id is blank' do + @environment.piwik_domain = 'piwik.domain.example.com' + @environment.piwik_site_id = nil + @plugin.stubs(:expanded_template).returns('content') + assert_equal nil, @plugin.body_ending + end + + should 'extends Environment with attr piwik_domain' do + assert_respond_to Environment.new, :piwik_domain + end + + should 'extends Environment with attr piwik_site_id' do + assert_respond_to Environment.new, :piwik_site_id + end + +end diff --git a/plugins/piwik/views/piwik_plugin_admin/index.html.erb b/plugins/piwik/views/piwik_plugin_admin/index.html.erb new file mode 100644 index 0000000..edd31f2 --- /dev/null +++ b/plugins/piwik/views/piwik_plugin_admin/index.html.erb @@ -0,0 +1,13 @@ +

<%= _("Piwik plugin settings") %>

+ +<%= form_for(:environment) do |f| %> + + <%= labelled_form_field _('Piwik domain'), f.text_field(:piwik_domain) %> + + <%= labelled_form_field _('Piwik site id'), f.text_field(:piwik_site_id) %> + + <% button_bar do %> + <%= submit_button(:save, _('Save'), :cancel => {:controller => 'plugins', :action => 'index'}) %> + <% end %> + +<% end %> diff --git a/plugins/piwik/views/tracking-code.rhtml b/plugins/piwik/views/tracking-code.rhtml new file mode 100644 index 0000000..0ff2fcb --- /dev/null +++ b/plugins/piwik/views/tracking-code.rhtml @@ -0,0 +1,15 @@ + + + + -- libgit2 0.21.2