diff --git a/app/controllers/dmsf_files_controller.rb b/app/controllers/dmsf_files_controller.rb index 9aaf4831..491b114a 100644 --- a/app/controllers/dmsf_files_controller.rb +++ b/app/controllers/dmsf_files_controller.rb @@ -129,10 +129,12 @@ class DmsfFilesController < ApplicationController end else upload = DmsfUpload.create_from_uploaded_attachment(@project, @folder, file_upload) - revision.size = upload.size - revision.disk_filename = revision.new_storage_filename - revision.mime_type = upload.mime_type - revision.digest = DmsfFileRevision.create_digest upload.disk_file + if upload + revision.size = upload.size + revision.disk_filename = revision.new_storage_filename + revision.mime_type = upload.mime_type + revision.digest = DmsfFileRevision.create_digest upload.disk_file + end end # Custom fields diff --git a/app/controllers/dmsf_upload_controller.rb b/app/controllers/dmsf_upload_controller.rb index d122e115..243d83b2 100644 --- a/app/controllers/dmsf_upload_controller.rb +++ b/app/controllers/dmsf_upload_controller.rb @@ -68,30 +68,7 @@ class DmsfUploadController < ApplicationController return end @disk_filename = DmsfHelper.temp_filename(@tempfile.original_filename) - target = "#{DmsfHelper.temp_dir}/#{@disk_filename}" - begin - FileUtils.cp @tempfile.path, target - FileUtils.chmod 'u=wr,g=r', target - rescue Exception => e - Rails.logger.error e.message - end - if File.size(target) <= 0 - begin - File.delete target - rescue Exception => e - Rails.logger.error e.message - end - render :layout => nil, :json => { :jsonrpc => '2.0', - :error => { - :code => 103, - :message => l(:header_minimum_filesize), - :details => l(:error_minimum_filesize, - :file => @tempfile.original_filename.to_s) - } - } - else - render :layout => false - end + render :layout => false end # REST API document upload @@ -133,7 +110,7 @@ class DmsfUploadController < ApplicationController uploaded_files = attachments.select { |key, value| key == 'uploaded_file'} uploaded_files.each_value do |uploaded_file| upload = DmsfUpload.create_from_uploaded_attachment(@project, @folder, uploaded_file) - uploaded_file[:disk_filename] = upload.disk_filename + uploaded_file[:disk_filename] = upload.disk_filename if upload end commit_files_internal uploaded_files end diff --git a/app/helpers/dmsf_upload_helper.rb b/app/helpers/dmsf_upload_helper.rb index ef08fd7d..b0ea3e23 100644 --- a/app/helpers/dmsf_upload_helper.rb +++ b/app/helpers/dmsf_upload_helper.rb @@ -60,8 +60,6 @@ module DmsfUploadHelper next end - commited_disk_filepath = "#{DmsfHelper.temp_dir}/#{commited_file[:disk_filename].gsub(/[\/\\]/,'')}" - new_revision.dmsf_file = file new_revision.user = User.current new_revision.name = name @@ -75,9 +73,9 @@ module DmsfUploadHelper else new_revision.increase_version(version) end - new_revision.mime_type = Redmine::MimeType.of(new_revision.name) - new_revision.size = File.size(commited_disk_filepath) - new_revision.digest = DmsfFileRevision.create_digest commited_disk_filepath + new_revision.mime_type = commited_file[:mime_type] + new_revision.size = commited_file[:size] + new_revision.digest = DmsfFileRevision.create_digest commited_file[:tempfile_path] if commited_file[:custom_field_values].present? commited_file[:custom_field_values].each_with_index do |v, i| @@ -98,7 +96,8 @@ module DmsfUploadHelper if new_revision.save new_revision.assign_workflow(commited_file[:dmsf_workflow_id]) begin - FileUtils.mv(commited_disk_filepath, new_revision.disk_file) + FileUtils.mv commited_file[:tempfile_path], new_revision.disk_file + FileUtils.chmod 'u=wr,g=r', new_revision.disk_file file.set_last_revision new_revision files.push(file) if file.container.is_a?(Issue) diff --git a/app/models/dmsf_file.rb b/app/models/dmsf_file.rb index 870b22a7..f6b3a5b2 100644 --- a/app/models/dmsf_file.rb +++ b/app/models/dmsf_file.rb @@ -85,12 +85,10 @@ class DmsfFile < ActiveRecord::Base :date_column => "#{table_name}.updated_at" before_create :default_values + def default_values - @notifications = Setting.plugin_redmine_dmsf['dmsf_default_notifications'] - if @notifications == '1' + if (Setting.plugin_redmine_dmsf['dmsf_default_notifications'] == '1') && (!self.dmsf_folder || !self.dmsf_folder.system) self.notification = true - else - self.notification = nil end end diff --git a/app/models/dmsf_folder.rb b/app/models/dmsf_folder.rb index a1324ba8..1df026ac 100644 --- a/app/models/dmsf_folder.rb +++ b/app/models/dmsf_folder.rb @@ -113,11 +113,8 @@ class DmsfFolder < ActiveRecord::Base end def default_values - @notifications = Setting.plugin_redmine_dmsf['dmsf_default_notifications'] - if @notifications == '1' + if Setting.plugin_redmine_dmsf['dmsf_default_notifications'] == '1' && !self.system self.notification = true - else - self.notification = nil end end diff --git a/app/models/dmsf_upload.rb b/app/models/dmsf_upload.rb index b9c25336..2b5b5e6f 100644 --- a/app/models/dmsf_upload.rb +++ b/app/models/dmsf_upload.rb @@ -33,6 +33,7 @@ class DmsfUpload attr_accessor :locked attr_accessor :workflow attr_accessor :custom_values + attr_accessor :tempfile_path def disk_file "#{DmsfHelper.temp_dir}/#{self.disk_filename}" @@ -45,15 +46,14 @@ class DmsfUpload :disk_filename => DmsfHelper.temp_filename(a.filename), :content_type => a.content_type, :original_filename => a.filename, - :comment => uploaded_file[:description] + :comment => uploaded_file[:description], + :tempfile_path => a.diskfile } - FileUtils.mv(a.diskfile, "#{DmsfHelper.temp_dir}/#{uploaded[:disk_filename]}") - a.destroy - upload = DmsfUpload.new(project, folder, uploaded) + DmsfUpload.new(project, folder, uploaded) else Rails.logger.error "An attachment not found by its token: #{uploaded_file[:token]}" + nil end - upload end def initialize(project, folder, uploaded) @@ -67,7 +67,8 @@ class DmsfUpload @disk_filename = uploaded[:disk_filename] @mime_type = uploaded[:content_type] - @size = File.size(disk_file) + @size = File.size(uploaded[:tempfile_path]) + @tempfile_path = uploaded[:tempfile_path] if file.nil? || file.last_revision.nil? @title = DmsfFileRevision.filename_to_title(@name) diff --git a/app/views/dmsf_upload/_multi_upload.html.erb b/app/views/dmsf_upload/_multi_upload.html.erb index e15f29e9..61dfa8c7 100644 --- a/app/views/dmsf_upload/_multi_upload.html.erb +++ b/app/views/dmsf_upload/_multi_upload.html.erb @@ -128,6 +128,10 @@ .attr('name', 'uploaded[' + dmsfFileFieldCount + '][original_filename]') .val(responseObject.original_filename); uploader.append(original_filename_input); + var tempfile_path = $('').attr('type', 'hidden') + .attr('name', 'uploaded[' + dmsfFileFieldCount + '][tempfile_path]') + .val(responseObject.tempfile_path); + uploader.append(tempfile_path); } else { file.status = plupload.FAILED; pluploader.trigger('UploadProgress', file); diff --git a/app/views/dmsf_upload/_upload_file.html.erb b/app/views/dmsf_upload/_upload_file.html.erb index 25bafe55..a11061ce 100644 --- a/app/views/dmsf_upload/_upload_file.html.erb +++ b/app/views/dmsf_upload/_upload_file.html.erb @@ -24,6 +24,9 @@
diff --git a/app/views/dmsf_upload/_upload_file_locked.html.erb b/app/views/dmsf_upload/_upload_file_locked.html.erb index 1d139be9..c6ef86fc 100644 --- a/app/views/dmsf_upload/_upload_file_locked.html.erb +++ b/app/views/dmsf_upload/_upload_file_locked.html.erb @@ -24,6 +24,9 @@
<%= l(:info_file_locked) %>