Commit bba3d1e252263fe60fbb47232671153366e57394
1 parent
3e7e1a28
Exists in
master
and in
29 other branches
Allowing users to configure the page after login
Added field redirection_after_login on profiles and environments New db/schema Added a select to choose option to redirect on admin panel and on profile control panel (ActionItem2369)
Showing
13 changed files
with
321 additions
and
18 deletions
Show diff stats
app/controllers/public/account_controller.rb
| ... | ... | @@ -313,10 +313,27 @@ class AccountController < ApplicationController |
| 313 | 313 | end |
| 314 | 314 | |
| 315 | 315 | def go_to_initial_page |
| 316 | - if environment == current_user.environment | |
| 317 | - redirect_back_or_default(user.admin_url) | |
| 316 | + if environment.enabled?('allow_change_of_redirection_after_login') | |
| 317 | + case user.preferred_login_redirection | |
| 318 | + when 'keep_on_same_page' | |
| 319 | + redirect_back_or_default(user.admin_url) | |
| 320 | + when 'site_homepage' | |
| 321 | + redirect_to :controller => :home | |
| 322 | + when 'user_profile_page' | |
| 323 | + redirect_to user.public_profile_url | |
| 324 | + when 'user_homepage' | |
| 325 | + redirect_to user.url | |
| 326 | + when 'user_control_panel' | |
| 327 | + redirect_to user.admin_url | |
| 328 | + else | |
| 329 | + redirect_back_or_default(user.admin_url) | |
| 330 | + end | |
| 318 | 331 | else |
| 319 | - redirect_back_or_default(:controller => 'home') | |
| 332 | + if environment == current_user.environment | |
| 333 | + redirect_back_or_default(user.admin_url) | |
| 334 | + else | |
| 335 | + redirect_back_or_default(:controller => 'home') | |
| 336 | + end | |
| 320 | 337 | end |
| 321 | 338 | end |
| 322 | 339 | ... | ... |
app/models/environment.rb
| ... | ... | @@ -123,10 +123,22 @@ class Environment < ActiveRecord::Base |
| 123 | 123 | 'xmpp_chat' => _('XMPP/Jabber based chat'), |
| 124 | 124 | 'show_zoom_button_on_article_images' => _('Show a zoom link on all article images'), |
| 125 | 125 | 'captcha_for_logged_users' => _('Ask captcha when a logged user comments too'), |
| 126 | - 'skip_new_user_email_confirmation' => _('Skip e-mail confirmation for new users') | |
| 126 | + 'skip_new_user_email_confirmation' => _('Skip e-mail confirmation for new users'), | |
| 127 | + 'allow_change_of_redirection_after_login' => _('Allow users to set the page to redirect after login') | |
| 127 | 128 | } |
| 128 | 129 | end |
| 129 | 130 | |
| 131 | + def self.login_redirection_options | |
| 132 | + { | |
| 133 | + 'keep_on_same_page' => _('Stays on the same page the user was before login.'), | |
| 134 | + 'site_homepage' => _('Redirects the user to the environment homepage.'), | |
| 135 | + 'user_profile_page' => _('Redirects the user to his profile page.'), | |
| 136 | + 'user_homepage' => _('Redirects the user to his homepage.'), | |
| 137 | + 'user_control_panel' => _('Redirects the user to his control panel.') | |
| 138 | + } | |
| 139 | + end | |
| 140 | + validates_inclusion_of :redirection_after_login, :in => Environment.login_redirection_options.keys, :allow_nil => true | |
| 141 | + | |
| 130 | 142 | # ################################################# |
| 131 | 143 | # Relationships and applied behaviour |
| 132 | 144 | # ################################################# | ... | ... |
app/models/profile.rb
| ... | ... | @@ -972,4 +972,8 @@ private :generate_url, :url_options |
| 972 | 972 | end |
| 973 | 973 | end |
| 974 | 974 | |
| 975 | + validates_inclusion_of :redirection_after_login, :in => Environment.login_redirection_options.keys, :allow_nil => true | |
| 976 | + def preferred_login_redirection | |
| 977 | + redirection_after_login.blank? ? environment.redirection_after_login : redirection_after_login | |
| 978 | + end | |
| 975 | 979 | end | ... | ... |
app/views/features/index.rhtml
| ... | ... | @@ -26,17 +26,12 @@ Check all the features you want to enable for your environment, uncheck all the |
| 26 | 26 | |
| 27 | 27 | <h2><%= _('Configure features') %></h2> |
| 28 | 28 | |
| 29 | -<table> | |
| 30 | - <tr> | |
| 31 | - <th><%= _('Option') %></th> | |
| 32 | - <th><%= _('Choice') %></th> | |
| 33 | - </tr> | |
| 34 | - <tr> | |
| 35 | - <td><%= _('Organization Approval Method') %></td> | |
| 36 | - <td><%= select_organization_approval_method('environment', 'organization_approval_method') %></td> | |
| 37 | - </tr> | |
| 38 | -</table> | |
| 39 | - | |
| 29 | +<h3><%= _('Page to redirect after login') %></h3> | |
| 30 | + <%= select 'environment', 'redirection_after_login', Environment.login_redirection_options.map{|key,value|[value,key]} %> | |
| 31 | +<hr/> | |
| 32 | +<h3><%= _('Organization Approval Method') %></h3> | |
| 33 | + <%= select_organization_approval_method('environment', 'organization_approval_method') %> | |
| 34 | +<hr/> | |
| 40 | 35 | |
| 41 | 36 | <div> |
| 42 | 37 | <% button_bar do %> | ... | ... |
app/views/profile_editor/edit.rhtml
| ... | ... | @@ -39,6 +39,11 @@ |
| 39 | 39 | </div> |
| 40 | 40 | <% end %> |
| 41 | 41 | |
| 42 | + <% if environment.enabled?('allow_change_of_redirection_after_login') %> | |
| 43 | + <h2><%= _('Page to redirect after login') %></h2> | |
| 44 | + <%= select 'profile_data', 'redirection_after_login', Environment.login_redirection_options.map{|key,value|[value,key]}, { :selected => @profile.preferred_login_redirection} %> | |
| 45 | + <% end %> | |
| 46 | + | |
| 42 | 47 | <h2><%= _('Translations') %></h2> |
| 43 | 48 | <%= labelled_check_box( |
| 44 | 49 | _('Automaticaly redirect the visitor to the article translated to his/her language'), | ... | ... |
db/migrate/20120824183534_add_redirection_after_login_to_environment.rb
0 → 100644
| ... | ... | @@ -0,0 +1,9 @@ |
| 1 | +class AddRedirectionAfterLoginToEnvironment < ActiveRecord::Migration | |
| 2 | + def self.up | |
| 3 | + add_column :environments, :redirection_after_login, :string, :default => 'keep_on_same_page' | |
| 4 | + end | |
| 5 | + | |
| 6 | + def self.down | |
| 7 | + remove_column :environments, :redirection_after_login | |
| 8 | + end | |
| 9 | +end | ... | ... |
db/migrate/20120824184046_add_redirection_after_login_to_profiles.rb
0 → 100644
db/schema.rb
| ... | ... | @@ -261,6 +261,7 @@ ActiveRecord::Schema.define(:version => 20120825185219) do |
| 261 | 261 | t.datetime "created_at" |
| 262 | 262 | t.datetime "updated_at" |
| 263 | 263 | t.integer "reports_lower_bound", :default => 0, :null => false |
| 264 | + t.string "redirection_after_login" :default => "keep_on_same_page" | |
| 264 | 265 | end |
| 265 | 266 | |
| 266 | 267 | create_table "external_feeds", :force => true do |t| |
| ... | ... | @@ -438,6 +439,7 @@ ActiveRecord::Schema.define(:version => 20120825185219) do |
| 438 | 439 | t.string "national_region_code" |
| 439 | 440 | t.boolean "is_template", :default => false |
| 440 | 441 | t.integer "template_id" |
| 442 | + t.string "redirection_after_login" | |
| 441 | 443 | end |
| 442 | 444 | |
| 443 | 445 | add_index "profiles", ["environment_id"], :name => "index_profiles_on_environment_id" | ... | ... |
features/login.feature
| ... | ... | @@ -9,7 +9,8 @@ Feature: login |
| 9 | 9 | | joaosilva | Joao Silva | |
| 10 | 10 | |
| 11 | 11 | Scenario: login from portal homepage |
| 12 | - Given I am not logged in | |
| 12 | + Given feature "allow_change_of_redirection_after_login" is disabled on environment | |
| 13 | + And I am not logged in | |
| 13 | 14 | And I go to the homepage |
| 14 | 15 | And I fill in the following: |
| 15 | 16 | | Username | joaosilva | |
| ... | ... | @@ -19,7 +20,8 @@ Feature: login |
| 19 | 20 | And I should be logged in as "joaosilva" |
| 20 | 21 | |
| 21 | 22 | Scenario: login from some profile page |
| 22 | - Given I am not logged in | |
| 23 | + Given feature "allow_change_of_redirection_after_login" is disabled on environment | |
| 24 | + And I am not logged in | |
| 23 | 25 | And the following users |
| 24 | 26 | | login | name | |
| 25 | 27 | | mariasilva | Maria Silva | |
| ... | ... | @@ -35,7 +37,8 @@ Feature: login |
| 35 | 37 | Then I should be on Maria Silva's homepage |
| 36 | 38 | |
| 37 | 39 | Scenario: view my control panel |
| 38 | - Given I am not logged in | |
| 40 | + Given feature "allow_change_of_redirection_after_login" is disabled on environment | |
| 41 | + And I am not logged in | |
| 39 | 42 | And I go to Joao Silva's control panel |
| 40 | 43 | And I should be on login page |
| 41 | 44 | And I fill in the following: |
| ... | ... | @@ -48,3 +51,146 @@ Feature: login |
| 48 | 51 | Given I am logged in as "joaosilva" |
| 49 | 52 | And I go to login page |
| 50 | 53 | Then I should be on Joao Silva's control panel |
| 54 | + | |
| 55 | + Scenario: stay on the same page after login if this is the environment default | |
| 56 | + Given feature "allow_change_of_redirection_after_login" is enabled on environment | |
| 57 | + And I am not logged in | |
| 58 | + And the environment is configured to stay on the same page after login | |
| 59 | + And the following users | |
| 60 | + | login | name | | |
| 61 | + | mariasilva | Maria Silva | | |
| 62 | + And the following articles | |
| 63 | + | owner | name | homepage | | |
| 64 | + | mariasilva | my home page | true | | |
| 65 | + And I go to Maria Silva's homepage | |
| 66 | + And I follow "Login" | |
| 67 | + And I fill in the following: | |
| 68 | + | Username | joaosilva | | |
| 69 | + | Password | 123456 | | |
| 70 | + When I press "Log in" | |
| 71 | + Then I should be on Maria Silva's homepage | |
| 72 | + | |
| 73 | + Scenario: go to site homepage if this is the environment default | |
| 74 | + Given feature "allow_change_of_redirection_after_login" is enabled on environment | |
| 75 | + And I am not logged in | |
| 76 | + And the environment is configured to redirect to site homepage after login | |
| 77 | + And I go to Joao Silva's homepage | |
| 78 | + And I follow "Login" | |
| 79 | + And I fill in the following: | |
| 80 | + | Username | joaosilva | | |
| 81 | + | Password | 123456 | | |
| 82 | + When I press "Log in" | |
| 83 | + Then I should be on the homepage | |
| 84 | + | |
| 85 | + Scenario: go to user profile after login if this is the environment default | |
| 86 | + Given feature "allow_change_of_redirection_after_login" is enabled on environment | |
| 87 | + And I am not logged in | |
| 88 | + And the environment is configured to redirect to user profile page after login | |
| 89 | + And I go to the homepage | |
| 90 | + And I follow "Login" | |
| 91 | + And I fill in the following: | |
| 92 | + | Username | joaosilva | | |
| 93 | + | Password | 123456 | | |
| 94 | + When I press "Log in" | |
| 95 | + Then I should be on Joao Silva's profile | |
| 96 | + | |
| 97 | + Scenario: go to profile homepage after login if this is the environment default | |
| 98 | + Given the following articles | |
| 99 | + | owner | name | body | homepage | | |
| 100 | + | joaosilva | Sample Article | This is an article | true | | |
| 101 | + And feature "allow_change_of_redirection_after_login" is enabled on environment | |
| 102 | + And I am not logged in | |
| 103 | + And the environment is configured to redirect to profile homepage after login | |
| 104 | + And I go to the homepage | |
| 105 | + And I follow "Login" | |
| 106 | + And I fill in the following: | |
| 107 | + | Username | joaosilva | | |
| 108 | + | Password | 123456 | | |
| 109 | + When I press "Log in" | |
| 110 | + Then I should be on Joao Silva's homepage | |
| 111 | + | |
| 112 | + Scenario: go to profile control panel after login if this is the environment default | |
| 113 | + Given feature "allow_change_of_redirection_after_login" is enabled on environment | |
| 114 | + And I am not logged in | |
| 115 | + And the environment is configured to redirect to profile control panel after login | |
| 116 | + And I go to the homepage | |
| 117 | + And I follow "Login" | |
| 118 | + And I fill in the following: | |
| 119 | + | Username | joaosilva | | |
| 120 | + | Password | 123456 | | |
| 121 | + When I press "Log in" | |
| 122 | + Then I should be on Joao Silva's control panel | |
| 123 | + | |
| 124 | + Scenario: stay on the same page after login if this is the profile default | |
| 125 | + Given feature "allow_change_of_redirection_after_login" is enabled on environment | |
| 126 | + And I am not logged in | |
| 127 | + And the environment is configured to redirect to site homepage after login | |
| 128 | + And the profile joaosilva is configured to stay on the same page after login | |
| 129 | + And the following users | |
| 130 | + | login | name | | |
| 131 | + | mariasilva | Maria Silva | | |
| 132 | + And the following articles | |
| 133 | + | owner | name | homepage | | |
| 134 | + | mariasilva | my home page | true | | |
| 135 | + And I go to Maria Silva's homepage | |
| 136 | + And I follow "Login" | |
| 137 | + And I fill in the following: | |
| 138 | + | Username | joaosilva | | |
| 139 | + | Password | 123456 | | |
| 140 | + When I press "Log in" | |
| 141 | + Then I should be on Maria Silva's homepage | |
| 142 | + | |
| 143 | + Scenario: go to site homepage if this is the profile default | |
| 144 | + Given feature "allow_change_of_redirection_after_login" is enabled on environment | |
| 145 | + And I am not logged in | |
| 146 | + And the environment is configured to stay on the same page after login | |
| 147 | + And the profile joaosilva is configured to redirect to site homepage after login | |
| 148 | + And I go to Joao Silva's homepage | |
| 149 | + And I follow "Login" | |
| 150 | + And I fill in the following: | |
| 151 | + | Username | joaosilva | | |
| 152 | + | Password | 123456 | | |
| 153 | + When I press "Log in" | |
| 154 | + Then I should be on the homepage | |
| 155 | + | |
| 156 | + Scenario: go to user profile after login if this is the profile default | |
| 157 | + Given feature "allow_change_of_redirection_after_login" is enabled on environment | |
| 158 | + And I am not logged in | |
| 159 | + And the environment is configured to stay on the same page after login | |
| 160 | + And the profile joaosilva is configured to redirect to user profile page after login | |
| 161 | + And I go to the homepage | |
| 162 | + And I follow "Login" | |
| 163 | + And I fill in the following: | |
| 164 | + | Username | joaosilva | | |
| 165 | + | Password | 123456 | | |
| 166 | + When I press "Log in" | |
| 167 | + Then I should be on Joao Silva's profile | |
| 168 | + | |
| 169 | + Scenario: go to profile homepage after login if this is the profile default | |
| 170 | + Given the following articles | |
| 171 | + | owner | name | body | homepage | | |
| 172 | + | joaosilva | Sample Article | This is an article | true | | |
| 173 | + And feature "allow_change_of_redirection_after_login" is enabled on environment | |
| 174 | + And I am not logged in | |
| 175 | + And the environment is configured to stay on the same page after login | |
| 176 | + And the profile joaosilva is configured to redirect to profile homepage after login | |
| 177 | + And I go to the homepage | |
| 178 | + And I follow "Login" | |
| 179 | + And I fill in the following: | |
| 180 | + | Username | joaosilva | | |
| 181 | + | Password | 123456 | | |
| 182 | + When I press "Log in" | |
| 183 | + Then I should be on Joao Silva's homepage | |
| 184 | + | |
| 185 | + Scenario: go to profile control panel after login if this is the profile default | |
| 186 | + Given feature "allow_change_of_redirection_after_login" is enabled on environment | |
| 187 | + And I am not logged in | |
| 188 | + And the environment is configured to stay on the same page after login | |
| 189 | + And the profile joaosilva is configured to redirect to profile control panel after login | |
| 190 | + And I go to the homepage | |
| 191 | + And I follow "Login" | |
| 192 | + And I fill in the following: | |
| 193 | + | Username | joaosilva | | |
| 194 | + | Password | 123456 | | |
| 195 | + When I press "Log in" | |
| 196 | + Then I should be on Joao Silva's control panel | ... | ... |
features/step_definitions/noosfero_steps.rb
| ... | ... | @@ -712,3 +712,39 @@ When /^I make a AJAX request to (.*)$/ do |page| |
| 712 | 712 | header 'X-Requested-With', 'XMLHttpRequest' |
| 713 | 713 | visit(path_to(page)) |
| 714 | 714 | end |
| 715 | + | |
| 716 | +Given /^the environment is configured to (.*) after login$/ do |option| | |
| 717 | + redirection = case option | |
| 718 | + when 'stay on the same page' | |
| 719 | + 'keep_on_same_page' | |
| 720 | + when 'redirect to site homepage' | |
| 721 | + 'site_homepage' | |
| 722 | + when 'redirect to user profile page' | |
| 723 | + 'user_profile_page' | |
| 724 | + when 'redirect to profile homepage' | |
| 725 | + 'user_homepage' | |
| 726 | + when 'redirect to profile control panel' | |
| 727 | + 'user_control_panel' | |
| 728 | + end | |
| 729 | + environment = Environment.default | |
| 730 | + environment.redirection_after_login = redirection | |
| 731 | + environment.save | |
| 732 | +end | |
| 733 | + | |
| 734 | +Given /^the profile (.*) is configured to (.*) after login$/ do |profile, option| | |
| 735 | + redirection = case option | |
| 736 | + when 'stay on the same page' | |
| 737 | + 'keep_on_same_page' | |
| 738 | + when 'redirect to site homepage' | |
| 739 | + 'site_homepage' | |
| 740 | + when 'redirect to user profile page' | |
| 741 | + 'user_profile_page' | |
| 742 | + when 'redirect to profile homepage' | |
| 743 | + 'user_homepage' | |
| 744 | + when 'redirect to profile control panel' | |
| 745 | + 'user_control_panel' | |
| 746 | + end | |
| 747 | + profile = Profile.find_by_identifier(profile) | |
| 748 | + profile.redirection_after_login = redirection | |
| 749 | + profile.save | |
| 750 | +end | ... | ... |
test/functional/profile_editor_controller_test.rb
| ... | ... | @@ -962,4 +962,21 @@ class ProfileEditorControllerTest < ActionController::TestCase |
| 962 | 962 | assert_no_tag :tag => 'input', :attributes => {:name => 'profile_data[is_template]'} |
| 963 | 963 | end |
| 964 | 964 | |
| 965 | + should 'display select to change redirection after login if enabled' do | |
| 966 | + e = Environment.default | |
| 967 | + e.enable('allow_change_of_redirection_after_login') | |
| 968 | + e.save | |
| 969 | + | |
| 970 | + get :edit, :profile => profile.identifier | |
| 971 | + assert_tag :tag => 'select', :attributes => {:id => 'profile_data_redirection_after_login'} | |
| 972 | + end | |
| 973 | + | |
| 974 | + should 'not display select to change redirection after login if not enabled' do | |
| 975 | + e = Environment.default | |
| 976 | + e.disable('allow_change_of_redirection_after_login') | |
| 977 | + e.save | |
| 978 | + | |
| 979 | + get :edit, :profile => profile.identifier | |
| 980 | + assert_no_tag :tag => 'select', :attributes => {:id => 'profile_data_redirection_after_login'} | |
| 981 | + end | |
| 965 | 982 | end | ... | ... |
test/unit/environment_test.rb
| ... | ... | @@ -1220,4 +1220,26 @@ class EnvironmentTest < ActiveSupport::TestCase |
| 1220 | 1220 | assert_includes environment.licenses, l2 |
| 1221 | 1221 | assert_not_includes environment.licenses, l3 |
| 1222 | 1222 | end |
| 1223 | + | |
| 1224 | + should 'return a Hash on login redirection options' do | |
| 1225 | + assert_kind_of Hash, Environment.login_redirection_options | |
| 1226 | + end | |
| 1227 | + | |
| 1228 | + should 'respond to redirection after login' do | |
| 1229 | + assert_respond_to Environment.new, :redirection_after_login | |
| 1230 | + end | |
| 1231 | + | |
| 1232 | + should 'allow only environment login redirection options' do | |
| 1233 | + environment = fast_create(Environment) | |
| 1234 | + environment.redirection_after_login = 'invalid_option' | |
| 1235 | + environment.save | |
| 1236 | + assert environment.errors.invalid?(:redirection_after_login) | |
| 1237 | + | |
| 1238 | + Environment.login_redirection_options.keys.each do |redirection| | |
| 1239 | + environment.redirection_after_login = redirection | |
| 1240 | + environment.save | |
| 1241 | + assert !environment.errors.invalid?(:redirection_after_login) | |
| 1242 | + end | |
| 1243 | + end | |
| 1244 | + | |
| 1223 | 1245 | end | ... | ... |
test/unit/profile_test.rb
| ... | ... | @@ -1916,4 +1916,33 @@ class ProfileTest < ActiveSupport::TestCase |
| 1916 | 1916 | profile.save! |
| 1917 | 1917 | end |
| 1918 | 1918 | |
| 1919 | + should 'respond to redirection_after_login' do | |
| 1920 | + assert_respond_to Profile.new, :redirection_after_login | |
| 1921 | + end | |
| 1922 | + | |
| 1923 | + should 'return profile preference of redirection unless it is blank' do | |
| 1924 | + environment = fast_create(Environment, :redirection_after_login => 'site_homepage') | |
| 1925 | + profile = fast_create(Profile, :redirection_after_login => 'keep_on_same_page', :environment_id => environment.id) | |
| 1926 | + assert_equal 'keep_on_same_page', profile.preferred_login_redirection | |
| 1927 | + end | |
| 1928 | + | |
| 1929 | + should 'return environment preference of redirection when profile preference is blank' do | |
| 1930 | + environment = fast_create(Environment, :redirection_after_login => 'site_homepage') | |
| 1931 | + profile = fast_create(Profile, :environment_id => environment.id) | |
| 1932 | + assert_equal 'site_homepage', profile.preferred_login_redirection | |
| 1933 | + end | |
| 1934 | + | |
| 1935 | + should 'allow only environment login redirection options' do | |
| 1936 | + profile = fast_create(Profile) | |
| 1937 | + profile.redirection_after_login = 'invalid_option' | |
| 1938 | + profile.save | |
| 1939 | + assert profile.errors.invalid?(:redirection_after_login) | |
| 1940 | + | |
| 1941 | + Environment.login_redirection_options.keys.each do |redirection| | |
| 1942 | + profile.redirection_after_login = redirection | |
| 1943 | + profile.save | |
| 1944 | + assert !profile.errors.invalid?(:redirection_after_login) | |
| 1945 | + end | |
| 1946 | + end | |
| 1947 | + | |
| 1919 | 1948 | end | ... | ... |