From 8c98c23ed81ac4f93c7958d6d5c3a50327698793 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Pi=C4=8Dman?= Date: Tue, 27 May 2014 10:04:06 +0200 Subject: [PATCH] #218 Recycle bin --- app/controllers/dmsf_controller.rb | 19 ++++++++++++------- app/models/dmsf_folder.rb | 16 +++++++++++----- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/app/controllers/dmsf_controller.rb b/app/controllers/dmsf_controller.rb index 556b1b57..578c45b4 100644 --- a/app/controllers/dmsf_controller.rb +++ b/app/controllers/dmsf_controller.rb @@ -114,10 +114,10 @@ class DmsfController < ApplicationController @folder_manipulation_allowed = User.current.allowed_to? :folder_manipulation, @project @file_manipulation_allowed = User.current.allowed_to? :file_manipulation, @project @file_delete_allowed = User.current.allowed_to? :file_delete, @project - @subfolders = @project.dmsf_folders.deleted - @files = @project.dmsf_files.deleted - @dir_links = @project.folder_links.deleted - @file_links = @project.file_links.deleted + @subfolders = DmsfFolder.deleted.where(:project_id => @project.id) + @files = DmsfFile.deleted.where(:project_id => @project.id) + @dir_links = DmsfLink.deleted.where(:project_id => @project.id, :target_type => DmsfFolder.model_name) + @file_links = DmsfLink.deleted.where(:project_id => @project.id, :target_type => DmsfFile.model_name) end def download_email_entries @@ -329,12 +329,17 @@ class DmsfController < ApplicationController end def delete - if @folder.delete + commit = params[:commit] == 'yes' + if @folder.delete(commit) flash[:notice] = l(:notice_folder_deleted) else flash[:error] = folder.errors[:base][0] - end - redirect_to dmsf_folder_path(:id => @project, :folder_id => @folder) + end + if commit + redirect_to :back + else + redirect_to dmsf_folder_path(:id => @project, :folder_id => @folder.folder) + end end def restore diff --git a/app/models/dmsf_folder.rb b/app/models/dmsf_folder.rb index 26293831..950176e1 100644 --- a/app/models/dmsf_folder.rb +++ b/app/models/dmsf_folder.rb @@ -85,20 +85,26 @@ class DmsfFolder < ActiveRecord::Base end end - def delete + def delete(commit) if self.locked? errors[:base] << l(:error_folder_is_locked) return false elsif !self.subfolders.visible.empty? || !self.files.visible.empty? errors[:base] << l(:error_folder_is_not_empty) return false - end - self.deleted = true - self.deleted_by_user = User.current - self.save + end + self.referenced_links.each { |l| l.delete(commit) } + if commit + self.destroy + else + self.deleted = true + self.deleted_by_user = User.current + self.save + end end def restore + self.referenced_links.each { |l| l.restore } self.deleted = false self.deleted_by_user = nil self.save