diff --git a/app/models/dmsf_folder.rb b/app/models/dmsf_folder.rb
index acc77fe0..95eac1f5 100644
--- a/app/models/dmsf_folder.rb
+++ b/app/models/dmsf_folder.rb
@@ -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
diff --git a/app/views/dmsf/edit.html.erb b/app/views/dmsf/edit.html.erb
index eafeab1b..9e6fb06a 100644
--- a/app/views/dmsf/edit.html.erb
+++ b/app/views/dmsf/edit.html.erb
@@ -71,12 +71,12 @@
<%= f.text_field(:title, :required => true) %>
-
+
<%= 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))
- %>
+ %>
<%= f.text_area :description, :rows => 8, :class => 'wiki-edit' %>
diff --git a/db/migrate/20171110155901_add_index_to_dmsf_folder.rb b/db/migrate/20171110155901_add_index_to_dmsf_folder.rb
new file mode 100644
index 00000000..948a444b
--- /dev/null
+++ b/db/migrate/20171110155901_add_index_to_dmsf_folder.rb
@@ -0,0 +1,29 @@
+# encoding: utf-8
+#
+# Redmine plugin for Document Management System "Features"
+#
+# Copyright (C) 2011-17 Karel Pičman
+#
+# 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
\ No newline at end of file
diff --git a/test/functional/dmsf_controller_test.rb b/test/functional/dmsf_controller_test.rb
index 53b9a2a1..f4626792 100644
--- a/test/functional/dmsf_controller_test.rb
+++ b/test/functional/dmsf_controller_test.rb
@@ -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
\ No newline at end of file
diff --git a/test/unit/dmsf_folder_test.rb b/test/unit/dmsf_folder_test.rb
index 4e735ec4..b25cc3fc 100644
--- a/test/unit/dmsf_folder_test.rb
+++ b/test/unit/dmsf_folder_test.rb
@@ -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
\ No newline at end of file
+
+ 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