Commit 6e1949cf56bcd21d97924be81ce51257ee9f9dc3
Exists in
master
and in
26 other branches
Merge branch 'login_popup' into 'master'
Display login popup to non logged users in actions that require login Create infrastructure to display login popup to non logged users in actions that require login This infra was applied for join community, make a vote and create comment when require auth to comment plugin is activated See merge request !572
Showing
11 changed files
with
117 additions
and
7 deletions
Show diff stats
app/views/blocks/profile_info_actions/_join_leave_community.html.erb
1 | -<div class='join-leave-button'> | 1 | +<div class='join-leave-button require-login-popup'> |
2 | <% if logged_in? %> | 2 | <% if logged_in? %> |
3 | <% if profile.members.include?(user) %> | 3 | <% if profile.members.include?(user) %> |
4 | <%= button(:delete, content_tag('span', _('Leave community')), profile.leave_url, | 4 | <%= button(:delete, content_tag('span', _('Leave community')), profile.leave_url, |
lib/authenticated_system.rb
@@ -60,7 +60,11 @@ module AuthenticatedSystem | @@ -60,7 +60,11 @@ module AuthenticatedSystem | ||
60 | if logged_in? && authorized? | 60 | if logged_in? && authorized? |
61 | true | 61 | true |
62 | else | 62 | else |
63 | - access_denied | 63 | + if params[:require_login_popup] |
64 | + render :json => { :require_login_popup => true } | ||
65 | + else | ||
66 | + access_denied | ||
67 | + end | ||
64 | end | 68 | end |
65 | end | 69 | end |
66 | 70 |
plugins/require_auth_to_comment/controllers/require_auth_to_comment_plugin_admin_controller.rb
0 → 100644
@@ -0,0 +1,14 @@ | @@ -0,0 +1,14 @@ | ||
1 | +class RequireAuthToCommentPluginAdminController < AdminController | ||
2 | + | ||
3 | + def index | ||
4 | + settings = params[:settings] | ||
5 | + settings ||= {} | ||
6 | + @settings = Noosfero::Plugin::Settings.new(environment, RequireAuthToCommentPlugin, settings) | ||
7 | + if request.post? | ||
8 | + @settings.save! | ||
9 | + session[:notice] = 'Settings succefully saved.' | ||
10 | + redirect_to :action => 'index' | ||
11 | + end | ||
12 | + end | ||
13 | + | ||
14 | +end |
plugins/require_auth_to_comment/lib/require_auth_to_comment_plugin.rb
@@ -21,11 +21,20 @@ class RequireAuthToCommentPlugin < Noosfero::Plugin | @@ -21,11 +21,20 @@ class RequireAuthToCommentPlugin < Noosfero::Plugin | ||
21 | end | 21 | end |
22 | 22 | ||
23 | def stylesheet? | 23 | def stylesheet? |
24 | - true | 24 | + !display_login_popup? |
25 | + end | ||
26 | + | ||
27 | + def display_login_popup? | ||
28 | + settings = Noosfero::Plugin::Settings.new(context.environment, self.class) | ||
29 | + settings.require_type == 'display_login_popup' | ||
30 | + end | ||
31 | + | ||
32 | + def self.require_type_default_setting | ||
33 | + 'hide_button' | ||
25 | end | 34 | end |
26 | 35 | ||
27 | def js_files | 36 | def js_files |
28 | - ['hide_comment_form.js', 'jquery.livequery.min.js'] | 37 | + ['hide_comment_form.js', 'jquery.livequery.min.js'] + (display_login_popup? ? ['comment_require_login.js'] : []) |
29 | end | 38 | end |
30 | 39 | ||
31 | def body_beginning | 40 | def body_beginning |
plugins/require_auth_to_comment/public/comment_require_login.js
0 → 100644
@@ -0,0 +1,8 @@ | @@ -0,0 +1,8 @@ | ||
1 | +(function($) { | ||
2 | + $(window).bind('userDataLoaded', function(event, data) { | ||
3 | + if (!data.login && $('meta[name="profile.allow_unauthenticated_comments"]').length <= 0) { | ||
4 | + $('.display-comment-form').unbind(); | ||
5 | + $('.display-comment-form').addClass('require-login-popup'); | ||
6 | + } | ||
7 | + }); | ||
8 | +})(jQuery); |
plugins/require_auth_to_comment/test/unit/require_auth_to_comment_plugin_test.rb
@@ -5,9 +5,10 @@ class RequireAuthToCommentPluginTest < ActiveSupport::TestCase | @@ -5,9 +5,10 @@ class RequireAuthToCommentPluginTest < ActiveSupport::TestCase | ||
5 | def setup | 5 | def setup |
6 | @plugin = RequireAuthToCommentPlugin.new | 6 | @plugin = RequireAuthToCommentPlugin.new |
7 | @comment = Comment.new | 7 | @comment = Comment.new |
8 | + @environment = fast_create(Environment) | ||
8 | end | 9 | end |
9 | 10 | ||
10 | - attr_reader :plugin, :comment | 11 | + attr_reader :plugin, :comment, :environment |
11 | 12 | ||
12 | should 'reject comments for unauthenticated users' do | 13 | should 'reject comments for unauthenticated users' do |
13 | plugin.context = logged_in(false) | 14 | plugin.context = logged_in(false) |
@@ -29,6 +30,35 @@ class RequireAuthToCommentPluginTest < ActiveSupport::TestCase | @@ -29,6 +30,35 @@ class RequireAuthToCommentPluginTest < ActiveSupport::TestCase | ||
29 | assert !comment.rejected? | 30 | assert !comment.rejected? |
30 | end | 31 | end |
31 | 32 | ||
33 | + should 'the default require type setting be hide_button' do | ||
34 | + assert_equal 'hide_button', plugin.class.require_type_default_setting | ||
35 | + end | ||
36 | + | ||
37 | + should 'display_login_popup? be false by default' do | ||
38 | + context = mock(); | ||
39 | + context.expects(:environment).returns(environment) | ||
40 | + plugin.expects(:context).returns(context) | ||
41 | + assert !plugin.display_login_popup? | ||
42 | + end | ||
43 | + | ||
44 | + should 'display_login_popup? be true if require_type is defined as display_login_popup' do | ||
45 | + context = mock(); | ||
46 | + context.expects(:environment).returns(environment) | ||
47 | + environment[:settings] = {:require_auth_to_comment_plugin => {:require_type => "display_login_popup"}} | ||
48 | + plugin.expects(:context).returns(context) | ||
49 | + assert plugin.display_login_popup? | ||
50 | + end | ||
51 | + | ||
52 | + should 'not display stylesheet if login popup is active' do | ||
53 | + plugin.expects(:display_login_popup?).returns(true) | ||
54 | + assert !plugin.stylesheet? | ||
55 | + end | ||
56 | + | ||
57 | + should 'display stylesheet if login popup is inactive' do | ||
58 | + plugin.expects(:display_login_popup?).returns(false) | ||
59 | + assert plugin.stylesheet? | ||
60 | + end | ||
61 | + | ||
32 | protected | 62 | protected |
33 | 63 | ||
34 | def logged_in(boolean) | 64 | def logged_in(boolean) |
plugins/require_auth_to_comment/views/require_auth_to_comment_plugin_admin/index.html.erb
0 → 100644
@@ -0,0 +1,20 @@ | @@ -0,0 +1,20 @@ | ||
1 | +<h1><%= _('Require auth to comment Settings')%></h1> | ||
2 | + | ||
3 | +<%= form_for(:settings) do |f| %> | ||
4 | + | ||
5 | + <div class="require-type"> | ||
6 | + <strong> | ||
7 | + <div class="hide-button"> | ||
8 | + <%= radio_button(:settings, :require_type, 'hide_button') %> <%= _('Hide button') %> | ||
9 | + </div> | ||
10 | + <div class="display-login-popup"> | ||
11 | + <%= radio_button(:settings, :require_type, 'display_login_popup') %> <%= _('Display login popup') %> | ||
12 | + </div> | ||
13 | + </strong> | ||
14 | + </div> | ||
15 | + | ||
16 | + <% button_bar do %> | ||
17 | + <%= submit_button(:save, _('Save'), :cancel => {:controller => 'plugins', :action => 'index'}) %> | ||
18 | + <% end %> | ||
19 | + | ||
20 | +<% end %> |
plugins/vote/public/style.css
plugins/vote/views/vote/_vote.html.erb
@@ -5,7 +5,7 @@ reload_url = url_for(:controller => 'vote_plugin_profile', :profile => profile.i | @@ -5,7 +5,7 @@ reload_url = url_for(:controller => 'vote_plugin_profile', :profile => profile.i | ||
5 | 5 | ||
6 | <span id="vote_<%= model %>_<%= target.id %>_<%= vote %>" data-reload_url=<%= reload_url %> class="vote-action action <%= action %>-action"> | 6 | <span id="vote_<%= model %>_<%= target.id %>_<%= vote %>" data-reload_url=<%= reload_url %> class="vote-action action <%= action %>-action"> |
7 | 7 | ||
8 | - <%= link_to_remote content_tag(:span, count, :class=>'like-action-counter') + content_tag(:span, '', :class=>"action-icon #{action}"), :url => url, :html => {:class => "#{active ? 'like-action-active':''} #{user ? '':'disabled'}"} %> | 8 | + <%= link_to content_tag(:span, count, :class=>'like-action-counter') + content_tag(:span, '', :class=>"action-icon #{action}"), url, :class => "#{active ? 'like-action-active':''} #{user ? '':'disabled'} require-login-popup" %> |
9 | 9 | ||
10 | <% if !voters.blank? %> | 10 | <% if !voters.blank? %> |
11 | <span class="vote-detail"> | 11 | <span class="vote-detail"> |
public/javascripts/application.js
@@ -27,6 +27,7 @@ | @@ -27,6 +27,7 @@ | ||
27 | *= require manage-products.js | 27 | *= require manage-products.js |
28 | *= require catalog.js | 28 | *= require catalog.js |
29 | *= require autogrow.js | 29 | *= require autogrow.js |
30 | +*= require require_login.js | ||
30 | */ | 31 | */ |
31 | 32 | ||
32 | // scope for noosfero stuff | 33 | // scope for noosfero stuff |
@@ -0,0 +1,25 @@ | @@ -0,0 +1,25 @@ | ||
1 | +(function($) { | ||
2 | + $(window).bind('userDataLoaded', function(event, data) { | ||
3 | + $(".require-login-popup").live('click', function(){ | ||
4 | + clicked = $(this); | ||
5 | + url = clicked.attr("href"); | ||
6 | + if(url!=undefined && url!='' && url!='#') { | ||
7 | + if(!data.login) { | ||
8 | + url = $.param.querystring(url, "require_login_popup=true"); | ||
9 | + } | ||
10 | + loading_for_button(this); | ||
11 | + $.post(url, function(data){ | ||
12 | + if(data.require_login_popup) { | ||
13 | + $('#link_login').click(); //TODO see a better way to show login popup | ||
14 | + } | ||
15 | + }).complete(function() { | ||
16 | + clicked.css("cursor",""); | ||
17 | + $(".small-loading").remove(); | ||
18 | + }); | ||
19 | + } else { | ||
20 | + $('#link_login').click(); | ||
21 | + } | ||
22 | + return false; | ||
23 | + }); | ||
24 | + }); | ||
25 | +})(jQuery); |