-# redMine - project management software
-# Copyright (C) 2006-2007 Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2009 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
{:name => 'repositories', :partial => 'settings/repositories', :label => :label_repository_plural}
]
end
+
+ def setting_select(setting, choices, options={})
+ if blank_text = options.delete(:blank)
+ choices = [[blank_text.is_a?(Symbol) ? l(blank_text) : blank_text, '']] + choices
+ end
+ setting_label(setting, options) +
+ select_tag("settings[#{setting}]", options_for_select(choices, Setting.send(setting).to_s), options)
+ end
+
+ def setting_multiselect(setting, choices, options={})
+ setting_values = Setting.send(setting)
+ setting_values = [] unless setting_values.is_a?(Array)
+
+ setting_label(setting, options) +
+ hidden_field_tag("settings[#{setting}][]", '') +
+ choices.collect do |choice|
+ text, value = (choice.is_a?(Array) ? choice : [choice, choice])
+ content_tag('label',
+ check_box_tag("settings[#{setting}][]", value, Setting.send(setting).include?(value)) + text.to_s,
+ :class => 'block'
+ )
+ end.join
+ end
+
+ def setting_text_field(setting, options={})
+ setting_label(setting, options) +
+ text_field_tag("settings[#{setting}]", Setting.send(setting), options)
+ end
+
+ def setting_text_area(setting, options={})
+ setting_label(setting, options) +
+ text_area_tag("settings[#{setting}]", Setting.send(setting), options)
+ end
+
+ def setting_check_box(setting, options={})
+ setting_label(setting, options) +
+ hidden_field_tag("settings[#{setting}]", 0) +
+ check_box_tag("settings[#{setting}]", 1, Setting.send("#{setting}?"), options)
+ end
+
+ def setting_label(setting, options={})
+ label = options.delete(:label)
+ label != false ? content_tag("label", l(label || "setting_#{setting}")) : ''
+ end
end
<% form_tag({:action => 'edit', :tab => 'authentication'}) do %>
<div class="box tabular settings">
-<p><label><%= l(:setting_login_required) %></label>
-<%= hidden_field_tag 'settings[login_required]', 0 %>
-<%= check_box_tag 'settings[login_required]', 1, Setting.login_required? %>
-</p>
-
-<p><label><%= l(:setting_autologin) %></label>
-<%= select_tag 'settings[autologin]', options_for_select( [[l(:label_disabled), "0"]] + [1, 7, 30, 365].collect{|days| [l('datetime.distance_in_words.x_days', :count => days), days.to_s]}, Setting.autologin) %></p>
-
-<p><label><%= l(:setting_self_registration) %></label>
-<%= select_tag 'settings[self_registration]',
- options_for_select( [[l(:label_disabled), "0"],
- [l(:label_registration_activation_by_email), "1"],
- [l(:label_registration_manual_activation), "2"],
- [l(:label_registration_automatic_activation), "3"]
- ], Setting.self_registration ) %></p>
-
-<p><label><%= l(:setting_password_min_length) %></label>
-<%= text_field_tag 'settings[password_min_length]', Setting.password_min_length, :size => 6 %></p>
-
-<p><label><%= l(:label_password_lost) %></label>
-<%= hidden_field_tag 'settings[lost_password]', 0 %>
-<%= check_box_tag 'settings[lost_password]', 1, Setting.lost_password? %>
-</p>
-
-<p><label><%= l(:setting_openid) %></label>
-<%= hidden_field_tag 'settings[openid]', 0 %>
-<%= check_box_tag 'settings[openid]', 1, Setting.openid?, :disabled => !Object.const_defined?(:OpenID) %>
-</p>
+<p><%= setting_check_box :login_required %></p>
+
+<p><%= setting_select :autologin, [1, 7, 30, 365].collect{|days| [l('datetime.distance_in_words.x_days', :count => days), days.to_s]}, :blank => :label_disabled %></p>
+
+<p><%= setting_select :self_registration, [[l(:label_disabled), "0"],
+ [l(:label_registration_activation_by_email), "1"],
+ [l(:label_registration_manual_activation), "2"],
+ [l(:label_registration_automatic_activation), "3"]] %></p>
+
+<p><%= setting_text_field :password_min_length, :size => 6 %></p>
+
+<p><%= setting_check_box :lost_password, :label => :label_password_lost %></p>
+
+<p><%= setting_check_box :openid, :disabled => !Object.const_defined?(:OpenID) %></p>
</div>
<div style="float:right;">
<% form_tag({:action => 'edit', :tab => 'display'}) do %>
<div class="box tabular settings">
-<p><label><%= l(:label_theme) %></label>
-<%= select_tag 'settings[ui_theme]', options_for_select( ([[l(:label_default), '']] + Redmine::Themes.themes.collect {|t| [t.name, t.id]}), Setting.ui_theme) %></p>
+<p><%= setting_select :ui_theme, Redmine::Themes.themes.collect {|t| [t.name, t.id]}, :blank => :label_default, :label => :label_theme %></p>
-<p><label><%= l(:setting_default_language) %></label>
-<%= select_tag 'settings[default_language]', options_for_select( lang_options_for_select(false), Setting.default_language) %></p>
+<p><%= setting_select :default_language, lang_options_for_select(false) %></p>
-<p><label><%= l(:setting_start_of_week) %></label>
-<%= select_tag 'settings[start_of_week]', options_for_select( [[l(:label_language_based), ''], [day_name(1),'1'], [day_name(7),'7']] , Setting.start_of_week) %></p>
+<p><%= setting_select :start_of_week, [[day_name(1),'1'], [day_name(7),'7']], :blank => :label_language_based %></p>
-<p><label><%= l(:setting_date_format) %></label>
-<%= select_tag 'settings[date_format]', options_for_select( [[l(:label_language_based), '']] + Setting::DATE_FORMATS.collect {|f| [Date.today.strftime(f), f]}, Setting.date_format) %></p>
+<p><%= setting_select :date_format, Setting::DATE_FORMATS.collect {|f| [Date.today.strftime(f), f]}, :blank => :label_language_based %></p>
-<p><label><%= l(:setting_time_format) %></label>
-<%= select_tag 'settings[time_format]', options_for_select( [[l(:label_language_based), '']] + Setting::TIME_FORMATS.collect {|f| [Time.now.strftime(f), f]}, Setting.time_format) %></p>
+<p><%= setting_select :time_format, Setting::TIME_FORMATS.collect {|f| [Time.now.strftime(f), f]}, :blank => :label_language_based %></p>
-<p><label><%= l(:setting_user_format) %></label>
-<%= select_tag 'settings[user_format]', options_for_select( @options[:user_format], Setting.user_format.to_s ) %></p>
+<p><%= setting_select :user_format, @options[:user_format] %></p>
-<p><label><%= l(:setting_gravatar_enabled) %></label>
-<%= hidden_field_tag 'settings[gravatar_enabled]', 0 %>
-<%= check_box_tag 'settings[gravatar_enabled]', 1, Setting.gravatar_enabled? %>
-</p>
+<p><%= setting_check_box :gravatar_enabled %></p>
-<p><label><%= l(:setting_gravatar_default) %></label>
-<%= select_tag 'settings[gravatar_default]', options_for_select([[l(:label_none), ''], ["Wavatars", 'wavatar'], ["Identicons", 'identicon'], ["Monster ids", 'monsterid']], Setting.gravatar_default) %></p>
-</p>
+<p><%= setting_select :gravatar_default, [["Wavatars", 'wavatar'], ["Identicons", 'identicon'], ["Monster ids", 'monsterid']], :blank => :label_none %></p>
</div>
<%= submit_tag l(:button_save) %>
<% form_tag({:action => 'edit'}) do %>
<div class="box tabular settings">
-<p><label><%= l(:setting_app_title) %></label>
-<%= text_field_tag 'settings[app_title]', Setting.app_title, :size => 30 %></p>
+<p><%= setting_text_field :app_title, :size => 30 %></p>
-<p><label><%= l(:setting_welcome_text) %></label>
-<%= text_area_tag 'settings[welcome_text]', Setting.welcome_text, :cols => 60, :rows => 5, :class => 'wiki-edit' %></p>
-<%= wikitoolbar_for 'settings[welcome_text]' %>
+<p><%= setting_text_area :welcome_text, :cols => 60, :rows => 5, :class => 'wiki-edit' %></p>
+<%= wikitoolbar_for 'settings_welcome_text' %>
-<p><label><%= l(:setting_attachment_max_size) %></label>
-<%= text_field_tag 'settings[attachment_max_size]', Setting.attachment_max_size, :size => 6 %> KB</p>
+<p><%= setting_text_field :attachment_max_size, :size => 6 %> KB</p>
-<p><label><%= l(:setting_per_page_options) %></label>
-<%= text_field_tag 'settings[per_page_options]', Setting.per_page_options_array.join(', '), :size => 20 %><br /><em><%= l(:text_comma_separated) %></em></p>
+<p><%= setting_text_field :per_page_options, :size => 20 %><br />
+<em><%= l(:text_comma_separated) %></em></p>
-<p><label><%= l(:setting_activity_days_default) %></label>
-<%= text_field_tag 'settings[activity_days_default]', Setting.activity_days_default, :size => 6 %> <%= l(:label_day_plural) %></p>
+<p><%= setting_text_field :activity_days_default, :size => 6 %> <%= l(:label_day_plural) %></p>
-<p><label><%= l(:setting_host_name) %></label>
-<%= text_field_tag 'settings[host_name]', Setting.host_name, :size => 60 %><br />
+<p><%= setting_text_field :host_name, :size => 60 %><br />
<em><%= l(:label_example) %>: <%= @guessed_host_and_path %></em></p>
-<p><label><%= l(:setting_protocol) %></label>
-<%= select_tag 'settings[protocol]', options_for_select(['http', 'https'], Setting.protocol) %></p>
+<p><%= setting_select :protocol, [['HTTP', 'http'], ['HTTPS', 'https']] %></p>
-<p><label><%= l(:setting_text_formatting) %></label>
-<%= select_tag 'settings[text_formatting]', options_for_select([[l(:label_none), "0"], *Redmine::WikiFormatting.format_names.collect{|name| [name, name]} ], Setting.text_formatting.to_sym) %></p>
+<p><%= setting_select :text_formatting, Redmine::WikiFormatting.format_names.collect{|name| [name, name.to_s]}, :blank => :label_none %></p>
-<p><label><%= l(:setting_wiki_compression) %></label>
-<%= select_tag 'settings[wiki_compression]', options_for_select( [[l(:label_none), 0], ["gzip", "gzip"]], Setting.wiki_compression) %></p>
+<p><%= setting_select :wiki_compression, [['Gzip', 'gzip']], :blank => :label_none %></p>
-<p><label><%= l(:setting_feeds_limit) %></label>
-<%= text_field_tag 'settings[feeds_limit]', Setting.feeds_limit, :size => 6 %></p>
+<p><%= setting_text_field :feeds_limit, :size => 6 %></p>
-<p><label><%= l(:setting_file_max_size_displayed) %></label>
-<%= text_field_tag 'settings[file_max_size_displayed]', Setting.file_max_size_displayed, :size => 6 %> KB</p>
+<p><%= setting_text_field :file_max_size_displayed, :size => 6 %> KB</p>
-<p><label><%= l(:setting_diff_max_lines_displayed) %></label>
-<%= text_field_tag 'settings[diff_max_lines_displayed]', Setting.diff_max_lines_displayed, :size => 6 %></p>
+<p><%= setting_text_field :diff_max_lines_displayed, :size => 6 %></p>
</div>
<%= submit_tag l(:button_save) %>
<% form_tag({:action => 'edit', :tab => 'issues'}) do %>
<div class="box tabular settings">
-<p><label><%= l(:setting_cross_project_issue_relations) %></label>
-<%= hidden_field_tag 'settings[cross_project_issue_relations]', 0 %>
-<%= check_box_tag 'settings[cross_project_issue_relations]', 1, Setting.cross_project_issue_relations? %>
-</p>
+<p><%= setting_check_box :cross_project_issue_relations %></p>
-<p><label><%= l(:setting_display_subprojects_issues) %></label>
-<%= hidden_field_tag 'settings[display_subprojects_issues]', 0 %>
-<%= check_box_tag 'settings[display_subprojects_issues]', 1, Setting.display_subprojects_issues? %>
-</p>
+<p><%= setting_check_box :display_subprojects_issues %></p>
-<p><label><%= l(:setting_issue_done_ratio) %></label>
-<%= select_tag 'settings[issue_done_ratio]',
- options_for_select(Issue::DONE_RATIO_OPTIONS.collect {|i| [l("setting_issue_done_ratio_#{i}"), i]}, Setting.issue_done_ratio) %></p>
+<p><%= setting_select :issue_done_ratio, Issue::DONE_RATIO_OPTIONS.collect {|i| [l("setting_issue_done_ratio_#{i}"), i]} %></p>
-<p><label><%= l(:setting_issues_export_limit) %></label>
-<%= text_field_tag 'settings[issues_export_limit]', Setting.issues_export_limit, :size => 6 %></p>
+<p><%= setting_text_field :issues_export_limit, :size => 6 %></p>
</div>
<fieldset class="box settings"><legend><%= l(:setting_issue_list_default_columns) %></legend>
-<%= hidden_field_tag 'settings[issue_list_default_columns][]', '' %>
-<% Query.new.available_columns.each do |column| %>
- <label><%= check_box_tag 'settings[issue_list_default_columns][]', column.name, Setting.issue_list_default_columns.include?(column.name.to_s) %>
- <%= column.caption %></label><br />
-<% end %>
+<%= setting_multiselect(:issue_list_default_columns,
+ Query.new.available_columns.collect {|c| [c.caption, c.name.to_s]}, :label => false) %>
</fieldset>
<%= submit_tag l(:button_save) %>
<% form_tag({:action => 'edit', :tab => 'mail_handler'}) do %>
<div class="box tabular settings">
-<p><label><%= l(:setting_mail_handler_api_enabled) %></label>
-<%= hidden_field_tag 'settings[mail_handler_api_enabled]', 0 %>
-<%= check_box_tag 'settings[mail_handler_api_enabled]', 1, Setting.mail_handler_api_enabled?,
- :onclick => "if (this.checked) { Form.Element.enable('settings_mail_handler_api_key'); } else { Form.Element.disable('settings_mail_handler_api_key'); }" %>
-</p>
+<p><%= setting_check_box :mail_handler_api_enabled,
+ :onclick => "if (this.checked) { Form.Element.enable('settings_mail_handler_api_key'); } else { Form.Element.disable('settings_mail_handler_api_key'); }"%></p>
-<p><label><%= l(:setting_mail_handler_api_key) %></label>
-<%= text_field_tag 'settings[mail_handler_api_key]', Setting.mail_handler_api_key,
- :size => 30,
- :id => 'settings_mail_handler_api_key',
- :disabled => !Setting.mail_handler_api_enabled? %>
-<%= link_to_function l(:label_generate_key), "if ($('settings_mail_handler_api_key').disabled == false) { $('settings_mail_handler_api_key').value = randomKey(20) }" %></p>
+<p><%= setting_text_field :mail_handler_api_key, :size => 30,
+ :id => 'settings_mail_handler_api_key',
+ :disabled => !Setting.mail_handler_api_enabled? %>
+ <%= link_to_function l(:label_generate_key), "if ($('settings_mail_handler_api_key').disabled == false) { $('settings_mail_handler_api_key').value = randomKey(20) }" %>
+</p>
</div>
<%= submit_tag l(:button_save) %>
<% form_tag({:action => 'edit', :tab => 'notifications'}) do %>
<div class="box tabular settings">
-<p><label><%= l(:setting_mail_from) %></label>
-<%= text_field_tag 'settings[mail_from]', Setting.mail_from, :size => 60 %></p>
-
-<p><label><%= l(:setting_bcc_recipients) %></label>
-<%= hidden_field_tag 'settings[bcc_recipients]', 0 %>
-<%= check_box_tag 'settings[bcc_recipients]', 1, Setting.bcc_recipients? %>
-</p>
-
-<p><label><%= l(:setting_plain_text_mail) %></label>
-<%= hidden_field_tag 'settings[plain_text_mail]', 0 %>
-<%= check_box_tag 'settings[plain_text_mail]', 1, Setting.plain_text_mail? %>
-</p>
+<p><%= setting_text_field :mail_from, :size => 60 %></p>
+
+<p><%= setting_check_box :bcc_recipients %></p>
+
+<p><%= setting_check_box :plain_text_mail %></p>
</div>
-<fieldset class="box" id="notified_events"><legend><%=l(:text_select_mail_notifications)%></legend>
-<% @notifiables.each do |notifiable| %>
- <label><%= check_box_tag 'settings[notified_events][]', notifiable, Setting.notified_events.include?(notifiable) %>
- <%= l_or_humanize(notifiable, :prefix => 'label_') %></label><br />
-<% end %>
-<%= hidden_field_tag 'settings[notified_events][]', '' %>
-<p><%= check_all_links('notified_events') %></p>
+<fieldset class="box settings" id="notified_events"><legend><%=l(:text_select_mail_notifications)%></legend>
+ <%= setting_multiselect(:notified_events,
+ @notifiables.collect {|notifiable| [l_or_humanize(notifiable, :prefix => 'label_'), notifiable]}, :label => false) %>
+
+ <p><%= check_all_links('notified_events') %></p>
</fieldset>
<fieldset class="box"><legend><%= l(:setting_emails_footer) %></legend>
-<%= text_area_tag 'settings[emails_footer]', Setting.emails_footer, :class => 'wiki-edit', :rows => 5 %>
+<%= setting_text_area :emails_footer, :label => false, :class => 'wiki-edit', :rows => 5 %>
</fieldset>
<div style="float:right;">
<% form_tag({:action => 'edit', :tab => 'projects'}) do %>
<div class="box tabular settings">
-<p><label><%= l(:setting_default_projects_public) %></label>
-<%= hidden_field_tag 'settings[default_projects_public]', 0 %>
-<%= check_box_tag 'settings[default_projects_public]', 1, Setting.default_projects_public? %>
-</p>
+<p><%= setting_check_box :default_projects_public %></p>
-<p><label><%= l(:setting_default_projects_modules) %></label>
-<%= hidden_field_tag 'settings[default_projects_modules][]', '' %>
-<% Redmine::AccessControl.available_project_modules.each do |m| %>
- <label class="block">
- <%= check_box_tag 'settings[default_projects_modules][]', m, Setting.default_projects_modules.include?(m.to_s) %>
- <%= l_or_humanize(m, :prefix => "project_module_") %>
- </label>
-<% end %>
-</p>
+<p><%= setting_multiselect(:default_projects_modules,
+ Redmine::AccessControl.available_project_modules.collect {|m| [l_or_humanize(m, :prefix => "project_module_"), m.to_s]}) %></p>
-<p><label><%= l(:setting_sequential_project_identifiers) %></label>
-<%= hidden_field_tag 'settings[sequential_project_identifiers]', 0 %>
-<%= check_box_tag 'settings[sequential_project_identifiers]', 1, Setting.sequential_project_identifiers? %>
-</p>
+<p><%= setting_check_box :sequential_project_identifiers %></p>
-<p><label><%= l(:setting_new_project_user_role_id) %></label>
-<%= select_tag('settings[new_project_user_role_id]', options_for_select([["--- #{l(:actionview_instancetag_blank_option)} ---", '']] + Role.find_all_givable.collect {|r| [r.name, r.id]}, Setting.new_project_user_role_id.to_i)) %></p>
+<p><%= setting_select :new_project_user_role_id,
+ Role.find_all_givable.collect {|r| [r.name, r.id.to_s]},
+ :blank => "--- #{l(:actionview_instancetag_blank_option)} ---" %></p>
</div>
<%= submit_tag l(:button_save) %>
<% form_tag({:action => 'edit', :tab => 'repositories'}) do %>
<div class="box tabular settings">
-<p><label><%= l(:setting_autofetch_changesets) %></label>
-<%= hidden_field_tag 'settings[autofetch_changesets]', 0 %>
-<%= check_box_tag 'settings[autofetch_changesets]', 1, Setting.autofetch_changesets? %>
-</p>
-
-<p><label><%= l(:setting_sys_api_enabled) %></label>
-<%= hidden_field_tag 'settings[sys_api_enabled]', 0 %>
-<%= check_box_tag 'settings[sys_api_enabled]', 1, Setting.sys_api_enabled? %>
-</p>
-
-<p><label><%= l(:setting_enabled_scm) %></label>
-<% REDMINE_SUPPORTED_SCM.each do |scm| -%>
-<%= check_box_tag 'settings[enabled_scm][]', scm, Setting.enabled_scm.include?(scm) %> <%= scm %>
-<% end -%>
-<%= hidden_field_tag 'settings[enabled_scm][]', '' %>
-</p>
-
-<p><label><%= l(:setting_repositories_encodings) %></label>
-<%= text_field_tag 'settings[repositories_encodings]', Setting.repositories_encodings, :size => 60 %><br /><em><%= l(:text_comma_separated) %></em></p>
-
-<p><label><%= l(:setting_commit_logs_encoding) %></label>
-<%= select_tag 'settings[commit_logs_encoding]', options_for_select(Setting::ENCODINGS, Setting.commit_logs_encoding) %></p>
-
-<p><label><%= l(:setting_repository_log_display_limit) %></label>
-<%= text_field_tag 'settings[repository_log_display_limit]', Setting.repository_log_display_limit, :size => 6 %></p>
+<p><%= setting_check_box :autofetch_changesets %></p>
+
+<p><%= setting_check_box :sys_api_enabled %></p>
+
+<p><%= setting_multiselect(:enabled_scm, REDMINE_SUPPORTED_SCM) %></p>
+
+<p><%= setting_text_field :repositories_encodings, :size => 60 %><br />
+<em><%= l(:text_comma_separated) %></em></p>
+
+<p><%= setting_select :commit_logs_encoding, Setting::ENCODINGS %></p>
+
+<p><%= setting_text_field :repository_log_display_limit, :size => 6 %></p>
</div>
<fieldset class="box tabular settings"><legend><%= l(:text_issues_ref_in_commit_messages) %></legend>
-<p><label><%= l(:setting_commit_ref_keywords) %></label>
-<%= text_field_tag 'settings[commit_ref_keywords]', Setting.commit_ref_keywords, :size => 30 %><br /><em><%= l(:text_comma_separated) %></em></p>
+<p><%= setting_text_field :commit_ref_keywords, :size => 30 %><br />
+<em><%= l(:text_comma_separated) %></em></p>
-<p><label><%= l(:setting_commit_fix_keywords) %></label>
-<%= text_field_tag 'settings[commit_fix_keywords]', Setting.commit_fix_keywords, :size => 30 %>
- <%= l(:label_applied_status) %>: <%= select_tag 'settings[commit_fix_status_id]', options_for_select( [["", 0]] + IssueStatus.find(:all).collect{|status| [status.name, status.id.to_s]}, Setting.commit_fix_status_id) %>
- <%= l(:field_done_ratio) %>: <%= select_tag 'settings[commit_fix_done_ratio]', options_for_select( [[l(:label_no_change_option), '']] + ((0..10).to_a.collect {|r| ["#{r*10} %", "#{r*10}"] }), Setting.commit_fix_done_ratio) %>
+<p><%= setting_text_field :commit_fix_keywords, :size => 30 %>
+ <%= l(:label_applied_status) %>: <%= setting_select :commit_fix_status_id, [["", 0]] + IssueStatus.find(:all).collect{|status| [status.name, status.id.to_s]}, :label => false %>
+ <%= l(:field_done_ratio) %>: <%= setting_select :commit_fix_done_ratio, (0..10).to_a.collect {|r| ["#{r*10} %", "#{r*10}"] }, :blank => :label_no_change_option, :label => false %>
<br /><em><%= l(:text_comma_separated) %></em></p>
</fieldset>
.tabular.settings p{ padding-left: 300px; }
.tabular.settings label{ margin-left: -300px; width: 295px; }
+fieldset.settings label { display: block; }
+
.required {color: #bb0000;}
.summary {font-style: italic;}