'Create folder' takes a very long time #803

This commit is contained in:
Karel Picman 2017-11-13 15:09:09 +01:00
parent c4087c7a63
commit e0f07b25f0
5 changed files with 80 additions and 9 deletions

View File

@ -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

View File

@ -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' %>

View 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

View File

@ -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

View File

@ -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