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) }
|
scope :deleted, -> { where(:deleted => STATUS_DELETED) }
|
||||||
|
|
||||||
validates :name, :presence => true
|
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)
|
:message => l(:error_contains_invalid_character)
|
||||||
|
|
||||||
validate :validates_name_uniqueness
|
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
|
joins("JOIN #{Project.table_name} ON #{Project.table_name}.id = #{DmsfFile.table_name}.project_id").visible
|
||||||
|
|
||||||
validates :title, :presence => true
|
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)
|
:message => l(:error_contains_invalid_character)
|
||||||
validates :description, length: { maximum: 1.kilobyte }
|
validates :description, length: { maximum: 1.kilobyte }
|
||||||
|
|
||||||
|
|||||||
@ -43,7 +43,7 @@ class DmsfFolder < ActiveRecord::Base
|
|||||||
:class_name => 'DmsfLock', :foreign_key => 'entity_id', :dependent => :destroy
|
:class_name => 'DmsfLock', :foreign_key => 'entity_id', :dependent => :destroy
|
||||||
has_many :dmsf_folder_permissions, :dependent => :destroy
|
has_many :dmsf_folder_permissions, :dependent => :destroy
|
||||||
|
|
||||||
INVALID_CHARACTERS = /\A[^\[\]\/\\\?":<>#%\*]*\z/.freeze
|
INVALID_CHARACTERS = '\[\]\/\\\?":<>#%\*'.freeze
|
||||||
STATUS_DELETED = 1.freeze
|
STATUS_DELETED = 1.freeze
|
||||||
STATUS_ACTIVE = 0.freeze
|
STATUS_ACTIVE = 0.freeze
|
||||||
AVAILABLE_COLUMNS = %w(id title extension size modified version workflow author).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 :title, :presence => true
|
||||||
validates_uniqueness_of :title, :scope => [:dmsf_folder_id, :project_id, :deleted],
|
validates_uniqueness_of :title, :scope => [:dmsf_folder_id, :project_id, :deleted],
|
||||||
conditions: -> { where(:deleted => STATUS_ACTIVE) }
|
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)
|
:message => l(:error_contains_invalid_character)
|
||||||
validate :check_cycle
|
validate :check_cycle
|
||||||
validates_length_of :description, :maximum => 65535
|
validates_length_of :description, :maximum => 65535
|
||||||
@ -551,6 +551,13 @@ class DmsfFolder < ActiveRecord::Base
|
|||||||
self.save
|
self.save
|
||||||
end
|
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
|
private
|
||||||
|
|
||||||
def self.directory_subtree(tree, folder, level, current_folder)
|
def self.directory_subtree(tree, folder, level, current_folder)
|
||||||
|
|||||||
@ -86,7 +86,7 @@
|
|||||||
:position => position}) %>
|
:position => position}) %>
|
||||||
</tr>
|
</tr>
|
||||||
<% elsif obj.is_a?(DmsfLink) && (obj.target_type == 'DmsfFile') %>
|
<% 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!" %>
|
<% Rails.logger.error "Error: dmsf_file id #{obj.target_id} has no revision!" %>
|
||||||
<% next %>
|
<% next %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|||||||
@ -79,7 +79,7 @@ module RedmineDmsf
|
|||||||
system_folder = issue.system_folder(false, old_project_id)
|
system_folder = issue.system_folder(false, old_project_id)
|
||||||
if system_folder
|
if system_folder
|
||||||
# Change the title if the issue's subject changed
|
# 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
|
# Move system folders if needed
|
||||||
if system_folder.dmsf_folder
|
if system_folder.dmsf_folder
|
||||||
system_folder.dmsf_folder.project_id = project_id
|
system_folder.dmsf_folder.project_id = project_id
|
||||||
|
|||||||
@ -112,7 +112,7 @@ module RedmineDmsf
|
|||||||
folder = DmsfFolder.new
|
folder = DmsfFolder.new
|
||||||
folder.dmsf_folder_id = parent.id
|
folder.dmsf_folder_id = parent.id
|
||||||
folder.project_id = prj_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.user_id = User.anonymous.id
|
||||||
folder.system = true
|
folder.system = true
|
||||||
folder.save
|
folder.save
|
||||||
|
|||||||
@ -112,23 +112,19 @@ module RedmineDmsf
|
|||||||
end
|
end
|
||||||
|
|
||||||
def project_id
|
def project_id
|
||||||
self.project.id if self.project
|
project.id if project
|
||||||
end
|
end
|
||||||
|
|
||||||
# Characters that MATCH this regex will be replaced with dots, no more than one dot in a row.
|
def self.create_project_name(project)
|
||||||
INVALID_CHARACTERS = /[\/\\\?":<>#%\*\[\]]/.freeze # = / \ ? " : < > # % * [ ]
|
if project
|
||||||
|
if Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names']
|
||||||
def self.create_project_name(p)
|
"#{DmsfFolder::get_valid_title(project.name)} #{project.id}"
|
||||||
use_project_names = Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names']
|
else
|
||||||
if use_project_names
|
project.identifier
|
||||||
# 1. Invalid characters are replaced with dots.
|
end
|
||||||
# 2. Two or more dots in a row are replaced with a single dot.
|
end
|
||||||
# (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
|
|
||||||
end
|
end
|
||||||
|
|
||||||
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."
|
assert !tree.to_s.include?('...folder2'), "'...folder2' string in the folder tree not expected."
|
||||||
end
|
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