A problem by attaching documents to issues #866
This commit is contained in:
parent
44981a54d8
commit
0f9cf15262
@ -52,7 +52,7 @@ class DmsfFile < ActiveRecord::Base
|
||||
scope :deleted, -> { where(:deleted => STATUS_DELETED) }
|
||||
|
||||
validates :name, :presence => true
|
||||
validates_format_of :name, :with => DmsfFolder::INVALID_CHARACTERS,
|
||||
validates_format_of :name, :with => /\A[^#{DmsfFolder::INVALID_CHARACTERS}]*\z/,
|
||||
:message => l(:error_contains_invalid_character)
|
||||
|
||||
validate :validates_name_uniqueness
|
||||
|
||||
@ -66,7 +66,7 @@ class DmsfFileRevision < ActiveRecord::Base
|
||||
joins("JOIN #{Project.table_name} ON #{Project.table_name}.id = #{DmsfFile.table_name}.project_id").visible
|
||||
|
||||
validates :title, :presence => true
|
||||
validates_format_of :name, :with => DmsfFolder::INVALID_CHARACTERS,
|
||||
validates_format_of :name, :with => /\A[^#{DmsfFolder::INVALID_CHARACTERS}]*\z/,
|
||||
:message => l(:error_contains_invalid_character)
|
||||
validates :description, length: { maximum: 1.kilobyte }
|
||||
|
||||
|
||||
@ -43,7 +43,7 @@ class DmsfFolder < ActiveRecord::Base
|
||||
:class_name => 'DmsfLock', :foreign_key => 'entity_id', :dependent => :destroy
|
||||
has_many :dmsf_folder_permissions, :dependent => :destroy
|
||||
|
||||
INVALID_CHARACTERS = /\A[^\[\]\/\\\?":<>#%\*]*\z/.freeze
|
||||
INVALID_CHARACTERS = '\[\]\/\\\?":<>#%\*'.freeze
|
||||
STATUS_DELETED = 1.freeze
|
||||
STATUS_ACTIVE = 0.freeze
|
||||
AVAILABLE_COLUMNS = %w(id title extension size modified version workflow author).freeze
|
||||
@ -97,7 +97,7 @@ class DmsfFolder < ActiveRecord::Base
|
||||
validates :title, :presence => true
|
||||
validates_uniqueness_of :title, :scope => [:dmsf_folder_id, :project_id, :deleted],
|
||||
conditions: -> { where(:deleted => STATUS_ACTIVE) }
|
||||
validates_format_of :title, :with => INVALID_CHARACTERS,
|
||||
validates_format_of :title, :with => /\A[^#{INVALID_CHARACTERS}]*\z/,
|
||||
:message => l(:error_contains_invalid_character)
|
||||
validate :check_cycle
|
||||
validates_length_of :description, :maximum => 65535
|
||||
@ -551,6 +551,13 @@ class DmsfFolder < ActiveRecord::Base
|
||||
self.save
|
||||
end
|
||||
|
||||
def self.get_valid_title(title)
|
||||
# 1. Invalid characters are replaced with dots.
|
||||
# 2. Two or more dots in a row are replaced with a single dot.
|
||||
# 3. Windows' WebClient does not like a dot at the end.
|
||||
title.gsub(/[#{INVALID_CHARACTERS}]/, '.').gsub(/\.{2,}/, '.').chomp('.')
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def self.directory_subtree(tree, folder, level, current_folder)
|
||||
|
||||
@ -86,7 +86,7 @@
|
||||
:position => position}) %>
|
||||
</tr>
|
||||
<% elsif obj.is_a?(DmsfLink) && (obj.target_type == 'DmsfFile') %>
|
||||
<% unless obj.target_file.last_revision %>
|
||||
<% unless obj.target_file && obj.target_file.last_revision %>
|
||||
<% Rails.logger.error "Error: dmsf_file id #{obj.target_id} has no revision!" %>
|
||||
<% next %>
|
||||
<% end %>
|
||||
|
||||
@ -79,7 +79,7 @@ module RedmineDmsf
|
||||
system_folder = issue.system_folder(false, old_project_id)
|
||||
if system_folder
|
||||
# Change the title if the issue's subject changed
|
||||
system_folder.title = "#{issue.id} - #{issue.subject}"
|
||||
system_folder.title = "#{issue.id} - #{DmsfFolder::get_valid_title(issue.subject)}"
|
||||
# Move system folders if needed
|
||||
if system_folder.dmsf_folder
|
||||
system_folder.dmsf_folder.project_id = project_id
|
||||
|
||||
@ -112,7 +112,7 @@ module RedmineDmsf
|
||||
folder = DmsfFolder.new
|
||||
folder.dmsf_folder_id = parent.id
|
||||
folder.project_id = prj_id
|
||||
folder.title = "#{self.id} - #{self.subject}"
|
||||
folder.title = "#{self.id} - #{DmsfFolder::get_valid_title(self.subject)}"
|
||||
folder.user_id = User.anonymous.id
|
||||
folder.system = true
|
||||
folder.save
|
||||
|
||||
@ -112,23 +112,19 @@ module RedmineDmsf
|
||||
end
|
||||
|
||||
def project_id
|
||||
self.project.id if self.project
|
||||
project.id if project
|
||||
end
|
||||
|
||||
# Characters that MATCH this regex will be replaced with dots, no more than one dot in a row.
|
||||
INVALID_CHARACTERS = /[\/\\\?":<>#%\*\[\]]/.freeze # = / \ ? " : < > # % * [ ]
|
||||
|
||||
def self.create_project_name(p)
|
||||
use_project_names = Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names']
|
||||
if use_project_names
|
||||
# 1. Invalid characters are replaced with dots.
|
||||
# 2. Two or more dots in a row are replaced with a single dot.
|
||||
# (3. Windows WebClient does not like a dot at the end, but since the project id tag is appended this is not a problem.)
|
||||
"#{p.name.gsub(INVALID_CHARACTERS, '.').gsub(/\.{2,}/, '.')} #{p.id}" if p
|
||||
else
|
||||
p.identifier if p
|
||||
end
|
||||
def self.create_project_name(project)
|
||||
if project
|
||||
if Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names']
|
||||
"#{DmsfFolder::get_valid_title(project.name)} #{project.id}"
|
||||
else
|
||||
project.identifier
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -167,4 +167,10 @@ class DmsfFolderTest < RedmineDmsf::Test::UnitTest
|
||||
assert !tree.to_s.include?('...folder2'), "'...folder2' string in the folder tree not expected."
|
||||
end
|
||||
|
||||
end
|
||||
def test_get_valid_title
|
||||
assert_equal '1052-6024 . U_CPLD_5M240Z_SMT_MBGA100_1.8V_-40',
|
||||
DmsfFolder::get_valid_title('1052-6024 : U_CPLD_5M240Z_SMT_MBGA100_1.8V_-40...')
|
||||
assert_equal 'test', DmsfFolder::get_valid_title("test#{DmsfFolder::INVALID_CHARACTERS}")
|
||||
end
|
||||
|
||||
end
|
||||
Loading…
x
Reference in New Issue
Block a user