summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2007-01-21 11:50:22 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2007-01-21 11:50:22 +0000
commit0b4d4db131304eac84dc90b289a95db3410a2bfe (patch)
treeb5ad6934b897635e594ca089f06fe953d082ed53
parenta1b12335ab6a01ea6e7dcc1df490db16136c8c2a (diff)
downloadredmine-0b4d4db131304eac84dc90b289a95db3410a2bfe.tar.gz
redmine-0b4d4db131304eac84dc90b289a95db3410a2bfe.zip
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
-rw-r--r--app/controllers/account_controller.rb6
-rw-r--r--app/controllers/application.rb6
-rw-r--r--app/controllers/settings_controller.rb33
-rw-r--r--app/controllers/users_controller.rb4
-rw-r--r--app/helpers/application_helper.rb9
-rw-r--r--app/helpers/settings_helper.rb19
-rw-r--r--app/models/attachment.rb15
-rw-r--r--app/models/mailer.rb11
-rw-r--r--app/models/setting.rb61
-rw-r--r--app/models/user.rb4
-rw-r--r--app/views/account/login.rhtml2
-rw-r--r--app/views/admin/index.rhtml4
-rw-r--r--app/views/documents/_form.rhtml2
-rw-r--r--app/views/documents/show.rhtml2
-rw-r--r--app/views/feeds/news.rxml4
-rw-r--r--app/views/issues/edit.rhtml2
-rw-r--r--app/views/issues/show.rhtml2
-rw-r--r--app/views/layouts/base.rhtml12
-rw-r--r--app/views/mailer/_issue.rhtml2
-rw-r--r--app/views/mailer/lost_password_de.rhtml2
-rw-r--r--app/views/mailer/lost_password_en.rhtml2
-rw-r--r--app/views/mailer/lost_password_es.rhtml2
-rw-r--r--app/views/mailer/lost_password_fr.rhtml2
-rw-r--r--app/views/mailer/register_de.rhtml2
-rw-r--r--app/views/mailer/register_en.rhtml2
-rw-r--r--app/views/mailer/register_es.rhtml2
-rw-r--r--app/views/mailer/register_fr.rhtml2
-rw-r--r--app/views/news/_form.rhtml2
-rw-r--r--app/views/projects/add_document.rhtml2
-rw-r--r--app/views/projects/add_file.rhtml2
-rw-r--r--app/views/projects/add_issue.rhtml4
-rw-r--r--app/views/settings/edit.rhtml37
-rw-r--r--app/views/welcome/index.rhtml4
-rw-r--r--config/config_custom.example.rb69
-rw-r--r--config/environment.rb38
-rw-r--r--config/settings.yml42
-rw-r--r--db/migrate/017_create_settings.rb12
-rw-r--r--doc/CHANGELOG11
-rw-r--r--doc/INSTALL7
-rw-r--r--doc/UPGRADING8
-rw-r--r--lib/tasks/load_default_data.rake2
-rw-r--r--public/images/22x22/settings.pngbin0 -> 772 bytes
-rw-r--r--public/stylesheets/application.css1
-rw-r--r--test/unit/project_test.rb2
44 files changed, 286 insertions, 173 deletions
diff --git a/app/controllers/account_controller.rb b/app/controllers/account_controller.rb
index fb775d196..c3b0ebd7f 100644
--- a/app/controllers/account_controller.rb
+++ b/app/controllers/account_controller.rb
@@ -1,5 +1,5 @@
# 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
# modify it under the terms of the GNU General Public License
@@ -95,7 +95,7 @@ class AccountController < ApplicationController
# User self-registration
def register
- redirect_to :controller => '' and return if $RDM_SELF_REGISTRATION == false
+ redirect_to :controller => '' and return unless Setting.self_registration?
if params[:token]
token = Token.find_by_action_and_value("register", params[:token])
redirect_to :controller => '' and return unless token and !token.expired?
@@ -110,7 +110,7 @@ class AccountController < ApplicationController
end
else
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) }
else
@user = User.new(params[:user])
diff --git a/app/controllers/application.rb b/app/controllers/application.rb
index da01e09c8..bae05ce1b 100644
--- a/app/controllers/application.rb
+++ b/app/controllers/application.rb
@@ -1,5 +1,5 @@
# 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
# 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
def check_if_login_required
- require_login if $RDM_LOGIN_REQUIRED
+ require_login if Setting.login_required?
end
def set_localization
@@ -48,7 +48,7 @@ class ApplicationController < ActionController::Base
end
rescue
nil
- end || $RDM_DEFAULT_LANG
+ end || Setting.default_language
set_language_if_valid(lang)
end
diff --git a/app/controllers/settings_controller.rb b/app/controllers/settings_controller.rb
new file mode 100644
index 000000000..229a4ab3c
--- /dev/null
+++ b/app/controllers/settings_controller.rb
@@ -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
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index 4c403a8d6..14f8ecff3 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -1,5 +1,5 @@
# 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
# modify it under the terms of the GNU General Public License
@@ -45,7 +45,7 @@ class UsersController < ApplicationController
def add
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) }
else
@user = User.new(params[:user])
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 0f0d577ee..748a1d7e9 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -1,5 +1,5 @@
# 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
# modify it under the terms of the GNU General Public License
@@ -93,7 +93,7 @@ module ApplicationHelper
end
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
def error_messages_for(object_name, options = {})
@@ -131,8 +131,9 @@ module ApplicationHelper
end
end
- def lang_options_for_select
- [["(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]}
+ def lang_options_for_select(blank=true)
+ (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
def label_tag_for(name, option_tags = nil, options = {})
diff --git a/app/helpers/settings_helper.rb b/app/helpers/settings_helper.rb
new file mode 100644
index 000000000..f53314c40
--- /dev/null
+++ b/app/helpers/settings_helper.rb
@@ -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
diff --git a/app/models/attachment.rb b/app/models/attachment.rb
index cdf5a3e47..773f2ebe9 100644
--- a/app/models/attachment.rb
+++ b/app/models/attachment.rb
@@ -1,5 +1,5 @@
# 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
# 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 :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_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)
unless incomming_file.nil?
@temp_file = incomming_file
@@ -63,7 +66,7 @@ class Attachment < ActiveRecord::Base
# Returns file's location on disk
def diskfile
- "#{$RDM_STORAGE_PATH}/#{self.disk_filename}"
+ "#{@@storage_path}/#{self.disk_filename}"
end
def increment_download
diff --git a/app/models/mailer.rb b/app/models/mailer.rb
index 968beb49e..ba93b5bc7 100644
--- a/app/models/mailer.rb
+++ b/app/models/mailer.rb
@@ -1,5 +1,5 @@
# 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
# 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.
class Mailer < ActionMailer::Base
-
helper IssuesHelper
def issue_add(issue)
# Sends to all project members
@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}"
@body['issue'] = issue
end
@@ -31,7 +30,7 @@ class Mailer < ActionMailer::Base
# Sends to all project members
issue = journal.journalized
@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}"
@body['issue'] = issue
@body['journal']= journal
@@ -39,14 +38,14 @@ class Mailer < ActionMailer::Base
def lost_password(token)
@recipients = token.user.mail
- @from = $RDM_MAIL_FROM
+ @from = Setting.mail_from
@subject = l(:mail_subject_lost_password)
@body['token'] = token
end
def register(token)
@recipients = token.user.mail
- @from = $RDM_MAIL_FROM
+ @from = Setting.mail_from
@subject = l(:mail_subject_register)
@body['token'] = token
end
diff --git a/app/models/setting.rb b/app/models/setting.rb
new file mode 100644
index 000000000..7350d9123
--- /dev/null
+++ b/app/models/setting.rb
@@ -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
diff --git a/app/models/user.rb b/app/models/user.rb
index b798860d2..8a596168e 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -1,5 +1,5 @@
# 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
# modify it under the terms of the GNU General Public License
@@ -69,7 +69,7 @@ class User < ActiveRecord::Base
if attrs
onthefly = new(*attrs)
onthefly.login = login
- onthefly.language = $RDM_DEFAULT_LANG
+ onthefly.language = Setting.default_language
if onthefly.save
user = find(:first, :conditions => ["login=?", login])
logger.info("User '#{user.login}' created on the fly.") if logger
diff --git a/app/views/account/login.rhtml b/app/views/account/login.rhtml
index 8f092b525..346f7d52b 100644
--- a/app/views/account/login.rhtml
+++ b/app/views/account/login.rhtml
@@ -12,7 +12,7 @@
<p><center><input type="submit" name="login" value="<%=l(:button_login)%> &#187;" class="primary" /></center>
<%= 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>
</div>
</center> \ No newline at end of file
diff --git a/app/views/admin/index.rhtml b/app/views/admin/index.rhtml
index 901134c27..535a90b59 100644
--- a/app/views/admin/index.rhtml
+++ b/app/views/admin/index.rhtml
@@ -36,6 +36,10 @@
<%= link_to l(:label_authentication), :controller => 'auth_sources' %>
</p>
+<p class="icon22 icon22-settings">
+<%= link_to l(:label_settings), :controller => 'settings' %>
+</p>
+
<p class="icon22 icon22-info">
<%= link_to l(:label_information_plural), :controller => 'admin', :action => 'info' %>
</p> \ No newline at end of file
diff --git a/app/views/documents/_form.rhtml b/app/views/documents/_form.rhtml
index 873c96329..b075b4657 100644
--- a/app/views/documents/_form.rhtml
+++ b/app/views/documents/_form.rhtml
@@ -14,7 +14,7 @@
<!--[eoform:document]-->
</div>
-<% unless $RDM_TEXTILE_DISABLED %>
+<% if Setting.text_formatting == 'textile' %>
<%= javascript_include_tag 'jstoolbar' %>
<script type="text/javascript">
//<![CDATA[
diff --git a/app/views/documents/show.rhtml b/app/views/documents/show.rhtml
index dab360eda..d756aad62 100644
--- a/app/views/documents/show.rhtml
+++ b/app/views/documents/show.rhtml
@@ -31,7 +31,7 @@
<%= 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)%>
<%= 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) %>
<%= end_form_tag %>
<% end %>
diff --git a/app/views/feeds/news.rxml b/app/views/feeds/news.rxml
index 50d4a9aba..41fb0cade 100644
--- a/app/views/feeds/news.rxml
+++ b/app/views/feeds/news.rxml
@@ -1,10 +1,10 @@
xml.instruct!
xml.rss "version" => "2.0", "xmlns:dc" => "http://purl.org/dc/elements/1.1/" 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.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|
xml.item do
xml.title "#{news.project.name}: #{news.title}"
diff --git a/app/views/issues/edit.rhtml b/app/views/issues/edit.rhtml
index da3805c29..78fc4a7a8 100644
--- a/app/views/issues/edit.rhtml
+++ b/app/views/issues/edit.rhtml
@@ -34,7 +34,7 @@
<%= submit_tag l(:button_save) %>
<% end %>
-<% unless $RDM_TEXTILE_DISABLED %>
+<% if Setting.text_formatting == 'textile' %>
<%= javascript_include_tag 'jstoolbar' %>
<script type="text/javascript">
//<![CDATA[
diff --git a/app/views/issues/show.rhtml b/app/views/issues/show.rhtml
index f2441f964..29adf66ae 100644
--- a/app/views/issues/show.rhtml
+++ b/app/views/issues/show.rhtml
@@ -93,7 +93,7 @@ end %>
<%= start_form_tag ({ :controller => 'issues', :action => 'add_attachment', :id => @issue }, :multipart => true, :class => "tabular") %>
<p id="attachments_p"><label><%=l(:label_attachment_new)%>
<%= 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) %>
<%= end_form_tag %>
<% end %>
diff --git a/app/views/layouts/base.rhtml b/app/views/layouts/base.rhtml
index 4768f29dd..e4c35b6bd 100644
--- a/app/views/layouts/base.rhtml
+++ b/app/views/layouts/base.rhtml
@@ -1,7 +1,7 @@
<!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">
<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 name="description" content="redMine" />
<meta name="keywords" content="issue,bug,tracker" />
@@ -23,8 +23,8 @@
<div id="header">
<div style="float: left;">
- <h1><%= $RDM_HEADER_TITLE %></h1>
- <h2><%= $RDM_HEADER_SUBTITLE %></h2>
+ <h1><%= Setting.header_title %></h1>
+ <h2><%= Setting.header_subtitle %></h2>
</div>
<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 %>
@@ -69,6 +69,7 @@
<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="/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>
</div>
<div id="menuTrackers" class="menu">
@@ -134,10 +135,7 @@
</div>
<div id="footer">
- <p>
- <%= auto_link $RDM_FOOTER_SIG %> |
- <a href="http://redmine.rubyforge.org/"><%= RDM_APP_NAME %></a> <%= RDM_APP_VERSION %>
- </p>
+ <p><a href="http://redmine.rubyforge.org/"><%= RDM_APP_NAME %></a> <%= RDM_APP_VERSION %></p>
</div>
</div>
diff --git a/app/views/mailer/_issue.rhtml b/app/views/mailer/_issue.rhtml
index c123ae30c..4c5255d3e 100644
--- a/app/views/mailer/_issue.rhtml
+++ b/app/views/mailer/_issue.rhtml
@@ -4,4 +4,4 @@
<%= issue.description %>
-http://<%= $RDM_HOST_NAME %>/issues/show/<%= issue.id %> \ No newline at end of file
+http://<%= Setting.host_name %>/issues/show/<%= issue.id %> \ No newline at end of file
diff --git a/app/views/mailer/lost_password_de.rhtml b/app/views/mailer/lost_password_de.rhtml
index 2593edbda..0b391498b 100644
--- a/app/views/mailer/lost_password_de.rhtml
+++ b/app/views/mailer/lost_password_de.rhtml
@@ -1,3 +1,3 @@
To change your password, use the following link:
-http://<%= $RDM_HOST_NAME %>/account/lost_password?token=<%= @token.value %> \ No newline at end of file
+http://<%= Setting.host_name %>/account/lost_password?token=<%= @token.value %> \ No newline at end of file
diff --git a/app/views/mailer/lost_password_en.rhtml b/app/views/mailer/lost_password_en.rhtml
index 2593edbda..0b391498b 100644
--- a/app/views/mailer/lost_password_en.rhtml
+++ b/app/views/mailer/lost_password_en.rhtml
@@ -1,3 +1,3 @@
To change your password, use the following link:
-http://<%= $RDM_HOST_NAME %>/account/lost_password?token=<%= @token.value %> \ No newline at end of file
+http://<%= Setting.host_name %>/account/lost_password?token=<%= @token.value %> \ No newline at end of file
diff --git a/app/views/mailer/lost_password_es.rhtml b/app/views/mailer/lost_password_es.rhtml
index 2593edbda..0b391498b 100644
--- a/app/views/mailer/lost_password_es.rhtml
+++ b/app/views/mailer/lost_password_es.rhtml
@@ -1,3 +1,3 @@
To change your password, use the following link:
-http://<%= $RDM_HOST_NAME %>/account/lost_password?token=<%= @token.value %> \ No newline at end of file
+http://<%= Setting.host_name %>/account/lost_password?token=<%= @token.value %> \ No newline at end of file
diff --git a/app/views/mailer/lost_password_fr.rhtml b/app/views/mailer/lost_password_fr.rhtml
index 30996f118..18b6bf6ae 100644
--- a/app/views/mailer/lost_password_fr.rhtml
+++ b/app/views/mailer/lost_password_fr.rhtml
@@ -1,3 +1,3 @@
Pour changer votre mot de passe, utilisez le lien suivant:
-http://<%= $RDM_HOST_NAME %>/account/lost_password?token=<%= @token.value %> \ No newline at end of file
+http://<%= Setting.host_name %>/account/lost_password?token=<%= @token.value %> \ No newline at end of file
diff --git a/app/views/mailer/register_de.rhtml b/app/views/mailer/register_de.rhtml
index 2c0341b24..95cc7c4a6 100644
--- a/app/views/mailer/register_de.rhtml
+++ b/app/views/mailer/register_de.rhtml
@@ -1,3 +1,3 @@
To activate your redMine account, use the following link:
-http://<%= $RDM_HOST_NAME %>/account/register?token=<%= @token.value %> \ No newline at end of file
+http://<%= Setting.host_name %>/account/register?token=<%= @token.value %> \ No newline at end of file
diff --git a/app/views/mailer/register_en.rhtml b/app/views/mailer/register_en.rhtml
index 2c0341b24..95cc7c4a6 100644
--- a/app/views/mailer/register_en.rhtml
+++ b/app/views/mailer/register_en.rhtml
@@ -1,3 +1,3 @@
To activate your redMine account, use the following link:
-http://<%= $RDM_HOST_NAME %>/account/register?token=<%= @token.value %> \ No newline at end of file
+http://<%= Setting.host_name %>/account/register?token=<%= @token.value %> \ No newline at end of file
diff --git a/app/views/mailer/register_es.rhtml b/app/views/mailer/register_es.rhtml
index 2c0341b24..95cc7c4a6 100644
--- a/app/views/mailer/register_es.rhtml
+++ b/app/views/mailer/register_es.rhtml
@@ -1,3 +1,3 @@
To activate your redMine account, use the following link:
-http://<%= $RDM_HOST_NAME %>/account/register?token=<%= @token.value %> \ No newline at end of file
+http://<%= Setting.host_name %>/account/register?token=<%= @token.value %> \ No newline at end of file
diff --git a/app/views/mailer/register_fr.rhtml b/app/views/mailer/register_fr.rhtml
index 3f5d0ccaf..402b2a5d4 100644
--- a/app/views/mailer/register_fr.rhtml
+++ b/app/views/mailer/register_fr.rhtml
@@ -1,3 +1,3 @@
Pour activer votre compte sur redMine, utilisez le lien suivant:
-http://<%= $RDM_HOST_NAME %>/account/register?token=<%= @token.value %> \ No newline at end of file
+http://<%= Setting.host_name %>/account/register?token=<%= @token.value %> \ No newline at end of file
diff --git a/app/views/news/_form.rhtml b/app/views/news/_form.rhtml
index 2dcdc9f80..497c071c1 100644
--- a/app/views/news/_form.rhtml
+++ b/app/views/news/_form.rhtml
@@ -5,7 +5,7 @@
<p><%= f.text_area :description, :required => true, :cols => 60, :rows => 15 %></p>
</div>
-<% unless $RDM_TEXTILE_DISABLED %>
+<% if Setting.text_formatting == 'textile' %>
<%= javascript_include_tag 'jstoolbar' %>
<script type="text/javascript">
//<![CDATA[
diff --git a/app/views/projects/add_document.rhtml b/app/views/projects/add_document.rhtml
index b570eabbd..57a62756b 100644
--- a/app/views/projects/add_document.rhtml
+++ b/app/views/projects/add_document.rhtml
@@ -6,7 +6,7 @@
<div class="box">
<p id="attachments_p"><label for="attachment_file"><%=l(:label_attachment)%>
<%= 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>
<%= submit_tag l(:button_create) %>
diff --git a/app/views/projects/add_file.rhtml b/app/views/projects/add_file.rhtml
index baffbe8e8..6efc1d2c5 100644
--- a/app/views/projects/add_file.rhtml
+++ b/app/views/projects/add_file.rhtml
@@ -9,7 +9,7 @@
<p id="attachments_p"><label for="attachment_file"><%=l(:label_attachment)%>
<%= 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>
<%= submit_tag l(:button_add) %>
<%= end_form_tag %> \ No newline at end of file
diff --git a/app/views/projects/add_issue.rhtml b/app/views/projects/add_issue.rhtml
index 951b53bb9..fd463b5b4 100644
--- a/app/views/projects/add_issue.rhtml
+++ b/app/views/projects/add_issue.rhtml
@@ -27,7 +27,7 @@
<p id="attachments_p"><label for="attachment_file"><%=l(:label_attachment)%>
<%= 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>
<!--[eoform:issue]-->
@@ -35,7 +35,7 @@
<%= submit_tag l(:button_create) %>
<% end %>
-<% unless $RDM_TEXTILE_DISABLED %>
+<% if Setting.text_formatting == 'textile' %>
<%= javascript_include_tag 'jstoolbar' %>
<script type="text/javascript">
//<![CDATA[
diff --git a/app/views/settings/edit.rhtml b/app/views/settings/edit.rhtml
new file mode 100644
index 000000000..fcbb40f91
--- /dev/null
+++ b/app/views/settings/edit.rhtml
@@ -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 %> \ No newline at end of file
diff --git a/app/views/welcome/index.rhtml b/app/views/welcome/index.rhtml
index d32771c0f..95683c849 100644
--- a/app/views/welcome/index.rhtml
+++ b/app/views/welcome/index.rhtml
@@ -1,7 +1,7 @@
-<h2><%= $RDM_WELCOME_TITLE || l(:label_home) %></h2>
+<h2><%= l(:label_home) %></h2>
<div class="splitcontentleft">
- <% if $RDM_WELCOME_TEXT %><p><%= $RDM_WELCOME_TEXT %></p><br /><% end %>
+ <p><%= Setting.welcome_text %></p>
<div class="box">
<h3><%=l(:label_news_latest)%></h3>
<%= render :partial => 'news/news', :collection => @news %>
diff --git a/config/config_custom.example.rb b/config/config_custom.example.rb
deleted file mode 100644
index b00e716b1..000000000
--- a/config/config_custom.example.rb
+++ /dev/null
@@ -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
diff --git a/config/environment.rb b/config/environment.rb
index 201051b13..3edc93ed7 100644
--- a/config/environment.rb
+++ b/config/environment.rb
@@ -68,47 +68,11 @@ end
# inflect.uncountable %w( fish sheep )
# 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
# Instead, rename config_custom.example.rb to config_custom.rb
# and set your own configuration in that file
# 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
RDM_APP_NAME = "redMine"
# application version
@@ -131,7 +95,7 @@ ActiveRecord::Errors.default_error_messages = {
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.set_kcode
GLoc.load_localized_strings
diff --git a/config/settings.yml b/config/settings.yml
new file mode 100644
index 000000000..d6b3dfc25
--- /dev/null
+++ b/config/settings.yml
@@ -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 \ No newline at end of file
diff --git a/db/migrate/017_create_settings.rb b/db/migrate/017_create_settings.rb
new file mode 100644
index 000000000..99f96adf8
--- /dev/null
+++ b/db/migrate/017_create_settings.rb
@@ -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
diff --git a/doc/CHANGELOG b/doc/CHANGELOG
index bbd824da1..0373e46a1 100644
--- a/doc/CHANGELOG
+++ b/doc/CHANGELOG
@@ -5,7 +5,16 @@ Copyright (C) 2006-2007 Jean-Philippe Lang
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
diff --git a/doc/INSTALL b/doc/INSTALL
index f55b81a60..4afe11ad1 100644
--- a/doc/INSTALL
+++ b/doc/INSTALL
@@ -13,6 +13,7 @@ http://redmine.rubyforge.org/
Optional:
* RedCloth (to enable textile formatting)
+* SVN binaries (needed for repository browsing, must be available in PATH)
Supported databases:
* MySQL (tested with MySQL 5)
@@ -57,14 +58,12 @@ Supported databases:
== 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:
config.action_mailer.server_settings: SMTP server configuration
config.action_mailer.perform_deliveries: set to false to disable mail delivering
+Don't forget to restart the application after any change.
+
== Upgrading
diff --git a/doc/UPGRADING b/doc/UPGRADING
index cc4008a8e..f42b5b352 100644
--- a/doc/UPGRADING
+++ b/doc/UPGRADING
@@ -4,19 +4,19 @@ redMine - project management software
Copyright (C) 2006-2007 Jean-Philippe Lang
http://redmine.rubyforge.org/
-== From 0.3.0
+
+== From 0.3.0 and above
1. Uncompress program archive in a new directory:
tar zxvf <filename>
-3. Copy your database (database.yml) and configuration settings (config_custom.rb)
- into the new config directory
+3. Copy your database settings (database.yml) into the new config directory
4. Migrate your database:
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
from 0.2.x and previous versions.
diff --git a/lib/tasks/load_default_data.rake b/lib/tasks/load_default_data.rake
index f5a160545..12e0efd35 100644
--- a/lib/tasks/load_default_data.rake
+++ b/lib/tasks/load_default_data.rake
@@ -2,7 +2,7 @@ desc 'Load default configuration data'
task :load_default_data => :environment do
include GLoc
- set_language_if_valid($RDM_DEFAULT_LANG)
+ set_language_if_valid('en')
puts
while true
diff --git a/public/images/22x22/settings.png b/public/images/22x22/settings.png
new file mode 100644
index 000000000..54a3b4730
--- /dev/null
+++ b/public/images/22x22/settings.png
Binary files differ
diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css
index bb18b5fbb..0a3a3f400 100644
--- a/public/stylesheets/application.css
+++ b/public/stylesheets/application.css
@@ -176,6 +176,7 @@ vertical-align: middle;
.icon22-info { background-image: url(../images/22x22/info.png); }
.icon22-comment { background-image: url(../images/22x22/comment.png); }
.icon22-package { background-image: url(../images/22x22/package.png); }
+.icon22-settings { background-image: url(../images/22x22/settings.png); }
/**************** Content styles ****************/
diff --git a/test/unit/project_test.rb b/test/unit/project_test.rb
index 9c8f0c97e..d8d29c614 100644
--- a/test/unit/project_test.rb
+++ b/test/unit/project_test.rb
@@ -42,7 +42,7 @@ class ProjectTest < Test::Unit::TestCase
@ecookbook.name = ""
assert !@ecookbook.save
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
def test_public_projects