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 | 15 | |
| 16 | 16 | def activate |
| 17 | 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 | 35 | else |
| 24 | 36 | session[:notice] = _("It looks like you're trying to activate an account. Perhaps have already activated this account?") |
| 25 | 37 | redirect_to :controller => :home |
| ... | ... | @@ -108,6 +120,7 @@ class AccountController < ApplicationController |
| 108 | 120 | check_join_in_community(@user) |
| 109 | 121 | go_to_signup_initial_page |
| 110 | 122 | else |
| 123 | + session[:notice] = _('Thanks for registering!') | |
| 111 | 124 | @register_pending = true |
| 112 | 125 | end |
| 113 | 126 | end | ... | ... |
app/models/environment.rb
| ... | ... | @@ -124,6 +124,7 @@ class Environment < ActiveRecord::Base |
| 124 | 124 | 'organizations_are_moderated_by_default' => _("Organizations have moderated publication by default"), |
| 125 | 125 | 'enable_organization_url_change' => _("Allow organizations to change their URL"), |
| 126 | 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 | 128 | 'show_balloon_with_profile_links_when_clicked' => _('Show a balloon with profile links when a profile image is clicked'), |
| 128 | 129 | 'xmpp_chat' => _('XMPP/Jabber based chat'), |
| 129 | 130 | 'show_zoom_button_on_article_images' => _('Show a zoom link on all article images'), | ... | ... |
| ... | ... | @@ -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 | 60 | \ No newline at end of file | ... | ... |
app/models/user.rb
| ... | ... | @@ -47,8 +47,12 @@ class User < ActiveRecord::Base |
| 47 | 47 | |
| 48 | 48 | user.person = p |
| 49 | 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 | 56 | end |
| 53 | 57 | end |
| 54 | 58 | after_create :deliver_activation_code |
| ... | ... | @@ -137,6 +141,15 @@ class User < ActiveRecord::Base |
| 137 | 141 | end |
| 138 | 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 | 153 | def activated? |
| 141 | 154 | self.activation_code.nil? && !self.activated_at.nil? |
| 142 | 155 | end | ... | ... |
app/views/account/signup.html.erb
| ... | ... | @@ -2,18 +2,36 @@ |
| 2 | 2 | <div id='thanks-for-signing'> |
| 3 | 3 | <% if environment.has_custom_welcome_screen? %> |
| 4 | 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 | 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 | 35 | <% end %> |
| 18 | 36 | </div> |
| 19 | 37 | <% else %> | ... | ... |
features/signup.feature
| ... | ... | @@ -298,3 +298,55 @@ Feature: signup |
| 298 | 298 | And wait for the captcha signup time |
| 299 | 299 | And I press "Create my account" |
| 300 | 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 | 353 | \ No newline at end of file | ... | ... |
| ... | ... | @@ -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 | ... | ... |