123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227 |
- # frozen_string_literal: true
-
- # Redmine - project management software
- # Copyright (C) 2006-2021 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
- def administration_settings_tabs
- tabs =
- [
- {:name => 'general', :partial => 'settings/general', :label => :label_general},
- {:name => 'display', :partial => 'settings/display', :label => :label_display},
- {:name => 'authentication', :partial => 'settings/authentication',
- :label => :label_authentication},
- {:name => 'api', :partial => 'settings/api', :label => :label_api},
- {:name => 'projects', :partial => 'settings/projects', :label => :label_project_plural},
- {:name => 'users', :partial => 'settings/users', :label => :label_user_plural},
- {:name => 'issues', :partial => 'settings/issues', :label => :label_issue_tracking},
- {:name => 'timelog', :partial => 'settings/timelog', :label => :label_time_tracking},
- {:name => 'attachments', :partial => 'settings/attachments',
- :label => :label_attachment_plural},
- {:name => 'notifications', :partial => 'settings/notifications',
- :label => :field_mail_notification},
- {:name => 'mail_handler', :partial => 'settings/mail_handler',
- :label => :label_incoming_emails},
- {:name => 'repositories', :partial => 'settings/repositories',
- :label => :label_repository_plural}
- ]
- end
-
- def render_settings_error(errors)
- return if errors.blank?
-
- s = ''.html_safe
- errors.each do |name, message|
- s << content_tag('li', content_tag('b', l("setting_#{name}")) + " " + message)
- end
- content_tag('div', content_tag('ul', s), :id => 'errorExplanation')
- end
-
- def setting_value(setting)
- value = nil
- if params[:settings]
- value = params[:settings][setting]
- end
- value || Setting.send(setting)
- 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).html_safe +
- select_tag("settings[#{setting}]",
- options_for_select(choices, setting_value(setting).to_s),
- options).html_safe
- end
-
- def setting_multiselect(setting, choices, options={})
- setting_values = setting_value(setting)
- setting_values = [] unless setting_values.is_a?(Array)
-
- content_tag("label", l(options[:label] || "setting_#{setting}")) +
- hidden_field_tag("settings[#{setting}][]", '').html_safe +
- choices.collect do |choice|
- text, value = (choice.is_a?(Array) ? choice : [choice, choice])
- content_tag(
- 'label',
- check_box_tag(
- "settings[#{setting}][]",
- value,
- setting_values.include?(value),
- :id => nil
- ) + text.to_s,
- :class => (options[:inline] ? 'inline' : 'block')
- )
- end.join.html_safe
- end
-
- def setting_text_field(setting, options={})
- setting_label(setting, options).html_safe +
- text_field_tag("settings[#{setting}]", setting_value(setting), options).html_safe
- end
-
- def setting_text_area(setting, options={})
- setting_label(setting, options).html_safe +
- text_area_tag("settings[#{setting}]", setting_value(setting), options).html_safe
- end
-
- def setting_check_box(setting, options={})
- setting_label(setting, options).html_safe +
- hidden_field_tag("settings[#{setting}]", 0, :id => nil).html_safe +
- check_box_tag("settings[#{setting}]", 1, setting_value(setting).to_s != '0', options).html_safe
- end
-
- def setting_label(setting, options={})
- label = options.delete(:label)
- if label == false
- ''
- else
- text = label.is_a?(String) ? label : l(label || "setting_#{setting}")
- label_tag("settings_#{setting}", text, options[:label_options])
- end
- end
-
- # Renders a notification field for a Redmine::Notifiable option
- def notification_field(notifiable)
- tag_data =
- if notifiable.parent.present?
- {:parent_notifiable => notifiable.parent}
- else
- {:disables => "input[data-parent-notifiable=#{notifiable.name}]"}
- end
- tag = check_box_tag('settings[notified_events][]',
- notifiable.name,
- setting_value('notified_events').include?(notifiable.name),
- :id => nil,
- :data => tag_data)
- text = l_or_humanize(notifiable.name, :prefix => 'label_')
- options = {}
- if notifiable.parent.present?
- options[:class] = "parent"
- end
- content_tag(:label, tag + text, options)
- end
-
- def session_lifetime_options
- options = [[l(:label_disabled), 0]]
- options += [4, 8, 12].map do |hours|
- [l('datetime.distance_in_words.x_hours', :count => hours), (hours * 60).to_s]
- end
- options += [1, 7, 30, 60, 365].map do |days|
- [l('datetime.distance_in_words.x_days', :count => days), (days * 24 * 60).to_s]
- end
- options
- end
-
- def session_timeout_options
- options = [[l(:label_disabled), 0]]
- options += [1, 2, 4, 8, 12, 24, 48].map do |hours|
- [l('datetime.distance_in_words.x_hours', :count => hours), (hours * 60).to_s]
- end
- options
- end
-
- def link_copied_issue_options
- options = [
- [:general_text_Yes, 'yes'],
- [:general_text_No, 'no'],
- [:label_ask, 'ask']
- ]
-
- options.map {|label, value| [l(label), value.to_s]}
- end
-
- def cross_project_subtasks_options
- options = [
- [:label_disabled, ''],
- [:label_cross_project_system, 'system'],
- [:label_cross_project_tree, 'tree'],
- [:label_cross_project_hierarchy, 'hierarchy'],
- [:label_cross_project_descendants, 'descendants']
- ]
-
- options.map {|label, value| [l(label), value.to_s]}
- end
-
- def parent_issue_dates_options
- options = [
- [:label_parent_task_attributes_derived, 'derived'],
- [:label_parent_task_attributes_independent, 'independent']
- ]
-
- options.map {|label, value| [l(label), value.to_s]}
- end
-
- def parent_issue_priority_options
- options = [
- [:label_parent_task_attributes_derived, 'derived'],
- [:label_parent_task_attributes_independent, 'independent']
- ]
-
- options.map {|label, value| [l(label), value.to_s]}
- end
-
- def parent_issue_done_ratio_options
- options = [
- [:label_parent_task_attributes_derived, 'derived'],
- [:label_parent_task_attributes_independent, 'independent']
- ]
-
- options.map {|label, value| [l(label), value.to_s]}
- end
-
- # Returns the options for the date_format setting
- def date_format_setting_options(locale)
- Setting::DATE_FORMATS.map do |f|
- today = ::I18n.l(User.current.today, :locale => locale, :format => f)
- format = f.delete('%').gsub(/[dmY]/) do
- {'d' => 'dd', 'm' => 'mm', 'Y' => 'yyyy'}[$&]
- end
- ["#{today} (#{format})", f]
- end
- end
-
- def gravatar_default_setting_options
- [['Identicons', 'identicon'],
- ['Monster ids', 'monsterid'],
- ['Mystery man', 'mm'],
- ['Retro', 'retro'],
- ['Robohash', 'robohash'],
- ['Wavatars', 'wavatar']]
- end
- end
|