Functionality for MOVE (incomplete)

Todo: Determine best approach for cross-project moves
Determine best approach for merging resource in case of overwrite
Start file move functionality (Collection works)
This commit is contained in:
Daniel Munn 2012-06-12 17:20:54 +01:00
parent 1e3e644da0
commit 24c2646d8e
3 changed files with 74 additions and 10 deletions

View File

@ -27,11 +27,10 @@ module RedmineDmsf
def folder? def folder?
return @_folder unless @_folder.nil? return @_folder unless @_folder.nil?
@_folder = false @_folder = false
folders = DmsfFolder.find(:all, :conditions => ["project_id = :project_id", {:project_id => self.Project.id}], :order => "title ASC") folders = DmsfFolder.find(:all, :conditions => ["project_id = :project_id AND title = :title", {:project_id => self.Project.id, :title => basename}], :order => "title ASC")
folders.delete_if {|x| x.title != basename}
return false unless folders.length > 0 return false unless folders.length > 0
if (folders.length > 1) then if (folders.length > 1) then
folders.delete_if {|x| x.dmsf_path_str != projectless_path} folders.delete_if {|x| '/'+x.dmsf_path_str != projectless_path}
return false unless folders.length > 0 return false unless folders.length > 0
@_folder=true @_folder=true
@_folderdata = folders[0] @_folderdata = folders[0]
@ -113,7 +112,6 @@ module RedmineDmsf
end end
def make_collection def make_collection
debugger
if (request.body.read.to_s == '') if (request.body.read.to_s == '')
_folder = false _folder = false
@ -133,18 +131,62 @@ module RedmineDmsf
end end
end end
return MethodNotAllowed unless _folder return MethodNotAllowed unless _folder
folder = DmsfFolder.new({:title => basename, :dmsf_folder_id => _folderdata.id, :description => 'Folder created from WebDav'}) f = DmsfFolder.new({:title => basename, :dmsf_folder_id => _folderdata.id, :description => 'Folder created from WebDav'})
else else
folder = DmsfFolder.new({:title => basename, :dmsf_folder_id => nil, :description => 'Folder created from WebDav'}) f = DmsfFolder.new({:title => basename, :dmsf_folder_id => nil, :description => 'Folder created from WebDav'})
end end
folder.project = self.Project f.project = self.Project
folder.user = User.current f.user = User.current
folder.save ? OK : MethodNotAllowed f.save ? OK : MethodNotAllowed
else else
UnsupportedMediaType UnsupportedMediaType
end end
end end
def delete
if(file?) then
@_filedata.delete ? NoContent : Conflict
elsif (folder?) then
@_folderdata.delete ? NoContent : Conflict
else
NotFound
end
end
def move(dest, overwrite)
return PreconditionFailed if !dest.Resource.is_a?(DmsfResource) || dest.Resource.Project.nil? || dest.Resource.Project.id == 0
if (collection?)
#Current object is a folder, so now we need to figure out information about Destination
if(dest.exist?) then
STDOUT.puts "Exist?"
else
if(File.basename(File.dirname(dest.Resource.projectless_path)) == "/") #Project root
if(self.Project.id != dest.Resource.Project.id) then
return MethodNotImplemented
end
folder.dmsf_folder_id = nil
else
parent = dest.Resource.parent #Grab parent Resource
return PreconditionFailed unless parent.exist? && parent.folder?
folder.dmsf_folder_id = parent.folder.id
end
folder.title = dest.Resource.basename
folder.save ? Created : PreconditionFailed
end
else
STDOUT.puts "Not a col"
end
end
def folder
return @_folderdata if folder?
end
def file
return @_filedata if file?
end
protected protected
def download def download
raise NotFound unless file? raise NotFound unless file?

View File

@ -12,7 +12,7 @@ module RedmineDmsf
@Projects = Project.visible.find(:all, :order => 'lft') @Projects = Project.visible.find(:all, :order => 'lft')
@Projects.delete_if { |node| node.module_enabled?('dmsf').nil? } @Projects.delete_if { |node| node.module_enabled?('dmsf').nil? }
end end
return nil if @Projects.nil? || @Projects.empty? return [] if @Projects.nil? || @Projects.empty?
@Projects.map do |p| @Projects.map do |p|
child p.identifier child p.identifier
end end

View File

@ -74,9 +74,31 @@ module RedmineDmsf
@resource_c.make_collection @resource_c.make_collection
end end
def delete
@resource_c.delete
end
def special_type def special_type
@resource_c.special_type @resource_c.special_type
end end
def move(dest, overwrite)
@resource_c.move(dest, overwrite)
end
def lock(*args)
debugger
@resource_c.lock(*args)
end
def check_lock(*args)
debugger
@resource_c.check_lock(*args)
end
def Resource
@resource_c
end
end end
end end
end end