Commit 52591d04efebac62ef1b9b10b8a025b773bf41a8

Authored by Daniela Feitosa
1 parent 8c2a1563

ActionItem893: retrieving urls from profile to get right hostname

app/controllers/public/account_controller.rb
... ... @@ -261,7 +261,11 @@ class AccountController < ApplicationController
261 261 end
262 262  
263 263 def go_to_user_initial_page
264   - redirect_back_or_default(:controller => "profile_editor", :profile => current_user.login, :action => 'index')
  264 + if environment == current_user.environment
  265 + redirect_back_or_default(user.admin_url)
  266 + else
  267 + redirect_back_or_default(:controller => 'home')
  268 + end
265 269 end
266 270  
267 271 end
... ...
app/helpers/application_helper.rb
... ... @@ -121,13 +121,22 @@ module ApplicationHelper
121 121 end
122 122  
123 123 def link_to_homepage(text, profile = nil, options = {})
124   - profile ||= current_user.login
125   - link_to text, homepage_path(:profile => profile) , options
  124 + p = if profile
  125 + Profile[profile]
  126 + else
  127 + user
  128 + end
  129 +
  130 + link_to text, p.url, options
126 131 end
127 132  
128 133 def link_to_myprofile(text, url = {}, profile = nil, options = {})
129   - profile ||= current_user.login
130   - link_to text, { :profile => profile, :controller => 'profile_editor' }.merge(url), options
  134 + p = if profile
  135 + Profile[profile]
  136 + else
  137 + user
  138 + end
  139 + link_to text, p.admin_url.merge(url), options
131 140 end
132 141  
133 142 def link_to_document(doc, text = nil)
... ...
app/models/person.rb
... ... @@ -154,8 +154,8 @@ class Person < Profile
154 154 person.user.save!
155 155 end
156 156  
157   - def is_admin?
158   - role_assignments.map{|ra|ra.role.permissions}.any? do |ps|
  157 + def is_admin?(environment)
  158 + role_assignments.select { |ra| ra.resource == environment }.map{|ra|ra.role.permissions}.any? do |ps|
159 159 ps.any? do |p|
160 160 ActiveRecord::Base::PERMISSIONS['Environment'].keys.include?(p)
161 161 end
... ...
app/views/blocks/profile_info_actions/person.rhtml
... ... @@ -2,7 +2,7 @@
2 2 <%if logged_in? && (user != profile) %>
3 3  
4 4 <% if !user.already_request_friendship?(profile) and !user.is_a_friend?(profile) %>
5   - <li><%= link_to content_tag('span', __('Add friend')), { :profile => user.identifier, :controller => 'friends', :action => 'add', :id => profile.id }, :class => 'button with-text icon-add' %></li>
  5 + <li><%= link_to content_tag('span', __('Add friend')), user.url.merge(:controller => 'friends', :action => 'add', :id => profile.id), :class => 'button with-text icon-add' %></li>
6 6 <% end %>
7 7  
8 8 <% if user.is_a_friend?(profile) && profile.enable_contact? %>
... ...
app/views/home/index.rhtml
1   -<%= flash[:notice] %>
2   -
3 1 <%= @environment.description %>
4 2  
5 3 <div id='home-search' style='text-align: center'>
... ...
app/views/profile_editor/index.rhtml
... ... @@ -21,7 +21,7 @@
21 21  
22 22 <%= file_manager_button(_('Edit Appearance'), 'icons-app/design-editor.png', :controller => 'themes', :action => 'index') %>
23 23  
24   - <%= file_manager_button(_('Edit Header and Footer'), 'icons-app/header-and-footer.png', :controller => 'profile_editor', :action => 'header_footer') unless profile.enterprise? && environment.enabled?('disable_header_and_footer') && !user.is_admin? %>
  24 + <%= file_manager_button(_('Edit Header and Footer'), 'icons-app/header-and-footer.png', :controller => 'profile_editor', :action => 'header_footer') unless profile.enterprise? && environment.enabled?('disable_header_and_footer') && !user.is_admin?(environment) %>
25 25  
26 26 <%= file_manager_button(_('Manage Content'), 'icons-app/cms.png', :controller => 'cms') unless environment.enabled?('disable_cms') || profile.community? %>
27 27  
... ...
app/views/search/communities.rhtml
... ... @@ -14,7 +14,8 @@
14 14  
15 15 <% if logged_in? %>
16 16 <% button_bar do %>
17   - <%= button(:add, _('New community'), :controller => 'memberships', :action => 'new_community', :profile => current_user.person.identifier) %>
  17 + <%# FIXME shouldn't the user create the community in the current environment instead of going to its home environment? %>
  18 + <%= button(:add, _('New community'), user.url.merge(:controller => 'memberships', :action => 'new_community')) %>
18 19 <% end %>
19 20 <% end %>
20 21  
... ...
app/views/shared/user_menu.rhtml
... ... @@ -15,9 +15,9 @@
15 15 <div id="user_menu_ul">
16 16 <ul>
17 17  
18   - <li><a href="<%= homepage_path(:profile => current_user.login) %>"
19   - help="<%= _('Go to your home page.') %>"
20   - ><span class="icon-menu-home"></span><%= __('My Home Page') %></a></li>
  18 + <li>
  19 + <%= link_to( '<span class="icon-menu-home"></span>' + __('My Home Page'), user.url, :help => _('Go to your home page.'))%>
  20 + </li>
21 21  
22 22 <!-- li><a href="#"><span class="icon-menu-blog"></span> Meu Blog</a></li -->
23 23  
... ... @@ -32,16 +32,16 @@
32 32 :help => _('Control panel: change your picture, edit your personal information, create content or change the way your home page looks.')
33 33 ) %></li>
34 34  
35   - <%=
36   - '<li>'+ link_to( '<span class="icon-menu-"></span>'+ _('Admin'),
37   - { :controller => 'admin_panel' }, :id => 'link_admin_panel',
38   - :help => _('Access the site administration panel.')
39   - ) +
40   - '</li>' if user.is_admin?
41   - %>
  35 + <% if user.is_admin?(environment) %>
  36 + <li><%= link_to( '<span class="icon-menu-"></span>'+ _('Admin'),
  37 + {:controller => 'admin_panel' },
  38 + :id => 'link_admin_panel',
  39 + :help => _('Access the site administration panel.')
  40 + )%></li>
  41 + <% end %>
42 42  
43 43 <li><%= link_to( '<span class="icon-menu-logout"></span>'+ _('Logout'),
44   - { :controller => 'account', :action => 'logout'},
  44 + {:controller => 'account', :action => 'logout'},
45 45 :id => 'link_logout',
46 46 :help => _('This link takes you out of the system. You should logout if other people are willing to use the same computer after you.')
47 47 ) %></li>
... ...
test/functional/account_controller_test.rb
... ... @@ -40,6 +40,16 @@ class AccountControllerTest &lt; Test::Unit::TestCase
40 40 assert_redirected_to :controller => 'profile_editor', :action => 'index', :profile => 'quire'
41 41 end
42 42  
  43 + should 'redirect to home when login on other environment' do
  44 + e = Environment.create!(:name => 'other_environment')
  45 + e.domains << Domain.new(:name => 'other.environment')
  46 + e.save!
  47 + u = create_user('test_user', :environment => e).person
  48 + post :login, :user => {:login => 'test_user', :password => 'test_user'}
  49 +
  50 + assert_redirected_to :controller => 'home'
  51 + end
  52 +
43 53 def test_should_fail_login_and_not_redirect
44 54 @request.env["HTTP_REFERER"] = 'bli'
45 55 post :login, :user => {:login => 'johndoe', :password => 'bad password'}
... ... @@ -275,7 +285,8 @@ class AccountControllerTest &lt; Test::Unit::TestCase
275 285 end
276 286  
277 287 should 'correct redirect after login' do
278   - post :login, :user => {:login => 'johndoe', :password => 'test'}
  288 + user = create_user('correct_redirect').person
  289 + post :login, :user => {:login => 'correct_redirect', :password => 'correct_redirect'}
279 290 assert_redirected_to :controller => 'profile_editor'
280 291 end
281 292  
... ...
test/functional/admin_panel_controller_test.rb
... ... @@ -24,11 +24,6 @@ class AdminPanelControllerTest &lt; Test::Unit::TestCase
24 24 end
25 25  
26 26 should 'manage the correct environment' do
27   - Environment.destroy_all
28   -
29   - default = Environment.create!(:name => 'default env', :is_default => true)
30   - Environment.stubs(:default).returns(default)
31   -
32 27 current = Environment.create!(:name => 'test environment', :is_default => false)
33 28 current.domains.create!(:name => 'example.com')
34 29  
... ...
test/functional/application_controller_test.rb
... ... @@ -408,4 +408,20 @@ class ApplicationControllerTest &lt; Test::Unit::TestCase
408 408 get :index, :profile => p.identifier
409 409 assert_tag 'title', :content => p.name + ' - ' + p.environment.name
410 410 end
  411 +
  412 + should 'display menu links for my environment when logged in other environment' do
  413 + e = Environment.create!(:name => 'other_environment')
  414 + e.domains << Domain.new(:name => 'other.environment')
  415 + e.save!
  416 +
  417 + login_as(create_admin_user(e))
  418 + uses_host 'other.environment'
  419 + get :index
  420 + assert_tag :tag => 'div', :attributes => {:id => 'user_menu_ul'}
  421 + assert_tag :tag => 'div', :attributes => {:id => 'user_menu_ul'},
  422 + :descendant => {:tag => 'a', :attributes => { :href => 'http://other.environment/adminuser' }},
  423 + :descendant => {:tag => 'a', :attributes => { :href => 'http://other.environment/myprofile/adminuser' }},
  424 + :descendant => {:tag => 'a', :attributes => { :href => '/admin' }}
  425 + end
  426 +
411 427 end
... ...
test/functional/profile_controller_test.rb
... ... @@ -172,7 +172,7 @@ class ProfileControllerTest &lt; Test::Unit::TestCase
172 172 community = Community.create!(:name => 'my test community')
173 173 community.add_admin(@profile)
174 174 get :index, :profile => community.identifier
175   - assert_tag :tag => 'a', :attributes => { :href => "/myprofile/#{@profile.identifier}" }, :content => 'Control panel'
  175 + assert_tag :tag => 'a', :attributes => { :href => /\/myprofile\/#{@profile.identifier}/ }, :content => 'Control panel'
176 176 end
177 177  
178 178 should 'show create community in own profile' do
... ...
test/integration/login_to_the_application_test.rb
... ... @@ -12,7 +12,8 @@ class LoginToTheApplicationTest &lt; ActionController::IntegrationTest
12 12 get '/account/login_popup'
13 13 assert_response :success
14 14  
15   - login('ze', 'test')
  15 + create_user('test_user').person
  16 + login('test_user', 'test_user')
16 17 assert_cannot_login
17 18 assert_can_logout
18 19  
... ...
test/test_helper.rb
... ... @@ -66,7 +66,7 @@ class Test::Unit::TestCase
66 66 end
67 67  
68 68 def create_admin_user(env)
69   - admin_user = User.find_by_login('adminuser') || create_user('adminuser', :email => 'adminuser@noosfero.org', :password => 'adminuser', :password_confirmation => 'adminuser')
  69 + admin_user = User.find_by_login('adminuser') || create_user('adminuser', :email => 'adminuser@noosfero.org', :password => 'adminuser', :password_confirmation => 'adminuser', :environment => env)
70 70 admin_role = Role.find_by_name('admin_role') || Role.create!(:name => 'admin_role', :permissions => ['view_environment_admin_panel','edit_environment_features', 'edit_environment_design', 'manage_environment_categories', 'manage_environment_roles', 'manage_environment_validators'])
71 71 RoleAssignment.create!(:accessor => admin_user.person, :role => admin_role, :resource => env) unless admin_user.person.role_assignments.map{|ra|[ra.role, ra.accessor, ra.resource]}.include?([admin_role, admin_user, env])
72 72 admin_user.login
... ...
test/unit/person_test.rb
... ... @@ -134,10 +134,27 @@ class PersonTest &lt; Test::Unit::TestCase
134 134 env = Environment.create!(:name => 'blah')
135 135 person = create_user('just_another_person').person
136 136 env.affiliate(person, role)
137   - assert ! person.is_admin?
  137 + assert ! person.is_admin?(env)
138 138 role.update_attributes(:permissions => ['view_environment_admin_panel'])
139 139 person = Person.find(person.id)
140   - assert person.is_admin?
  140 + assert person.is_admin?(env)
  141 + end
  142 +
  143 + should 'separate admins of different environments' do
  144 + env1 = Environment.create!(:name => 'blah1')
  145 + env2 = Environment.create!(:name => 'blah2')
  146 +
  147 + # role is an admin role
  148 + role = Role.create!(:name => 'just_another_admin_role')
  149 + role.update_attributes(:permissions => ['view_environment_admin_panel'])
  150 +
  151 + # user is admin of env1, but not of env2
  152 + person = create_user('just_another_person').person
  153 + env1.affiliate(person, role)
  154 +
  155 + person = Person.find(person.id)
  156 + assert person.is_admin?(env1)
  157 + assert !person.is_admin?(env2)
141 158 end
142 159  
143 160 should 'get a default home page and a RSS feed' do
... ...