Commit 52ab5d7f423004db43163a0e4ce72c1f7c06fd28
Committed by
Tallys Martins
1 parent
242a3479
Exists in
master
and in
22 other branches
user_registration: Creates task for the admin to process and cucumber test.
(ActionItem3036) Signed-off-by: Gabriela Navarro <navarro1703@gmail.com> Signed-off-by: Wilton Rodrigues <braynwilton@gmail.com>
Showing
3 changed files
with
156 additions
and
23 deletions
Show diff stats
app/controllers/public/account_controller.rb
| @@ -65,7 +65,6 @@ class AccountController < ApplicationController | @@ -65,7 +65,6 @@ class AccountController < ApplicationController | ||
| 65 | render :text => { :ok=>true, :key=>key }.to_json | 65 | render :text => { :ok=>true, :key=>key }.to_json |
| 66 | end | 66 | end |
| 67 | 67 | ||
| 68 | - # action to register an user to the application | ||
| 69 | def signup | 68 | def signup |
| 70 | if @plugins.dispatch(:allow_user_registration).include?(false) | 69 | if @plugins.dispatch(:allow_user_registration).include?(false) |
| 71 | redirect_back_or_default(:controller => 'home') | 70 | redirect_back_or_default(:controller => 'home') |
| @@ -85,29 +84,40 @@ class AccountController < ApplicationController | @@ -85,29 +84,40 @@ class AccountController < ApplicationController | ||
| 85 | @user.return_to = session[:return_to] | 84 | @user.return_to = session[:return_to] |
| 86 | @person = Person.new(params[:profile_data]) | 85 | @person = Person.new(params[:profile_data]) |
| 87 | @person.environment = @user.environment | 86 | @person.environment = @user.environment |
| 88 | - if request.post? | ||
| 89 | - if may_be_a_bot | ||
| 90 | - set_signup_start_time_for_now | ||
| 91 | - @block_bot = true | ||
| 92 | - session[:may_be_a_bot] = true | ||
| 93 | - else | ||
| 94 | - if session[:may_be_a_bot] | ||
| 95 | - return false unless verify_recaptcha :model=>@user, :message=>_('Captcha (the human test)') | ||
| 96 | - end | ||
| 97 | - @user.community_to_join = session[:join] | ||
| 98 | - @user.signup! | ||
| 99 | - owner_role = Role.find_by_name('owner') | ||
| 100 | - @user.person.affiliate(@user.person, [owner_role]) if owner_role | ||
| 101 | - invitation = Task.find_by_code(@invitation_code) | ||
| 102 | - if invitation | ||
| 103 | - invitation.update_attributes!({:friend => @user.person}) | ||
| 104 | - invitation.finish | ||
| 105 | - end | ||
| 106 | - if @user.activated? | ||
| 107 | - self.current_user = @user | ||
| 108 | - check_join_in_community(@user) | ||
| 109 | - go_to_signup_initial_page | 87 | + unless @user.environment.enabled?('admin_must_approve_new_users') |
| 88 | + if request.post? | ||
| 89 | + if may_be_a_bot | ||
| 90 | + set_signup_start_time_for_now | ||
| 91 | + @block_bot = true | ||
| 92 | + session[:may_be_a_bot] = true | ||
| 110 | else | 93 | else |
| 94 | + if session[:may_be_a_bot] | ||
| 95 | + return false unless verify_recaptcha :model=>@user, :message=>_('Captcha (the human test)') | ||
| 96 | + end | ||
| 97 | + @user.community_to_join = session[:join] | ||
| 98 | + @user.signup! | ||
| 99 | + owner_role = Role.find_by_name('owner') | ||
| 100 | + @user.person.affiliate(@user.person, [owner_role]) if owner_role | ||
| 101 | + invitation = Task.find_by_code(@invitation_code) | ||
| 102 | + if invitation | ||
| 103 | + invitation.update_attributes!({:friend => @user.person}) | ||
| 104 | + invitation.finish | ||
| 105 | + end | ||
| 106 | + if @user.activated? | ||
| 107 | + self.current_user = @user | ||
| 108 | + go_to_signup_initial_page | ||
| 109 | + else | ||
| 110 | + @register_pending = true | ||
| 111 | + end | ||
| 112 | + end | ||
| 113 | + end | ||
| 114 | + else | ||
| 115 | + @task = CreateUser.new(params[:user]) | ||
| 116 | + if request.post? | ||
| 117 | + @task.target = @user.environment | ||
| 118 | + @task.name = @person.name | ||
| 119 | + if @task.save | ||
| 120 | + session[:notice] = _('Thanks for registering. The administrators were notified.') | ||
| 111 | @register_pending = true | 121 | @register_pending = true |
| 112 | end | 122 | end |
| 113 | end | 123 | end |
| @@ -0,0 +1,69 @@ | @@ -0,0 +1,69 @@ | ||
| 1 | +class CreateUser < Task | ||
| 2 | + | ||
| 3 | + settings_items :email, :type => String | ||
| 4 | + settings_items :name, :type => String | ||
| 5 | + settings_items :author_name, :type => String | ||
| 6 | + | ||
| 7 | + after_create :schedule_spam_checking | ||
| 8 | + | ||
| 9 | + alias :environment :target | ||
| 10 | + alias :environment= :target= | ||
| 11 | + | ||
| 12 | + DATA_FIELDS = Person.fields + ['name', 'email', 'login', 'author_name', 'password', 'password_confirmation'] | ||
| 13 | + DATA_FIELDS.each do |field| | ||
| 14 | + settings_items field.to_sym | ||
| 15 | + end | ||
| 16 | + | ||
| 17 | + def schedule_spam_checking | ||
| 18 | + self.delay.check_for_spam | ||
| 19 | + end | ||
| 20 | + | ||
| 21 | + include Noosfero::Plugin::HotSpot | ||
| 22 | + | ||
| 23 | + def sender | ||
| 24 | + "#{name} (#{email})" | ||
| 25 | + end | ||
| 26 | + | ||
| 27 | + def perform | ||
| 28 | + user = User.new | ||
| 29 | + author_name = user.name | ||
| 30 | + user_data = self.data.reject do |key, value| | ||
| 31 | + ! DATA_FIELDS.include?(key.to_s) | ||
| 32 | + end | ||
| 33 | + | ||
| 34 | + user.update_attributes(user_data) | ||
| 35 | + user.environment = self.environment | ||
| 36 | + user.save! | ||
| 37 | + end | ||
| 38 | + | ||
| 39 | + def title | ||
| 40 | + _("New user") | ||
| 41 | + end | ||
| 42 | + | ||
| 43 | + def subject | ||
| 44 | + name | ||
| 45 | + end | ||
| 46 | + | ||
| 47 | + def information | ||
| 48 | + { :message => _('%{sender} wants to register.'), | ||
| 49 | + :variables => {:sender => sender} } | ||
| 50 | + end | ||
| 51 | + | ||
| 52 | + def icon | ||
| 53 | + result = {:type => :defined_image, :src => '/images/icons-app/person-minor.png', :name => name} | ||
| 54 | + end | ||
| 55 | + | ||
| 56 | + def target_notification_description | ||
| 57 | + _('%{sender} tried to register.') % | ||
| 58 | + {:sender => sender} | ||
| 59 | + end | ||
| 60 | + | ||
| 61 | + def target_notification_message | ||
| 62 | + target_notification_description + "\n\n" + | ||
| 63 | + _('You need to login on %{system} in order to approve or reject this user.') % { :environment => self.environment } | ||
| 64 | + end | ||
| 65 | + | ||
| 66 | + def target_notification_message | ||
| 67 | + _("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 } | ||
| 68 | + end | ||
| 69 | +end | ||
| 0 | \ No newline at end of file | 70 | \ No newline at end of file |
features/signup.feature
| @@ -298,3 +298,57 @@ Feature: signup | @@ -298,3 +298,57 @@ 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 moderate option avaliable on features panel | ||
| 304 | + Given I am logged in as admin | ||
| 305 | + When I follow "Administration" | ||
| 306 | + And I follow "Features" | ||
| 307 | + Then I should see "Admin must approve registration of new users" | ||
| 308 | + | ||
| 309 | + @selenium | ||
| 310 | + Scenario: user registration is moderated by admin | ||
| 311 | + Given feature "admin_must_approve_new_users" is enabled on environment | ||
| 312 | + And feature "skip_new_user_email_confirmation" is enabled on environment | ||
| 313 | + And I go to /account/signup | ||
| 314 | + And I fill in "Username" with "teste" | ||
| 315 | + And I fill in "Password" with "1234" | ||
| 316 | + And I fill in "Password confirmation" with "1234" | ||
| 317 | + And I fill in "e-Mail" with "teste@teste.com" | ||
| 318 | + And I fill in "Full name" with "Teste da Silva" | ||
| 319 | + And I press "Create my account" | ||
| 320 | + And I am logged in as admin | ||
| 321 | + And I follow "Control panel" | ||
| 322 | + And I follow "Tasks" | ||
| 323 | + And I choose "Accept" | ||
| 324 | + And I press "Apply!" | ||
| 325 | + And I follow "Logout" | ||
| 326 | + And I follow "Login" | ||
| 327 | + And I fill in "Username / Email" with "teste" | ||
| 328 | + And I fill in "Password" with "1234" | ||
| 329 | + And I press "Log in" | ||
| 330 | + Then I should see "teste" | ||
| 331 | + | ||
| 332 | + | ||
| 333 | + @selenium | ||
| 334 | + Scenario: user registration is not accepted by the admin | ||
| 335 | + Given feature "admin_must_approve_new_users" is enabled on environment | ||
| 336 | + And feature "skip_new_user_email_confirmation" is enabled on environment | ||
| 337 | + And I go to /account/signup | ||
| 338 | + And I fill in "Username" with "teste" | ||
| 339 | + And I fill in "Password" with "1234" | ||
| 340 | + And I fill in "Password confirmation" with "1234" | ||
| 341 | + And I fill in "e-Mail" with "teste@teste.com" | ||
| 342 | + And I fill in "Full name" with "Teste da Silva" | ||
| 343 | + And I press "Create my account" | ||
| 344 | + And I am logged in as admin | ||
| 345 | + And I follow "Control panel" | ||
| 346 | + And I follow "Tasks" | ||
| 347 | + And I choose "Reject" | ||
| 348 | + And I press "Apply!" | ||
| 349 | + And I follow "Logout" | ||
| 350 | + And I follow "Login" | ||
| 351 | + And I fill in "Username / Email" with "teste" | ||
| 352 | + And I fill in "Password" with "1234" | ||
| 353 | + And I press "Log in" | ||
| 354 | + Then I should not see "teste" | ||
| 301 | \ No newline at end of file | 355 | \ No newline at end of file |