Reload themes so that new themes can be used without restarting Redmine (#5712).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4432 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
4faca3cd4a
commit
620c48fbbb
|
@ -44,6 +44,8 @@ class SettingsController < ApplicationController
|
|||
|
||||
@guessed_host_and_path = request.host_with_port.dup
|
||||
@guessed_host_and_path << ('/'+ Redmine::Utils.relative_url_root.gsub(%r{^\/}, '')) unless Redmine::Utils.relative_url_root.blank?
|
||||
|
||||
Redmine::Themes.rescan
|
||||
end
|
||||
|
||||
def plugin
|
||||
|
|
|
@ -29,8 +29,13 @@ module Redmine
|
|||
end
|
||||
|
||||
# Return theme for given id, or nil if it's not found
|
||||
def self.theme(id)
|
||||
themes.find {|t| t.id == id}
|
||||
def self.theme(id, options={})
|
||||
found = themes.find {|t| t.id == id}
|
||||
if found.nil? && options[:rescan] != false
|
||||
rescan
|
||||
found = theme(id, :rescan => false)
|
||||
end
|
||||
found
|
||||
end
|
||||
|
||||
# Class used to represent a theme
|
||||
|
@ -45,7 +50,11 @@ module Redmine
|
|||
|
||||
# Directory name used as the theme id
|
||||
def id; dir end
|
||||
|
||||
|
||||
def ==(theme)
|
||||
theme.is_a?(Theme) && theme.dir == dir
|
||||
end
|
||||
|
||||
def <=>(theme)
|
||||
name <=> theme.name
|
||||
end
|
||||
|
|
|
@ -0,0 +1,59 @@
|
|||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2010 Jean-Philippe Lang
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
require File.dirname(__FILE__) + '/../../../test_helper'
|
||||
|
||||
class Redmine::ThemesTest < ActiveSupport::TestCase
|
||||
|
||||
def test_themes
|
||||
themes = Redmine::Themes.themes
|
||||
assert_kind_of Array, themes
|
||||
assert_kind_of Redmine::Themes::Theme, themes.first
|
||||
end
|
||||
|
||||
def test_rescan
|
||||
Redmine::Themes.themes.pop
|
||||
|
||||
assert_difference 'Redmine::Themes.themes.size' do
|
||||
Redmine::Themes.rescan
|
||||
end
|
||||
end
|
||||
|
||||
def test_theme_loaded
|
||||
theme = Redmine::Themes.themes.last
|
||||
|
||||
assert_equal theme, Redmine::Themes.theme(theme.id)
|
||||
end
|
||||
|
||||
def test_theme_loaded_without_rescan
|
||||
theme = Redmine::Themes.themes.last
|
||||
|
||||
assert_equal theme, Redmine::Themes.theme(theme.id, :rescan => false)
|
||||
end
|
||||
|
||||
def test_theme_not_loaded
|
||||
theme = Redmine::Themes.themes.pop
|
||||
|
||||
assert_equal theme, Redmine::Themes.theme(theme.id)
|
||||
end
|
||||
|
||||
def test_theme_not_loaded_without_rescan
|
||||
theme = Redmine::Themes.themes.pop
|
||||
|
||||
assert_nil Redmine::Themes.theme(theme.id, :rescan => false)
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue