diff --git a/app/models/dmsf_file.rb b/app/models/dmsf_file.rb
index eecc649a..90611708 100644
--- a/app/models/dmsf_file.rb
+++ b/app/models/dmsf_file.rb
@@ -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
diff --git a/app/views/dmsf_files/_links.html.erb b/app/views/dmsf_files/_links.html.erb
index ff66fad6..2964d1e2 100644
--- a/app/views/dmsf_files/_links.html.erb
+++ b/app/views/dmsf_files/_links.html.erb
@@ -24,29 +24,31 @@
<% for dmsf_file in dmsf_files %>
-
- <% file_view_url = url_for({:controller => :dmsf_files, :action => 'view', :id => dmsf_file}) %>
- <%= link_to(h(dmsf_file.title),
- file_view_url,
- :target => '_blank',
- :class => "icon icon-file #{DmsfHelper.filetype_css(dmsf_file.name)}",
- :title => h(dmsf_file.last_revision.try(:tooltip)),
- 'data-downloadurl' => "#{dmsf_file.last_revision.detect_content_type}:#{h(dmsf_file.name)}:#{file_view_url}") %>
- <% if dmsf_file.text? || dmsf_file.image? %>
- <%= link_to l(:button_view),
- file_view_url,
- :class => 'icon-only icon-magnifier',
- :title => l(:button_view) %>
- <% end %>
- <%= " - #{dmsf_file.description}" unless dmsf_file.description.blank? %>
- (<%= number_to_human_size dmsf_file.last_revision.size %>)
- <%= link_to(image_tag('delete.png'),
- dmsf_file_path(:id => dmsf_file, :commit => 'yes'),
- :data => {:confirm => l(:text_are_you_sure)},
- :method => :delete,
- :title => l(:title_delete)) %>
- <%= dmsf_file.last_revision.user %>, <%= format_time(dmsf_file.last_revision.updated_at) %>
-
+ <% if dmsf_file.last_revision %>
+
+ <% file_view_url = url_for({:controller => :dmsf_files, :action => 'view', :id => dmsf_file}) %>
+ <%= link_to(h(dmsf_file.title),
+ file_view_url,
+ :target => '_blank',
+ :class => "icon icon-file #{DmsfHelper.filetype_css(dmsf_file.name)}",
+ :title => h(dmsf_file.last_revision.try(:tooltip)),
+ 'data-downloadurl' => "#{dmsf_file.last_revision.detect_content_type}:#{h(dmsf_file.name)}:#{file_view_url}") %>
+ <% if dmsf_file.text? || dmsf_file.image? %>
+ <%= link_to l(:button_view),
+ file_view_url,
+ :class => 'icon-only icon-magnifier',
+ :title => l(:button_view) %>
+ <% end %>
+ <%= " - #{dmsf_file.description}" unless dmsf_file.description.blank? %>
+ (<%= number_to_human_size dmsf_file.last_revision.size %>)
+ <%= link_to(image_tag('delete.png'),
+ dmsf_file_path(:id => dmsf_file, :commit => 'yes'),
+ :data => {:confirm => l(:text_are_you_sure)},
+ :method => :delete,
+ :title => l(:title_delete)) %>
+ <%= dmsf_file.last_revision.user %>, <%= format_time(dmsf_file.last_revision.updated_at) %>
+
+ <% end %>
<% end %>
<% if defined?(thumbnails) && thumbnails %>
<% images = dmsf_files.select(&:image?) %>
@@ -63,4 +65,4 @@
<% end %>
<% end %>
-<% end %>
\ No newline at end of file
+<% end %>
diff --git a/lib/redmine_dmsf/hooks/controllers/issues_controller_hooks.rb b/lib/redmine_dmsf/hooks/controllers/issues_controller_hooks.rb
index ed2174da..2fc46329 100644
--- a/lib/redmine_dmsf/hooks/controllers/issues_controller_hooks.rb
+++ b/lib/redmine_dmsf/hooks/controllers/issues_controller_hooks.rb
@@ -23,9 +23,21 @@ module RedmineDmsf
include Redmine::Hook
class ControllerIssuesHook < RedmineDmsf::Hooks::Listener
-
+
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]
diff --git a/lib/redmine_dmsf/patches/issue_patch.rb b/lib/redmine_dmsf/patches/issue_patch.rb
index 2a4229f3..752462b5 100644
--- a/lib/redmine_dmsf/patches/issue_patch.rb
+++ b/lib/redmine_dmsf/patches/issue_patch.rb
@@ -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)