settings are now stored in the database (config_custom.rb no more used) and editable through the application in: Admin -> Settings

git-svn-id: http://redmine.rubyforge.org/svn/trunk@167 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Jean-Philippe Lang 2007-01-21 11:50:22 +00:00
parent a1b12335ab
commit 0b4d4db131
44 changed files with 286 additions and 173 deletions

View File

@ -1,5 +1,5 @@
# redMine - project management software # redMine - project management software
# Copyright (C) 2006 Jean-Philippe Lang # Copyright (C) 2006-2007 Jean-Philippe Lang
# #
# This program is free software; you can redistribute it and/or # This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License # modify it under the terms of the GNU General Public License
@ -95,7 +95,7 @@ class AccountController < ApplicationController
# User self-registration # User self-registration
def register def register
redirect_to :controller => '' and return if $RDM_SELF_REGISTRATION == false redirect_to :controller => '' and return unless Setting.self_registration?
if params[:token] if params[:token]
token = Token.find_by_action_and_value("register", params[:token]) token = Token.find_by_action_and_value("register", params[:token])
redirect_to :controller => '' and return unless token and !token.expired? redirect_to :controller => '' and return unless token and !token.expired?
@ -110,7 +110,7 @@ class AccountController < ApplicationController
end end
else else
if request.get? if request.get?
@user = User.new(:language => $RDM_DEFAULT_LANG) @user = User.new(:language => Setting.default_language)
@custom_values = UserCustomField.find(:all).collect { |x| CustomValue.new(:custom_field => x, :customized => @user) } @custom_values = UserCustomField.find(:all).collect { |x| CustomValue.new(:custom_field => x, :customized => @user) }
else else
@user = User.new(params[:user]) @user = User.new(params[:user])

View File

@ -1,5 +1,5 @@
# redMine - project management software # redMine - project management software
# Copyright (C) 2006 Jean-Philippe Lang # Copyright (C) 2006-2007 Jean-Philippe Lang
# #
# This program is free software; you can redistribute it and/or # This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License # modify it under the terms of the GNU General Public License
@ -33,7 +33,7 @@ class ApplicationController < ActionController::Base
# check if login is globally required to access the application # check if login is globally required to access the application
def check_if_login_required def check_if_login_required
require_login if $RDM_LOGIN_REQUIRED require_login if Setting.login_required?
end end
def set_localization def set_localization
@ -48,7 +48,7 @@ class ApplicationController < ActionController::Base
end end
rescue rescue
nil nil
end || $RDM_DEFAULT_LANG end || Setting.default_language
set_language_if_valid(lang) set_language_if_valid(lang)
end end

View File

@ -0,0 +1,33 @@
# redMine - project management software
# Copyright (C) 2006-2007 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 SettingsController < ApplicationController
layout 'base'
before_filter :require_admin
def index
edit
render :action => 'edit'
end
def edit
if request.post? and params[:settings] and params[:settings].is_a? Hash
params[:settings].each { |name, value| Setting[name] = value }
redirect_to :action => 'edit' and return
end
end
end

View File

@ -1,5 +1,5 @@
# redMine - project management software # redMine - project management software
# Copyright (C) 2006 Jean-Philippe Lang # Copyright (C) 2006-2007 Jean-Philippe Lang
# #
# This program is free software; you can redistribute it and/or # This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License # modify it under the terms of the GNU General Public License
@ -45,7 +45,7 @@ class UsersController < ApplicationController
def add def add
if request.get? if request.get?
@user = User.new(:language => $RDM_DEFAULT_LANG) @user = User.new(:language => Setting.default_language)
@custom_values = UserCustomField.find(:all).collect { |x| CustomValue.new(:custom_field => x, :customized => @user) } @custom_values = UserCustomField.find(:all).collect { |x| CustomValue.new(:custom_field => x, :customized => @user) }
else else
@user = User.new(params[:user]) @user = User.new(params[:user])

View File

@ -1,5 +1,5 @@
# redMine - project management software # redMine - project management software
# Copyright (C) 2006 Jean-Philippe Lang # Copyright (C) 2006-2007 Jean-Philippe Lang
# #
# This program is free software; you can redistribute it and/or # This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License # modify it under the terms of the GNU General Public License
@ -93,7 +93,7 @@ module ApplicationHelper
end end
def textilizable(text) def textilizable(text)
$RDM_TEXTILE_DISABLED ? simple_format(auto_link(h(text))) : RedCloth.new(h(text)).to_html (Setting.text_formatting == 'textile') && (ActionView::Helpers::TextHelper.method_defined? "textilize") ? RedCloth.new(h(text)).to_html : simple_format(auto_link(h(text)))
end end
def error_messages_for(object_name, options = {}) def error_messages_for(object_name, options = {})
@ -131,8 +131,9 @@ module ApplicationHelper
end end
end end
def lang_options_for_select def lang_options_for_select(blank=true)
[["(auto)", ""]] + (GLoc.valid_languages.sort {|x,y| x.to_s <=> y.to_s }).collect {|lang| [ l_lang_name(lang.to_s, lang), lang.to_s]} (blank ? [["(auto)", ""]] : []) +
(GLoc.valid_languages.sort {|x,y| x.to_s <=> y.to_s }).collect {|lang| [ l_lang_name(lang.to_s, lang), lang.to_s]}
end end
def label_tag_for(name, option_tags = nil, options = {}) def label_tag_for(name, option_tags = nil, options = {})

View File

@ -0,0 +1,19 @@
# redMine - project management software
# Copyright (C) 2006-2007 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.
module SettingsHelper
end

View File

@ -1,5 +1,5 @@
# redMine - project management software # redMine - project management software
# Copyright (C) 2006 Jean-Philippe Lang # Copyright (C) 2006-2007 Jean-Philippe Lang
# #
# This program is free software; you can redistribute it and/or # This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License # modify it under the terms of the GNU General Public License
@ -21,12 +21,15 @@ class Attachment < ActiveRecord::Base
belongs_to :container, :polymorphic => true belongs_to :container, :polymorphic => true
belongs_to :author, :class_name => "User", :foreign_key => "author_id" belongs_to :author, :class_name => "User", :foreign_key => "author_id"
@@max_size = $RDM_ATTACHMENT_MAX_SIZE || 5*1024*1024
cattr_reader :max_size
validates_presence_of :container, :filename validates_presence_of :container, :filename
validates_inclusion_of :filesize, :in => 1..@@max_size
cattr_accessor :storage_path
@@storage_path = "#{RAILS_ROOT}/files"
def validate
errors.add_to_base :too_long if self.filesize > Setting.attachment_max_size.to_i.kilobytes
end
def file=(incomming_file) def file=(incomming_file)
unless incomming_file.nil? unless incomming_file.nil?
@temp_file = incomming_file @temp_file = incomming_file
@ -63,7 +66,7 @@ class Attachment < ActiveRecord::Base
# Returns file's location on disk # Returns file's location on disk
def diskfile def diskfile
"#{$RDM_STORAGE_PATH}/#{self.disk_filename}" "#{@@storage_path}/#{self.disk_filename}"
end end
def increment_download def increment_download

View File

@ -1,5 +1,5 @@
# redMine - project management software # redMine - project management software
# Copyright (C) 2006 Jean-Philippe Lang # Copyright (C) 2006-2007 Jean-Philippe Lang
# #
# This program is free software; you can redistribute it and/or # This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License # modify it under the terms of the GNU General Public License
@ -16,13 +16,12 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class Mailer < ActionMailer::Base class Mailer < ActionMailer::Base
helper IssuesHelper helper IssuesHelper
def issue_add(issue) def issue_add(issue)
# Sends to all project members # Sends to all project members
@recipients = issue.project.members.collect { |m| m.user.mail if m.user.mail_notification }.compact @recipients = issue.project.members.collect { |m| m.user.mail if m.user.mail_notification }.compact
@from = $RDM_MAIL_FROM @from = Setting.mail_from
@subject = "[#{issue.project.name} - #{issue.tracker.name} ##{issue.id}] #{issue.status.name} - #{issue.subject}" @subject = "[#{issue.project.name} - #{issue.tracker.name} ##{issue.id}] #{issue.status.name} - #{issue.subject}"
@body['issue'] = issue @body['issue'] = issue
end end
@ -31,7 +30,7 @@ class Mailer < ActionMailer::Base
# Sends to all project members # Sends to all project members
issue = journal.journalized issue = journal.journalized
@recipients = issue.project.members.collect { |m| m.user.mail if m.user.mail_notification }.compact @recipients = issue.project.members.collect { |m| m.user.mail if m.user.mail_notification }.compact
@from = $RDM_MAIL_FROM @from = Setting.mail_from
@subject = "[#{issue.project.name} - #{issue.tracker.name} ##{issue.id}] #{issue.status.name} - #{issue.subject}" @subject = "[#{issue.project.name} - #{issue.tracker.name} ##{issue.id}] #{issue.status.name} - #{issue.subject}"
@body['issue'] = issue @body['issue'] = issue
@body['journal']= journal @body['journal']= journal
@ -39,14 +38,14 @@ class Mailer < ActionMailer::Base
def lost_password(token) def lost_password(token)
@recipients = token.user.mail @recipients = token.user.mail
@from = $RDM_MAIL_FROM @from = Setting.mail_from
@subject = l(:mail_subject_lost_password) @subject = l(:mail_subject_lost_password)
@body['token'] = token @body['token'] = token
end end
def register(token) def register(token)
@recipients = token.user.mail @recipients = token.user.mail
@from = $RDM_MAIL_FROM @from = Setting.mail_from
@subject = l(:mail_subject_register) @subject = l(:mail_subject_register)
@body['token'] = token @body['token'] = token
end end

61
app/models/setting.rb Normal file
View File

@ -0,0 +1,61 @@
# redMine - project management software
# Copyright (C) 2006-2007 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
cattr_accessor :available_settings
@@available_settings = YAML::load(File.open("#{RAILS_ROOT}/config/settings.yml"))
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' }
def self.get(name)
name = name.to_s
setting = find_by_name(name)
setting ||= new(:name => name, :value => @@available_settings[name]['default']) if @@available_settings.has_key? name
setting
end
def self.[](name)
get(name).value
end
def self.[]=(name, value)
setting = get(name)
setting.value = value
setting.save
setting.value
end
@@available_settings.each do |name, params|
src = <<-END_SRC
def self.#{name}
self[:#{name}]
end
def self.#{name}?
self[:#{name}].to_s == "1"
end
def self.#{name}=(value)
self[:#{name}] = values
end
END_SRC
class_eval src, __FILE__, __LINE__
end
end

View File

@ -1,5 +1,5 @@
# redMine - project management software # redMine - project management software
# Copyright (C) 2006 Jean-Philippe Lang # Copyright (C) 2006-2007 Jean-Philippe Lang
# #
# This program is free software; you can redistribute it and/or # This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License # modify it under the terms of the GNU General Public License
@ -69,7 +69,7 @@ class User < ActiveRecord::Base
if attrs if attrs
onthefly = new(*attrs) onthefly = new(*attrs)
onthefly.login = login onthefly.login = login
onthefly.language = $RDM_DEFAULT_LANG onthefly.language = Setting.default_language
if onthefly.save if onthefly.save
user = find(:first, :conditions => ["login=?", login]) user = find(:first, :conditions => ["login=?", login])
logger.info("User '#{user.login}' created on the fly.") if logger logger.info("User '#{user.login}' created on the fly.") if logger

View File

@ -12,7 +12,7 @@
<p><center><input type="submit" name="login" value="<%=l(:button_login)%> &#187;" class="primary" /></center> <p><center><input type="submit" name="login" value="<%=l(:button_login)%> &#187;" class="primary" /></center>
<%= end_form_tag %> <%= end_form_tag %>
<br><% unless $RDM_SELF_REGISTRATION == false %><%= link_to l(:label_register), :action => 'register' %> |<% end %> <br><% if Setting.self_registration? %><%= link_to l(:label_register), :action => 'register' %> |<% end %>
<%= link_to l(:label_password_lost), :action => 'lost_password' %></p> <%= link_to l(:label_password_lost), :action => 'lost_password' %></p>
</div> </div>
</center> </center>

View File

@ -36,6 +36,10 @@
<%= link_to l(:label_authentication), :controller => 'auth_sources' %> <%= link_to l(:label_authentication), :controller => 'auth_sources' %>
</p> </p>
<p class="icon22 icon22-settings">
<%= link_to l(:label_settings), :controller => 'settings' %>
</p>
<p class="icon22 icon22-info"> <p class="icon22 icon22-info">
<%= link_to l(:label_information_plural), :controller => 'admin', :action => 'info' %> <%= link_to l(:label_information_plural), :controller => 'admin', :action => 'info' %>
</p> </p>

View File

@ -14,7 +14,7 @@
<!--[eoform:document]--> <!--[eoform:document]-->
</div> </div>
<% unless $RDM_TEXTILE_DISABLED %> <% if Setting.text_formatting == 'textile' %>
<%= javascript_include_tag 'jstoolbar' %> <%= javascript_include_tag 'jstoolbar' %>
<script type="text/javascript"> <script type="text/javascript">
//<![CDATA[ //<![CDATA[

View File

@ -31,7 +31,7 @@
<%= start_form_tag ({ :controller => 'documents', :action => 'add_attachment', :id => @document }, :multipart => true, :class => "tabular") %> <%= start_form_tag ({ :controller => 'documents', :action => 'add_attachment', :id => @document }, :multipart => true, :class => "tabular") %>
<p id="attachments_p"><label for="attachment_file"><%=l(:label_attachment)%> <p id="attachments_p"><label for="attachment_file"><%=l(:label_attachment)%>
<%= image_to_function "add.png", "addFileField();return false" %></label> <%= image_to_function "add.png", "addFileField();return false" %></label>
<%= file_field_tag 'attachments[]', :size => 30 %> <em>(<%= l(:label_max_size) %>: <%= human_size(Attachment.max_size) %>)</em></p> <%= file_field_tag 'attachments[]', :size => 30 %> <em>(<%= l(:label_max_size) %>: <%= human_size(Setting.attachment_max_size.to_i.kilobytes) %>)</em></p>
<%= submit_tag l(:button_add) %> <%= submit_tag l(:button_add) %>
<%= end_form_tag %> <%= end_form_tag %>
<% end %> <% end %>

View File

@ -1,10 +1,10 @@
xml.instruct! xml.instruct!
xml.rss "version" => "2.0", "xmlns:dc" => "http://purl.org/dc/elements/1.1/" do xml.rss "version" => "2.0", "xmlns:dc" => "http://purl.org/dc/elements/1.1/" do
xml.channel do xml.channel do
xml.title "#{$RDM_HEADER_TITLE}: #{l(:label_news_latest)}" xml.title "#{Setting.header_title}: #{l(:label_news_latest)}"
xml.link url_for(:controller => '', :only_path => false) xml.link url_for(:controller => '', :only_path => false)
xml.pubDate CGI.rfc1123_date(@news.first.created_on) xml.pubDate CGI.rfc1123_date(@news.first.created_on)
xml.description "#{$RDM_HEADER_TITLE}: #{l(:label_news_latest)}" xml.description l(:label_news_latest)
@news.each do |news| @news.each do |news|
xml.item do xml.item do
xml.title "#{news.project.name}: #{news.title}" xml.title "#{news.project.name}: #{news.title}"

View File

@ -34,7 +34,7 @@
<%= submit_tag l(:button_save) %> <%= submit_tag l(:button_save) %>
<% end %> <% end %>
<% unless $RDM_TEXTILE_DISABLED %> <% if Setting.text_formatting == 'textile' %>
<%= javascript_include_tag 'jstoolbar' %> <%= javascript_include_tag 'jstoolbar' %>
<script type="text/javascript"> <script type="text/javascript">
//<![CDATA[ //<![CDATA[

View File

@ -93,7 +93,7 @@ end %>
<%= start_form_tag ({ :controller => 'issues', :action => 'add_attachment', :id => @issue }, :multipart => true, :class => "tabular") %> <%= start_form_tag ({ :controller => 'issues', :action => 'add_attachment', :id => @issue }, :multipart => true, :class => "tabular") %>
<p id="attachments_p"><label><%=l(:label_attachment_new)%> <p id="attachments_p"><label><%=l(:label_attachment_new)%>
<%= image_to_function "add.png", "addFileField();return false" %></label> <%= image_to_function "add.png", "addFileField();return false" %></label>
<%= file_field_tag 'attachments[]', :size => 30 %> <em>(<%= l(:label_max_size) %>: <%= human_size(Attachment.max_size) %>)</em></p> <%= file_field_tag 'attachments[]', :size => 30 %> <em>(<%= l(:label_max_size) %>: <%= human_size(Setting.attachment_max_size.to_i.kilobytes) %>)</em></p>
<%= submit_tag l(:button_add) %> <%= submit_tag l(:button_add) %>
<%= end_form_tag %> <%= end_form_tag %>
<% end %> <% end %>

View File

@ -1,7 +1,7 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head> <head>
<title><%= $RDM_HEADER_TITLE + (@html_title ? ": #{@html_title}" : "") %></title> <title><%= Setting.header_title + (@html_title ? ": #{@html_title}" : "") %></title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="description" content="redMine" /> <meta name="description" content="redMine" />
<meta name="keywords" content="issue,bug,tracker" /> <meta name="keywords" content="issue,bug,tracker" />
@ -23,8 +23,8 @@
<div id="header"> <div id="header">
<div style="float: left;"> <div style="float: left;">
<h1><%= $RDM_HEADER_TITLE %></h1> <h1><%= Setting.header_title %></h1>
<h2><%= $RDM_HEADER_SUBTITLE %></h2> <h2><%= Setting.header_subtitle %></h2>
</div> </div>
<div style="float: right; padding-right: 1em; padding-top: 0.2em;"> <div style="float: right; padding-right: 1em; padding-top: 0.2em;">
<% if loggedin? %><small><%=l(:label_logged_as)%> <b><%= @logged_in_user.login %></b></small><% end %> <% if loggedin? %><small><%=l(:label_logged_as)%> <b><%= @logged_in_user.login %></b></small><% end %>
@ -69,6 +69,7 @@
<a class="menuItem" href="/enumerations"><%=l(:label_enumerations)%></a> <a class="menuItem" href="/enumerations"><%=l(:label_enumerations)%></a>
<a class="menuItem" href="/admin/mail_options"><%=l(:field_mail_notification)%></a> <a class="menuItem" href="/admin/mail_options"><%=l(:field_mail_notification)%></a>
<a class="menuItem" href="/auth_sources"><%=l(:label_authentication)%></a> <a class="menuItem" href="/auth_sources"><%=l(:label_authentication)%></a>
<a class="menuItem" href="/settings"><%=l(:label_settings)%></a>
<a class="menuItem" href="/admin/info"><%=l(:label_information_plural)%></a> <a class="menuItem" href="/admin/info"><%=l(:label_information_plural)%></a>
</div> </div>
<div id="menuTrackers" class="menu"> <div id="menuTrackers" class="menu">
@ -134,10 +135,7 @@
</div> </div>
<div id="footer"> <div id="footer">
<p> <p><a href="http://redmine.rubyforge.org/"><%= RDM_APP_NAME %></a> <%= RDM_APP_VERSION %></p>
<%= auto_link $RDM_FOOTER_SIG %> |
<a href="http://redmine.rubyforge.org/"><%= RDM_APP_NAME %></a> <%= RDM_APP_VERSION %>
</p>
</div> </div>
</div> </div>

View File

@ -4,4 +4,4 @@
<%= issue.description %> <%= issue.description %>
http://<%= $RDM_HOST_NAME %>/issues/show/<%= issue.id %> http://<%= Setting.host_name %>/issues/show/<%= issue.id %>

View File

@ -1,3 +1,3 @@
To change your password, use the following link: To change your password, use the following link:
http://<%= $RDM_HOST_NAME %>/account/lost_password?token=<%= @token.value %> http://<%= Setting.host_name %>/account/lost_password?token=<%= @token.value %>

View File

@ -1,3 +1,3 @@
To change your password, use the following link: To change your password, use the following link:
http://<%= $RDM_HOST_NAME %>/account/lost_password?token=<%= @token.value %> http://<%= Setting.host_name %>/account/lost_password?token=<%= @token.value %>

View File

@ -1,3 +1,3 @@
To change your password, use the following link: To change your password, use the following link:
http://<%= $RDM_HOST_NAME %>/account/lost_password?token=<%= @token.value %> http://<%= Setting.host_name %>/account/lost_password?token=<%= @token.value %>

View File

@ -1,3 +1,3 @@
Pour changer votre mot de passe, utilisez le lien suivant: Pour changer votre mot de passe, utilisez le lien suivant:
http://<%= $RDM_HOST_NAME %>/account/lost_password?token=<%= @token.value %> http://<%= Setting.host_name %>/account/lost_password?token=<%= @token.value %>

View File

@ -1,3 +1,3 @@
To activate your redMine account, use the following link: To activate your redMine account, use the following link:
http://<%= $RDM_HOST_NAME %>/account/register?token=<%= @token.value %> http://<%= Setting.host_name %>/account/register?token=<%= @token.value %>

View File

@ -1,3 +1,3 @@
To activate your redMine account, use the following link: To activate your redMine account, use the following link:
http://<%= $RDM_HOST_NAME %>/account/register?token=<%= @token.value %> http://<%= Setting.host_name %>/account/register?token=<%= @token.value %>

View File

@ -1,3 +1,3 @@
To activate your redMine account, use the following link: To activate your redMine account, use the following link:
http://<%= $RDM_HOST_NAME %>/account/register?token=<%= @token.value %> http://<%= Setting.host_name %>/account/register?token=<%= @token.value %>

View File

@ -1,3 +1,3 @@
Pour activer votre compte sur redMine, utilisez le lien suivant: Pour activer votre compte sur redMine, utilisez le lien suivant:
http://<%= $RDM_HOST_NAME %>/account/register?token=<%= @token.value %> http://<%= Setting.host_name %>/account/register?token=<%= @token.value %>

View File

@ -5,7 +5,7 @@
<p><%= f.text_area :description, :required => true, :cols => 60, :rows => 15 %></p> <p><%= f.text_area :description, :required => true, :cols => 60, :rows => 15 %></p>
</div> </div>
<% unless $RDM_TEXTILE_DISABLED %> <% if Setting.text_formatting == 'textile' %>
<%= javascript_include_tag 'jstoolbar' %> <%= javascript_include_tag 'jstoolbar' %>
<script type="text/javascript"> <script type="text/javascript">
//<![CDATA[ //<![CDATA[

View File

@ -6,7 +6,7 @@
<div class="box"> <div class="box">
<p id="attachments_p"><label for="attachment_file"><%=l(:label_attachment)%> <p id="attachments_p"><label for="attachment_file"><%=l(:label_attachment)%>
<%= image_to_function "add.png", "addFileField();return false" %></label> <%= image_to_function "add.png", "addFileField();return false" %></label>
<%= file_field_tag 'attachments[]', :size => 30 %> <em>(<%= l(:label_max_size) %>: <%= human_size(Attachment.max_size) %>)</em></p> <%= file_field_tag 'attachments[]', :size => 30 %> <em>(<%= l(:label_max_size) %>: <%= human_size(Setting.attachment_max_size.to_i.kilobytes) %>)</em></p>
</div> </div>
<%= submit_tag l(:button_create) %> <%= submit_tag l(:button_create) %>

View File

@ -9,7 +9,7 @@
<p id="attachments_p"><label for="attachment_file"><%=l(:label_attachment)%> <p id="attachments_p"><label for="attachment_file"><%=l(:label_attachment)%>
<%= image_to_function "add.png", "addFileField();return false" %></label> <%= image_to_function "add.png", "addFileField();return false" %></label>
<%= file_field_tag 'attachments[]', :size => 30 %> <em>(<%= l(:label_max_size) %>: <%= human_size(Attachment.max_size) %>)</em></p> <%= file_field_tag 'attachments[]', :size => 30 %> <em>(<%= l(:label_max_size) %>: <%= human_size(Setting.attachment_max_size.to_i.kilobytes) %>)</em></p>
</div> </div>
<%= submit_tag l(:button_add) %> <%= submit_tag l(:button_add) %>
<%= end_form_tag %> <%= end_form_tag %>

View File

@ -27,7 +27,7 @@
<p id="attachments_p"><label for="attachment_file"><%=l(:label_attachment)%> <p id="attachments_p"><label for="attachment_file"><%=l(:label_attachment)%>
<%= image_to_function "add.png", "addFileField();return false" %></label> <%= image_to_function "add.png", "addFileField();return false" %></label>
<%= file_field_tag 'attachments[]', :size => 30 %> <em>(<%= l(:label_max_size) %>: <%= human_size(Attachment.max_size) %>)</em></p> <%= file_field_tag 'attachments[]', :size => 30 %> <em>(<%= l(:label_max_size) %>: <%= human_size(Setting.attachment_max_size.to_i.kilobytes) %>)</em></p>
</div> </div>
<!--[eoform:issue]--> <!--[eoform:issue]-->
@ -35,7 +35,7 @@
<%= submit_tag l(:button_create) %> <%= submit_tag l(:button_create) %>
<% end %> <% end %>
<% unless $RDM_TEXTILE_DISABLED %> <% if Setting.text_formatting == 'textile' %>
<%= javascript_include_tag 'jstoolbar' %> <%= javascript_include_tag 'jstoolbar' %>
<script type="text/javascript"> <script type="text/javascript">
//<![CDATA[ //<![CDATA[

View File

@ -0,0 +1,37 @@
<h2><%= l(:label_settings) %></h2>
<%= start_form_tag({:action => 'edit'}, :class => "tabular") %>
<div class="box">
<p><label>header_title</label>
<%= text_field_tag 'settings[header_title]', Setting.header_title, :size => 30 %></p>
<p><label>header_subtitle</label>
<%= text_field_tag 'settings[header_subtitle]', Setting.header_subtitle, :size => 60 %></p>
<p><label>welcome_text</label>
<%= text_area_tag 'settings[welcome_text]', Setting.welcome_text, :cols => 60, :rows => 5 %></p>
<p><label>default_language</label>
<%= select_tag 'settings[default_language]', options_for_select( lang_options_for_select(false), Setting.default_language) %></p>
<p><label>login_required</label>
<%= check_box_tag 'settings[login_required]', 1, Setting.login_required? %><%= hidden_field_tag 'settings[login_required]', 0 %></p>
<p><label>self_registration</label>
<%= check_box_tag 'settings[self_registration]', 1, Setting.self_registration? %><%= hidden_field_tag 'settings[self_registration]', 0 %></p>
<p><label>attachment_max_size</label>
<%= text_field_tag 'settings[attachment_max_size]', Setting.attachment_max_size, :size => 6 %></p>
<p><label>mail_from</label>
<%= text_field_tag 'settings[mail_from]', Setting.mail_from, :size => 60 %></p>
<p><label>host_name</label>
<%= text_field_tag 'settings[host_name]', Setting.host_name, :size => 60 %></p>
<p><label>text_formatting</label>
<%= select_tag 'settings[text_formatting]', options_for_select( [[l(:label_none), 0], ["textile", "textile"]], Setting.text_formatting) %></p>
</div>
<%= submit_tag l(:button_save) %>
<%= end_form_tag %>

View File

@ -1,7 +1,7 @@
<h2><%= $RDM_WELCOME_TITLE || l(:label_home) %></h2> <h2><%= l(:label_home) %></h2>
<div class="splitcontentleft"> <div class="splitcontentleft">
<% if $RDM_WELCOME_TEXT %><p><%= $RDM_WELCOME_TEXT %></p><br /><% end %> <p><%= Setting.welcome_text %></p>
<div class="box"> <div class="box">
<h3><%=l(:label_news_latest)%></h3> <h3><%=l(:label_news_latest)%></h3>
<%= render :partial => 'news/news', :collection => @news %> <%= render :partial => 'news/news', :collection => @news %>

View File

@ -1,69 +0,0 @@
# redMine - project management software
# Copyright (C) 2006 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.
# To set your own configuration, rename this file to config_custom.rb
# and edit parameters below
# Don't forget to restart the application after any change.
# Application host name
# Used to provide absolute links in mail notifications
# $RDM_HOST_NAME = "somenet.foo"
# File storage path
# Directory used to store uploaded files
# #{RAILS_ROOT} represents application's home directory
# $RDM_STORAGE_PATH = "#{RAILS_ROOT}/files"
# Set $RDM_LOGIN_REQUIRED to true if you want to force users to login
# to access any page of the application
# $RDM_LOGIN_REQUIRED = false
# Uncomment to disable user self-registration
# $RDM_SELF_REGISTRATION = false
# Default langage ('en', 'es', 'de', 'fr' are available)
# $RDM_DEFAULT_LANG = 'en'
# Email adress used to send mail notifications
# $RDM_MAIL_FROM = "redmine@somenet.foo"
# Page title
# $RDM_HEADER_TITLE = "Title"
# Page sub-title
# $RDM_HEADER_SUBTITLE = "Sub title"
# Welcome page title
# $RDM_WELCOME_TITLE = "Welcome"
# Welcome page text
# $RDM_WELCOME_TEXT = ""
# Signature displayed in footer
# Email adresses will be automatically displayed as a mailto link
# $RDM_FOOTER_SIG = "admin@somenet.foo"
# Textile formatting (only available if RedCloth is installed)
# Textile formatting is automativaly disabled if RedCloth is not available
# Set to true to manually disable.
# $RDM_TEXTILE_DISABLED = true
# Maximum size for attachments (in bytes)
# Default to 5 MB
# $RDM_ATTACHMENT_MAX_SIZE = 5*1024*1024

View File

@ -68,47 +68,11 @@ end
# inflect.uncountable %w( fish sheep ) # inflect.uncountable %w( fish sheep )
# end # end
if File.exist? File.join(File.dirname(__FILE__), 'config_custom.rb')
begin
print "=> Loading config_custom.rb... "
require File.join(File.dirname(__FILE__), 'config_custom')
puts "done."
rescue Exception => detail
puts
puts detail
puts detail.backtrace.join("\n")
puts "=> Error in config_custom.rb. Check your configuration."
exit
end
end
# IMPORTANT !!! DO NOT MODIFY PARAMETERS HERE # IMPORTANT !!! DO NOT MODIFY PARAMETERS HERE
# Instead, rename config_custom.example.rb to config_custom.rb # Instead, rename config_custom.example.rb to config_custom.rb
# and set your own configuration in that file # and set your own configuration in that file
# Parameters defined in config_custom.rb override those defined below # Parameters defined in config_custom.rb override those defined below
# application host name
$RDM_HOST_NAME ||= "localhost:3000"
# file storage path
$RDM_STORAGE_PATH ||= "#{RAILS_ROOT}/files"
# if RDM_LOGIN_REQUIRED is set to true, login is required to access the application
$RDM_LOGIN_REQUIRED ||= false
# default langage
$RDM_DEFAULT_LANG ||= 'en'
# email sender adress
$RDM_MAIL_FROM ||= "redmine@somenet.foo"
# page title
$RDM_HEADER_TITLE ||= "redMine"
# page sub-title
$RDM_HEADER_SUBTITLE ||= "Project management"
# footer signature
$RDM_FOOTER_SIG = "admin@somenet.foo"
# textile formatting
# automaticaly disabled if 'textile' method is not defined (RedCloth unavailable)
$RDM_TEXTILE_DISABLED = true unless ActionView::Helpers::TextHelper.method_defined? "textilize"
# application name # application name
RDM_APP_NAME = "redMine" RDM_APP_NAME = "redMine"
# application version # application version
@ -131,7 +95,7 @@ ActiveRecord::Errors.default_error_messages = {
ActionView::Base.field_error_proc = Proc.new{ |html_tag, instance| "#{html_tag}" } ActionView::Base.field_error_proc = Proc.new{ |html_tag, instance| "#{html_tag}" }
GLoc.set_config :default_language => $RDM_DEFAULT_LANG GLoc.set_config :default_language => :en
GLoc.clear_strings GLoc.clear_strings
GLoc.set_kcode GLoc.set_kcode
GLoc.load_localized_strings GLoc.load_localized_strings

42
config/settings.yml Normal file
View File

@ -0,0 +1,42 @@
# redMine - project management software
# Copyright (C) 2006-2007 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.
# DO NOT MODIFY THIS FILE !!!
# Settings can be defined through the application in Admin -> Settings
header_title:
default: redMine
header_subtitle:
default: Project management
welcome_text:
default:
login_required:
default: 0
self_registration:
default: 1
attachment_max_size:
format: int
default: 5120
mail_from:
default: redmine@somenet.foo
text_formatting:
default: textile
default_language:
default: en
host_name:
default: localhost:3000

View File

@ -0,0 +1,12 @@
class CreateSettings < ActiveRecord::Migration
def self.up
create_table :settings, :force => true do |t|
t.column "name", :string, :limit => 30, :default => "", :null => false
t.column "value", :text
end
end
def self.down
drop_table :settings
end
end

View File

@ -5,7 +5,16 @@ Copyright (C) 2006-2007 Jean-Philippe Lang
http://redmine.rubyforge.org/ http://redmine.rubyforge.org/
== 03/02/2006 v0.4.1 == xx/xx/2006 v0.4.2
* settings are now stored in the database (config_custom.rb no more used) and editable through the application in: Admin -> Settings
* tooltips added on Gantt chart and calender to view the details of the issues
* all icons replaced (new icons are based on GPL icon set: "KDE Crystal Diamond 2.5" -by paolino- and "kNeu! Alpha v0.1" -by Pablo Fabregat-)
* added back "fixed version" field on issue screen and in filters
* fixed: subprojects count is always 0 on projects list
== 01/03/2006 v0.4.1
* fixed: emails have no recipient when one of the project members has notifications disabled * fixed: emails have no recipient when one of the project members has notifications disabled

View File

@ -13,6 +13,7 @@ http://redmine.rubyforge.org/
Optional: Optional:
* RedCloth (to enable textile formatting) * RedCloth (to enable textile formatting)
* SVN binaries (needed for repository browsing, must be available in PATH)
Supported databases: Supported databases:
* MySQL (tested with MySQL 5) * MySQL (tested with MySQL 5)
@ -57,14 +58,12 @@ Supported databases:
== Configuration == Configuration
A sample configuration file is provided: "config/config_custom.example.rb"
Rename it to config_custom.rb and set your parameters.
Don't forget to restart the application after any change.
In config/environment.rb, you can set parameters for your SMTP server: In config/environment.rb, you can set parameters for your SMTP server:
config.action_mailer.server_settings: SMTP server configuration config.action_mailer.server_settings: SMTP server configuration
config.action_mailer.perform_deliveries: set to false to disable mail delivering config.action_mailer.perform_deliveries: set to false to disable mail delivering
Don't forget to restart the application after any change.
== Upgrading == Upgrading

View File

@ -4,19 +4,19 @@ redMine - project management software
Copyright (C) 2006-2007 Jean-Philippe Lang Copyright (C) 2006-2007 Jean-Philippe Lang
http://redmine.rubyforge.org/ http://redmine.rubyforge.org/
== From 0.3.0
== From 0.3.0 and above
1. Uncompress program archive in a new directory: 1. Uncompress program archive in a new directory:
tar zxvf <filename> tar zxvf <filename>
3. Copy your database (database.yml) and configuration settings (config_custom.rb) 3. Copy your database settings (database.yml) into the new config directory
into the new config directory
4. Migrate your database: 4. Migrate your database:
rake migrate RAILS_ENV="production" rake migrate RAILS_ENV="production"
== From 0.2.x and previous == From 0.2.x and below
Due to major database changes since 0.2.x, there is no migration support Due to major database changes since 0.2.x, there is no migration support
from 0.2.x and previous versions. from 0.2.x and previous versions.

View File

@ -2,7 +2,7 @@ desc 'Load default configuration data'
task :load_default_data => :environment do task :load_default_data => :environment do
include GLoc include GLoc
set_language_if_valid($RDM_DEFAULT_LANG) set_language_if_valid('en')
puts puts
while true while true

Binary file not shown.

After

Width:  |  Height:  |  Size: 772 B

View File

@ -176,6 +176,7 @@ vertical-align: middle;
.icon22-info { background-image: url(../images/22x22/info.png); } .icon22-info { background-image: url(../images/22x22/info.png); }
.icon22-comment { background-image: url(../images/22x22/comment.png); } .icon22-comment { background-image: url(../images/22x22/comment.png); }
.icon22-package { background-image: url(../images/22x22/package.png); } .icon22-package { background-image: url(../images/22x22/package.png); }
.icon22-settings { background-image: url(../images/22x22/settings.png); }
/**************** Content styles ****************/ /**************** Content styles ****************/

View File

@ -42,7 +42,7 @@ class ProjectTest < Test::Unit::TestCase
@ecookbook.name = "" @ecookbook.name = ""
assert !@ecookbook.save assert !@ecookbook.save
assert_equal 1, @ecookbook.errors.count assert_equal 1, @ecookbook.errors.count
assert_equal l(:activerecord_error_blank), @ecookbook.errors.on(:name) assert_equal "activerecord_error_blank", @ecookbook.errors.on(:name)
end end
def test_public_projects def test_public_projects