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:
parent
1e3e644da0
commit
24c2646d8e
@ -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?
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user