diff --git a/app/models/dmsf_file.rb b/app/models/dmsf_file.rb index 337b850b..8e295868 100644 --- a/app/models/dmsf_file.rb +++ b/app/models/dmsf_file.rb @@ -1,6 +1,7 @@ # Redmine plugin for Document Management System "Features" # -# Copyright (C) 2011 Vít Jonáš +# Copyright (C) 2011 Vít Jonáš +# Copyright (C) 2011-14 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 @@ -81,10 +82,6 @@ class DmsfFile < ActiveRecord::Base @@storage_path = obj end - def self.project_root_files(project) - visible.where(:project_id => project.id, :dmsf_folder_id => nil).order('name ASC') - end - def self.find_file_by_name(project, folder, name) where( :project_id => project, diff --git a/app/models/dmsf_folder.rb b/app/models/dmsf_folder.rb index 3c25fdd0..577a25f1 100644 --- a/app/models/dmsf_folder.rb +++ b/app/models/dmsf_folder.rb @@ -74,10 +74,6 @@ class DmsfFolder < ActiveRecord::Base return true end - def self.project_root_folders(project) - visible.where(:project_id => project.id, :dmsf_folder_id => nil, ).order('title ASC').all - end - def self.find_by_title(project, folder, title) if folder visible.where(:project_id => project.id, :dmsf_folder_id => nil, :title => title).first @@ -132,7 +128,7 @@ class DmsfFolder < ActiveRecord::Base def self.directory_tree(project, current_folder = nil) tree = [[l(:link_documents), nil]] - DmsfFolder.visible.project_root_folders(project).each do |folder| + project.dmsf_folders.visible.each do |folder| unless folder == current_folder tree.push(["...#{folder.title}", folder.id]) directory_subtree(tree, folder, 2, current_folder) diff --git a/app/models/dmsf_link.rb b/app/models/dmsf_link.rb index 37d9e0b3..c79d747e 100644 --- a/app/models/dmsf_link.rb +++ b/app/models/dmsf_link.rb @@ -92,7 +92,7 @@ class DmsfLink < ActiveRecord::Base :target_type => self.target_type, :name => self.name, :project_id => project.id, - :dmsf_folder_id => folder.id) + :dmsf_folder_id => folder ? folder.id : nil) link.save link end diff --git a/lib/redmine_dmsf/patches/project_patch.rb b/lib/redmine_dmsf/patches/project_patch.rb index 6113c020..f7937079 100644 --- a/lib/redmine_dmsf/patches/project_patch.rb +++ b/lib/redmine_dmsf/patches/project_patch.rb @@ -1,8 +1,8 @@ # Redmine plugin for Document Management System "Features" # -# Copyright (C) 2011 Vít Jonáš -# Copyright (C) 2012 Daniel Munn -# Copyright (C) 2013 Karel Pičman +# Copyright (C) 2011 Vít Jonáš +# Copyright (C) 2012 Daniel Munn +# Copyright (C) 2011-14 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 @@ -25,8 +25,7 @@ module RedmineDmsf module ProjectPatch def self.included(base) # :nodoc: - base.send(:include, InstanceMethods) - base.extend(ClassMethods) + base.send(:include, InstanceMethods) base.class_eval do unloadable alias_method_chain :copy, :dmsf @@ -43,19 +42,18 @@ module RedmineDmsf :conditions => { :dmsf_folder_id => nil, :target_type => DmsfFile.model_name }, :dependent => :destroy end - end - - module ClassMethods - end - + module InstanceMethods def dmsf_count - file_count = DmsfFile.visible.project_root_files(self).count - folder_count = DmsfFolder.visible.project_root_folders(self).count - DmsfFolder.visible.project_root_folders(self).each {|rootfld| file_count += rootfld.deep_file_count; folder_count += rootfld.deep_folder_count } - {:files => file_count, :folders => folder_count} + file_count = self.dmsf_files.visible.count + folder_count = self.dmsf_folders.visible.count + self.dmsf_folders.visible.each do |f| + file_count += f.deep_file_count + folder_count += f.deep_folder_count + end + { :files => file_count, :folders => folder_count } end def copy_with_dmsf(project, options={}) @@ -77,19 +75,26 @@ module RedmineDmsf # Simple yet effective approach to copying things def copy_dmsf(project) - DmsfFile.visible.project_root_files(project).each {|f| + project.dmsf_folders.visible.each do |f| f.copy_to(self, nil) - } - DmsfFolder.visible.project_root_folders(project).each {|f| + end + project.dmsf_files.visible.each do |f| f.copy_to(self, nil) - } + end + project.folder_links.visible.each do |l| + l.copy_to(self, nil) + end + project.file_links.visible.each do |l| + l.copy_to(self, nil) + end end end + end end end -#Apply patch +# Apply patch Rails.configuration.to_prepare do unless Project.included_modules.include?(RedmineDmsf::Patches::ProjectPatch) Project.send(:include, RedmineDmsf::Patches::ProjectPatch) diff --git a/test/integration/dmsf_webdav_delete_test.rb b/test/integration/dmsf_webdav_delete_test.rb index 87f6779c..fd38d00e 100644 --- a/test/integration/dmsf_webdav_delete_test.rb +++ b/test/integration/dmsf_webdav_delete_test.rb @@ -73,7 +73,7 @@ class DmsfWebdavIntegrationTest < RedmineDmsf::Test::IntegrationTest file = DmsfFile.find_file_by_name(project, nil, "test.txt") assert !file.nil?, 'File test.txt is expected to exist' - assert_difference('DmsfFile.project_root_files(project).length', -1) do + assert_difference('project.dmsf_files.count', -1) do delete "dmsf/webdav/#{project.identifier}/test.txt", nil, @admin assert_response :success #If its in the 20x range it's acceptable, should be 204 end