diff --git a/README.md b/README.md
index 323db04..f920a34 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@ This plugin allows Redmine users to select themes in their account settings. The
## Compatibility
-This plugin version is compatible only with Redmine 2.1.x and later.
+This plugin version is compatible only with Redmine 4.x and later.
## Installation
diff --git a/app/views/users/_user_specific_theme.html.erb b/app/views/users/_user_specific_theme.html.erb
index 258951d..fd29647 100644
--- a/app/views/users/_user_specific_theme.html.erb
+++ b/app/views/users/_user_specific_theme.html.erb
@@ -1,4 +1,6 @@
-<%= labelled_fields_for :pref, @user.pref do |pref_fields| %>
-
<%= pref_fields.select :ui_theme, Redmine::Themes.themes.collect { |t| [t.name, t.id] },
- { include_blank: true } %>
-<% end %>
+
+ <%= label_tag :user_preference_attributes_ui_theme, l(:field_ui_theme) %>
+ <%= select_tag 'pref[ui_theme]',
+ options_for_select(Redmine::Themes.themes.map { |theme| [theme.name, theme.id] },
+ @pref[:ui_theme]), include_blank: true %>
+
\ No newline at end of file
diff --git a/init.rb b/init.rb
index cfd3adc..c1efaa7 100644
--- a/init.rb
+++ b/init.rb
@@ -4,10 +4,15 @@
name 'Redmine User-Specific Theme Plugin'
description 'This plugin allows users to set Redmine themes in the account settings.'
author 'Restream'
- version '1.2.0'
+ version '1.3.0'
url 'https://github.com/Restream/redmine_user_specific_theme'
- requires_redmine :version_or_higher => '2.1'
+ requires_redmine :version_or_higher => '4.0.0'
+
+
end
-require 'redmine_user_specific_theme'
+require_relative 'lib/redmine_user_specific_theme/hooks/view_hooks'
+require_relative 'lib/redmine_user_specific_theme/patches/user_preference_patch'
+require_relative 'lib/redmine_user_specific_theme/patches/application_helper_patch'
+require_relative 'lib/redmine_user_specific_theme'
diff --git a/lib/redmine_user_specific_theme.rb b/lib/redmine_user_specific_theme.rb
index dddb229..87da07b 100644
--- a/lib/redmine_user_specific_theme.rb
+++ b/lib/redmine_user_specific_theme.rb
@@ -1,18 +1,10 @@
module RedmineUserSpecificTheme
end
-require_dependency 'redmine_user_specific_theme/hooks/view_hooks'
-require_dependency 'redmine_user_specific_theme/patches/user_preference_patch'
-require_dependency 'redmine_user_specific_theme/patches/application_helper_patch'
-ActionDispatch::Callbacks.to_prepare do
- unless UserPreference.included_modules.include?(RedmineUserSpecificTheme::Patches::UserPreferencePatch)
- UserPreference.send :prepend, RedmineUserSpecificTheme::Patches::UserPreferencePatch
- end
+MyController.prepend RedmineUserSpecificTheme::Patches::UserPreferencePatch unless MyController.included_modules.include?(RedmineUserSpecificTheme::Patches::UserPreferencePatch)
- unless ApplicationHelper.included_modules.include?(RedmineUserSpecificTheme::Patches::ApplicationHelperPatch)
- ApplicationHelper.send :include, RedmineUserSpecificTheme::Patches::ApplicationHelperPatch
- end
-
-end
+RedmineApp::Application.config.after_initialize do
+ ApplicationHelper.prepend(RedmineUserSpecificTheme::Patches::ApplicationHelperPatch)
+end
\ No newline at end of file
diff --git a/lib/redmine_user_specific_theme/patches/application_helper_patch.rb b/lib/redmine_user_specific_theme/patches/application_helper_patch.rb
index 8df0eb9..5d42d72 100644
--- a/lib/redmine_user_specific_theme/patches/application_helper_patch.rb
+++ b/lib/redmine_user_specific_theme/patches/application_helper_patch.rb
@@ -4,22 +4,18 @@ module RedmineUserSpecificTheme::Patches
module ApplicationHelperPatch
extend ActiveSupport::Concern
- included do
- alias_method_chain :current_theme, :user_specific
- alias_method_chain :body_css_classes, :user_specific
- end
-
- def current_theme_with_user_specific
- user_theme = Redmine::Themes.theme(User.current.pref.ui_theme)
+ def current_theme
+ user_theme = super
+ user_theme = Redmine::Themes.theme(User.current.pref.others[:ui_theme])
user_theme || Redmine::Themes.theme(Setting.ui_theme)
end
- def body_css_classes_with_user_specific
- css_classes = body_css_classes_without_user_specific
- user_theme = Redmine::Themes.theme(User.current.pref.ui_theme)
+ def body_css_classes
+ css_classes = super
+ user_theme = Redmine::Themes.theme(User.current.pref.others[:ui_theme])
user_theme ?
- css_classes.gsub(/theme-\S+/, "theme-#{user_theme.name}") :
- css_classes
+ css_classes.gsub(/theme-\S+/, "theme-#{user_theme.name}") :
+ css_classes
end
end
diff --git a/lib/redmine_user_specific_theme/patches/user_preference_patch.rb b/lib/redmine_user_specific_theme/patches/user_preference_patch.rb
index 6c2cd1c..4cec186 100644
--- a/lib/redmine_user_specific_theme/patches/user_preference_patch.rb
+++ b/lib/redmine_user_specific_theme/patches/user_preference_patch.rb
@@ -1,27 +1,17 @@
-require_dependency 'user_preference'
+require_dependency 'my_controller'
module RedmineUserSpecificTheme
module Patches
module UserPreferencePatch
-
- def self.prepended(base)
- base.class_eval do
- if defined? safe_attributes
- safe_attributes :ui_theme
- end
+ def account
+ Rails.logger.info "Account with theme patch applied"
+ if request.put? && params[:pref]
+ theme = params[:pref][:ui_theme]
+ User.current.pref.others[:ui_theme] = theme if theme
+ User.current.pref.save
+ Rails.logger.info "Saved theme: #{theme}"
end
- end
-
- def ui_theme
- self[:ui_theme]
- end
-
- def ui_theme=(val)
- self[:ui_theme] = val
- end
-
- def ui_theme?
- ui_theme.blank?
+ super
end
end