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