* work on multi delete

git-svn-id: http://redmine-dmsf.googlecode.com/svn/trunk/redmine_dmsf@88 5e329b0b-a2ee-ea63-e329-299493fc886d
This commit is contained in:
vit.jonas@gmail.com 2011-05-25 12:26:01 +00:00
parent 3bc82a61cf
commit 681e58894a
4 changed files with 77 additions and 10 deletions

View File

@ -22,12 +22,61 @@ class DmsfDetailController < ApplicationController
menu_item :dmsf
before_filter :find_project
before_filter :authorize
before_filter :authorize, :except => [:delete_entries]
before_filter :find_parent, :only => [:folder_new, :create_folder, :save_folder]
before_filter :find_folder, :only => [:delete_folder, :save_folder,
:upload_files, :commit_files, :folder_detail]
:upload_files, :commit_files, :folder_detail, :delete_entries]
before_filter :find_file, :only => [:save_file, :delete_file, :file_detail]
def delete_entries
selected_folders = params[:subfolders]
selected_files = params[:files]
if selected_folders.nil? && selected_files.nil?
flash[:warning] = l(:warning_no_entries_selected)
else
failed_entries = []
deleted_files = []
unless selected_folders.nil?
if User.current.allowed_to?(:folder_manipulation, @project)
selected_folders.each do |subfolderid|
subfolder = DmsfFolder.find(subfolderid)
next if subfolder.nil?
failed_entries.push(subfolder) if subfolder.project != @project || !subfolder.delete
end
else
flash[:error] = l(:error_user_has_no_rights_delete_folder)
end
end
unless selected_files.nil?
if User.current.allowed_to?(:file_manipulation, @project)
selected_files.each do |fileid|
file = DmsfFile.find(fileid)
next if file.nil?
if file.project != @project || !file.delete
failed_entries.push(file)
else
deleted_files.push(file)
end
end
else
flash[:error] = l(:error_user_has_no_rights_delete_file)
end
end
unless deleted_files.empty?
Rails.logger.info "#{Time.now} from #{request.remote_ip}/#{request.env["HTTP_X_FORWARDED_FOR"]}: #{User.current.login} deleted from project #{@project.identifier}:"
deleted_files.each {|file| Rails.logger.info "\t#{file.dmsf_path_str}:"}
DmsfMailer.deliver_files_deleted(User.current, deleted_files)
end
if failed_entries.empty?
flash[:notice] = l(:notice_entries_deleted)
else
flash[:warning] = l(:warning_some_entries_were_not_deleted, :entries => failed_entries.map{|e| e.title}.join(", "))
end
end
redirect_to :controller => "dmsf", :action => "index", :id => @project, :folder_id => @folder
end
def folder_new
@pathfolder = @parent
render :action => "folder_detail"
@ -88,6 +137,8 @@ class DmsfDetailController < ApplicationController
def file_detail
@revision = @file.last_revision
# TODO: line bellow is to handle old instalations with errors in data handling
@revision.name = @file.name
end
#TODO: don't create revision if nothing change
@ -158,15 +209,12 @@ class DmsfDetailController < ApplicationController
def delete_file
if !@file.nil?
if @file.locked_for_user?
flash[:error] = l(:error_file_is_locked)
else
@file.deleted = true
@file.deleted_by_user = User.current
@file.save
if @file.delete
flash[:notice] = l(:notice_file_deleted)
Rails.logger.info "#{Time.now} from #{request.remote_ip}/#{request.env["HTTP_X_FORWARDED_FOR"]}: #{User.current.login} deleted file #{@project.identifier}://#{@file.dmsf_path_str}"
DmsfMailer.deliver_files_deleted(User.current, [@file])
else
flash[:error] = l(:error_file_is_locked)
end
end
redirect_to :controller => "dmsf", :action => "index", :id => @project, :folder_id => @file.folder

View File

@ -80,6 +80,13 @@ class DmsfFile < ActiveRecord::Base
end
end
def delete
return false if locked_for_user?
self.deleted = true
self.deleted_by_user = User.current
save
end
def locked?
self.locks.empty? ? false : self.locks[0].locked
end

View File

@ -55,6 +55,11 @@ class DmsfFolder < ActiveRecord::Base
["dmsf_folder_id is NULL and project_id = :project_id", {:project_id => project.id}], :order => "title ASC")
end
def delete
return false if !self.subfolders.empty? || !self.files.empty?
destroy
end
def dmsf_path
folder = self
path = []

View File

@ -24,7 +24,7 @@
<%
form_tag({:action => "entries_operation", :id => @project, :folder_id => @folder}, :method => :post,
:class => "dmfs_entries", :id => "Entries") do
:class => "dmfs_entries", :id => "entries_form") do
%>
<%= hidden_field_tag("action") %>
<table class="list entries" id="browser">
@ -169,8 +169,8 @@ form_tag({:action => "entries_operation", :id => @project, :folder_id => @folder
</table>
<div class="controls">
<%= submit_tag(l(:submit_download), :title => l(:title_download_checked), :name => "download_entries") %>
<!-- <button type="button" id="EntriesDeleteButton" title="Delete checked">Delete</button> -->
<%= submit_tag(l(:submit_email), :title => l(:title_send_checked_by_email), :name => "email_entries") %>
<button type="button" id="entries_delete_button" title="<%=l(:title_delete_checked)%>"><%=l(:button_delete)%></button>
</div>
<br />
<% end %>
@ -189,6 +189,13 @@ form_tag({:action => "entries_operation", :id => @project, :folder_id => @folder
if(!window.confirm("<%= l(:question_do_you_really_want_to_delete_this_entry) %>")) event.preventDefault();
})
jQuery("#entries_delete_button").click(function(event) {
if(window.confirm("<%= l(:question_do_you_really_want_to_delete_these_entries) %>")) {
jQuery("#entries_form").attr("action", "<%= url_for(:controller => 'dmsf_detail', :action => 'delete_entries', :id => @project, :folder_id => @folder) %>");
jQuery("#entries_form").submit();
}
})
jQuery("#check_all_entries").click(function(event) {
var $this = jQuery(this);
if($this.prop("checked")) {