diff --git a/app/overrides/context_menus/issues.rb b/app/overrides/context_menus/issues.rb
new file mode 100644
index 0000000..522bada
--- /dev/null
+++ b/app/overrides/context_menus/issues.rb
@@ -0,0 +1,4 @@
+Deface::Override.new :virtual_path => "context_menus/issues",
+ :name => "replace-priority-context-menu",
+ :replace => "erb[silent]:contains('@priorities.present?')",
+ :partial => "context_menus/itil_priority"
diff --git a/app/views/context_menus/_itil_priority.html.erb b/app/views/context_menus/_itil_priority.html.erb
new file mode 100644
index 0000000..8482195
--- /dev/null
+++ b/app/views/context_menus/_itil_priority.html.erb
@@ -0,0 +1,25 @@
+ <% if @safe_attributes.include?('priority_id') && @priorities.present? -%>
+
+
+
+ <% RedmineItilPriority.urgency_options.each do |i| -%>
+ - <%= context_menu_link i[0], bulk_update_issues_path(:ids => @issue_ids, :issue => {'urgency_id' => i[1]}, :back_url => @back), :method => :post,
+ :selected => (@issue && i[1] == @issue.urgency_id), :disabled => (!@can[:edit] || @issues.any?(&:priority_derived?)) %>
+ <% end -%>
+
+
+ <% end %>
+
+ <% if @safe_attributes.include?('priority_id') && @priorities.present? -%>
+
+
+
+ <% RedmineItilPriority.impact_options.each do |i| -%>
+ - <%= context_menu_link i[0], bulk_update_issues_path(:ids => @issue_ids, :issue => {'impact_id' => i[1]}, :back_url => @back), :method => :post,
+ :selected => (@issue && i[1] == @issue.impact_id), :disabled => (!@can[:edit] || @issues.any?(&:priority_derived?)) %>
+ <% end -%>
+
+
+ <% end %>
+
+ <% if false -%>
\ No newline at end of file
diff --git a/app/views/issues/_itil_priority.html.erb b/app/views/issues/_itil_priority.html.erb
index cdf21c2..a9392dd 100644
--- a/app/views/issues/_itil_priority.html.erb
+++ b/app/views/issues/_itil_priority.html.erb
@@ -6,19 +6,6 @@
.real-priority { box-sizing:border-box; width:100%; position:absolute; top:0; left:230px; height:100%; padding-top:1.4em; }
.real-priority > .priority { position:absolute; top:1.4em; left:25px; font-size:110%; }
-
<% (1..3).each do |i| %>
<% (1..3).each do |u| %>
<% key = "priority_i#{i}_u#{u}" %>
@@ -42,3 +29,17 @@ $(function() {
+
diff --git a/db/migrate/001_add_impact_and_urgency_to_issues.rb b/db/migrate/001_add_impact_and_urgency_to_issues.rb
index a83bdbc..94b2901 100644
--- a/db/migrate/001_add_impact_and_urgency_to_issues.rb
+++ b/db/migrate/001_add_impact_and_urgency_to_issues.rb
@@ -1,4 +1,4 @@
-class AddImpactAndUrgencyToIssues < ActiveRecord::Migration
+class AddImpactAndUrgencyToIssues < ActiveRecord::Migration[4.2]
def change
add_column :issues, :impact_id, :integer
add_column :issues, :urgency_id, :integer
diff --git a/init.rb b/init.rb
index baa32c0..920dbd7 100644
--- a/init.rb
+++ b/init.rb
@@ -17,13 +17,12 @@
end
# Extra classes
-require_dependency 'redmine_itil_priority'
-
-# Patch of core classes
-ActiveSupport::Reloader.to_prepare do
- require_dependency 'redmine_itil_priority/issue_patch'
+if Rails.configuration.respond_to?(:autoloader) && Rails.configuration.autoloader == :zeitwerk
+ Rails.autoloaders.each { |loader| loader.ignore(File.dirname(__FILE__) + '/lib') }
end
+require File.dirname(__FILE__) + '/lib/redmine_itil_priority'
+
# Little hack for using the "deface" gem in redmine:
# - redmine plugins are not railties nor engines, so deface overrides in app/overrides/ are not detected automatically
# - deface doesn"t support direct loading anymore ; it unloads everything at boot so that reload in dev works
diff --git a/lib/redmine_itil_priority/issue_patch.rb b/lib/redmine_itil_priority/issue_patch.rb
deleted file mode 100644
index 150d830..0000000
--- a/lib/redmine_itil_priority/issue_patch.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-require_dependency 'issue'
-
-class Issue
- safe_attributes 'impact_id'
- safe_attributes 'urgency_id'
-end
diff --git a/lib/redmine_itil_priority/patches/issue_patch.rb b/lib/redmine_itil_priority/patches/issue_patch.rb
new file mode 100644
index 0000000..36dcc65
--- /dev/null
+++ b/lib/redmine_itil_priority/patches/issue_patch.rb
@@ -0,0 +1,49 @@
+require_dependency 'issue'
+
+class Issue < ActiveRecord::Base
+ safe_attributes 'impact_id'
+ safe_attributes 'urgency_id'
+
+ def urgency_id=(pid)
+ unless self.impact_id.nil?
+ @settings = Setting['plugin_redmine_itil_priority'] if @settings.nil?
+ write_attribute(:priority_id, @settings["priority_i" + self.impact_id.to_s + "_u" + pid.to_s])
+ end
+ write_attribute(:urgency_id, pid)
+ end
+
+ def impact_id=(pid)
+ unless self.urgency_id.nil?
+ @settings = Setting['plugin_redmine_itil_priority'] if @settings.nil?
+ write_attribute(:priority_id, @settings["priority_i" + pid.to_s + "_u" + self.urgency_id.to_s])
+ end
+ write_attribute(:impact_id, pid)
+ end
+end
+
+module RedmineItilPriority
+ module Patches
+ module IssuePatch
+ def priority_id=(pid)
+ self.priority = nil
+ write_attribute(:priority_id, pid)
+ @settings = Setting['plugin_redmine_itil_priority'] if @settings.nil?
+ unless self.impact_id.nil? || self.urgency_id.nil?
+ priority = @settings["priority_i" + self.impact_id.to_s + "_u" + self.urgency_id.to_s]
+ end
+ if priority.nil? || pid != priority
+ for i in 1..3 do
+ for u in 1..3 do
+ if pid == @settings["priority_i" + i.to_s + "_u" + u.to_s]
+ write_attribute(:urgency_id, u)
+ write_attribute(:impact_id, i)
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+end
+
+Issue.prepend RedmineItilPriority::Patches::IssuePatch