Skip to content

Commit 384f783

Browse files
committed
Revert "Revert "Merge pull request #4 from ishikawa999/develop""
This reverts commit 8cb39b6.
1 parent 8cb39b6 commit 384f783

File tree

11 files changed

+120
-22
lines changed

11 files changed

+120
-22
lines changed

app/controllers/custom_message_settings_controller.rb

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
class CustomMessageSettingsController < ApplicationController
22
layout 'admin'
33
before_action :require_admin, :set_custom_message_setting, :set_lang
4-
require_sudo_mode :edit, :update
4+
require_sudo_mode :edit, :update, :toggle_enabled
55

66
def edit
77
end
88

99
def update
10-
original_custom_messages = @setting.custom_messages
11-
languages = (original_custom_messages.try(:keys) ? original_custom_messages.keys.map(&:to_s) : [])
10+
languages = @setting.using_languages
1211

1312
if setting_params.key?(:custom_messages) || params[:tab] == 'normal'
1413
@setting.update_with_custom_messages(setting_params[:custom_messages].try(:to_unsafe_h).try(:to_hash) || {}, @lang)
@@ -18,8 +17,7 @@ def update
1817

1918
if @setting.errors.blank?
2019
flash[:notice] = l(:notice_successful_update)
21-
new_custom_messages = @setting.custom_messages
22-
languages += new_custom_messages.keys.map(&:to_s) if new_custom_messages.try(:keys)
20+
languages += @setting.using_languages
2321
CustomMessageSetting.reload_translations!(languages)
2422

2523
redirect_to edit_custom_message_settings_path(tab: params[:tab], lang: @lang)
@@ -28,6 +26,16 @@ def update
2826
end
2927
end
3028

29+
def toggle_enabled
30+
if @setting.toggle_enabled!
31+
flash[:notice] =
32+
@setting.enabled? ? l(:notice_enabled_customize) : l(:notice_disabled_customize)
33+
redirect_to edit_custom_message_settings_path
34+
else
35+
render :edit
36+
end
37+
end
38+
3139
private
3240
def set_custom_message_setting
3341
@setting = CustomMessageSetting.find_or_default

app/models/custom_message_setting.rb

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ def self.find_or_default
66
super('plugin_redmine_message_customize')
77
end
88

9+
def enabled?
10+
!(self.value[:enabled] == 'false')
11+
end
12+
913
def custom_messages(lang=nil)
1014
messages = self.value[:custom_messages] || self.value['custom_messages']
1115
if lang.present?
@@ -57,11 +61,35 @@ def update_with_custom_messages_yaml(yaml)
5761
self.save
5862
end
5963

64+
def toggle_enabled!
65+
customize_files = Dir.glob(Rails.root.join('plugins', 'redmine_message_customize', 'config', 'locales', 'custom_messages', '*.rb'))
66+
self.value = self.value.deep_merge({enabled: (!self.enabled?).to_s})
67+
68+
if result = self.save
69+
if self.enabled?
70+
I18n.load_path += customize_files
71+
else
72+
I18n.load_path -= customize_files
73+
end
74+
self.class.reload_translations!(self.using_languages)
75+
end
76+
result
77+
end
78+
79+
def using_languages
80+
messages = self.custom_messages
81+
if messages.is_a?(Hash)
82+
messages.keys.map(&:to_s)
83+
else
84+
[User.current.language]
85+
end
86+
end
87+
6088
def self.available_messages(lang)
61-
messages = I18n.backend.translations[self.find_language(lang).to_s.to_sym]
89+
messages = I18n.backend.send(:translations)[self.find_language(lang).to_s.to_sym]
6290
if messages.nil?
6391
CustomMessageSetting.reload_translations!([lang])
64-
messages = I18n.backend.translations[lang.to_s.to_sym] || {}
92+
messages = I18n.backend.send(:translations)[lang.to_s.to_sym] || {}
6593
end
6694
self.flatten_hash(messages)
6795
end
@@ -92,7 +120,7 @@ def self.nested_hash(hash=nil)
92120
end
93121

94122
def self.reload_translations!(languages)
95-
paths = ::I18n.load_path.select {|path| self.find_language(languages).include?(File.basename(path, '.*').to_s)}
123+
paths = I18n.load_path.select {|path| self.find_language(languages).include?(File.basename(path, '.*').to_s)}
96124
I18n.backend.load_translations(paths)
97125
end
98126

app/views/custom_message_settings/edit.html.erb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,8 @@
66
<% if @setting.errors.any? %>
77
<%= error_messages_for(@setting) %>
88
<% end %>
9+
<p class='toggle-enable'>
10+
<span class='icon icon-settings'></span>
11+
<%= link_to (@setting.enabled? ? l(:label_disable_customize) : l(:label_enable_customize)), toggle_enabled_custom_message_settings_path, method: :post %>
12+
</p>
913
<%= render_tabs (@setting.errors.any? ? [] : [{name: 'normal', partial: 'normal_tab', label: 'label_normal_tab'}]) + [{name: 'yaml', partial: 'yaml_tab', label: 'label_yaml_tab'}] %>

assets/stylesheets/custom_messages.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,8 @@
3434
}
3535
.select2-container--default .select2-results__option[aria-disabled=true] span {
3636
color: white;
37+
}
38+
39+
p.toggle-enable {
40+
text-align: right;
3741
}

config/locales/en.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,9 @@ en:
1010
error_unavailable_keys: The keys not present in Redmine are used.
1111
error_unavailable_languages: The languages not present in Redmine are used.
1212
error_invalid_yaml_format: The format of yaml is invalid.
13+
notice_enabled_customize: Successful in enable messages customization.
14+
notice_disabled_customize: Successful in disable messages customization.
1315
label_normal_tab: Normal mode
14-
label_yaml_tab: YAML mode
16+
label_yaml_tab: YAML mode
17+
label_enable_customize: Enable customize
18+
label_disable_customize: Disable customize

config/locales/ja.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,9 @@ ja:
1010
error_unavailable_keys: Redmineに存在しないキーが利用されています。
1111
error_unavailable_languages: Redmineで利用できない言語が利用されています。
1212
error_invalid_yaml_format: YAMLの形式が正しくありません。
13+
notice_enabled_customize: メッセージのカスタマイズを有効に変更しました。
14+
notice_disabled_customize: メッセージのカスタマイズを無効に変更しました。
1315
label_normal_tab: 通常モード
14-
label_yaml_tab: YAMLモード
16+
label_yaml_tab: YAMLモード
17+
label_enable_customize: カスタマイズを有効にする
18+
label_disable_customize: カスタマイズを無効にする

config/routes.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,6 @@
22
resources :custom_message_settings, only: [] do
33
get :edit, on: :collection
44
post :update, on: :collection
5+
post :toggle_enabled, on: :collection
56
end
67
end

init.rb

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77
requires_redmine version_or_higher: '3.2'
88
end
99

10-
Rails.application.config.i18n.load_path += Dir.glob(File.join(p.directory, 'config', 'locales', 'custom_messages', '*.rb'))
11-
12-
class Redmine::I18n::Backend
13-
public :translations
10+
if CustomMessageSetting.find_or_default.enabled?
11+
Rails.application.config.i18n.load_path += Dir.glob(File.join(p.directory, 'config', 'locales', 'custom_messages', '*.rb'))
1412
end
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
one:
22
id: 1
33
name: plugin_redmine_message_customize
4-
value: { custom_messages: { en: { label_home: 'Home1' }, ja: { label_home: 'Home2' }}}
4+
value: {
5+
custom_messages: { en: { label_home: 'Home1' }, ja: { label_home: 'Home2' }},
6+
enabled: 'true'
7+
}

test/functional/custom_message_settings_controller_test.rb

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ class CustomMessageSettingsControllerTest < Redmine::ControllerTest
77
def setup
88
@request.session[:user_id] = 1 # admin
99
CustomMessageSetting.reload_translations!('en')
10+
I18n.load_path = (I18n.load_path + Dir.glob(Rails.root.join('plugins', 'redmine_message_customize', 'config', 'locales', 'custom_messages', '*.rb'))).uniq
1011
end
1112

1213
# custom_message_settings/edit
@@ -23,8 +24,7 @@ def test_edit
2324
def test_edit_except_admin_user
2425
@request.session[:user_id] = 2
2526
get :edit
26-
assert_response 403
27-
assert_select 'p#errorExplanation', text: 'You are not authorized to access this page.'
27+
assert_redirected_to (/#{signin_path}/)
2828
end
2929

3030
def test_update_with_custom_messages
@@ -52,11 +52,25 @@ def test_update_with_invalid_params
5252
assert_select 'h2', :text => l(:label_custom_messages)
5353
assert_select 'div#errorExplanation'
5454
end
55-
def test_edit_except_admin_user
55+
def test_update_except_admin_user
5656
@request.session[:user_id] = 2
5757
get :update, params: { settings: {'custom_messages'=>{'label_home' => 'Home3'}}, lang: 'en', tab: 'normal' }
5858

59-
assert_response 403
60-
assert_select 'p#errorExplanation', text: 'You are not authorized to access this page.'
59+
assert_redirected_to (/#{signin_path}/)
60+
end
61+
62+
def test_toggle_enabled
63+
patch :toggle_enabled
64+
assert_redirected_to edit_custom_message_settings_path
65+
assert_equal l(:notice_disabled_customize), flash[:notice]
66+
67+
patch :toggle_enabled
68+
assert_equal l(:notice_enabled_customize), flash[:notice]
69+
end
70+
def test_toggle_enabled_except_admin_user
71+
@request.session[:user_id] = 2
72+
patch :toggle_enabled
73+
74+
assert_redirected_to (/#{signin_path}/)
6175
end
6276
end

0 commit comments

Comments
 (0)