* done Issue 142: Copy Folder option
git-svn-id: http://redmine-dmsf.googlecode.com/svn/trunk/redmine_dmsf@255 5e329b0b-a2ee-ea63-e329-299493fc886d
This commit is contained in:
parent
9de584984e
commit
2b2101e903
@ -52,10 +52,10 @@ class DmsfFoldersCopyController < ApplicationController
|
||||
raise DmsfAccessError, l(:error_entry_project_does_not_match_current_project)
|
||||
end
|
||||
|
||||
if (!@target_folder.nil? && @target_folder == @file.folder) ||
|
||||
(@target_folder.nil? && @file.folder.nil? && @target_project == @file.project)
|
||||
if (!@target_folder.nil? && @target_folder == @folder.folder) ||
|
||||
(@target_folder.nil? && @folder.folder.nil? && @target_project == @folder.project)
|
||||
flash[:error] = l(:error_target_folder_same)
|
||||
redirect_to :action => "new", :id => @file, :target_project_id => @target_project, :target_folder_id => @target_folder
|
||||
redirect_to :action => "new", :id => @folder, :target_project_id => @target_project, :target_folder_id => @target_folder
|
||||
return
|
||||
end
|
||||
|
||||
@ -63,25 +63,29 @@ class DmsfFoldersCopyController < ApplicationController
|
||||
|
||||
unless new_folder.errors.empty?
|
||||
flash[:error] = "#{l(:error_folder_cannot_be_copied)}: #{new_folder.errors.full_messages.join(", ")}"
|
||||
redirect_to :action => "new", :id => @file, :target_project_id => @target_project, :target_folder_id => @target_folder
|
||||
redirect_to :action => "new", :id => @folder, :target_project_id => @target_project, :target_folder_id => @target_folder
|
||||
return
|
||||
end
|
||||
|
||||
new_folder.reload
|
||||
|
||||
flash[:notice] = l(:notice_folder_copied)
|
||||
log_activity(new_folder, "was copied (is copy)")
|
||||
begin
|
||||
DmsfMailer.deliver_files_updated(User.current, [new_file])
|
||||
rescue ActionView::MissingTemplate => e
|
||||
Rails.logger.error "Could not send email notifications: " + e
|
||||
end
|
||||
|
||||
redirect_to :controller => "dmsf_files", :action => "show", :id => new_file
|
||||
#TODO: implement proper notification for all new files
|
||||
#begin
|
||||
# DmsfMailer.deliver_files_updated(User.current, [new_file])
|
||||
#rescue ActionView::MissingTemplate => e
|
||||
# Rails.logger.error "Could not send email notifications: " + e
|
||||
#end
|
||||
|
||||
redirect_to :controller => "dmsf", :action => "show", :id => @target_project, :folder_id => new_folder
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def log_activity(folder, action)
|
||||
Rails.logger.info "#{Time.now.strftime('%Y-%m-%d %H:%M:%S')} #{User.current.login}@#{request.remote_ip}/#{request.env['HTTP_X_FORWARDED_FOR']}: #{action} dmsf://#{file.project.identifier}/#{file.id}/#{file.last_revision.id}"
|
||||
Rails.logger.info "#{Time.now.strftime('%Y-%m-%d %H:%M:%S')} #{User.current.login}@#{request.remote_ip}/#{request.env['HTTP_X_FORWARDED_FOR']}: #{action} dmsf://#{folder.project.identifier}/#{folder.id}"
|
||||
end
|
||||
|
||||
def find_folder
|
||||
|
||||
@ -61,6 +61,18 @@ class DmsfFolder < ActiveRecord::Base
|
||||
["dmsf_folder_id is NULL and project_id = :project_id", {:project_id => project.id}], :order => "title ASC")
|
||||
end
|
||||
|
||||
def self.find_by_title(project, folder, title)
|
||||
if folder.nil?
|
||||
find(:first, :conditions =>
|
||||
["dmsf_folder_id is NULL and project_id = :project_id and title = :title",
|
||||
{:project_id => project.id, :title => title}])
|
||||
else
|
||||
find(:first, :conditions =>
|
||||
["dmsf_folder_id = :folder_id and title = :title",
|
||||
{:project_id => project.id, :folder_id => folder.id, :title => title}])
|
||||
end
|
||||
end
|
||||
|
||||
def delete
|
||||
return false if !self.subfolders.empty? || !self.files.empty?
|
||||
destroy
|
||||
@ -133,6 +145,27 @@ class DmsfFolder < ActiveRecord::Base
|
||||
projects
|
||||
end
|
||||
|
||||
def copy_to(project, folder)
|
||||
new_folder = DmsfFolder.new
|
||||
new_folder.folder = folder ? folder : nil
|
||||
new_folder.project = folder ? folder.project : project
|
||||
new_folder.title = self.title
|
||||
new_folder.description = self.description
|
||||
new_folder.user = User.current
|
||||
|
||||
return new_folder unless new_folder.save
|
||||
|
||||
self.files.each do |f|
|
||||
f.copy_to(project, new_folder)
|
||||
end
|
||||
|
||||
self.subfolders.each do |s|
|
||||
s.copy_to(project, new_folder)
|
||||
end
|
||||
|
||||
return new_folder
|
||||
end
|
||||
|
||||
# To fullfill searchable module expectations
|
||||
def self.search(tokens, projects=nil, options={})
|
||||
tokens = [] << tokens unless tokens.is_a?(Array)
|
||||
|
||||
@ -178,4 +178,8 @@ cs:
|
||||
:error_target_folder_same: "Cílový adresář a projekt jsou stejné jako aktuální"
|
||||
:error_file_cannot_be_moved: "Soubor nemůže být přesunut"
|
||||
:error_file_cannot_be_copied: "Soubor nemůže být zkopírován"
|
||||
:warning_no_project_to_copy_folder_to: "Neexistuje projekt, do kterého můžete kopírovat"
|
||||
:title_copy: "Kopírovat"
|
||||
:error_folder_cannot_be_copied: "Složka nemůže být zkopírována"
|
||||
:notice_folder_copied: "Složka zkopírována"
|
||||
|
||||
@ -179,4 +179,8 @@ de:
|
||||
:error_target_folder_same: "Target folder and project are the same as current"
|
||||
:error_file_cannot_be_moved: "File can't be moved"
|
||||
:error_file_cannot_be_copied: "File can't be copied"
|
||||
:warning_no_project_to_copy_folder_to: "No project to copy folder to"
|
||||
:title_copy: "Copy"
|
||||
:error_folder_cannot_be_copied: "Folder can't be copied"
|
||||
:notice_folder_copied: "Folder copied"
|
||||
|
||||
@ -174,4 +174,8 @@ en-GB:
|
||||
:error_target_folder_same: "Target folder and project are the same as current"
|
||||
:error_file_cannot_be_moved: "File can't be moved"
|
||||
:error_file_cannot_be_copied: "File can't be copied"
|
||||
:warning_no_project_to_copy_folder_to: "No project to copy folder to"
|
||||
:title_copy: "Copy"
|
||||
:error_folder_cannot_be_copied: "Folder can't be copied"
|
||||
:notice_folder_copied: "Folder copied"
|
||||
|
||||
@ -174,4 +174,8 @@ en-GB:
|
||||
:error_target_folder_same: "Target folder and project are the same as current"
|
||||
:error_file_cannot_be_moved: "File can't be moved"
|
||||
:error_file_cannot_be_copied: "File can't be copied"
|
||||
:warning_no_project_to_copy_folder_to: "No project to copy folder to"
|
||||
:title_copy: "Copy"
|
||||
:error_folder_cannot_be_copied: "Folder can't be copied"
|
||||
:notice_folder_copied: "Folder copied"
|
||||
|
||||
@ -178,8 +178,8 @@ en:
|
||||
:error_target_folder_same: "Target folder and project are the same as current"
|
||||
:error_file_cannot_be_moved: "File can't be moved"
|
||||
:error_file_cannot_be_copied: "File can't be copied"
|
||||
|
||||
:warning_no_project_to_copy_folder_to: "No project to copy folder to"
|
||||
:title_copy: "Copy"
|
||||
:error_folder_cannot_be_copied: "Folder can't be copied"
|
||||
:notice_folder_copied: "Folder copied"
|
||||
|
||||
@ -176,4 +176,8 @@ es:
|
||||
:error_target_folder_same: "Target folder and project are the same as current"
|
||||
:error_file_cannot_be_moved: "File can't be moved"
|
||||
:error_file_cannot_be_copied: "File can't be copied"
|
||||
:warning_no_project_to_copy_folder_to: "No project to copy folder to"
|
||||
:title_copy: "Copy"
|
||||
:error_folder_cannot_be_copied: "Folder can't be copied"
|
||||
:notice_folder_copied: "Folder copied"
|
||||
|
||||
@ -174,4 +174,8 @@ fr:
|
||||
:error_target_folder_same: "Target folder and project are the same as current"
|
||||
:error_file_cannot_be_moved: "File can't be moved"
|
||||
:error_file_cannot_be_copied: "File can't be copied"
|
||||
:warning_no_project_to_copy_folder_to: "No project to copy folder to"
|
||||
:title_copy: "Copy"
|
||||
:error_folder_cannot_be_copied: "Folder can't be copied"
|
||||
:notice_folder_copied: "Folder copied"
|
||||
|
||||
@ -179,4 +179,8 @@ ja:
|
||||
:error_target_folder_same: "Target folder and project are the same as current"
|
||||
:error_file_cannot_be_moved: "File can't be moved"
|
||||
:error_file_cannot_be_copied: "File can't be copied"
|
||||
:warning_no_project_to_copy_folder_to: "No project to copy folder to"
|
||||
:title_copy: "Copy"
|
||||
:error_folder_cannot_be_copied: "Folder can't be copied"
|
||||
:notice_folder_copied: "Folder copied"
|
||||
|
||||
@ -180,4 +180,8 @@ ru:
|
||||
:error_target_folder_same: "Target folder and project are the same as current"
|
||||
:error_file_cannot_be_moved: "File can't be moved"
|
||||
:error_file_cannot_be_copied: "File can't be copied"
|
||||
:warning_no_project_to_copy_folder_to: "No project to copy folder to"
|
||||
:title_copy: "Copy"
|
||||
:error_folder_cannot_be_copied: "Folder can't be copied"
|
||||
:notice_folder_copied: "Folder copied"
|
||||
|
||||
@ -181,4 +181,8 @@ zh:
|
||||
:error_target_folder_same: "Target folder and project are the same as current"
|
||||
:error_file_cannot_be_moved: "File can't be moved"
|
||||
:error_file_cannot_be_copied: "File can't be copied"
|
||||
:warning_no_project_to_copy_folder_to: "No project to copy folder to"
|
||||
:title_copy: "Copy"
|
||||
:error_folder_cannot_be_copied: "Folder can't be copied"
|
||||
:notice_folder_copied: "Folder copied"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user