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
Original file line number Diff line number Diff line change
@@ -1,70 +1,70 @@
<h3><%= l(:subtasks_inherited_fields_plugin_config_title) %></h3>

<p>
<p>
<label><%= l(:inherit_fixed_version) %></label>
<%= check_box_tag 'settings[inherit_fixed_version_id]', 1, @settings[:inherit_fixed_version_id] %>
</p>

<p>
<p>
<label><%= l(:inherit_assigned_to) %></label>
<%= check_box_tag 'settings[inherit_assigned_to_id]', 1, @settings[:inherit_assigned_to_id] %>
</p>

<p>
<p>
<label><%= l(:inherit_category) %></label>
<%= check_box_tag 'settings[inherit_category_id]', 1, @settings[:inherit_category_id] %>
</p>

<p>
<p>
<label><%= l(:inherit_priority) %></label>
<%= check_box_tag 'settings[inherit_priority_id]', 1, @settings[:inherit_priority_id] %>
</p>

<p>
<p>
<label><%= l(:inherit_status) %></label>
<%= check_box_tag 'settings[inherit_status_id]', 1, @settings[:inherit_status_id] %>
</p>

<p>
<p>
<label><%= l(:inherit_start_date) %></label>
<%= check_box_tag 'settings[inherit_start_date]', 1, @settings[:inherit_start_date] %>
</p>

<p>
<p>
<label><%= l(:inherit_due_date) %></label>
<%= check_box_tag 'settings[inherit_due_date]', 1, @settings[:inherit_due_date] %>
</p>

<p>
<p>
<label><%= l(:inherit_description) %></label>
<%= check_box_tag 'settings[inherit_description]', 1, @settings[:inherit_description] %>
</p>

<p>
<p>
<label><%= l(:inherit_is_private) %></label>
<%= check_box_tag 'settings[inherit_is_private]', 1, @settings[:inherit_is_private] %>
</p>

<% @settings[:inherit_custom_fields] ||= {} %>
<% IssueCustomField.all.each do |field| %>
<p>
<label><%= l(:inherit) + " " + field.name %></label>
<%= check_box_tag "settings[inherit_custom_fields][#{field.id}]", 1, @settings[:inherit_custom_fields][field.id.to_s] %>
</p>
<p>
<label><%= l(:inherit) + " " + field.name %></label>
<%= check_box_tag "settings[inherit_custom_fields][#{field.id}]", 1, @settings[:inherit_custom_fields][field.id.to_s] %>
</p>
<% end %>

<p>
<p>
<label><%= l(:inherit_parent_tracker) %></label>
<%= check_box_tag 'settings[inherit_tracker_id]', 1, @settings[:inherit_tracker_id] %>
</p>

<p>
<p>
<label id="settings_default_tracker_id_label"><%= l(:default_subtask_tracker) %></label>
<%= select_tag "settings[default_tracker_id]", options_for_select(Tracker.all.map {|t| [t.name, t.id]},@settings[:default_tracker_id]) %>
</p>



<% content_for :header_tags do %>
<%= javascript_include_tag :subtasks_inherited_fields, :plugin => 'redmine_subtasks_inherited_fields' %>
<%= javascript_include_tag :subtasks_inherited_fields, :plugin => 'redmine_subtasks_inherited_fields' %>
<% end %>
10 changes: 8 additions & 2 deletions init.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
version '0.0.3'
url 'http://www.edosoftfactory.com'
author_url 'mailto:[email protected]'

requires_redmine :version_or_higher => '2.0.0'

settings :default => {
Expand All @@ -23,5 +23,11 @@
}, :partial => 'subtasks_inherited_fields/subtasks_inherited_fields'

end

require 'issues_helper_patch'

require 'issues_update_hook'

Rails.application.config.to_prepare do
IssuesController.send(:include, Patch::IssuesControllerPatch)
end

1 change: 1 addition & 0 deletions lib/issues_helper_patch.rb
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ def link_to_new_subtask_plugin(issue)
default_tracker = issue.tracker unless @project.trackers.include? default_tracker
attrs[:tracker_id] = default_tracker
end

attrs[:fixed_version_id] = issue.fixed_version_id if settings[:inherit_fixed_version_id]
attrs[:category_id] = issue.category_id if settings[:inherit_category_id]
attrs[:assigned_to_id] = issue.assigned_to_id if settings[:inherit_assigned_to_id]
Expand Down
48 changes: 48 additions & 0 deletions lib/issues_update_hook.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
class Hooks < Redmine::Hook::ViewListener
def controller_issues_edit_before_save(context={})
issue = context[:issue]
settings = Setting.send("plugin_redmine_subtasks_inherited_fields") || {}

new_parent_id = context[:params][:issue][:parent_issue_id].to_i
if new_parent_id != issue.parent_id and new_parent_id != 0
parent_task = Issue.find(new_parent_id)
update_subtask(issue, parent_task, settings, false)
end
update_all_children_subtasks(issue, settings)
end

def controller_issues_bulk_edit_before_save(context={})
issue = context[:issue]
settings = Setting.send("plugin_redmine_subtasks_inherited_fields") || {}

new_parent_id = context[:params][:issue][:parent_issue_id].to_i
if new_parent_id != issue.parent_id and new_parent_id != 0
parent_task = Issue.find(new_parent_id)
update_subtask(issue, parent_task, settings, false)
end

update_all_children_subtasks(issue, settings)
end

def update_all_children_subtasks(issue, settings)
children = issue.children
children.each do |sub_task|
update_subtask(sub_task, issue, settings)
update_all_children_subtasks(sub_task, settings)
end
end

def update_subtask(sub_task, issue, settings, can_save = true)
sub_task.fixed_version_id = issue.fixed_version_id if settings[:inherit_fixed_version_id]
sub_task.category_id = issue.category_id if settings[:inherit_category_id]
sub_task.assigned_to_id = issue.assigned_to_id if settings[:inherit_assigned_to_id]
sub_task.priority_id = issue.priority_id if settings[:inherit_priority_id]
sub_task.start_date = issue.start_date if settings[:inherit_start_date]
sub_task.due_date = issue.due_date if settings[:inherit_due_date]
sub_task.description = issue.description if settings[:inherit_description]
sub_task.is_private = issue.is_private if settings[:inherit_is_private]
sub_task.status_id = issue.status_id if settings[:inherit_status_id]
sub_task.save if can_save
end

end
52 changes: 52 additions & 0 deletions lib/patch/issues_controller_patch.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
require_dependency 'issues_controller'

module Patch
module IssuesControllerPatch
def self.included(base)
base.extend(ClassMethods)
base.send(:include, InstanceMethods)
base.class_eval do
after_filter :update_version, :only=>[:update]
after_filter :update_versions, :only=>[:bulk_update]
#alias_method_chain :issue_list, :order
end
end
end
module ClassMethods
end

module InstanceMethods
private
def update_versions
if @issues.any?
@issues.each do |issue|
update_issue_version(issue)
end
end
end

def update_version
update_issue_version(@issue)
end

def update_issue_version(issue)

cf = CustomValue.where("customized_type= 'Project' and custom_field_id= 36").where(customized_id: issue.project.id)
if cf.present? and cf.first.value == "1"
version_changed = issue.journals.last(1).map(&:details).flatten.select{|d| d.prop_key == "fixed_version_id" }
if version_changed.any?
children = issue.children
loop_update_version_child(children, issue) if children.any?
end
end
end

def loop_update_version_child(children, issue)
children.each do |child|
child.update_attributes!(:fixed_version_id=> issue.fixed_version_id)
sub_children = child.children
loop_update_version_child(sub_children, issue) if sub_children.any?
end
end
end
end