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 @@
<%= hidden_field_tag("commited_files[#{i}][disk_filename]", upload.disk_filename) %> + <%= hidden_field_tag("commited_files[#{i}][tempfile_path]", upload.tempfile_path) %> + <%= hidden_field_tag("commited_files[#{i}][size]", upload.size) %> + <%= hidden_field_tag("commited_files[#{i}][mime_type]", upload.mime_type) %>

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 @@

<%= hidden_field_tag("commited_files[#{i}][disk_filename]", upload.disk_filename) %> + <%= hidden_field_tag("commited_files[#{i}][tempfile_path]", upload.tempfile_path) %> + <%= hidden_field_tag("commited_files[#{i}][size]", upload.size) %> + <%= hidden_field_tag("commited_files[#{i}][mime_type]", upload.mime_type) %> <%= hidden_field_tag("commited_files[#{i}][name]", upload.name) %>

<%= l(:info_file_locked) %>

diff --git a/app/views/dmsf_upload/upload_file.html.erb b/app/views/dmsf_upload/upload_file.html.erb index be0902df..2f2d8a06 100644 --- a/app/views/dmsf_upload/upload_file.html.erb +++ b/app/views/dmsf_upload/upload_file.html.erb @@ -19,8 +19,12 @@ # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.%> +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +%> -{"original_filename":"<%= (@tempfile.original_filename).html_safe %>", - "content_type":"<%= (@tempfile.content_type.gsub('"', '')).html_safe %>", - "disk_filename":"<%= (@disk_filename).html_safe %>"} +{ + "original_filename":"<%= @tempfile.original_filename.html_safe %>", + "content_type": "<%= @tempfile.content_type.gsub('"', '').html_safe %>", + "disk_filename": "<%= @disk_filename.html_safe %>", + "tempfile_path": "<%= @tempfile.path.html_safe %>" +} diff --git a/app/views/dmsf_upload/upload_files.html.erb b/app/views/dmsf_upload/upload_files.html.erb index 7386bb3f..d178ea75 100644 --- a/app/views/dmsf_upload/upload_files.html.erb +++ b/app/views/dmsf_upload/upload_files.html.erb @@ -41,7 +41,6 @@ <% else %> <%= render(:partial => 'upload_file', :locals => {:upload => upload, :i => i}) %> <% end %> - <% i += 1 %> <% end %> <%= submit_tag l(:submit_commit) %> <% end %> \ No newline at end of file diff --git a/lib/redmine_dmsf/hooks/controllers/issues_controller_hooks.rb b/lib/redmine_dmsf/hooks/controllers/issues_controller_hooks.rb index 56fdcc01..8e10700c 100644 --- a/lib/redmine_dmsf/hooks/controllers/issues_controller_hooks.rb +++ b/lib/redmine_dmsf/hooks/controllers/issues_controller_hooks.rb @@ -56,10 +56,15 @@ module RedmineDmsf system_folder = issue.system_folder(true) uploaded_files.each_value do |uploaded_file| upload = DmsfUpload.create_from_uploaded_attachment(issue.project, system_folder, uploaded_file) - uploaded_file[:disk_filename] = upload.disk_filename - uploaded_file[:name] = upload.name - uploaded_file[:title] = upload.title - uploaded_file[:version] = 1 + if upload + uploaded_file[:disk_filename] = upload.disk_filename + uploaded_file[:name] = upload.name + uploaded_file[:title] = upload.title + uploaded_file[:version] = 1 + uploaded_file[:size] = upload.size + uploaded_file[:mime_type] = upload.mime_type + uploaded_file[:tempfile_path] = upload.tempfile_path + end end DmsfUploadHelper.commit_files_internal uploaded_files, issue.project, system_folder, context[:controller]