diff --git a/app/controllers/dmsf_files_copy_controller.rb b/app/controllers/dmsf_files_copy_controller.rb index 60f55de0..bfb977bf 100644 --- a/app/controllers/dmsf_files_copy_controller.rb +++ b/app/controllers/dmsf_files_copy_controller.rb @@ -42,80 +42,78 @@ class DmsfFilesCopyController < ApplicationController end def create - if request.post? - @target_project = DmsfFile.allowed_target_projects_on_copy.detect {|p| p.id.to_s == params[:target_project_id]} if params[:target_project_id] - unless @target_project - render_403 - return - end - @target_folder = DmsfFolder.find(params[:target_folder_id]) unless params[:target_folder_id].blank? - if !@target_folder.nil? && @target_folder.project != @target_project - raise DmsfAccessError, l(:error_entry_project_does_not_match_current_project) - end + @target_project = DmsfFile.allowed_target_projects_on_copy.detect {|p| p.id.to_s == params[:target_project_id]} if params[:target_project_id] + unless @target_project + render_403 + return + end + @target_folder = DmsfFolder.find(params[:target_folder_id]) unless params[:target_folder_id].blank? + if !@target_folder.nil? && @target_folder.project != @target_project + raise DmsfAccessError, l(:error_entry_project_does_not_match_current_project) + end - name = @file.name - - file = DmsfFile.find_file_by_name(@target_project, @target_folder, name) - if file.nil? - file = DmsfFile.new - file.project = @target_project - file.name = name - file.folder = @target_folder - file.notification = !Setting.plugin_redmine_dmsf["dmsf_default_notifications"].blank? - else - if file.locked_for_user? - flash[:error] = l(:error_file_is_locked) - redirect_to :action => "new", :id => @file, :target_project_id => @target_project, :target_folder_id => @target_folder - return - end - end - - last_revision = @file.last_revision - - new_revision = DmsfFileRevision.new - new_revision.folder = @target_folder - new_revision.file = file - new_revision.project = file.project - new_revision.user = User.current - new_revision.name = name - new_revision.title = @file.title - new_revision.description = @file.description - new_revision.comment = l(:comment_copied_from, :source => "#{@project.identifier}:#{@file.dmsf_path_str}") - new_revision.source_revision = last_revision - new_revision.major_version = last_revision.major_version - new_revision.minor_version = last_revision.minor_version - new_revision.workflow = last_revision.workflow - new_revision.mime_type = last_revision.mime_type - new_revision.size = last_revision.size - new_revision.disk_filename = last_revision.disk_filename - - if file.save && new_revision.save - file.reload - else - flash[:error] = error_messages_for(file) + name = @file.name + + file = DmsfFile.find_file_by_name(@target_project, @target_folder, name) + if file.nil? + file = DmsfFile.new + file.project = @target_project + file.name = name + file.folder = @target_folder + file.notification = !Setting.plugin_redmine_dmsf["dmsf_default_notifications"].blank? + else + if file.locked_for_user? + flash[:error] = l(:error_file_is_locked) redirect_to :action => "new", :id => @file, :target_project_id => @target_project, :target_folder_id => @target_folder return end - - flash[:notice] = l(:notice_file_copied) - log_activity(file, "was copied (is copy)") - - if params[:move] - if User.current.allowed_to?(:file_manipulation, @project) - if @file.delete - flash[:notice] = l(:notice_file_moved) - log_activity(@file, "was deleted") - DmsfMailer.deliver_files_deleted(User.current, [@file]) - else - flash[:error] = l(:error_file_is_locked) - end - else - flash[:error] = l(:error_user_has_not_right_delete_file) - end - end - - redirect_to :controller => "dmsf_files", :action => "show", :id => file end + + last_revision = @file.last_revision + + new_revision = DmsfFileRevision.new + new_revision.folder = @target_folder + new_revision.file = file + new_revision.project = file.project + new_revision.user = User.current + new_revision.name = name + new_revision.title = @file.title + new_revision.description = @file.description + new_revision.comment = l(:comment_copied_from, :source => "#{@project.identifier}:#{@file.dmsf_path_str}") + new_revision.source_revision = last_revision + new_revision.major_version = last_revision.major_version + new_revision.minor_version = last_revision.minor_version + new_revision.workflow = last_revision.workflow + new_revision.mime_type = last_revision.mime_type + new_revision.size = last_revision.size + new_revision.disk_filename = last_revision.disk_filename + + if file.save && new_revision.save + file.reload + else + flash[:error] = error_messages_for(file) + redirect_to :action => "new", :id => @file, :target_project_id => @target_project, :target_folder_id => @target_folder + return + end + + flash[:notice] = l(:notice_file_copied) + log_activity(file, "was copied (is copy)") + + if params[:move] + if User.current.allowed_to?(:file_manipulation, @project) + if @file.delete + flash[:notice] = l(:notice_file_moved) + log_activity(@file, "was deleted") + DmsfMailer.deliver_files_deleted(User.current, [@file]) + else + flash[:error] = l(:error_file_is_locked) + end + else + flash[:error] = l(:error_user_has_not_right_delete_file) + end + end + + redirect_to :controller => "dmsf_files", :action => "show", :id => file end private