* 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:
parent
3bc82a61cf
commit
681e58894a
@ -22,12 +22,61 @@ class DmsfDetailController < ApplicationController
|
|||||||
menu_item :dmsf
|
menu_item :dmsf
|
||||||
|
|
||||||
before_filter :find_project
|
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_parent, :only => [:folder_new, :create_folder, :save_folder]
|
||||||
before_filter :find_folder, :only => [:delete_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]
|
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
|
def folder_new
|
||||||
@pathfolder = @parent
|
@pathfolder = @parent
|
||||||
render :action => "folder_detail"
|
render :action => "folder_detail"
|
||||||
@ -88,6 +137,8 @@ class DmsfDetailController < ApplicationController
|
|||||||
|
|
||||||
def file_detail
|
def file_detail
|
||||||
@revision = @file.last_revision
|
@revision = @file.last_revision
|
||||||
|
# TODO: line bellow is to handle old instalations with errors in data handling
|
||||||
|
@revision.name = @file.name
|
||||||
end
|
end
|
||||||
|
|
||||||
#TODO: don't create revision if nothing change
|
#TODO: don't create revision if nothing change
|
||||||
@ -158,15 +209,12 @@ class DmsfDetailController < ApplicationController
|
|||||||
|
|
||||||
def delete_file
|
def delete_file
|
||||||
if !@file.nil?
|
if !@file.nil?
|
||||||
if @file.locked_for_user?
|
if @file.delete
|
||||||
flash[:error] = l(:error_file_is_locked)
|
|
||||||
else
|
|
||||||
@file.deleted = true
|
|
||||||
@file.deleted_by_user = User.current
|
|
||||||
@file.save
|
|
||||||
flash[:notice] = l(:notice_file_deleted)
|
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}"
|
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])
|
DmsfMailer.deliver_files_deleted(User.current, [@file])
|
||||||
|
else
|
||||||
|
flash[:error] = l(:error_file_is_locked)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
redirect_to :controller => "dmsf", :action => "index", :id => @project, :folder_id => @file.folder
|
redirect_to :controller => "dmsf", :action => "index", :id => @project, :folder_id => @file.folder
|
||||||
|
|||||||
@ -80,6 +80,13 @@ class DmsfFile < ActiveRecord::Base
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def delete
|
||||||
|
return false if locked_for_user?
|
||||||
|
self.deleted = true
|
||||||
|
self.deleted_by_user = User.current
|
||||||
|
save
|
||||||
|
end
|
||||||
|
|
||||||
def locked?
|
def locked?
|
||||||
self.locks.empty? ? false : self.locks[0].locked
|
self.locks.empty? ? false : self.locks[0].locked
|
||||||
end
|
end
|
||||||
|
|||||||
@ -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")
|
["dmsf_folder_id is NULL and project_id = :project_id", {:project_id => project.id}], :order => "title ASC")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def delete
|
||||||
|
return false if !self.subfolders.empty? || !self.files.empty?
|
||||||
|
destroy
|
||||||
|
end
|
||||||
|
|
||||||
def dmsf_path
|
def dmsf_path
|
||||||
folder = self
|
folder = self
|
||||||
path = []
|
path = []
|
||||||
|
|||||||
@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
<%
|
<%
|
||||||
form_tag({:action => "entries_operation", :id => @project, :folder_id => @folder}, :method => :post,
|
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") %>
|
<%= hidden_field_tag("action") %>
|
||||||
<table class="list entries" id="browser">
|
<table class="list entries" id="browser">
|
||||||
@ -169,8 +169,8 @@ form_tag({:action => "entries_operation", :id => @project, :folder_id => @folder
|
|||||||
</table>
|
</table>
|
||||||
<div class="controls">
|
<div class="controls">
|
||||||
<%= submit_tag(l(:submit_download), :title => l(:title_download_checked), :name => "download_entries") %>
|
<%= 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") %>
|
<%= 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>
|
</div>
|
||||||
<br />
|
<br />
|
||||||
<% end %>
|
<% 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();
|
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) {
|
jQuery("#check_all_entries").click(function(event) {
|
||||||
var $this = jQuery(this);
|
var $this = jQuery(this);
|
||||||
if($this.prop("checked")) {
|
if($this.prop("checked")) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user