From 7a66ce52a99da8023fbdc8f73063aa8ac8614fea Mon Sep 17 00:00:00 2001 From: "COLA@Redminetest" Date: Thu, 24 Nov 2016 16:13:34 +0100 Subject: [PATCH 1/6] The DmsfFileRevision.formatted_name method does no longer corrupt the argument 'format'. --- app/models/dmsf_file_revision.rb | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/app/models/dmsf_file_revision.rb b/app/models/dmsf_file_revision.rb index f0963513..1fbffb18 100644 --- a/app/models/dmsf_file_revision.rb +++ b/app/models/dmsf_file_revision.rb @@ -257,13 +257,14 @@ class DmsfFileRevision < ActiveRecord::Base else filename = self.name end - format.sub!('%t', self.title) - format.sub!('%f', filename) - format.sub!('%d', self.updated_at.strftime('%Y%m%d%H%M%S')) - format.sub!('%v', self.version) - format.sub!('%i', self.dmsf_file.id.to_s) - format.sub!('%r', self.id.to_s) - format + ext + format2 = format.dup + format2.sub!('%t', self.title) + format2.sub!('%f', filename) + format2.sub!('%d', self.updated_at.strftime('%Y%m%d%H%M%S')) + format2.sub!('%v', self.version) + format2.sub!('%i', self.dmsf_file.id.to_s) + format2.sub!('%r', self.id.to_s) + format2 + ext end def self.create_digest(path) From db885d4edc8164b04d1d0accce47c02ebb84dafd Mon Sep 17 00:00:00 2001 From: "COLA@Redminetest" Date: Thu, 24 Nov 2016 16:32:44 +0100 Subject: [PATCH 2/6] The DmsfFilesController.view and .show methods did not use the global title format, only the user configured title format. --- app/controllers/dmsf_files_controller.rb | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/app/controllers/dmsf_files_controller.rb b/app/controllers/dmsf_files_controller.rb index ee2dc557..a589590c 100644 --- a/app/controllers/dmsf_files_controller.rb +++ b/app/controllers/dmsf_files_controller.rb @@ -52,8 +52,13 @@ class DmsfFilesController < ApplicationController access.action = DmsfFileRevisionAccess::DownloadAction access.save! member = Member.where(:user_id => User.current.id, :project_id => @file.project.id).first + if member && !member.title_format.nil? && !member.title_format.empty? + title_format = member.title_format + else + title_format = Setting.plugin_redmine_dmsf['dmsf_global_title_format'] + end send_file(@revision.disk_file, - :filename => filename_for_content_disposition(@revision.formatted_name(member ? member.title_format : nil)), + :filename => filename_for_content_disposition(@revision.formatted_name(title_format)), :type => @revision.detect_content_type, :disposition => 'inline') rescue DmsfAccessError => e @@ -84,8 +89,13 @@ class DmsfFilesController < ApplicationController access.action = DmsfFileRevisionAccess::DownloadAction access.save! member = Member.where(:user_id => User.current.id, :project_id => @file.project.id).first + if member && !member.title_format.nil? && !member.title_format.empty? + title_format = member.title_format + else + title_format = Setting.plugin_redmine_dmsf['dmsf_global_title_format'] + end send_file(@revision.disk_file, - :filename => filename_for_content_disposition(@revision.formatted_name(member ? member.title_format : nil)), + :filename => filename_for_content_disposition(@revision.formatted_name(title_format)), :type => @revision.detect_content_type, :disposition => 'attachment') rescue DmsfAccessError => e From c53e8735b192e124f7cdc22e405f194afa3e3735 Mon Sep 17 00:00:00 2001 From: "COLA@Redminetest" Date: Thu, 24 Nov 2016 17:02:03 +0100 Subject: [PATCH 3/6] The display_name should also use the formatted_name. --- app/models/dmsf_file.rb | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/app/models/dmsf_file.rb b/app/models/dmsf_file.rb index e6f72e5c..04e3d10a 100644 --- a/app/models/dmsf_file.rb +++ b/app/models/dmsf_file.rb @@ -403,10 +403,17 @@ class DmsfFile < ActiveRecord::Base end def display_name - if self.name.length > 50 - return "#{self.name[0, 25]}...#{self.name[-25, 25]}" + member = Member.where(:user_id => User.current.id, :project_id => self.project.id).first + if member && !member.title_format.nil? && !member.title_format.empty? + title_format = member.title_format + else + title_format = Setting.plugin_redmine_dmsf['dmsf_global_title_format'] end - self.name + fname = formatted_name(title_format) + if fname.length > 50 + return "#{fname[0, 25]}...#{fname[-25, 25]}" + end + fname end def image? From e7925a4f9ab4d34e296e9c629bcd1be9b2bb8467 Mon Sep 17 00:00:00 2001 From: "COLA@Redminetest" Date: Thu, 24 Nov 2016 17:31:35 +0100 Subject: [PATCH 4/6] When displaying a link to a file use the display_name. --- app/models/dmsf_link.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/dmsf_link.rb b/app/models/dmsf_link.rb index 1e67e143..89807d04 100644 --- a/app/models/dmsf_link.rb +++ b/app/models/dmsf_link.rb @@ -98,7 +98,7 @@ class DmsfLink < ActiveRecord::Base def path if self.target_type == DmsfFile.model_name.to_s - path = self.target_file.dmsf_path.map { |element| element.is_a?(DmsfFile) ? element.name : element.title }.join('/') if self.target_file + path = self.target_file.dmsf_path.map { |element| element.is_a?(DmsfFile) ? element.display_name : element.title }.join('/') if self.target_file else path = self.target_folder ? self.target_folder.dmsf_path_str : '' end From d2f3af0b8837f0f64eee24ebaec3ebe5e6f2de75 Mon Sep 17 00:00:00 2001 From: "COLA@Redminetest" Date: Thu, 24 Nov 2016 21:37:17 +0100 Subject: [PATCH 5/6] source_revision for dependent revisions is updated on destroy instead of delete. --- app/models/dmsf_file_revision.rb | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/app/models/dmsf_file_revision.rb b/app/models/dmsf_file_revision.rb index f0963513..6df8987e 100644 --- a/app/models/dmsf_file_revision.rb +++ b/app/models/dmsf_file_revision.rb @@ -83,11 +83,7 @@ class DmsfFileRevision < ActiveRecord::Base errors[:base] << l(:error_at_least_one_revision_must_be_present) return false end - dependent = DmsfFileRevision.where(:source_dmsf_file_revision_id => self.id).all - dependent.each do |d| - d.source_revision = self.source_revision - d.save! - end + if commit self.destroy else @@ -104,6 +100,11 @@ class DmsfFileRevision < ActiveRecord::Base end def destroy + dependent = DmsfFileRevision.where(:source_dmsf_file_revision_id => self.id).all + dependent.each do |d| + d.source_revision = self.source_revision + d.save! + end if Setting.plugin_redmine_dmsf['dmsf_really_delete_files'] dependencies = DmsfFileRevision.where(:disk_filename => self.disk_filename).all.count File.delete(self.disk_file) if dependencies <= 1 && File.exist?(self.disk_file) From 9e328c39ab95654f03058e2c2371f919623035f4 Mon Sep 17 00:00:00 2001 From: "COLA@Redminetest" Date: Thu, 24 Nov 2016 22:23:46 +0100 Subject: [PATCH 6/6] dmsf_file_revisions are ordered by id instead of major_version, minor_version and updated_at. Previously they were ordered by major_version DESC, minor_version DESC and updated_at DESC. This caused problems after restoring deleted files as the updated_at field were set to the same for all revisions, and renamed files have the same major and minor version and could therefore be sorted in the wrong order. Why would it not be ordered by id from the start? --- app/models/dmsf_file.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/dmsf_file.rb b/app/models/dmsf_file.rb index e6f72e5c..76b437a4 100644 --- a/app/models/dmsf_file.rb +++ b/app/models/dmsf_file.rb @@ -36,7 +36,7 @@ class DmsfFile < ActiveRecord::Base belongs_to :dmsf_folder belongs_to :deleted_by_user, :class_name => 'User', :foreign_key => 'deleted_by_user_id' - has_many :dmsf_file_revisions, -> { order("#{DmsfFileRevision.table_name}.major_version DESC, #{DmsfFileRevision.table_name}.minor_version DESC, #{DmsfFileRevision.table_name}.updated_at DESC") }, + has_many :dmsf_file_revisions, -> { order("#{DmsfFileRevision.table_name}.id DESC") }, :dependent => :destroy has_many :locks, -> { where(entity_type: 0).order("#{DmsfLock.table_name}.updated_at DESC") }, :class_name => 'DmsfLock', :foreign_key => 'entity_id', :dependent => :destroy