diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 10e0ecbb2..e70f1602c 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -61,6 +61,7 @@ class ApplicationController < ActionController::Base def session_expiration if session[:user_id] if session_expired? && !try_to_autologin + set_localization(User.active.find_by_id(session[:user_id])) reset_session flash[:error] = l(:error_session_expired) redirect_to signin_url @@ -197,10 +198,10 @@ class ApplicationController < ActionController::Base end end - def set_localization + def set_localization(user=User.current) lang = nil - if User.current.logged? - lang = find_language(User.current.language) + if user && user.logged? + lang = find_language(user.language) end if lang.nil? && !Setting.force_default_language_for_anonymous? && request.env['HTTP_ACCEPT_LANGUAGE'] accept_lang = parse_qvalues(request.env['HTTP_ACCEPT_LANGUAGE']).first diff --git a/test/functional/sessions_test.rb b/test/functional/sessions_test.rb index a9283e03b..3aa9e70ad 100644 --- a/test/functional/sessions_test.rb +++ b/test/functional/sessions_test.rb @@ -32,6 +32,7 @@ class SessionStartTest < ActionController::TestCase end class SessionsTest < ActionController::TestCase + include Redmine::I18n tests WelcomeController fixtures :users @@ -108,6 +109,20 @@ class SessionsTest < ActionController::TestCase end end + def test_expired_user_session_should_set_locale + set_language_if_valid 'it' + user = User.find(2) + user.language = 'fr' + user.save! + + with_settings :session_timeout => '60' do + get :index, {}, {:user_id => user.id, :atime => 4.hours.ago.utc.to_i} + assert_redirected_to '/login' + assert_include "Veuillez vous reconnecter", flash[:error] + assert_equal :fr, current_language + end + end + def test_anonymous_session_should_not_be_reset with_settings :session_lifetime => '720', :session_timeout => '60' do get :index