diff --git a/app/controllers/my_profile/profile_members_controller.rb b/app/controllers/my_profile/profile_members_controller.rb
index 07c440b..7487695 100644
--- a/app/controllers/my_profile/profile_members_controller.rb
+++ b/app/controllers/my_profile/profile_members_controller.rb
@@ -6,11 +6,6 @@ class ProfileMembersController < MyProfileController
@member_role = Role.find_by_name('member')
end
- def change_roles
- @member = Person.find(params[:id])
- @roles = Role.find(:all).select{ |r| r.has_kind?(:profile) }
- end
-
def update_roles
@roles = params[:roles] ? Role.find(params[:roles]) : []
@roles = @roles.select{|r| r.has_kind?('Profile') }
diff --git a/app/models/add_member.rb b/app/models/add_member.rb
index 33af6a2..c3363e3 100644
--- a/app/models/add_member.rb
+++ b/app/models/add_member.rb
@@ -12,8 +12,11 @@ class AddMember < Task
alias :enterprise :target
alias :enterprise= :target=
+ acts_as_having_settings :roles, :field => :data
+
def perform
- target.affiliate(requestor, Profile::Roles.member)
+ self.roles ||= [Profile::Roles.member.id]
+ target.affiliate(requestor, self.roles.map{|i| Role.find(i)})
end
# FIXME should send email to community admin?
diff --git a/app/views/tasks/_add_friend.rhtml b/app/views/tasks/_add_friend.rhtml
index 08be9c2..9bf04e4 100644
--- a/app/views/tasks/_add_friend.rhtml
+++ b/app/views/tasks/_add_friend.rhtml
@@ -3,7 +3,7 @@
<%= link_to( profile_image(task.requestor, :minor, :border => 0), task.requestor.public_profile_url ) %>
<%= _('%s wants to connect to you as a friend.') %
- content_tag('b', link_to( task.requestor.name, task.requestor.public_profile_url ) ) %>
+ content_tag('strong', link_to( task.requestor.name, task.requestor.public_profile_url ) ) %>
<% form_for('task', task, :url => { :action => 'close', :id => task.id } ) do |f| %>
diff --git a/app/views/tasks/_add_member.rhtml b/app/views/tasks/_add_member.rhtml
new file mode 100644
index 0000000..c0b1916
--- /dev/null
+++ b/app/views/tasks/_add_member.rhtml
@@ -0,0 +1,38 @@
+
<%= _('New member') %>
+
+<%= link_to( profile_image(task.requestor, :minor, :border => 0), task.requestor.public_profile_url ) %>
+
+<%= _('%s wants to be a member of %s.') %
+ [content_tag('strong', link_to( task.requestor.name, task.requestor.public_profile_url ) ),
+ content_tag('strong', link_to( task.target.name, task.target.public_profile_url ) )] %>
+
+<% form_for('task', task, :url => { :action => 'close', :id => task.id } ) do |f| %>
+
+
+ <%= radio_button_tag(:decision, 'finish', true,
+ :id => "decision-finish-#{task.id}",
+ :onclick => "Element.show('group-for-friend-#{task.id}')") %>
+
+
+
+
+ <%= radio_button_tag(:decision, 'cancel', false,
+ :id => "decision-cancel-#{task.id}",
+ :onclick => "Element.hide('group-for-friend-#{task.id}')") %>
+
+
+
+ <%= _('Roles:') %>
+ <%
+ @roles = Role.find(:all).select{ |r| r.has_kind?('Profile') }
+ %>
+ <% @roles.each do |r| %>
+ <%= labelled_check_box(r.name, 'task[roles][]', r.id, true) %>
+ <% end %>
+
+
+
+ <% button_bar do %>
+ <%= submit_button(:ok, _('Ok!')) %>
+ <% end %>
+<% end %>
diff --git a/test/functional/tasks_controller_test.rb b/test/functional/tasks_controller_test.rb
index aa0d698..93581a4 100644
--- a/test/functional/tasks_controller_test.rb
+++ b/test/functional/tasks_controller_test.rb
@@ -62,4 +62,6 @@ class TasksControllerTest < Test::Unit::TestCase
ok('task should be cancelled') { t.status == Task::Status::CANCELLED }
end
+ should 'affiliate roles to user after finish add member task'
+
end
diff --git a/test/unit/add_member_test.rb b/test/unit/add_member_test.rb
index 8df19bc..38b7315 100644
--- a/test/unit/add_member_test.rb
+++ b/test/unit/add_member_test.rb
@@ -71,4 +71,24 @@ class AddMemberTest < ActiveSupport::TestCase
assert_equal :manage_memberships, t.permission
end
+ should 'have roles' do
+ p = create_user('testuser1').person
+ c = Community.create!(:name => 'community_test')
+ task = AddMember.create!(:roles => [1,2,3], :person => p, :community => c)
+ assert_equal [1,2,3], task.roles
+ end
+
+ should 'put member with the right roles' do
+ p = create_user('testuser1').person
+ c = Community.create!(:name => 'community_test')
+
+ roles = [Profile::Roles.member, Profile::Roles.admin]
+ task = AddMember.create!(:roles => roles.map(&:id), :person => p, :community => c)
+ task.finish
+
+ current_roles = p.find_roles(c).map(&:role)
+ assert_includes current_roles, roles[0]
+ assert_includes current_roles, roles[1]
+ end
+
end
--
libgit2 0.21.2