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
lib/authenticated_system.rb
plugins/require_auth_to_comment/controllers/require_auth_to_comment_plugin_admin_controller.rb
0 → 100644
... | ... | @@ -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 | 21 | end |
22 | 22 | |
23 | 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 | 34 | end |
26 | 35 | |
27 | 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 | 38 | end |
30 | 39 | |
31 | 40 | def body_beginning | ... | ... |
plugins/require_auth_to_comment/public/comment_require_login.js
0 → 100644
... | ... | @@ -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 | 5 | def setup |
6 | 6 | @plugin = RequireAuthToCommentPlugin.new |
7 | 7 | @comment = Comment.new |
8 | + @environment = fast_create(Environment) | |
8 | 9 | end |
9 | 10 | |
10 | - attr_reader :plugin, :comment | |
11 | + attr_reader :plugin, :comment, :environment | |
11 | 12 | |
12 | 13 | should 'reject comments for unauthenticated users' do |
13 | 14 | plugin.context = logged_in(false) |
... | ... | @@ -29,6 +30,35 @@ class RequireAuthToCommentPluginTest < ActiveSupport::TestCase |
29 | 30 | assert !comment.rejected? |
30 | 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 | 62 | protected |
33 | 63 | |
34 | 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 @@ |
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 | 5 | |
6 | 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 | 10 | <% if !voters.blank? %> |
11 | 11 | <span class="vote-detail"> | ... | ... |
public/javascripts/application.js
... | ... | @@ -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); | ... | ... |