Copy DMSF functionality expansion
Data linkup (with dependency destruction)
This commit is contained in:
parent
bf215f4e4f
commit
82e53e7fdf
10
CHANGELOG.md
10
CHANGELOG.md
@ -1,8 +1,16 @@
|
|||||||
Changelog for Redmine DMSF
|
Changelog for Redmine DMSF
|
||||||
==========================
|
==========================
|
||||||
|
|
||||||
|
1.4.3: *Not yet released*
|
||||||
|
-----------------------
|
||||||
|
* New: Hook into project copy functionality to permit (although not attractively)
|
||||||
|
functionality for DMSF to be duplicated accross projects
|
||||||
|
* Update: Project patch defines linkage between DMSF files and DMSF folders.
|
||||||
|
* Update: Data linkage allowing dependent items to be deleted (project deletion for example)
|
||||||
|
this needs to be revised as files marked deleted are not affected by this at present
|
||||||
|
|
||||||
1.4.2: *2012-06-21*
|
1.4.2: *2012-06-21*
|
||||||
-------------------------
|
-----------------
|
||||||
* New: Integration test cases for webdav functionality
|
* New: Integration test cases for webdav functionality
|
||||||
* Update: Documentation has been converted from Simpletext to Markdown
|
* Update: Documentation has been converted from Simpletext to Markdown
|
||||||
* Update: Features listed in documentation
|
* Update: Features listed in documentation
|
||||||
|
|||||||
@ -30,9 +30,11 @@ class DmsfFile < ActiveRecord::Base
|
|||||||
belongs_to :folder, :class_name => "DmsfFolder", :foreign_key => "dmsf_folder_id"
|
belongs_to :folder, :class_name => "DmsfFolder", :foreign_key => "dmsf_folder_id"
|
||||||
has_many :revisions, :class_name => "DmsfFileRevision", :foreign_key => "dmsf_file_id",
|
has_many :revisions, :class_name => "DmsfFileRevision", :foreign_key => "dmsf_file_id",
|
||||||
:order => "major_version DESC, minor_version DESC, updated_at DESC",
|
:order => "major_version DESC, minor_version DESC, updated_at DESC",
|
||||||
:conditions => { :deleted => false }
|
:conditions => { :deleted => false },
|
||||||
|
:dependent => :destroy
|
||||||
has_many :locks, :class_name => "DmsfFileLock", :foreign_key => "dmsf_file_id",
|
has_many :locks, :class_name => "DmsfFileLock", :foreign_key => "dmsf_file_id",
|
||||||
:order => "updated_at DESC"
|
:order => "updated_at DESC",
|
||||||
|
:dependent => :destroy
|
||||||
belongs_to :deleted_by_user, :class_name => "User", :foreign_key => "deleted_by_user_id"
|
belongs_to :deleted_by_user, :class_name => "User", :foreign_key => "deleted_by_user_id"
|
||||||
|
|
||||||
validates_presence_of :name
|
validates_presence_of :name
|
||||||
|
|||||||
@ -24,9 +24,11 @@ class DmsfFolder < ActiveRecord::Base
|
|||||||
|
|
||||||
belongs_to :project
|
belongs_to :project
|
||||||
belongs_to :folder, :class_name => "DmsfFolder", :foreign_key => "dmsf_folder_id"
|
belongs_to :folder, :class_name => "DmsfFolder", :foreign_key => "dmsf_folder_id"
|
||||||
has_many :subfolders, :class_name => "DmsfFolder", :foreign_key => "dmsf_folder_id", :order => "title ASC"
|
has_many :subfolders, :class_name => "DmsfFolder", :foreign_key => "dmsf_folder_id", :order => "title ASC",
|
||||||
|
:dependent => :destroy
|
||||||
has_many :files, :class_name => "DmsfFile", :foreign_key => "dmsf_folder_id",
|
has_many :files, :class_name => "DmsfFile", :foreign_key => "dmsf_folder_id",
|
||||||
:conditions => { :deleted => false }
|
:conditions => { :deleted => false },
|
||||||
|
:dependent => :destroy
|
||||||
belongs_to :user
|
belongs_to :user
|
||||||
|
|
||||||
acts_as_customizable
|
acts_as_customizable
|
||||||
@ -129,6 +131,12 @@ class DmsfFolder < ActiveRecord::Base
|
|||||||
file_count
|
file_count
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def deep_folder_count
|
||||||
|
folder_count = self.subfolders.length
|
||||||
|
self.subfolders.each {|subfolder| folder_count += subfolder.deep_folder_count}
|
||||||
|
folder_count
|
||||||
|
end
|
||||||
|
|
||||||
def deep_size
|
def deep_size
|
||||||
size = 0
|
size = 0
|
||||||
self.files.each {|file| size += file.size}
|
self.files.each {|file| size += file.size}
|
||||||
|
|||||||
@ -0,0 +1,5 @@
|
|||||||
|
<% if @project.new_record? %>
|
||||||
|
<p>
|
||||||
|
<label class="block"><%= check_box_tag 'only[]', 'dmsf', true %><%= l(:label_dmsf_plural, @source_project.dmsf_count) %></label>
|
||||||
|
</p>
|
||||||
|
<% end %>
|
||||||
@ -191,3 +191,4 @@ en:
|
|||||||
:parent_directory: "Parent Directory"
|
:parent_directory: "Parent Directory"
|
||||||
:note_webdav: "Webdav once enabled can be found at http://.../dmsf/webdav/"
|
:note_webdav: "Webdav once enabled can be found at http://.../dmsf/webdav/"
|
||||||
:label_webdav: "Webdav functionality"
|
:label_webdav: "Webdav functionality"
|
||||||
|
:label_dmsf_plural: "Copy DMSF files and folders (%{files} files in %{folders} folders)"
|
||||||
|
|||||||
2
init.rb
2
init.rb
@ -24,7 +24,7 @@ Redmine::Plugin.register :redmine_dmsf do
|
|||||||
name "DMSF"
|
name "DMSF"
|
||||||
author "Vit Jonas / Daniel Munn"
|
author "Vit Jonas / Daniel Munn"
|
||||||
description "Document Management System Features"
|
description "Document Management System Features"
|
||||||
version "1.4.2 stable"
|
version "1.4.3 devel"
|
||||||
url "https://github.com/danmunn/redmine_dmsf"
|
url "https://github.com/danmunn/redmine_dmsf"
|
||||||
author_url "https://code.google.com/p/redmine-dmsf/"
|
author_url "https://code.google.com/p/redmine-dmsf/"
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,10 @@
|
|||||||
require 'redmine_dmsf/patches' #plugin patches
|
require 'redmine_dmsf/patches' #plugin patches
|
||||||
require 'redmine_dmsf/webdav' #DAV4Rack implementation
|
require 'redmine_dmsf/webdav' #DAV4Rack implementation
|
||||||
|
|
||||||
|
|
||||||
|
#Hooks
|
||||||
|
require 'redmine_dmsf/hooks/view_projects_form_hook'
|
||||||
|
|
||||||
module RedmineDmsf
|
module RedmineDmsf
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
18
lib/redmine_dmsf/hooks/view_projects_form_hook.rb
Normal file
18
lib/redmine_dmsf/hooks/view_projects_form_hook.rb
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
module RedmineDmsf
|
||||||
|
module Hooks
|
||||||
|
class ViewProjectsFormHook < Redmine::Hook::ViewListener
|
||||||
|
include Redmine::I18n
|
||||||
|
|
||||||
|
def view_projects_form(context={})
|
||||||
|
context[:controller].send(:render_to_string, {
|
||||||
|
:partial => "hooks/redmine_dmsf/view_projects_form",
|
||||||
|
:locals => context
|
||||||
|
})
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@ -26,6 +26,14 @@ module RedmineDmsf
|
|||||||
def self.included(base) # :nodoc:
|
def self.included(base) # :nodoc:
|
||||||
base.send(:include, InstanceMethods)
|
base.send(:include, InstanceMethods)
|
||||||
base.extend(ClassMethods)
|
base.extend(ClassMethods)
|
||||||
|
base.class_eval do
|
||||||
|
unloadable
|
||||||
|
alias_method_chain :copy, :dmsf
|
||||||
|
|
||||||
|
has_many :files, :class_name => "DmsfFile", :foreign_key => "project_id", :conditions => { :deleted => false, :dmsf_folder_id => nil }, :dependent => :destroy
|
||||||
|
has_many :folders, :class_name => "DmsfFolder", :foreign_key => "project_id", :dependent => :destroy
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
module ClassMethods
|
module ClassMethods
|
||||||
@ -35,6 +43,40 @@ module RedmineDmsf
|
|||||||
def all_dmsf_custom_fields
|
def all_dmsf_custom_fields
|
||||||
@all_dmsf_custom_fields ||= (DmsfFileRevisionCustomField.for_all).uniq.sort # + dmsf_file_revision_custom_fields).uniq.sort
|
@all_dmsf_custom_fields ||= (DmsfFileRevisionCustomField.for_all).uniq.sort # + dmsf_file_revision_custom_fields).uniq.sort
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def dmsf_count
|
||||||
|
file_count = DmsfFile.project_root_files(self).count
|
||||||
|
folder_count = DmsfFolder.project_root_folders(self).count
|
||||||
|
DmsfFolder.project_root_folders(self).each {|rootfld| file_count += rootfld.deep_file_count; folder_count += rootfld.deep_folder_count }
|
||||||
|
{:files => file_count, :folders => folder_count}
|
||||||
|
end
|
||||||
|
|
||||||
|
def copy_with_dmsf(project, options={})
|
||||||
|
copy_without_dmsf(project, options)
|
||||||
|
|
||||||
|
project = project.is_a?(Project) ? project : Project.find(project)
|
||||||
|
|
||||||
|
to_be_copied = %w(dmsf)
|
||||||
|
to_be_copied = to_be_copied & options[:only].to_a unless options[:only].nil?
|
||||||
|
|
||||||
|
if save
|
||||||
|
to_be_copied.each do |name|
|
||||||
|
send "copy_#{name}", project
|
||||||
|
end
|
||||||
|
save
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
# Simple yet effective approach to copying things
|
||||||
|
def copy_dmsf(project)
|
||||||
|
DmsfFile.project_root_files(project).each {|f|
|
||||||
|
f.copy_to(self, nil)
|
||||||
|
}
|
||||||
|
DmsfFolder.project_root_folders(project).each {|f|
|
||||||
|
f.copy_to(self, nil)
|
||||||
|
}
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user