Commit aa47fe88392602658ea693cb762e6dc5c50ed674
1 parent
8791c34e
Exists in
master
and in
29 other branches
added piwik plugin
added new hotstop "body_ending"
Showing
9 changed files
with
159 additions
and
0 deletions
Show diff stats
app/views/layouts/application-ng.html.erb
@@ -83,5 +83,10 @@ | @@ -83,5 +83,10 @@ | ||
83 | <%= noosfero_layout_features %> | 83 | <%= noosfero_layout_features %> |
84 | <%= theme_javascript_ng %> | 84 | <%= theme_javascript_ng %> |
85 | <%= addthis_javascript %> | 85 | <%= addthis_javascript %> |
86 | + <%= | ||
87 | + @plugins.dispatch(:body_ending).map do |content| | ||
88 | + if content.respond_to?(:call) then instance_exec(&content).html_safe else content.html_safe end | ||
89 | + end.join("\n") | ||
90 | + %> | ||
86 | </body> | 91 | </body> |
87 | </html> | 92 | </html> |
lib/noosfero/plugin.rb
@@ -277,6 +277,12 @@ class Noosfero::Plugin | @@ -277,6 +277,12 @@ class Noosfero::Plugin | ||
277 | nil | 277 | nil |
278 | end | 278 | end |
279 | 279 | ||
280 | + # -> Adds content to the ending of the page | ||
281 | + # returns = lambda block that creates html code or raw rhtml/html.erb | ||
282 | + def body_ending | ||
283 | + nil | ||
284 | + end | ||
285 | + | ||
280 | # -> Adds content to the ending of the page head | 286 | # -> Adds content to the ending of the page head |
281 | # returns = lambda block that creates html code or raw rhtml/html.erb | 287 | # returns = lambda block that creates html code or raw rhtml/html.erb |
282 | def head_ending | 288 | def head_ending |
plugins/piwik/controllers/piwik_plugin_admin_controller.rb
0 → 100644
@@ -0,0 +1,16 @@ | @@ -0,0 +1,16 @@ | ||
1 | +class PiwikPluginAdminController < AdminController | ||
2 | + | ||
3 | + append_view_path File.join(File.dirname(__FILE__) + '/../views') | ||
4 | + | ||
5 | + def index | ||
6 | + if request.post? | ||
7 | + if @environment.update_attributes(params[:environment]) | ||
8 | + session[:notice] = _('Piwik plugin settings updated successfully.') | ||
9 | + else | ||
10 | + session[:notice] = _('Piwik plugin settings could not be saved.') | ||
11 | + end | ||
12 | + redirect_to :controller => 'plugins', :action => 'index' | ||
13 | + end | ||
14 | + end | ||
15 | + | ||
16 | +end |
@@ -0,0 +1,24 @@ | @@ -0,0 +1,24 @@ | ||
1 | +class PiwikPlugin < Noosfero::Plugin | ||
2 | + | ||
3 | + include ActionView::Helpers::JavaScriptHelper | ||
4 | + include ActionView::Helpers::FormHelper | ||
5 | + include ActionView::Helpers::UrlHelper | ||
6 | + include ActionView::Helpers::TagHelper | ||
7 | + | ||
8 | + def self.plugin_name | ||
9 | + "Piwik" | ||
10 | + end | ||
11 | + | ||
12 | + def self.plugin_description | ||
13 | + _("Tracking and web analytics to your Noosfero's environment") | ||
14 | + end | ||
15 | + | ||
16 | + def body_ending | ||
17 | + domain = context.environment.piwik_domain | ||
18 | + site_id = context.environment.piwik_site_id | ||
19 | + unless domain.blank? || site_id.blank? | ||
20 | + expanded_template('tracking-code.rhtml',{:domain => domain, :site_id => site_id}) | ||
21 | + end | ||
22 | + end | ||
23 | + | ||
24 | +end |
@@ -0,0 +1,31 @@ | @@ -0,0 +1,31 @@ | ||
1 | +require File.dirname(__FILE__) + '/../../../../test/test_helper' | ||
2 | +require File.dirname(__FILE__) + '/../../controllers/piwik_plugin_admin_controller' | ||
3 | + | ||
4 | +# Re-raise errors caught by the controller. | ||
5 | +class PiwikPluginAdminController; def rescue_action(e) raise e end; end | ||
6 | + | ||
7 | +class PiwikPluginAdminControllerTest < ActionController::TestCase | ||
8 | + | ||
9 | + def setup | ||
10 | + @environment = Environment.default | ||
11 | + user_login = create_admin_user(@environment) | ||
12 | + login_as(user_login) | ||
13 | + @environment.enabled_plugins = ['PiwikPlugin'] | ||
14 | + @environment.save! | ||
15 | + end | ||
16 | + | ||
17 | + should 'access index action' do | ||
18 | + get :index | ||
19 | + assert_template 'index' | ||
20 | + assert_response :success | ||
21 | + end | ||
22 | + | ||
23 | + should 'update piwik plugin settings' do | ||
24 | + assert_nil @environment.reload.piwik_domain | ||
25 | + assert_nil @environment.reload.piwik_site_id | ||
26 | + post :index, :environment => { :piwik_domain => 'http://something', :piwik_site_id => 10 } | ||
27 | + assert_not_nil @environment.reload.piwik_domain | ||
28 | + assert_not_nil @environment.reload.piwik_site_id | ||
29 | + end | ||
30 | + | ||
31 | +end |
@@ -0,0 +1,42 @@ | @@ -0,0 +1,42 @@ | ||
1 | +require File.dirname(__FILE__) + '/../../../../test/test_helper' | ||
2 | + | ||
3 | +class PiwikPluginTest < ActiveSupport::TestCase | ||
4 | + | ||
5 | + def setup | ||
6 | + @plugin = PiwikPlugin.new | ||
7 | + @context = mock() | ||
8 | + @plugin.context = @context | ||
9 | + @environment = Environment.new | ||
10 | + @context.stubs(:environment).returns(@environment) | ||
11 | + end | ||
12 | + | ||
13 | + should 'add content at the body ending unless domain and site_id are blank' do | ||
14 | + @environment.piwik_domain = 'piwik.domain.example.com' | ||
15 | + @environment.piwik_site_id = 5 | ||
16 | + @plugin.stubs(:expanded_template).returns('content') | ||
17 | + assert_equal 'content', @plugin.body_ending | ||
18 | + end | ||
19 | + | ||
20 | + should 'not add any content at the body ending if domain is blank' do | ||
21 | + @environment.piwik_domain = nil | ||
22 | + @environment.piwik_site_id = 5 | ||
23 | + @plugin.stubs(:expanded_template).returns('content') | ||
24 | + assert_equal nil, @plugin.body_ending | ||
25 | + end | ||
26 | + | ||
27 | + should 'not add any content at the body ending if site_id is blank' do | ||
28 | + @environment.piwik_domain = 'piwik.domain.example.com' | ||
29 | + @environment.piwik_site_id = nil | ||
30 | + @plugin.stubs(:expanded_template).returns('content') | ||
31 | + assert_equal nil, @plugin.body_ending | ||
32 | + end | ||
33 | + | ||
34 | + should 'extends Environment with attr piwik_domain' do | ||
35 | + assert_respond_to Environment.new, :piwik_domain | ||
36 | + end | ||
37 | + | ||
38 | + should 'extends Environment with attr piwik_site_id' do | ||
39 | + assert_respond_to Environment.new, :piwik_site_id | ||
40 | + end | ||
41 | + | ||
42 | +end |
@@ -0,0 +1,13 @@ | @@ -0,0 +1,13 @@ | ||
1 | +<h1><%= _("Piwik plugin settings") %></h1> | ||
2 | + | ||
3 | +<%= form_for(:environment) do |f| %> | ||
4 | + | ||
5 | + <%= labelled_form_field _('Piwik domain'), f.text_field(:piwik_domain) %> | ||
6 | + | ||
7 | + <%= labelled_form_field _('Piwik site id'), f.text_field(:piwik_site_id) %> | ||
8 | + | ||
9 | + <% button_bar do %> | ||
10 | + <%= submit_button(:save, _('Save'), :cancel => {:controller => 'plugins', :action => 'index'}) %> | ||
11 | + <% end %> | ||
12 | + | ||
13 | +<% end %> |
@@ -0,0 +1,15 @@ | @@ -0,0 +1,15 @@ | ||
1 | +<!-- Piwik --> | ||
2 | +<script type="text/javascript"> | ||
3 | + var _paq = _paq || []; | ||
4 | + _paq.push(['trackPageView']); | ||
5 | + _paq.push(['enableLinkTracking']); | ||
6 | + (function() { | ||
7 | + var u=(("https:" == document.location.protocol) ? "https" : "http") + "://<%= escape_javascript locals[:domain] %>/piwik/"; | ||
8 | + _paq.push(['setTrackerUrl', u+'piwik.php']); | ||
9 | + _paq.push(['setSiteId', <%= escape_javascript locals[:site_id] %>]); | ||
10 | + var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.type='text/javascript'; | ||
11 | + g.defer=true; g.async=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s); | ||
12 | + })(); | ||
13 | +</script> | ||
14 | +<noscript><p><img src="http://<%= escape_javascript locals[:domain] %>/piwik/piwik.php?idsite=<%= escape_javascript locals[:site_id] %>" style="border:0;" alt="" /></p></noscript> | ||
15 | +<!-- End Piwik Code --> |