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