* 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:
vit.jonas@gmail.com 2011-10-11 09:35:20 +00:00
parent 9de584984e
commit 2b2101e903
12 changed files with 85 additions and 12 deletions

View File

@ -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

View File

@ -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)

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"