diff --git a/app/controllers/dmsf_controller.rb b/app/controllers/dmsf_controller.rb index 417f543c..c33e38a0 100644 --- a/app/controllers/dmsf_controller.rb +++ b/app/controllers/dmsf_controller.rb @@ -188,19 +188,22 @@ class DmsfController < ApplicationController return end - if selected_dir_links.present? - selected_dir_links.each do |id| - link = DmsfLink.find_by_id id - selected_folders << link.target_id if link && !selected_folders.include?(link.target_id.to_s) + if selected_dir_links.present? && + (params[:email_entries].present? || params[:download_entries].present?) + selected_dir_links.each do |id| + link = DmsfLink.find_by_id id + selected_folders << link.target_id if link && !selected_folders.include?(link.target_id.to_s) end end - if selected_file_links.present? - selected_file_links.each do |id| - link = DmsfLink.find_by_id id - selected_files << link.target_id if link && !selected_files.include?(link.target_id.to_s) + if selected_file_links.present? && + (params[:email_entries].present? || params[:download_entries].present?) + selected_file_links.each do |id| + link = DmsfLink.find_by_id id + selected_files << link.target_id if link && !selected_files.include?(link.target_id.to_s) end - end + end + if params[:email_entries].present? email_entries(selected_folders, selected_files) elsif params[:restore_entries].present? @@ -503,15 +506,14 @@ class DmsfController < ApplicationController end if selected_files && selected_files.is_a?(Array) selected_files.each do |selected_file_id| - file = DmsfFile.visible.find_by_id selected_file_id + file = DmsfFile.visible.find_by_id selected_file_id + unless file && file.last_revision && File.exists?(file.last_revision.disk_file) + raise FileNotFound + end unless (file.project == @project) || User.current.allowed_to?(:view_dmsf_files, file.project) raise DmsfAccessError end - if file && file.last_revision && File.exists?(file.last_revision.disk_file) - zip.add_file(file, member, (file.folder.dmsf_path_str if file.folder)) if file - else - raise FileNotFound - end + zip.add_file(file, member, (file.folder.dmsf_path_str if file.folder)) if file end end max_files = Setting.plugin_redmine_dmsf['dmsf_max_file_download'].to_i diff --git a/app/models/dmsf_file.rb b/app/models/dmsf_file.rb index 6b69c34b..d656734d 100644 --- a/app/models/dmsf_file.rb +++ b/app/models/dmsf_file.rb @@ -141,8 +141,7 @@ class DmsfFile < ActiveRecord::Base end begin # Revisions and links of a deleted file SHOULD be deleted too - self.revisions.each { |r| r.delete(commit, true) } - self.referenced_links.each { |l| l.delete(commit) } + self.revisions.each { |r| r.delete(commit, true) } if commit self.destroy else @@ -162,8 +161,7 @@ class DmsfFile < ActiveRecord::Base errors[:base] << l(:error_parent_folder) return false end - self.revisions.each { |r| r.restore } - self.referenced_links.each { |l| l.restore } + self.revisions.each { |r| r.restore } self.deleted = STATUS_ACTIVE self.deleted_by_user = nil save diff --git a/app/models/dmsf_folder.rb b/app/models/dmsf_folder.rb index 1367f2fc..484bd4f4 100644 --- a/app/models/dmsf_folder.rb +++ b/app/models/dmsf_folder.rb @@ -113,8 +113,7 @@ class DmsfFolder < ActiveRecord::Base elsif !self.subfolders.visible.empty? || !self.files.visible.empty? errors[:base] << l(:error_folder_is_not_empty) return false - end - self.referenced_links.each { |l| l.delete(commit) } + end if commit self.destroy else @@ -132,8 +131,7 @@ class DmsfFolder < ActiveRecord::Base if self.dmsf_folder_id && (self.folder.nil? || self.folder.deleted?) errors[:base] << l(:error_parent_folder) return false - end - self.referenced_links.each { |l| l.restore } + end self.deleted = STATUS_ACTIVE self.deleted_by_user = nil self.save diff --git a/app/views/dmsf/_file_trash.html.erb b/app/views/dmsf/_file_trash.html.erb index 9c25af8d..3f0c9687 100644 --- a/app/views/dmsf/_file_trash.html.erb +++ b/app/views/dmsf/_file_trash.html.erb @@ -3,7 +3,7 @@ # # Redmine plugin for Document Management System "Features" # -# Copyright (C) 2011-15 Karel Pičman +# Copyright (C) 2011-16 Karel Pičman # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License @@ -38,15 +38,26 @@ <%= h(file.last_revision.user) %> - <% if @file_manipulation_allowed %> - <%= link_to(image_tag('restore.png', :plugin => 'redmine_dmsf'), - restore_dmsf_file_path(:id => file), - :title => l(:title_restore)) %> - <%= link_to(image_tag('rev_delete.png', :plugin => 'redmine_dmsf'), - dmsf_file_path(:id => file, :commit => 'yes'), - :data => {:confirm => l(:text_are_you_sure)}, - :method => :delete, - :title => l(:title_delete)) %> + <% if @file_manipulation_allowed %> + <% if link %> + <%= link_to(image_tag('restore.png', :plugin => 'redmine_dmsf'), + restore_dmsf_link_path(:id => link), + :title => l(:title_restore)) %> + <%= link_to(image_tag('rev_delete.png', :plugin => 'redmine_dmsf'), + dmsf_link_path(:id => link, :commit => 'yes'), + :data => {:confirm => l(:text_are_you_sure)}, + :method => :delete, + :title => l(:title_delete)) %> + <% else # file %> + <%= link_to(image_tag('restore.png', :plugin => 'redmine_dmsf'), + restore_dmsf_file_path(:id => file), + :title => l(:title_restore)) %> + <%= link_to(image_tag('rev_delete.png', :plugin => 'redmine_dmsf'), + dmsf_file_path(:id => file, :commit => 'yes'), + :data => {:confirm => l(:text_are_you_sure)}, + :method => :delete, + :title => l(:title_delete)) %> + <% end %> <% end %> 1