'Create folder' takes a very long time #803
This commit is contained in:
parent
c4087c7a63
commit
e0f07b25f0
@ -225,10 +225,10 @@ class DmsfFolder < ActiveRecord::Base
|
||||
project = Project.find_by_id project
|
||||
end
|
||||
tree = [[l(:link_documents), nil]]
|
||||
project.dmsf_folders.notsystem.visible(false).each do |folder|
|
||||
DmsfFolder.where(:project_id => project.id).notsystem.visible(false).each do |folder|
|
||||
unless folder == current_folder
|
||||
tree.push(["...#{folder.title}", folder.id])
|
||||
directory_subtree(tree, folder, 2, current_folder)
|
||||
DmsfFolder.directory_subtree(tree, folder, 2, current_folder)
|
||||
end
|
||||
end
|
||||
return tree
|
||||
@ -236,7 +236,7 @@ class DmsfFolder < ActiveRecord::Base
|
||||
|
||||
def folder_tree
|
||||
tree = [[self.title, self.id]]
|
||||
DmsfFolder.directory_subtree(tree, self, 2, nil)
|
||||
DmsfFolder.directory_subtree(tree, self, 1, nil)
|
||||
return tree
|
||||
end
|
||||
|
||||
@ -580,10 +580,10 @@ class DmsfFolder < ActiveRecord::Base
|
||||
private
|
||||
|
||||
def self.directory_subtree(tree, folder, level, current_folder)
|
||||
folder.dmsf_folders.visible(false).each do |subfolder|
|
||||
DmsfFolder.where(:project_id => folder.project_id, :dmsf_folder_id => folder.id).notsystem.visible(false).each do |subfolder|
|
||||
unless subfolder == current_folder
|
||||
tree.push(["#{'...' * level}#{subfolder.title}", subfolder.id])
|
||||
directory_subtree(tree, subfolder, level + 1, current_folder)
|
||||
DmsfFolder.directory_subtree(tree, subfolder, level + 1, current_folder)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -71,12 +71,12 @@
|
||||
<p>
|
||||
<%= f.text_field(:title, :required => true) %>
|
||||
</p>
|
||||
<p>
|
||||
<p>
|
||||
<%= f.select(:dmsf_folder_id,
|
||||
options_for_select(DmsfFolder.directory_tree(@project, @folder),
|
||||
:selected => @parent? @parent.id : (@pathfolder.id if @pathfolder)),
|
||||
:label => l(:field_folder))
|
||||
%>
|
||||
%>
|
||||
</p>
|
||||
<p>
|
||||
<%= f.text_area :description, :rows => 8, :class => 'wiki-edit' %>
|
||||
|
||||
29
db/migrate/20171110155901_add_index_to_dmsf_folder.rb
Normal file
29
db/migrate/20171110155901_add_index_to_dmsf_folder.rb
Normal file
@ -0,0 +1,29 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine plugin for Document Management System "Features"
|
||||
#
|
||||
# Copyright (C) 2011-17 Karel Pičman <karel.picman@kontron.com>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# 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.
|
||||
|
||||
class AddIndexToDmsfFolder < ActiveRecord::Migration
|
||||
def self.up
|
||||
add_index :dmsf_folders, :dmsf_folder_id
|
||||
end
|
||||
|
||||
def self.down
|
||||
remove_index :dmsf_folders, :dmsf_folder_id
|
||||
end
|
||||
end
|
||||
@ -213,4 +213,16 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
||||
assert_equal 'text/csv; header=present', @response.content_type
|
||||
end
|
||||
|
||||
def test_new_forbidden
|
||||
@role.remove_permission! :folder_manipulation
|
||||
get :new, :id => @project, :parent_id => nil
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_new_forbidden
|
||||
@role.add_permission! :folder_manipulation
|
||||
get :new, :id => @project, :parent_id => nil
|
||||
assert_response :success
|
||||
end
|
||||
|
||||
end
|
||||
@ -28,6 +28,8 @@ class DmsfFolderTest < RedmineDmsf::Test::UnitTest
|
||||
@project = Project.find_by_id 1
|
||||
assert_not_nil @project
|
||||
@project.enable_module! :dmsf
|
||||
@folder1 = DmsfFolder.find_by_id 1
|
||||
@folder2 = DmsfFolder.find_by_id 2
|
||||
@folder4 = DmsfFolder.find_by_id 4
|
||||
@folder5 = DmsfFolder.find_by_id 5
|
||||
@folder6 = DmsfFolder.find_by_id 6
|
||||
@ -38,9 +40,12 @@ class DmsfFolderTest < RedmineDmsf::Test::UnitTest
|
||||
manager_role.add_permission! :view_dmsf_folders
|
||||
developer_role = Role.find 2
|
||||
developer_role.add_permission! :view_dmsf_folders
|
||||
User.current = @manager
|
||||
end
|
||||
|
||||
|
||||
def test_truth
|
||||
assert_kind_of DmsfFolder, @folder1
|
||||
assert_kind_of DmsfFolder, @folder1
|
||||
assert_kind_of DmsfFolder, @folder4
|
||||
assert_kind_of DmsfFolder, @folder5
|
||||
assert_kind_of DmsfFolder, @folder6
|
||||
@ -179,4 +184,29 @@ class DmsfFolderTest < RedmineDmsf::Test::UnitTest
|
||||
csv = @folder4.to_csv(columns, 0)
|
||||
assert_equal 2, csv.size
|
||||
end
|
||||
end
|
||||
|
||||
def test_directory_tree
|
||||
tree = DmsfFolder.directory_tree(@project)
|
||||
assert tree
|
||||
# [["Documents", nil],
|
||||
# ["...folder7", 7],
|
||||
# ["...folder1", 1],
|
||||
# ["......folder2", 2]
|
||||
# [".........folder3", 5]
|
||||
# ["...folder2", 2]
|
||||
# ["......folder3", 5]
|
||||
# ["...folder3", 5]
|
||||
# ["...folder6", 6]]
|
||||
assert tree.to_s.include?('.........folder3'), "'.........folder3' string in the folder tree expected."
|
||||
end
|
||||
|
||||
def test_folder_tree
|
||||
tree = @folder1.folder_tree
|
||||
assert tree
|
||||
# [["folder1", 1],
|
||||
# ["...folder2", 2],
|
||||
# ["......folder3", 5]]
|
||||
assert tree.to_s.include?('......folder3'), "'......folder3' string in the folder tree expected."
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user