diff --git a/app/helpers/dmsf_upload_helper.rb b/app/helpers/dmsf_upload_helper.rb index b6990d98..58288fbe 100644 --- a/app/helpers/dmsf_upload_helper.rb +++ b/app/helpers/dmsf_upload_helper.rb @@ -22,7 +22,7 @@ module DmsfUploadHelper include Redmine::I18n - def self.commit_files_internal(commited_files, project, folder, controller = nil) + def self.commit_files_internal(commited_files, project, folder, controller = nil, new_object = false, container = nil) failed_uploads = [] files = [] if commited_files @@ -106,29 +106,29 @@ module DmsfUploadHelper FileUtils.mv commited_file[:tempfile_path], new_revision.disk_file(false) FileUtils.chmod 'u=wr,g=r', new_revision.disk_file(false) file.set_last_revision new_revision - files.push(file) - if file.container.is_a?(Issue) - file.container.dmsf_file_added(file) + files.push file + if container && container.is_a?(Issue) && (!new_object) + container.dmsf_file_added file end rescue => e Rails.logger.error e.message controller.flash[:error] = e.message if controller - failed_uploads.push(file) + failed_uploads.push file end else - failed_uploads.push(commited_file) + failed_uploads.push commited_file end # Approval workflow if commited_file[:workflow_id].present? wf = DmsfWorkflow.find_by(id: commited_file[:workflow_id]) if wf # Assign the workflow - new_revision.set_workflow(wf.id, 'assign') - new_revision.assign_workflow(wf.id) + new_revision.set_workflow wf.id, 'assign' + new_revision.assign_workflow wf.id # Start the workflow - new_revision.set_workflow(wf.id, 'start') + new_revision.set_workflow wf.id, 'start' if new_revision.save - wf.notify_users(project, new_revision, controller) + wf.notify_users project, new_revision, controller begin file.lock! rescue DmsfLockError => e diff --git a/app/models/dmsf_file.rb b/app/models/dmsf_file.rb index 4616738b..424125ed 100644 --- a/app/models/dmsf_file.rb +++ b/app/models/dmsf_file.rb @@ -142,9 +142,6 @@ class DmsfFile < ActiveRecord::Base # Revisions and links of a deleted file SHOULD be deleted too dmsf_file_revisions.each { |r| r.delete(commit, true) } if commit - if container.is_a?(Issue) - container.dmsf_file_removed(self) - end destroy else self.deleted = STATUS_DELETED @@ -555,13 +552,4 @@ class DmsfFile < ActiveRecord::Base l(:title_unlock_file) end - def container - unless @container - if dmsf_folder && dmsf_folder.system - @container = Issue.find_by(id: dmsf_folder.title.to_i) - end - end - @container - end - end diff --git a/app/models/dmsf_link.rb b/app/models/dmsf_link.rb index fe8de71a..771ce908 100644 --- a/app/models/dmsf_link.rb +++ b/app/models/dmsf_link.rb @@ -126,17 +126,8 @@ class DmsfLink < ActiveRecord::Base link end - def container - if dmsf_folder && dmsf_folder.system - Issue.find_by id: dmsf_folder.title - end - end - def delete(commit = false) if commit - if container.is_a?(Issue) - container.dmsf_file_removed(target_file) - end destroy else self.deleted = STATUS_DELETED diff --git a/lib/redmine_dmsf/hooks/controllers/issues_controller_hooks.rb b/lib/redmine_dmsf/hooks/controllers/issues_controller_hooks.rb index 7966945f..2f74d12b 100644 --- a/lib/redmine_dmsf/hooks/controllers/issues_controller_hooks.rb +++ b/lib/redmine_dmsf/hooks/controllers/issues_controller_hooks.rb @@ -67,6 +67,7 @@ module RedmineDmsf def controller_issues_before_save(context) if context.is_a?(Hash) issue = context[:issue] + @new_object = issue.new_record? params = context[:params] # Save upload preferences DMS/Attachments User.current.pref.update_attribute :dmsf_attachments_upload_choice, params[:dmsf_attachments_upload_choice] @@ -144,7 +145,7 @@ module RedmineDmsf end end DmsfUploadHelper.commit_files_internal uploaded_files, issue.project, system_folder, - context[:controller] + context[:controller], @new_object, issue end # Attach DMS links issue.saved_dmsf_links.each do |l| @@ -154,7 +155,7 @@ module RedmineDmsf if system_folder l.project_id = system_folder.project_id l.dmsf_folder_id = system_folder.id - if l.save + if l.save && (!@new_object) issue.dmsf_file_added file end wf = issue.saved_dmsf_links_wfs[l.id] diff --git a/lib/redmine_dmsf/patches/easy_crm_case_patch.rb b/lib/redmine_dmsf/patches/easy_crm_case_patch.rb index eb8846eb..20163fae 100644 --- a/lib/redmine_dmsf/patches/easy_crm_case_patch.rb +++ b/lib/redmine_dmsf/patches/easy_crm_case_patch.rb @@ -147,15 +147,11 @@ module RedmineDmsf end def dmsf_file_added(dmsf_file) - unless dmsf_file.new_record? - self.journalize_dmsf_file(dmsf_file, :added) - end + self.journalize_dmsf_file dmsf_file, :added end def dmsf_file_removed(dmsf_file) - unless dmsf_file.new_record? - self.journalize_dmsf_file(dmsf_file, :removed) - end + self.journalize_dmsf_file dmsf_file, :removed end # Adds a journal detail for an attachment that was added or removed diff --git a/lib/redmine_dmsf/patches/easy_crm_cases_controller_patch.rb b/lib/redmine_dmsf/patches/easy_crm_cases_controller_patch.rb index 6b438095..3ac8b9c1 100644 --- a/lib/redmine_dmsf/patches/easy_crm_cases_controller_patch.rb +++ b/lib/redmine_dmsf/patches/easy_crm_cases_controller_patch.rb @@ -50,7 +50,8 @@ module RedmineDmsf end end end - DmsfUploadHelper.commit_files_internal uploaded_files, easy_crm_case.project, system_folder, self + DmsfUploadHelper.commit_files_internal uploaded_files, easy_crm_case.project, system_folder, self, + false, easy_crm_case end # Attach DMS links easy_crm_case.saved_dmsf_links.each do |l| diff --git a/lib/redmine_dmsf/patches/issue_patch.rb b/lib/redmine_dmsf/patches/issue_patch.rb index 4551156a..bf5df7ba 100644 --- a/lib/redmine_dmsf/patches/issue_patch.rb +++ b/lib/redmine_dmsf/patches/issue_patch.rb @@ -150,21 +150,17 @@ module RedmineDmsf end def dmsf_file_added(dmsf_file) - unless dmsf_file.new_record? - self.journalize_dmsf_file(dmsf_file, :added) - end + self.journalize_dmsf_file dmsf_file, :added end def dmsf_file_removed(dmsf_file) - unless dmsf_file.new_record? - self.journalize_dmsf_file(dmsf_file, :removed) - end + self.journalize_dmsf_file dmsf_file, :removed end # Adds a journal detail for an attachment that was added or removed def journalize_dmsf_file(dmsf_file, added_or_removed) key = (added_or_removed == :removed ? :old_value : :value) - init_journal(User.current) + init_journal User.current current_journal.details << JournalDetail.new( property: 'dmsf_file', prop_key: dmsf_file.id,