refs #136585 issue copying

This commit is contained in:
Karel Picman 2017-02-03 12:25:24 +01:00
parent a57031957a
commit 89bd771f0d
4 changed files with 54 additions and 34 deletions

View File

@ -268,8 +268,8 @@ class DmsfFile < ActiveRecord::Base
self.save && new_revision.save
end
def copy_to(project, folder)
def copy_to(container, folder = nil)
project = container.is_a?(Project) ? container : container.project
# If the target project differs from the source project we must physically move the disk files
if self.project != project
self.dmsf_file_revisions.all.each do |rev|
@ -278,27 +278,22 @@ class DmsfFile < ActiveRecord::Base
end
end
end
file = DmsfFile.new
file.dmsf_folder = folder
file.container_type = self.container_type
file.container_id = project.id
file.container_id = container.id
file.name = self.name
file.notification = Setting.plugin_redmine_dmsf['dmsf_default_notifications'].present?
if file.save && self.last_revision
new_revision = self.last_revision.clone
new_revision.dmsf_file = file
new_revision.comment = l(:comment_copied_from, :source => "#{self.project.identifier}: #{self.dmsf_path_str}")
new_revision.comment = l(:comment_copied_from, :source => "#{project.identifier}: #{self.dmsf_path_str}")
new_revision.custom_values = []
self.last_revision.custom_values.each do |cv|
new_revision.custom_values << CustomValue.new({:custom_field => cv.custom_field, :value => cv.value})
end
file.delete(true) unless new_revision.save
end
return file
end

View File

@ -24,6 +24,7 @@
<hr/>
<div class="attachments">
<% for dmsf_file in dmsf_files %>
<% if dmsf_file.last_revision %>
<p>
<% file_view_url = url_for({:controller => :dmsf_files, :action => 'view', :id => dmsf_file}) %>
<%= link_to(h(dmsf_file.title),
@ -48,6 +49,7 @@
<span class="author"><%= dmsf_file.last_revision.user %>, <%= format_time(dmsf_file.last_revision.updated_at) %></span>
</p>
<% end %>
<% end %>
<% if defined?(thumbnails) && thumbnails %>
<% images = dmsf_files.select(&:image?) %>
<% if images.any? %>

View File

@ -26,6 +26,18 @@ module RedmineDmsf
def controller_issues_new_after_save(context={})
controller_issues_after_save(context)
# Copy documents from the source issue
if context.is_a?(Hash)
issue = context[:issue]
params = context[:params]
copied_from = Issue.find_by_id(params[:copy_from]) if params[:copy_from].present?
# Save documents
if copied_from
issue.dmsf_files = copied_from.dmsf_files.map do |dmsf_file|
dmsf_file.copy_to(issue)
end
end
end
end
def controller_issues_edit_after_save(context={})
@ -35,6 +47,7 @@ module RedmineDmsf
private
def controller_issues_after_save(context)
# Create attached documents
if context.is_a?(Hash)
issue = context[:issue]
params = context[:params]

View File

@ -28,12 +28,22 @@ module RedmineDmsf
base.send(:include, InstanceMethods)
base.class_eval do
unloadable
alias_method_chain :copy_from, :dmsf_copy_from
has_many :dmsf_files, -> { where(dmsf_folder_id: nil, container_type: 'Issue').order(:name) },
:class_name => 'DmsfFile', :foreign_key => 'container_id', :dependent => :destroy
end
end
module InstanceMethods
def copy_from_with_dmsf_copy_from(arg, options={})
copy_from_without_dmsf_copy_from(arg, options)
# issue = @copied_from
# self.dmsf_files = issue.dmsf_files.map do |dmsf_file|
# dmsf_file.copy_to(self)
# end
end
def dmsf_file_added(dmsf_file)
unless dmsf_file.new_record?
self.journalize_dmsf_file(dmsf_file, :added)