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)