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? -%> +
  • + <%= l(:field_urgency) %> + +
  • + <% end %> + + <% if @safe_attributes.include?('priority_id') && @priorities.present? -%> +
  • + <%= l(:field_impact) %> + +
  • + <% 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