diff --git a/app/views/friends/index.rhtml b/app/views/friends/index.rhtml
index 9a97bcb..6096595 100644
--- a/app/views/friends/index.rhtml
+++ b/app/views/friends/index.rhtml
@@ -14,7 +14,9 @@
<% button_bar do %>
<%= button(:back, _('Back to control panel'), :controller => 'profile_editor') %>
<%= button(:search, _('Find people'), :controller => 'search', :action => 'assets', :asset => 'people') %>
- <%= button(:search, _('Invite people from my e-mail contacts'), :controller => 'invite', :action => 'select_address_book') %>
+ <% if !@plugins.dispatch(:remove_invite_friends_button).include?(true) %>
+ <%= button(:search, _('Invite people from my e-mail contacts'), :controller => 'invite', :action => 'select_address_book') %>
+ <% end %>
<% end %>
<% end %>
@@ -43,7 +45,9 @@
<% button_bar do %>
<%= button(:back, _('Back to control panel'), :controller => 'profile_editor') %>
<%= button(:search, _('Find people'), :controller => 'search', :action => 'assets', :asset => 'people') %>
- <%= button(:search, _('Invite people from my e-mail contacts'), :controller => 'invite', :action => 'select_address_book') %>
+ <% if !@plugins.dispatch(:remove_invite_friends_button).include?(true) %>
+ <%= button(:search, _('Invite people from my e-mail contacts'), :controller => 'invite', :action => 'select_address_book') %>
+ <% end %>
<% end %>
<% end %>
diff --git a/lib/noosfero/plugin.rb b/lib/noosfero/plugin.rb
index 9479278..247b3d0 100644
--- a/lib/noosfero/plugin.rb
+++ b/lib/noosfero/plugin.rb
@@ -244,4 +244,10 @@ class Noosfero::Plugin
nil
end
+ # -> Removes the invite friend button from the friends controller
+ # returns = boolean
+ def remove_invite_friends_button
+ nil
+ end
+
end
diff --git a/plugins/stoa/lib/stoa_plugin.rb b/plugins/stoa/lib/stoa_plugin.rb
index 651a47f..ae12fbf 100644
--- a/plugins/stoa/lib/stoa_plugin.rb
+++ b/plugins/stoa/lib/stoa_plugin.rb
@@ -64,4 +64,21 @@ class StoaPlugin < Noosfero::Plugin
:block => block }]
end
+ def invite_controller_filters
+ [{ :type => 'before_filter',
+ :method_name => 'check_usp_id_existence',
+ :block => lambda {render_access_denied if profile.usp_id.blank?} }]
+ end
+
+ def control_panel_buttons
+ { :title => _('Invite friends'),
+ :icon => 'invite-friends',
+ :url => {:controller => 'invite',
+ :action => 'select_address_book'} } if !context.profile.usp_id.blank?
+ end
+
+ def remove_invite_friends_button
+ true
+ end
+
end
diff --git a/plugins/stoa/public/images/control-panel/invite-friends.gif b/plugins/stoa/public/images/control-panel/invite-friends.gif
new file mode 100644
index 0000000..e6ab558
Binary files /dev/null and b/plugins/stoa/public/images/control-panel/invite-friends.gif differ
diff --git a/plugins/stoa/public/images/control-panel/invite-friends.png b/plugins/stoa/public/images/control-panel/invite-friends.png
new file mode 100644
index 0000000..ab4ec60
Binary files /dev/null and b/plugins/stoa/public/images/control-panel/invite-friends.png differ
diff --git a/plugins/stoa/public/style.css b/plugins/stoa/public/style.css
index 18346f8..26a97dd 100644
--- a/plugins/stoa/public/style.css
+++ b/plugins/stoa/public/style.css
@@ -3,3 +3,6 @@
display: block;
}
+.controller-profile_editor a.control-panel-invite-friends {background-image: url(../stoa/images/control-panel/invite-friends.png)}
+.controller-profile_editor .msie6 a.control-panel-invite-friends {background-image: url(../stoa/images/control-panel/invite-friends.gif)}
+
diff --git a/plugins/stoa/test/functional/invite_controller_test.rb b/plugins/stoa/test/functional/invite_controller_test.rb
new file mode 100644
index 0000000..1f8cc61
--- /dev/null
+++ b/plugins/stoa/test/functional/invite_controller_test.rb
@@ -0,0 +1,40 @@
+require File.dirname(__FILE__) + '/../../../../test/test_helper'
+require File.dirname(__FILE__) + '/../../../../app/controllers/public/invite_controller'
+
+# Re-raise errors caught by the controller.
+class InviteController; def rescue_action(e) raise e end; end
+
+class InviteControllerTest < ActionController::TestCase
+
+ def setup
+ @controller = InviteController.new
+ @request = ActionController::TestRequest.new
+ @response = ActionController::TestResponse.new
+ environment = Environment.default
+ environment.enabled_plugins = ['StoaPlugin']
+ environment.save!
+ end
+
+ should 'not enable access to invitation if the user has not an usp_id' do
+ Task.create!(:code => 12345678)
+ person_without_usp_id = User.create!(:login => 'user-without', :email => 'user-without@example.com', :password => 'test', :password_confirmation => 'test', :person_data => {:invitation_code => 12345678}).person
+
+ login_as(person_without_usp_id.identifier)
+ get :select_address_book, :profile => person_without_usp_id.identifier
+ assert_response 403
+ get :select_friends, :profile => person_without_usp_id.identifier
+ assert_response 403
+ end
+
+ should 'enable access to invitation if the user has an usp_id' do
+ person_with_usp_id = User.create!(:login => 'user-with', :email => 'user-with@example.com', :password => 'test', :password_confirmation => 'test', :person_data => {:usp_id => 12345678}).person
+
+ login_as(person_with_usp_id.identifier)
+ get :select_address_book, :profile => person_with_usp_id.identifier
+ assert_response 200
+ get :select_friends, :profile => person_with_usp_id.identifier, :contact_list => ContactList.create.id
+ assert_response 200
+ end
+
+end
+
diff --git a/test/functional/friends_controller_test.rb b/test/functional/friends_controller_test.rb
index 3b37aaa..7284321 100644
--- a/test/functional/friends_controller_test.rb
+++ b/test/functional/friends_controller_test.rb
@@ -57,4 +57,24 @@ class FriendsControllerTest < ActionController::TestCase
assert_tag :tag => 'a', :content => 'Find people', :attributes => { :href => '/assets/people' }
end
+ should 'not display invite friends button if any plugin tells not to' do
+ class Plugin1 < Noosfero::Plugin
+ def remove_invite_friends_button
+ true
+ end
+ end
+ class Plugin2 < Noosfero::Plugin
+ def remove_invite_friends_button
+ false
+ end
+ end
+
+ e = profile.environment
+ e.enable_plugin(Plugin1.name)
+ e.enable_plugin(Plugin2.name)
+
+ get :index, :profile => 'testuser'
+ assert_no_tag :tag => 'a', :attributes => { :href => "/profile/testuser/invite/friends" }
+ end
+
end
--
libgit2 0.21.2