Commit 2e14e80a12f2b5f1bf051f29baed0fbe84ef9451
1 parent
7ba0db11
Exists in
theme-brasil-digital-from-staging
and in
9 other branches
Created 'AddMemberJob' to enqueue added members action to execute in another mom…
…ent. Added functional test for this feature
Showing
5 changed files
with
86 additions
and
38 deletions
Show diff stats
app/controllers/public/invite_controller.rb
... | ... | @@ -65,33 +65,33 @@ class InviteController < PublicController |
65 | 65 | #Invite or add member without create a task |
66 | 66 | #if logged user is admin of environment |
67 | 67 | def invite_registered_friend |
68 | - contacts_to_invite = params['q'].split(',') | |
69 | - if !contacts_to_invite.empty? && request.post? | |
70 | 68 | |
71 | - if user.is_admin? | |
72 | - person = Person.find(user.id) | |
73 | - session[:invited_members] = [] | |
69 | + if !params['q'].present? || !request.post? | |
74 | 70 | |
75 | - Invitation.invite(person, contacts_to_invite, '', profile) do |added_member| | |
76 | - session[:invited_members] << added_member.id | |
77 | - end | |
71 | + redirect_to :action => 'invite_friends' | |
72 | + session[:notice] = _('Please enter a valid profile.') | |
78 | 73 | |
79 | - session[:notice] = _('This friends was added!') | |
80 | - else | |
81 | - Delayed::Job.enqueue InvitationJob.new(user.id, contacts_to_invite, '', profile.id, nil, locale) | |
82 | - session[:notice] = _('Your invitations are being sent.') | |
83 | - end | |
74 | + return | |
75 | + end | |
84 | 76 | |
77 | + contacts_to_invite = params['q'].split(',') | |
85 | 78 | |
86 | - if profile.person? | |
87 | - redirect_to :controller => 'profile', :action => 'friends' | |
88 | - else | |
89 | - redirect_to :controller => 'profile', :action => 'members' | |
90 | - end | |
79 | + if user.is_admin? && profile.community? | |
80 | + | |
81 | + Delayed::Job.enqueue AddMembersJob.new contacts_to_invite, profile.id, locale | |
82 | + | |
83 | + session[:notice] = _('This friends was added!') | |
91 | 84 | else |
92 | - redirect_to :action => 'invite_friends' | |
93 | - session[:notice] = _('Please enter a valid profile.') | |
85 | + Delayed::Job.enqueue InvitationJob.new(user.id, contacts_to_invite, '', profile.id, nil, locale) | |
86 | + session[:notice] = _('Your invitations are being sent.') | |
94 | 87 | end |
88 | + | |
89 | + if profile.person? | |
90 | + redirect_to :controller => 'profile', :action => 'friends' | |
91 | + else | |
92 | + redirect_to :controller => 'profile', :action => 'members' | |
93 | + end | |
94 | + | |
95 | 95 | end |
96 | 96 | |
97 | 97 | def search | ... | ... |
app/models/invitation.rb
... | ... | @@ -47,7 +47,6 @@ class Invitation < Task |
47 | 47 | end |
48 | 48 | |
49 | 49 | def self.invite(person, contacts_to_invite, message, profile) |
50 | - | |
51 | 50 | contacts_to_invite.each do |contact_to_invite| |
52 | 51 | next if contact_to_invite == _("Firstname Lastname <friend@email.com>") |
53 | 52 | |
... | ... | @@ -80,23 +79,7 @@ class Invitation < Task |
80 | 79 | if profile.person? |
81 | 80 | InviteFriend.create(task_args) if user.nil? || !user.person.is_a_friend?(person) |
82 | 81 | elsif profile.community? |
83 | - | |
84 | - if person.is_admin? | |
85 | - unless user.person.is_member_of?(profile) | |
86 | - | |
87 | - profile.add_member(user.person) | |
88 | - | |
89 | - #Call after add member callback | |
90 | - yield user | |
91 | - | |
92 | - end | |
93 | - else | |
94 | - | |
95 | - InviteMember.create(task_args.merge(:community_id => profile.id)) if user.nil? || !user.person.is_member_of?(profile) | |
96 | - | |
97 | - #Call after create invite member task callback | |
98 | - yield user,task_args | |
99 | - end | |
82 | + InviteMember.create(task_args.merge(:community_id => profile.id)) if user.nil? || !user.person.is_member_of?(profile) | |
100 | 83 | else |
101 | 84 | raise NotImplementedError, 'Don\'t know how to invite people to a %s' % profile.class.to_s |
102 | 85 | end | ... | ... |
app/models/profile.rb
... | ... | @@ -665,6 +665,32 @@ private :generate_url, :url_options |
665 | 665 | end |
666 | 666 | end |
667 | 667 | |
668 | + # Adds many people to profile by id's or email's | |
669 | + def add_members(people_ids) | |
670 | + | |
671 | + unless people_ids.nil? && people_ids.empty? | |
672 | + people = [] | |
673 | + | |
674 | + if people_ids.first =~ /\@/ | |
675 | + people = User.where(email: people_ids) | |
676 | + else | |
677 | + people = Person.where(id: people_ids) | |
678 | + end | |
679 | + | |
680 | + people.each do |profile| | |
681 | + person = profile | |
682 | + | |
683 | + if profile.is_a? User | |
684 | + person = profile.person | |
685 | + end | |
686 | + | |
687 | + unless person.is_member_of?(self) | |
688 | + add_member person | |
689 | + end | |
690 | + end | |
691 | + end | |
692 | + end | |
693 | + | |
668 | 694 | def remove_member(person) |
669 | 695 | self.disaffiliate(person, Profile::Roles.all_roles(environment.id)) |
670 | 696 | end | ... | ... |
test/functional/invite_controller_test.rb
... | ... | @@ -284,6 +284,11 @@ class InviteControllerTest < ActionController::TestCase |
284 | 284 | assert_empty json_response |
285 | 285 | end |
286 | 286 | |
287 | + #@todo Copy this test and create a another version | |
288 | + #of this, for test add members in a community | |
289 | + #logged as admin of environment! | |
290 | + # #issue227 | |
291 | + # | |
287 | 292 | should 'invite registered users through profile id' do |
288 | 293 | friend1 = create_user('testuser1').person |
289 | 294 | friend2 = create_user('testuser2').person |
... | ... | @@ -297,6 +302,29 @@ class InviteControllerTest < ActionController::TestCase |
297 | 302 | end |
298 | 303 | end |
299 | 304 | |
305 | + should 'add registered users imediatly instead invite if logged user is a environment admin' do | |
306 | + | |
307 | + #Add user like a environment admin | |
308 | + Environment.default.add_admin profile | |
309 | + | |
310 | + friend1 = create_user('testuser1').person | |
311 | + friend2 = create_user('testuser2').person | |
312 | + | |
313 | + assert_difference 'Delayed::Job.count', 1 do | |
314 | + assert_equal 0,community.members.count | |
315 | + | |
316 | + post :invite_registered_friend, :profile => @community.identifier, :q => [friend1.id,friend2.id] | |
317 | + | |
318 | + assert_response :redirect | |
319 | + assert_redirected_to :controller => 'profile', :action => 'members' | |
320 | + end | |
321 | + | |
322 | + Delayed::Worker.new.run(Delayed::Job.last) | |
323 | + | |
324 | + assert_equal 2,community.members.count | |
325 | + | |
326 | + end | |
327 | + | |
300 | 328 | private |
301 | 329 | |
302 | 330 | def json_response | ... | ... |