From 52fe99d71ca52dad83e79c7d5f1db05e418d00ba Mon Sep 17 00:00:00 2001 From: yanxd Date: Fri, 21 Mar 2014 09:28:09 +0800 Subject: [PATCH 1/3] =?UTF-8?q?fixed=20=E8=B0=AD=20domain=20bug=20in=20dev?= =?UTF-8?q?elopment=20environment.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/application_helper.rb | 2 +- app/models/setting.rb | 363 +++++++++++++++--------------- 2 files changed, 186 insertions(+), 179 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 7863ead1e..344b54040 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -1500,7 +1500,7 @@ module ApplicationHelper end def render_dynamic_nav - home_link = link_to l(:field_homepage), "http://"+Setting.forge_domain+":3000" + home_link = link_to l(:field_homepage), Setting.forge_domain.nil? ? nil : "http://"+Setting.forge_domain+":3000" course_all_course_link = link_to l(:label_course_all), {:controller => 'projects', :action => 'course', :project_type => 1,} course_teacher_all_link = link_to l(:label_teacher_all), {:controller => 'users', :action => 'index', :role => 'teacher'} courses_link = link_to l(:label_course_practice), {:host=>Setting.course_domain} diff --git a/app/models/setting.rb b/app/models/setting.rb index dab6ceaa7..583d034df 100644 --- a/app/models/setting.rb +++ b/app/models/setting.rb @@ -1,178 +1,185 @@ -# Redmine - project management software -# Copyright (C) 2006-2013 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. - -class Setting < ActiveRecord::Base - - DATE_FORMATS = [ - '%Y-%m-%d', - '%d/%m/%Y', - '%d.%m.%Y', - '%d-%m-%Y', - '%m/%d/%Y', - '%d %b %Y', - '%d %B %Y', - '%b %d, %Y', - '%B %d, %Y' - ] - - TIME_FORMATS = [ - '%H:%M', - '%I:%M %p' - ] - - ENCODINGS = %w(US-ASCII - windows-1250 - windows-1251 - windows-1252 - windows-1253 - windows-1254 - windows-1255 - windows-1256 - windows-1257 - windows-1258 - windows-31j - ISO-2022-JP - ISO-2022-KR - ISO-8859-1 - ISO-8859-2 - ISO-8859-3 - ISO-8859-4 - ISO-8859-5 - ISO-8859-6 - ISO-8859-7 - ISO-8859-8 - ISO-8859-9 - ISO-8859-13 - ISO-8859-15 - KOI8-R - UTF-8 - UTF-16 - UTF-16BE - UTF-16LE - EUC-JP - Shift_JIS - CP932 - GB18030 - GBK - ISCII91 - EUC-KR - Big5 - Big5-HKSCS - TIS-620) - - cattr_accessor :available_settings - @@available_settings = YAML::load(File.open("#{Rails.root}/config/settings.yml")) - Redmine::Plugin.all.each do |plugin| - next unless plugin.settings - @@available_settings["plugin_#{plugin.id}"] = {'default' => plugin.settings[:default], 'serialized' => true} - end - - validates_uniqueness_of :name - validates_inclusion_of :name, :in => @@available_settings.keys - validates_numericality_of :value, :only_integer => true, :if => Proc.new { |setting| @@available_settings[setting.name]['format'] == 'int' } - - # Hash used to cache setting values - @cached_settings = {} - @cached_cleared_on = Time.now - - def value - v = read_attribute(:value) - # Unserialize serialized settings - v = YAML::load(v) if @@available_settings[name]['serialized'] && v.is_a?(String) - v = v.to_sym if @@available_settings[name]['format'] == 'symbol' && !v.blank? - v - end - - def value=(v) - v = v.to_yaml if v && @@available_settings[name] && @@available_settings[name]['serialized'] - write_attribute(:value, v.to_s) - end - - # Returns the value of the setting named name - def self.[](name) - v = @cached_settings[name] - v ? v : (@cached_settings[name] = find_or_default(name).value) - end - - def self.[]=(name, v) - setting = find_or_default(name) - setting.value = (v ? v : "") - @cached_settings[name] = nil - setting.save - setting.value - end - - # Defines getter and setter for each setting - # Then setting values can be read using: Setting.some_setting_name - # or set using Setting.some_setting_name = "some value" - @@available_settings.each do |name, params| - src = <<-END_SRC - def self.#{name} - self[:#{name}] - end - - def self.#{name}? - self[:#{name}].to_i > 0 - end - - def self.#{name}=(value) - self[:#{name}] = value - end - END_SRC - class_eval src, __FILE__, __LINE__ - end - - # Helper that returns an array based on per_page_options setting - def self.per_page_options_array - per_page_options.split(%r{[\s,]}).collect(&:to_i).select {|n| n > 0}.sort - end - - def self.openid? - Object.const_defined?(:OpenID) && self[:openid].to_i > 0 - end - - # Checks if settings have changed since the values were read - # and clears the cache hash if it's the case - # Called once per request - def self.check_cache - settings_updated_on = Setting.maximum(:updated_on) - if settings_updated_on && @cached_cleared_on <= settings_updated_on - clear_cache - end - end - - # Clears the settings cache - def self.clear_cache - @cached_settings.clear - @cached_cleared_on = Time.now - logger.info "Settings cache cleared." if logger - end - -private - # Returns the Setting instance for the setting named name - # (record found in database or new record with default value) - def self.find_or_default(name) - name = name.to_s - raise "There's no setting named #{name}" unless @@available_settings.has_key?(name) - setting = find_by_name(name) - unless setting - setting = new(:name => name) - setting.value = @@available_settings[name]['default'] - end - setting - end -end +# Redmine - project management software +# Copyright (C) 2006-2013 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. + +class Setting < ActiveRecord::Base + + DATE_FORMATS = [ + '%Y-%m-%d', + '%d/%m/%Y', + '%d.%m.%Y', + '%d-%m-%Y', + '%m/%d/%Y', + '%d %b %Y', + '%d %B %Y', + '%b %d, %Y', + '%B %d, %Y' + ] + + TIME_FORMATS = [ + '%H:%M', + '%I:%M %p' + ] + + ENCODINGS = %w(US-ASCII + windows-1250 + windows-1251 + windows-1252 + windows-1253 + windows-1254 + windows-1255 + windows-1256 + windows-1257 + windows-1258 + windows-31j + ISO-2022-JP + ISO-2022-KR + ISO-8859-1 + ISO-8859-2 + ISO-8859-3 + ISO-8859-4 + ISO-8859-5 + ISO-8859-6 + ISO-8859-7 + ISO-8859-8 + ISO-8859-9 + ISO-8859-13 + ISO-8859-15 + KOI8-R + UTF-8 + UTF-16 + UTF-16BE + UTF-16LE + EUC-JP + Shift_JIS + CP932 + GB18030 + GBK + ISCII91 + EUC-KR + Big5 + Big5-HKSCS + TIS-620) + + cattr_accessor :available_settings + @@available_settings = YAML::load(File.open("#{Rails.root}/config/settings.yml")) + Redmine::Plugin.all.each do |plugin| + next unless plugin.settings + @@available_settings["plugin_#{plugin.id}"] = {'default' => plugin.settings[:default], 'serialized' => true} + end + + validates_uniqueness_of :name + validates_inclusion_of :name, :in => @@available_settings.keys + validates_numericality_of :value, :only_integer => true, :if => Proc.new { |setting| @@available_settings[setting.name]['format'] == 'int' } + + # Hash used to cache setting values + @cached_settings = {} + @cached_cleared_on = Time.now + + def value + v = read_attribute(:value) + # Unserialize serialized settings + v = YAML::load(v) if @@available_settings[name]['serialized'] && v.is_a?(String) + v = v.to_sym if @@available_settings[name]['format'] == 'symbol' && !v.blank? + v + end + + def value=(v) + v = v.to_yaml if v && @@available_settings[name] && @@available_settings[name]['serialized'] + write_attribute(:value, v.to_s) + end + + # Returns the value of the setting named name + def self.[](name) + v = @cached_settings[name] + v ? v : (@cached_settings[name] = find_or_default(name).value) + end + + def self.[]=(name, v) + setting = find_or_default(name) + setting.value = (v ? v : "") + @cached_settings[name] = nil + setting.save + setting.value + end + + # Defines getter and setter for each setting + # Then setting values can be read using: Setting.some_setting_name + # or set using Setting.some_setting_name = "some value" + @@available_settings.each do |name, params| + src = <<-END_SRC + def self.#{name} + self[:#{name}] + end + + def self.#{name}? + self[:#{name}].to_i > 0 + end + + def self.#{name}=(value) + self[:#{name}] = value + end + END_SRC + class_eval src, __FILE__, __LINE__ + end + + # Helper that returns an array based on per_page_options setting + def self.per_page_options_array + per_page_options.split(%r{[\s,]}).collect(&:to_i).select {|n| n > 0}.sort + end + + def self.openid? + Object.const_defined?(:OpenID) && self[:openid].to_i > 0 + end + + # Checks if settings have changed since the values were read + # and clears the cache hash if it's the case + # Called once per request + def self.check_cache + settings_updated_on = Setting.maximum(:updated_on) + if settings_updated_on && @cached_cleared_on <= settings_updated_on + clear_cache + end + end + + # Clears the settings cache + def self.clear_cache + @cached_settings.clear + @cached_cleared_on = Time.now + logger.info "Settings cache cleared." if logger + end + + # fixed domain url in development. tantantan's bug + if Rails.env.development? + methods.map do |m| + define_singleton_method m do; nil; end if m.to_s =~ /([a-zA-Z]+_domain)$/ + end + end + +private + # Returns the Setting instance for the setting named name + # (record found in database or new record with default value) + def self.find_or_default(name) + name = name.to_s + raise "There's no setting named #{name}" unless @@available_settings.has_key?(name) + setting = find_by_name(name) + unless setting + setting = new(:name => name) + setting.value = @@available_settings[name]['default'] + end + setting + end +end From c905ded3b58d7ed50db12ae67210ba48e38113cc Mon Sep 17 00:00:00 2001 From: yanxd Date: Fri, 21 Mar 2014 10:03:03 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=93=A6=E5=B1=81=E8=82=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/application_helper.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 344b54040..fc3d6cd61 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -1500,10 +1500,10 @@ module ApplicationHelper end def render_dynamic_nav - home_link = link_to l(:field_homepage), Setting.forge_domain.nil? ? nil : "http://"+Setting.forge_domain+":3000" - course_all_course_link = link_to l(:label_course_all), {:controller => 'projects', :action => 'course', :project_type => 1,} + home_link = link_to l(:field_homepage), {:controller => 'welcome', :action => 'index',:host => Setting.forge_domain} + course_all_course_link = link_to l(:label_course_all), {:controller => 'projects', :action => 'course', :project_type => 1} course_teacher_all_link = link_to l(:label_teacher_all), {:controller => 'users', :action => 'index', :role => 'teacher'} - courses_link = link_to l(:label_course_practice), {:host=>Setting.course_domain} + courses_link = link_to l(:label_course_practice), {:controller => 'projects', :action => 'course', :project_type => 1, :host=>Setting.course_domain} projects_link = link_to l(:label_project_deposit), {:controller => 'projects', :action => 'index', :project_type => 0, :host => Setting.project_domain} users_link = link_to l(:label_software_user), {:controller => 'users', :action => 'index'} contest_link = link_to l(:label_contest_innovate), {:controller => 'bids', :action => 'contest', :project_type => 1, :host=>Setting.contest_domain} From cd246fc9c2ae08392cecf490c9c27a24a7d7fe03 Mon Sep 17 00:00:00 2001 From: xianbo Date: Fri, 21 Mar 2014 11:29:06 +0800 Subject: [PATCH 3/3] fix redmine --- lib/redmine.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/redmine.rb b/lib/redmine.rb index 7f437d5cb..1d1df605d 100644 --- a/lib/redmine.rb +++ b/lib/redmine.rb @@ -203,7 +203,7 @@ Redmine::AccessControl.map do |map| end #by young Redmine::MenuManager.map :top_menu do |menu| - menu.push :home, {:hsot => Setting.forge_domain} + menu.push :home, {:host => Setting.forge_domain} menu.push :course_practice, {:controller => 'projects', :action => 'course', :project_type => 1} menu.push :project_deposit, { :controller => 'projects', :action => 'index', :project_type => 0}, :caption => :label_project_deposit menu.push :software_user, {:controller => 'users', :action => 'index'}