Commit ad64d894d9cb752a2a27cfd1cac85224415b69bc
Exists in
master
and in
29 other branches
Merge branch 'master' into AI2859-people_block
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 | 83 | <%= noosfero_layout_features %> |
| 84 | 84 | <%= theme_javascript_ng %> |
| 85 | 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 | 91 | </body> |
| 87 | 92 | </html> | ... | ... |
lib/noosfero/plugin.rb
| ... | ... | @@ -277,6 +277,12 @@ class Noosfero::Plugin |
| 277 | 277 | nil |
| 278 | 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 | 286 | # -> Adds content to the ending of the page head |
| 281 | 287 | # returns = lambda block that creates html code or raw rhtml/html.erb |
| 282 | 288 | def head_ending | ... | ... |
plugins/piwik/controllers/piwik_plugin_admin_controller.rb
0 → 100644
| ... | ... | @@ -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 @@ |
| 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 @@ |
| 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 @@ |
| 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 @@ |
| 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 @@ |
| 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 --> | ... | ... |