Commit 52591d04efebac62ef1b9b10b8a025b773bf41a8
1 parent
8c2a1563
Exists in
master
and in
23 other branches
ActionItem893: retrieving urls from profile to get right hostname
Showing
15 changed files
with
86 additions
and
34 deletions
Show diff stats
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
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 < 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 < 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 < 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 < 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 < 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 < 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 < 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 | ... | ... |