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