Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions app/overrides/context_menus/issues.rb
Original file line number Diff line number Diff line change
@@ -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"
25 changes: 25 additions & 0 deletions app/views/context_menus/_itil_priority.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<% if @safe_attributes.include?('priority_id') && @priorities.present? -%>
<li class="folder">
<a href="#" class="submenu"><%= l(:field_urgency) %></a>
<ul>
<% RedmineItilPriority.urgency_options.each do |i| -%>
<li><%= 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?)) %></li>
<% end -%>
</ul>
</li>
<% end %>

<% if @safe_attributes.include?('priority_id') && @priorities.present? -%>
<li class="folder">
<a href="#" class="submenu"><%= l(:field_impact) %></a>
<ul>
<% RedmineItilPriority.impact_options.each do |i| -%>
<li><%= 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?)) %></li>
<% end -%>
</ul>
</li>
<% end %>

<% if false -%>
27 changes: 14 additions & 13 deletions app/views/issues/_itil_priority.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -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%; }
</style>
<script>
$(function() {
function recalculateItilPriority(impact, urgency) {
var priority_id = $("#priority_i"+impact+"_u"+urgency).html()
var $select = $("#issue_priority_id")
$select.val(priority_id)
$("#real-priority-display").html($select.find("option:selected").html())
}
$("#issue_urgency_id, #issue_impact_id").on("change", function() {
recalculateItilPriority($("#issue_impact_id").val(), $("#issue_urgency_id").val())
})
})
</script>
<% (1..3).each do |i| %>
<% (1..3).each do |u| %>
<% key = "priority_i#{i}_u#{u}" %>
Expand All @@ -42,3 +29,17 @@ $(function() {
</span>
</span>
</span>
<script>
$(function() {
function recalculateItilPriority(impact, urgency) {
var priority_id = $("#priority_i"+impact+"_u"+urgency).html()
var $select = $("#issue_priority_id")
$select.val(priority_id)
$("#real-priority-display").html($select.find("option:selected").html())
}
$("#issue_urgency_id, #issue_impact_id").on("change", function() {
recalculateItilPriority($("#issue_impact_id").val(), $("#issue_urgency_id").val())
})
recalculateItilPriority($("#issue_impact_id").val(), $("#issue_urgency_id").val())
})
</script>
2 changes: 1 addition & 1 deletion db/migrate/001_add_impact_and_urgency_to_issues.rb
Original file line number Diff line number Diff line change
@@ -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
Expand Down
9 changes: 4 additions & 5 deletions init.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
6 changes: 0 additions & 6 deletions lib/redmine_itil_priority/issue_patch.rb

This file was deleted.

49 changes: 49 additions & 0 deletions lib/redmine_itil_priority/patches/issue_patch.rb
Original file line number Diff line number Diff line change
@@ -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