diff --git a/app/controllers/dmsf_folders_copy_controller.rb b/app/controllers/dmsf_folders_copy_controller.rb index a6a430c5..c4ef2069 100644 --- a/app/controllers/dmsf_folders_copy_controller.rb +++ b/app/controllers/dmsf_folders_copy_controller.rb @@ -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 diff --git a/app/models/dmsf_folder.rb b/app/models/dmsf_folder.rb index 4ee81a85..b0dc0ff8 100644 --- a/app/models/dmsf_folder.rb +++ b/app/models/dmsf_folder.rb @@ -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) diff --git a/config/locales/cs.yml b/config/locales/cs.yml index 21c1c42d..b874769b 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -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" \ No newline at end of file diff --git a/config/locales/de.yml b/config/locales/de.yml index f19de524..10c83e0d 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -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" \ No newline at end of file diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml index f57203a8..65534338 100644 --- a/config/locales/en-GB.yml +++ b/config/locales/en-GB.yml @@ -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" \ No newline at end of file diff --git a/config/locales/en-IS.yml b/config/locales/en-IS.yml index f57203a8..65534338 100644 --- a/config/locales/en-IS.yml +++ b/config/locales/en-IS.yml @@ -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" \ No newline at end of file diff --git a/config/locales/en.yml b/config/locales/en.yml index 64e3d5ad..429a93f0 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -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" \ No newline at end of file diff --git a/config/locales/es.yml b/config/locales/es.yml index b2b03887..2bf8c994 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -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" \ No newline at end of file diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 8278b0c5..eefb9cd7 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -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" \ No newline at end of file diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 36e2e40d..dcbeb805 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -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" \ No newline at end of file diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 510234f9..03906504 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -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" \ No newline at end of file diff --git a/config/locales/zh.yml b/config/locales/zh.yml index 6ea2a133..d9754216 100644 --- a/config/locales/zh.yml +++ b/config/locales/zh.yml @@ -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" \ No newline at end of file