Commit 577d405e3bb4f42dc51724aa7a2e51bd3ed77210
1 parent
02848296
Exists in
ratings_minor_fixes
and in
3 other branches
create the possibility to change theme by url parameter
Showing
12 changed files
with
89 additions
and
18 deletions
Show diff stats
app/controllers/application_controller.rb
| @@ -13,6 +13,13 @@ class ApplicationController < ActionController::Base | @@ -13,6 +13,13 @@ class ApplicationController < ActionController::Base | ||
| 13 | before_filter :verify_members_whitelist, :if => [:private_environment?, :user] | 13 | before_filter :verify_members_whitelist, :if => [:private_environment?, :user] |
| 14 | before_filter :redirect_to_current_user | 14 | before_filter :redirect_to_current_user |
| 15 | 15 | ||
| 16 | + before_filter :set_session_theme | ||
| 17 | + def set_session_theme | ||
| 18 | + if params[:theme] | ||
| 19 | + session[:theme] = environment.theme_ids.include?(params[:theme]) ? params[:theme] : nil | ||
| 20 | + end | ||
| 21 | + end | ||
| 22 | + | ||
| 16 | def require_login_for_environment | 23 | def require_login_for_environment |
| 17 | login_required | 24 | login_required |
| 18 | end | 25 | end |
app/controllers/my_profile/profile_themes_controller.rb
| @@ -63,12 +63,12 @@ class ProfileThemesController < ThemesController | @@ -63,12 +63,12 @@ class ProfileThemesController < ThemesController | ||
| 63 | end | 63 | end |
| 64 | 64 | ||
| 65 | def start_test | 65 | def start_test |
| 66 | - session[:theme] = params[:id] | 66 | + session[:user_theme] = params[:id] |
| 67 | redirect_to :controller => 'content_viewer', :profile => profile.identifier, :action => 'view_page' | 67 | redirect_to :controller => 'content_viewer', :profile => profile.identifier, :action => 'view_page' |
| 68 | end | 68 | end |
| 69 | 69 | ||
| 70 | def stop_test | 70 | def stop_test |
| 71 | - session[:theme] = nil | 71 | + session[:user_theme] = nil |
| 72 | redirect_to :action => 'index' | 72 | redirect_to :action => 'index' |
| 73 | end | 73 | end |
| 74 | 74 |
app/helpers/application_helper.rb
| @@ -344,7 +344,7 @@ module ApplicationHelper | @@ -344,7 +344,7 @@ module ApplicationHelper | ||
| 344 | end | 344 | end |
| 345 | 345 | ||
| 346 | def is_testing_theme | 346 | def is_testing_theme |
| 347 | - !controller.session[:theme].nil? | 347 | + !controller.session[:user_theme].nil? |
| 348 | end | 348 | end |
| 349 | 349 | ||
| 350 | def theme_owner | 350 | def theme_owner |
app/helpers/theme_loader_helper.rb
| @@ -2,8 +2,8 @@ module ThemeLoaderHelper | @@ -2,8 +2,8 @@ module ThemeLoaderHelper | ||
| 2 | def current_theme | 2 | def current_theme |
| 3 | @current_theme ||= | 3 | @current_theme ||= |
| 4 | begin | 4 | begin |
| 5 | - if session[:theme] | ||
| 6 | - session[:theme] | 5 | + if session[:user_theme] |
| 6 | + session[:user_theme] | ||
| 7 | else | 7 | else |
| 8 | # utility for developers: set the theme to 'random' in development mode and | 8 | # utility for developers: set the theme to 'random' in development mode and |
| 9 | # you will get a different theme every request. This is interesting for | 9 | # you will get a different theme every request. This is interesting for |
| @@ -11,8 +11,8 @@ module ThemeLoaderHelper | @@ -11,8 +11,8 @@ module ThemeLoaderHelper | ||
| 11 | if Rails.env.development? && environment.theme == 'random' | 11 | if Rails.env.development? && environment.theme == 'random' |
| 12 | @random_theme ||= Dir.glob('public/designs/themes/*').map { |f| File.basename(f) }.rand | 12 | @random_theme ||= Dir.glob('public/designs/themes/*').map { |f| File.basename(f) }.rand |
| 13 | @random_theme | 13 | @random_theme |
| 14 | - elsif Rails.env.development? && respond_to?(:params) && params[:theme] && File.exists?(Rails.root.join('public/designs/themes', params[:theme])) | ||
| 15 | - params[:theme] | 14 | + elsif Rails.env.development? && respond_to?(:params) && params[:user_theme] && File.exists?(Rails.root.join('public/designs/themes', params[:user_theme])) |
| 15 | + params[:user_theme] | ||
| 16 | else | 16 | else |
| 17 | if profile && !profile.theme.nil? | 17 | if profile && !profile.theme.nil? |
| 18 | profile.theme | 18 | profile.theme |
| @@ -34,8 +34,10 @@ module ThemeLoaderHelper | @@ -34,8 +34,10 @@ module ThemeLoaderHelper | ||
| 34 | end | 34 | end |
| 35 | 35 | ||
| 36 | def theme_path | 36 | def theme_path |
| 37 | - if session[:theme] | 37 | + if session[:user_theme] |
| 38 | '/user_themes/' + current_theme | 38 | '/user_themes/' + current_theme |
| 39 | + elsif session[:theme] | ||
| 40 | + '/designs/themes/' + session[:theme] | ||
| 39 | else | 41 | else |
| 40 | '/designs/themes/' + current_theme | 42 | '/designs/themes/' + current_theme |
| 41 | end | 43 | end |
app/models/environment.rb
| @@ -750,6 +750,10 @@ class Environment < ApplicationRecord | @@ -750,6 +750,10 @@ class Environment < ApplicationRecord | ||
| 750 | end | 750 | end |
| 751 | end | 751 | end |
| 752 | 752 | ||
| 753 | + def theme_ids | ||
| 754 | + settings[:themes] || [] | ||
| 755 | + end | ||
| 756 | + | ||
| 753 | def themes=(values) | 757 | def themes=(values) |
| 754 | settings[:themes] = values | 758 | settings[:themes] = values |
| 755 | end | 759 | end |
app/models/person_notifier.rb
| @@ -82,7 +82,7 @@ class PersonNotifier | @@ -82,7 +82,7 @@ class PersonNotifier | ||
| 82 | helper ActionTrackerHelper | 82 | helper ActionTrackerHelper |
| 83 | 83 | ||
| 84 | def session | 84 | def session |
| 85 | - {:theme => nil} | 85 | + {:user_theme => nil} |
| 86 | end | 86 | end |
| 87 | 87 | ||
| 88 | def content_summary(person, notifications, tasks) | 88 | def content_summary(person, notifications, tasks) |
test/functional/application_controller_test.rb
| @@ -224,7 +224,7 @@ class ApplicationControllerTest < ActionController::TestCase | @@ -224,7 +224,7 @@ class ApplicationControllerTest < ActionController::TestCase | ||
| 224 | end | 224 | end |
| 225 | 225 | ||
| 226 | should 'display theme test panel when testing theme' do | 226 | should 'display theme test panel when testing theme' do |
| 227 | - @request.session[:theme] = 'my-test-theme' | 227 | + @request.session[:user_theme] = 'my-test-theme' |
| 228 | theme = mock | 228 | theme = mock |
| 229 | profile = mock | 229 | profile = mock |
| 230 | theme.expects(:owner).returns(profile).at_least_once | 230 | theme.expects(:owner).returns(profile).at_least_once |
| @@ -576,4 +576,36 @@ class ApplicationControllerTest < ActionController::TestCase | @@ -576,4 +576,36 @@ class ApplicationControllerTest < ActionController::TestCase | ||
| 576 | assert_redirected_to :controller => 'test', :action => 'index', :profile => profile.identifier | 576 | assert_redirected_to :controller => 'test', :action => 'index', :profile => profile.identifier |
| 577 | end | 577 | end |
| 578 | 578 | ||
| 579 | + should 'set session theme if a params theme is passed as parameter' do | ||
| 580 | + current_theme = 'my-test-theme' | ||
| 581 | + environment = Environment.default | ||
| 582 | + Theme.stubs(:system_themes).returns([Theme.new(current_theme)]) | ||
| 583 | + environment.themes = [current_theme] | ||
| 584 | + environment.save! | ||
| 585 | + assert_nil @request.session[:theme] | ||
| 586 | + get :index, :theme => current_theme | ||
| 587 | + assert_equal current_theme, @request.session[:theme] | ||
| 588 | + end | ||
| 589 | + | ||
| 590 | + should 'set session theme only in environment available themes' do | ||
| 591 | + environment = Environment.default | ||
| 592 | + assert_nil @request.session[:theme] | ||
| 593 | + environment.stubs(:theme_ids).returns(['another_theme']) | ||
| 594 | + get :index, :theme => 'my-test-theme' | ||
| 595 | + assert_nil @request.session[:theme] | ||
| 596 | + end | ||
| 597 | + | ||
| 598 | + should 'unset session theme if not environment available themes is defined' do | ||
| 599 | + environment = Environment.default | ||
| 600 | + current_theme = 'my-test-theme' | ||
| 601 | + Theme.stubs(:system_themes).returns([Theme.new(current_theme)]) | ||
| 602 | + environment.themes = [current_theme] | ||
| 603 | + environment.save! | ||
| 604 | + get :index, :theme => current_theme | ||
| 605 | + assert_equal current_theme, @request.session[:theme] | ||
| 606 | + | ||
| 607 | + get :index, :theme => 'another_theme' | ||
| 608 | + assert_nil @request.session[:theme] | ||
| 609 | + end | ||
| 610 | + | ||
| 579 | end | 611 | end |
test/functional/profile_themes_controller_test.rb
| @@ -231,7 +231,7 @@ class ProfileThemesControllerTest < ActionController::TestCase | @@ -231,7 +231,7 @@ class ProfileThemesControllerTest < ActionController::TestCase | ||
| 231 | theme = Theme.create('theme-under-test', :owner => profile) | 231 | theme = Theme.create('theme-under-test', :owner => profile) |
| 232 | post :start_test, :profile => 'testinguser', :id => 'theme-under-test' | 232 | post :start_test, :profile => 'testinguser', :id => 'theme-under-test' |
| 233 | 233 | ||
| 234 | - assert_equal 'theme-under-test', session[:theme] | 234 | + assert_equal 'theme-under-test', session[:user_theme] |
| 235 | assert_redirected_to :controller => 'content_viewer', :profile => 'testinguser', :action => 'view_page' | 235 | assert_redirected_to :controller => 'content_viewer', :profile => 'testinguser', :action => 'view_page' |
| 236 | end | 236 | end |
| 237 | 237 | ||
| @@ -239,7 +239,7 @@ class ProfileThemesControllerTest < ActionController::TestCase | @@ -239,7 +239,7 @@ class ProfileThemesControllerTest < ActionController::TestCase | ||
| 239 | theme = Theme.create('theme-under-test', :owner => profile) | 239 | theme = Theme.create('theme-under-test', :owner => profile) |
| 240 | post :stop_test, :profile => 'testinguser', :id => 'theme-under-test' | 240 | post :stop_test, :profile => 'testinguser', :id => 'theme-under-test' |
| 241 | 241 | ||
| 242 | - assert_nil session[:theme] | 242 | + assert_nil session[:user_theme] |
| 243 | assert_redirected_to :action => 'index' | 243 | assert_redirected_to :action => 'index' |
| 244 | end | 244 | end |
| 245 | 245 |
test/unit/application_helper_test.rb
| @@ -466,7 +466,7 @@ class ApplicationHelperTest < ActionView::TestCase | @@ -466,7 +466,7 @@ class ApplicationHelperTest < ActionView::TestCase | ||
| 466 | should 'use theme passed via param when in development mode' do | 466 | should 'use theme passed via param when in development mode' do |
| 467 | stubs(:environment).returns(build(Environment, :theme => 'environment-theme')) | 467 | stubs(:environment).returns(build(Environment, :theme => 'environment-theme')) |
| 468 | Rails.env.stubs(:development?).returns(true) | 468 | Rails.env.stubs(:development?).returns(true) |
| 469 | - self.stubs(:params).returns({:theme => 'skyblue'}) | 469 | + self.stubs(:params).returns({:user_theme => 'skyblue'}) |
| 470 | assert_equal 'skyblue', current_theme | 470 | assert_equal 'skyblue', current_theme |
| 471 | end | 471 | end |
| 472 | 472 |
test/unit/content_viewer_helper_test.rb
| @@ -101,14 +101,14 @@ class ContentViewerHelperTest < ActionView::TestCase | @@ -101,14 +101,14 @@ class ContentViewerHelperTest < ActionView::TestCase | ||
| 101 | end | 101 | end |
| 102 | 102 | ||
| 103 | should 'theme provides addthis custom icon' do | 103 | should 'theme provides addthis custom icon' do |
| 104 | - stubs(:session).returns({:theme => 'base'}) | 104 | + stubs(:session).returns({:user_theme => 'base'}) |
| 105 | File.expects(:exists?).with(anything).returns(true) | 105 | File.expects(:exists?).with(anything).returns(true) |
| 106 | Environment.any_instance.stubs(:default_hostname).returns('noosfero.org') | 106 | Environment.any_instance.stubs(:default_hostname).returns('noosfero.org') |
| 107 | assert_match 'addthis.gif', addthis_image_tag | 107 | assert_match 'addthis.gif', addthis_image_tag |
| 108 | end | 108 | end |
| 109 | 109 | ||
| 110 | should 'use default addthis icon if theme has no addthis.gif image' do | 110 | should 'use default addthis icon if theme has no addthis.gif image' do |
| 111 | - stubs(:session).returns({:theme => 'base'}) | 111 | + stubs(:session).returns({:user_theme => 'base'}) |
| 112 | File.expects(:exists?).with(anything).returns(false) | 112 | File.expects(:exists?).with(anything).returns(false) |
| 113 | Environment.any_instance.stubs(:default_hostname).returns('noosfero.org') | 113 | Environment.any_instance.stubs(:default_hostname).returns('noosfero.org') |
| 114 | assert_match 'bt-bookmark.gif', addthis_image_tag | 114 | assert_match 'bt-bookmark.gif', addthis_image_tag |
test/unit/environment_test.rb
| @@ -457,6 +457,22 @@ class EnvironmentTest < ActiveSupport::TestCase | @@ -457,6 +457,22 @@ class EnvironmentTest < ActiveSupport::TestCase | ||
| 457 | assert_equal ['new-theme', 'other-theme'], Environment.default.themes.map(&:id) | 457 | assert_equal ['new-theme', 'other-theme'], Environment.default.themes.map(&:id) |
| 458 | end | 458 | end |
| 459 | 459 | ||
| 460 | + should 'return the theme ids' do | ||
| 461 | + env = Environment.default | ||
| 462 | + t1 = 'theme_1' | ||
| 463 | + t2 = 'theme_2' | ||
| 464 | + Theme.stubs(:system_themes).returns([Theme.new(t1), Theme.new(t2)]) | ||
| 465 | + env.themes = [t1, t2] | ||
| 466 | + env.save! | ||
| 467 | + assert_equivalent [t1, t2], Environment.default.theme_ids | ||
| 468 | + end | ||
| 469 | + should 'theme_ids be an empty array if there is no settings themes defined' do | ||
| 470 | + env = Environment.default | ||
| 471 | + env.settings[:themes] = nil | ||
| 472 | + env.save! | ||
| 473 | + assert Environment.default.theme_ids.empty? | ||
| 474 | + end | ||
| 475 | + | ||
| 460 | should 'create templates' do | 476 | should 'create templates' do |
| 461 | e = create(Environment, :name => 'test_env') | 477 | e = create(Environment, :name => 'test_env') |
| 462 | e.reload | 478 | e.reload |
test/unit/theme_loader_helper_test.rb
| @@ -20,7 +20,7 @@ class ThemeLoaderHelperTest < ActionView::TestCase | @@ -20,7 +20,7 @@ class ThemeLoaderHelperTest < ActionView::TestCase | ||
| 20 | end | 20 | end |
| 21 | 21 | ||
| 22 | should 'override theme with testing theme from session' do | 22 | should 'override theme with testing theme from session' do |
| 23 | - stubs(:session).returns(:theme => 'theme-under-test') | 23 | + stubs(:session).returns(:user_theme => 'theme-under-test') |
| 24 | assert_equal 'theme-under-test', current_theme | 24 | assert_equal 'theme-under-test', current_theme |
| 25 | end | 25 | end |
| 26 | 26 | ||
| @@ -30,7 +30,17 @@ class ThemeLoaderHelperTest < ActionView::TestCase | @@ -30,7 +30,17 @@ class ThemeLoaderHelperTest < ActionView::TestCase | ||
| 30 | end | 30 | end |
| 31 | 31 | ||
| 32 | should 'point to user theme path when testing theme' do | 32 | should 'point to user theme path when testing theme' do |
| 33 | - stubs(:session).returns({:theme => 'theme-under-test'}) | 33 | + stubs(:session).returns({:user_theme => 'theme-under-test'}) |
| 34 | assert_equal '/user_themes/theme-under-test', theme_path | 34 | assert_equal '/user_themes/theme-under-test', theme_path |
| 35 | end | 35 | end |
| 36 | -end | ||
| 37 | \ No newline at end of file | 36 | \ No newline at end of file |
| 37 | + | ||
| 38 | + should 'point to session theme is defined' do | ||
| 39 | + session = mock | ||
| 40 | + stubs(:session).returns(session) | ||
| 41 | + my_session_theme = 'session_theme' | ||
| 42 | + session.stubs(:[]).with(:user_theme).returns(nil) | ||
| 43 | + session.stubs(:[]).with(:theme).returns(my_session_theme) | ||
| 44 | + assert_equal '/designs/themes/' + my_session_theme, theme_path | ||
| 45 | + end | ||
| 46 | + | ||
| 47 | +end |