Commit a6e6ace7ff187c3f5513feb85ec58ac74084087c
Exists in
master
and in
27 other branches
Merge branch 'AI3036-moderate-users-registration' into 'master'
Ai3036 Moderate Users Registration http://noosfero.org/Development/ActionItem3036 See merge request !188
Showing
7 changed files
with
196 additions
and
18 deletions
Show diff stats
app/controllers/public/account_controller.rb
@@ -15,11 +15,23 @@ class AccountController < ApplicationController | @@ -15,11 +15,23 @@ class AccountController < ApplicationController | ||
15 | 15 | ||
16 | def activate | 16 | def activate |
17 | @user = User.find_by_activation_code(params[:activation_code]) if params[:activation_code] | 17 | @user = User.find_by_activation_code(params[:activation_code]) if params[:activation_code] |
18 | - if @user and @user.activate | ||
19 | - @message = _("Your account has been activated, now you can log in!") | ||
20 | - check_redirection | ||
21 | - session[:join] = params[:join] unless params[:join].blank? | ||
22 | - render :action => 'login', :userlogin => @user.login | 18 | + if @user |
19 | + unless @user.environment.enabled?('admin_must_approve_new_users') | ||
20 | + if @user.activate | ||
21 | + @message = _("Your account has been activated, now you can log in!") | ||
22 | + check_redirection | ||
23 | + session[:join] = params[:join] unless params[:join].blank? | ||
24 | + render :action => 'login', :userlogin => @user.login | ||
25 | + end | ||
26 | + else | ||
27 | + if @user.create_moderate_task | ||
28 | + session[:notice] = _('Thanks for registering. The administrators were notified.') | ||
29 | + @register_pending = true | ||
30 | + @user.activation_code = nil | ||
31 | + @user.save! | ||
32 | + redirect_to :controller => :home | ||
33 | + end | ||
34 | + end | ||
23 | else | 35 | else |
24 | session[:notice] = _("It looks like you're trying to activate an account. Perhaps have already activated this account?") | 36 | session[:notice] = _("It looks like you're trying to activate an account. Perhaps have already activated this account?") |
25 | redirect_to :controller => :home | 37 | redirect_to :controller => :home |
@@ -108,6 +120,7 @@ class AccountController < ApplicationController | @@ -108,6 +120,7 @@ class AccountController < ApplicationController | ||
108 | check_join_in_community(@user) | 120 | check_join_in_community(@user) |
109 | go_to_signup_initial_page | 121 | go_to_signup_initial_page |
110 | else | 122 | else |
123 | + session[:notice] = _('Thanks for registering!') | ||
111 | @register_pending = true | 124 | @register_pending = true |
112 | end | 125 | end |
113 | end | 126 | end |
app/models/environment.rb
@@ -124,6 +124,7 @@ class Environment < ActiveRecord::Base | @@ -124,6 +124,7 @@ class Environment < ActiveRecord::Base | ||
124 | 'organizations_are_moderated_by_default' => _("Organizations have moderated publication by default"), | 124 | 'organizations_are_moderated_by_default' => _("Organizations have moderated publication by default"), |
125 | 'enable_organization_url_change' => _("Allow organizations to change their URL"), | 125 | 'enable_organization_url_change' => _("Allow organizations to change their URL"), |
126 | 'admin_must_approve_new_communities' => _("Admin must approve creation of communities"), | 126 | 'admin_must_approve_new_communities' => _("Admin must approve creation of communities"), |
127 | + 'admin_must_approve_new_users' => _("Admin must approve registration of new users"), | ||
127 | 'show_balloon_with_profile_links_when_clicked' => _('Show a balloon with profile links when a profile image is clicked'), | 128 | 'show_balloon_with_profile_links_when_clicked' => _('Show a balloon with profile links when a profile image is clicked'), |
128 | 'xmpp_chat' => _('XMPP/Jabber based chat'), | 129 | 'xmpp_chat' => _('XMPP/Jabber based chat'), |
129 | 'show_zoom_button_on_article_images' => _('Show a zoom link on all article images'), | 130 | 'show_zoom_button_on_article_images' => _('Show a zoom link on all article images'), |
@@ -0,0 +1,59 @@ | @@ -0,0 +1,59 @@ | ||
1 | +class ModerateUserRegistration < Task | ||
2 | + | ||
3 | + settings_items :user_id, :type => String | ||
4 | + settings_items :name, :type => String | ||
5 | + settings_items :author_name, :type => String | ||
6 | + settings_items :email, :type => String | ||
7 | + | ||
8 | + after_create :schedule_spam_checking | ||
9 | + | ||
10 | + alias :environment :target | ||
11 | + alias :environment= :target= | ||
12 | + | ||
13 | + def schedule_spam_checking | ||
14 | + self.delay.check_for_spam | ||
15 | + end | ||
16 | + | ||
17 | + include Noosfero::Plugin::HotSpot | ||
18 | + | ||
19 | + def sender | ||
20 | + "#{name} (#{email})" | ||
21 | + end | ||
22 | + | ||
23 | + def perform | ||
24 | + user=environment.users.find_by_id(user_id) | ||
25 | + user.activate | ||
26 | + end | ||
27 | + | ||
28 | + def title | ||
29 | + _("New user") | ||
30 | + end | ||
31 | + | ||
32 | + def subject | ||
33 | + name | ||
34 | + end | ||
35 | + | ||
36 | + def information | ||
37 | + { :message => _('%{sender} wants to register.'), | ||
38 | + :variables => {:sender => sender} } | ||
39 | + end | ||
40 | + | ||
41 | + def icon | ||
42 | + result = {:type => :defined_image, :src => '/images/icons-app/person-minor.png', :name => name} | ||
43 | + end | ||
44 | + | ||
45 | + def target_notification_description | ||
46 | + _('%{sender} tried to register.') % | ||
47 | + {:sender => sender} | ||
48 | + end | ||
49 | + | ||
50 | + def target_notification_message | ||
51 | + target_notification_description + "\n\n" + | ||
52 | + _('You need to login on %{system} in order to approve or reject this user.') % { :environment => self.environment } | ||
53 | + end | ||
54 | + | ||
55 | + def target_notification_message | ||
56 | + _("User \"%{user}\" just requested to register. You have to approve or reject it through the \"Pending Validations\" section in your control panel.\n") % { :user => self.name } | ||
57 | + end | ||
58 | + | ||
59 | +end | ||
0 | \ No newline at end of file | 60 | \ No newline at end of file |
app/models/user.rb
@@ -47,8 +47,12 @@ class User < ActiveRecord::Base | @@ -47,8 +47,12 @@ class User < ActiveRecord::Base | ||
47 | 47 | ||
48 | user.person = p | 48 | user.person = p |
49 | end | 49 | end |
50 | - if user.environment.enabled?('skip_new_user_email_confirmation') | ||
51 | - user.activate | 50 | + if user.environment.enabled?('skip_new_user_email_confirmation') |
51 | + if user.environment.enabled?('admin_must_approve_new_users') | ||
52 | + create_moderate_task | ||
53 | + else | ||
54 | + user.activate | ||
55 | + end | ||
52 | end | 56 | end |
53 | end | 57 | end |
54 | after_create :deliver_activation_code | 58 | after_create :deliver_activation_code |
@@ -137,6 +141,15 @@ class User < ActiveRecord::Base | @@ -137,6 +141,15 @@ class User < ActiveRecord::Base | ||
137 | end | 141 | end |
138 | end | 142 | end |
139 | 143 | ||
144 | + def create_moderate_task | ||
145 | + @task = ModerateUserRegistration.new | ||
146 | + @task.user_id = self.id | ||
147 | + @task.name = self.name | ||
148 | + @task.email = self.email | ||
149 | + @task.target = self.environment | ||
150 | + @task.save | ||
151 | + end | ||
152 | + | ||
140 | def activated? | 153 | def activated? |
141 | self.activation_code.nil? && !self.activated_at.nil? | 154 | self.activation_code.nil? && !self.activated_at.nil? |
142 | end | 155 | end |
app/views/account/signup.html.erb
@@ -2,18 +2,36 @@ | @@ -2,18 +2,36 @@ | ||
2 | <div id='thanks-for-signing'> | 2 | <div id='thanks-for-signing'> |
3 | <% if environment.has_custom_welcome_screen? %> | 3 | <% if environment.has_custom_welcome_screen? %> |
4 | <%= environment.settings[:signup_welcome_screen_body].html_safe %> | 4 | <%= environment.settings[:signup_welcome_screen_body].html_safe %> |
5 | - <% else %> | ||
6 | - <h1><%= _("Welcome to %s!") % environment.name %></h1> | ||
7 | - <h3><%= _("Thanks for signing up, we're thrilled to have you on our social network!") %></h3> | ||
8 | - <p><%= _("Firstly, some tips for getting started:") %></p> | ||
9 | - <h4><%= _("Confirm your account!") %></h4> | 5 | + <% elsif environment.enabled?('admin_must_approve_new_users')%> |
6 | + <h1><%= _("Welcome to %s!") % environment.name %></h1> | ||
7 | + <h3><%= _("Thanks for signing up, we're thrilled to have you on our social network!") %></h3> | ||
8 | + <p><%= _("Firstly, some tips for getting started:") %></p> | ||
9 | + <% unless environment.enabled?('skip_new_user_email_confirmation') %> | ||
10 | + <h4><%= _("Confirm your account and wait for admin approvement!") %></h4> | ||
10 | <p><%= _("You should receive a welcome email from us shortly. Please take a second to follow the link within to confirm your account.") %></p> | 11 | <p><%= _("You should receive a welcome email from us shortly. Please take a second to follow the link within to confirm your account.") %></p> |
11 | - <p><%= _("You won't appear as %s until your account is confirmed.") % link_to(_('user'), {:controller => :search, :action => :people, :filter => 'more_recent'}, :target => '_blank') %></p> | ||
12 | - <h4><%= _("What to do next?") %></h4> | ||
13 | - <p><%= _("%s. Upload an avatar and let your friends find you easily :)") % link_to(_('Customize your profile'), {:controller => 'doc', :section => 'user', :topic => 'editing-person-info'}, :target => '_blank') %></p> | ||
14 | - <p><%= _("Learn the guidelines. Read the %s for more details on how to use this social network!") % link_to(_('Documentation'), {:controller => 'doc'}, :target => '_blank') %></p> | ||
15 | - <p><%= _("%s your Gmail, Yahoo and Hotmail contacts!") % link_to(_('Invite and find'), {:controller => 'doc', :section => 'user', :topic => 'invite-contacts'}, :target => '_blank') %></p> | ||
16 | - <p><%= _("Start exploring and have fun!") %></p> | 12 | + <p><%= _("You won't appear as %s until your account is confirmed and approved.") % link_to(_('user'), {:controller => :search, :action => :people, :filter => 'more_recent'}, :target => '_blank') %></p> |
13 | + <% else %> | ||
14 | + <h4><%= _("Wait for admin approvement!") %></h4> | ||
15 | + <p><%= _("The administrators will evaluate your signup request for approvement.") %></p> | ||
16 | + <p><%= _("You won't appear as %s until your account is approved.") % link_to(_('user'), {:controller => :search, :action => :people, :filter => 'more_recent'}, :target => '_blank') %></p> | ||
17 | + <% end %> | ||
18 | + <h4><%= _("What to do next?") %></h4> | ||
19 | + <p><%= _("%s. Upload an avatar and let your friends find you easily :)") % link_to(_('Customize your profile'), {:controller => 'doc', :section => 'user', :topic => 'editing-person-info'}, :target => '_blank') %></p> | ||
20 | + <p><%= _("Learn the guidelines. Read the %s for more details on how to use this social network!") % link_to(_('Documentation'), {:controller => 'doc'}, :target => '_blank') %></p> | ||
21 | + <p><%= _("%s your Gmail, Yahoo and Hotmail contacts!") % link_to(_('Invite and find'), {:controller => 'doc', :section => 'user', :topic => 'invite-contacts'}, :target => '_blank') %></p> | ||
22 | + <p><%= _("Start exploring and have fun!") %></p> | ||
23 | + <% else %> | ||
24 | + <h1><%= _("Welcome to %s!") % environment.name %></h1> | ||
25 | + <h3><%= _("Thanks for signing up, we're thrilled to have you on our social network!") %></h3> | ||
26 | + <p><%= _("Firstly, some tips for getting started:") %></p> | ||
27 | + <h4><%= _("Confirm your account!") %></h4> | ||
28 | + <p><%= _("You should receive a welcome email from us shortly. Please take a second to follow the link within to confirm your account.") %></p> | ||
29 | + <p><%= _("You won't appear as %s until your account is confirmed.") % link_to(_('user'), {:controller => :search, :action => :people, :filter => 'more_recent'}, :target => '_blank') %></p> | ||
30 | + <h4><%= _("What to do next?") %></h4> | ||
31 | + <p><%= _("%s. Upload an avatar and let your friends find you easily :)") % link_to(_('Customize your profile'), {:controller => 'doc', :section => 'user', :topic => 'editing-person-info'}, :target => '_blank') %></p> | ||
32 | + <p><%= _("Learn the guidelines. Read the %s for more details on how to use this social network!") % link_to(_('Documentation'), {:controller => 'doc'}, :target => '_blank') %></p> | ||
33 | + <p><%= _("%s your Gmail, Yahoo and Hotmail contacts!") % link_to(_('Invite and find'), {:controller => 'doc', :section => 'user', :topic => 'invite-contacts'}, :target => '_blank') %></p> | ||
34 | + <p><%= _("Start exploring and have fun!") %></p> | ||
17 | <% end %> | 35 | <% end %> |
18 | </div> | 36 | </div> |
19 | <% else %> | 37 | <% else %> |
features/signup.feature
@@ -298,3 +298,55 @@ Feature: signup | @@ -298,3 +298,55 @@ Feature: signup | ||
298 | And wait for the captcha signup time | 298 | And wait for the captcha signup time |
299 | And I press "Create my account" | 299 | And I press "Create my account" |
300 | Then "José da Silva" should be a member of "Free Software" | 300 | Then "José da Silva" should be a member of "Free Software" |
301 | + | ||
302 | + @selenium | ||
303 | + Scenario: user registration is moderated by admin | ||
304 | + Given feature "admin_must_approve_new_users" is enabled on environment | ||
305 | + And feature "skip_new_user_email_confirmation" is disabled on environment | ||
306 | + And I go to /account/signup | ||
307 | + And I fill in "Username" with "teste" | ||
308 | + And I fill in "Password" with "123456" | ||
309 | + And I fill in "Password confirmation" with "123456" | ||
310 | + And I fill in "e-Mail" with "teste@teste.com" | ||
311 | + And I fill in "Full name" with "Teste da Silva" | ||
312 | + And wait for the captcha signup time | ||
313 | + And I press "Create my account" | ||
314 | + And I go to teste's confirmation URL | ||
315 | + And I am logged in as admin | ||
316 | + And I follow "Control panel" | ||
317 | + And I follow "Tasks" | ||
318 | + And I choose "Accept" | ||
319 | + And I press "Apply!" | ||
320 | + And I follow "Logout" | ||
321 | + And Teste da Silva's account is activated | ||
322 | + And I follow "Login" | ||
323 | + And I fill in "Username / Email" with "teste" | ||
324 | + And I fill in "Password" with "123456" | ||
325 | + And I press "Log in" | ||
326 | + Then I should see "teste" | ||
327 | + | ||
328 | + | ||
329 | + @selenium | ||
330 | + Scenario: user registration is not accepted by the admin | ||
331 | + Given feature "admin_must_approve_new_users" is enabled on environment | ||
332 | + And feature "skip_new_user_email_confirmation" is disabled on environment | ||
333 | + And I go to /account/signup | ||
334 | + And I fill in "Username" with "teste" | ||
335 | + And I fill in "Password" with "123456" | ||
336 | + And I fill in "Password confirmation" with "123456" | ||
337 | + And I fill in "e-Mail" with "teste@teste.com" | ||
338 | + And I fill in "Full name" with "Teste da Silva" | ||
339 | + And wait for the captcha signup time | ||
340 | + And I press "Create my account" | ||
341 | + And I go to teste's confirmation URL | ||
342 | + And I am logged in as admin | ||
343 | + And I follow "Control panel" | ||
344 | + And I follow "Tasks" | ||
345 | + And I choose "Reject" | ||
346 | + And I press "Apply!" | ||
347 | + And I follow "Logout" | ||
348 | + And I follow "Login" | ||
349 | + And I fill in "Username / Email" with "teste" | ||
350 | + And I fill in "Password" with "123456" | ||
351 | + And I press "Log in" | ||
352 | + Then I should not see "teste" | ||
301 | \ No newline at end of file | 353 | \ No newline at end of file |
@@ -0,0 +1,22 @@ | @@ -0,0 +1,22 @@ | ||
1 | +# encoding: UTF-8 | ||
2 | +require File.dirname(__FILE__) + '/../test_helper' | ||
3 | + | ||
4 | +class ModerateUserRegistrationTest < ActiveSupport::TestCase | ||
5 | + fixtures :users, :environments | ||
6 | + | ||
7 | + def test_should_on_perform_activate_user | ||
8 | + user = User.new(:login => 'lalala', :email => 'lalala@example.com', :password => 'test', :password_confirmation => 'test') | ||
9 | + user.save! | ||
10 | + environment = Environment.default | ||
11 | + t= ModerateUserRegistration.new | ||
12 | + t.user_id = user.id | ||
13 | + t.name = user.name | ||
14 | + t.author_name = user.name | ||
15 | + t.email = user.email | ||
16 | + t.target= environment | ||
17 | + t.save! | ||
18 | + assert !user.activated? | ||
19 | + t.perform | ||
20 | + assert environment.users.find_by_id(user.id).activated? | ||
21 | + end | ||
22 | +end |