From 681e58894ac7c62cde0f33b5efc9849c60169aaf Mon Sep 17 00:00:00 2001 From: "vit.jonas@gmail.com" Date: Wed, 25 May 2011 12:26:01 +0000 Subject: [PATCH] * work on multi delete git-svn-id: http://redmine-dmsf.googlecode.com/svn/trunk/redmine_dmsf@88 5e329b0b-a2ee-ea63-e329-299493fc886d --- app/controllers/dmsf_detail_controller.rb | 64 ++++++++++++++++++++--- app/models/dmsf_file.rb | 7 +++ app/models/dmsf_folder.rb | 5 ++ app/views/dmsf/index.html.erb | 11 +++- 4 files changed, 77 insertions(+), 10 deletions(-) diff --git a/app/controllers/dmsf_detail_controller.rb b/app/controllers/dmsf_detail_controller.rb index 2338377b..f895cac8 100644 --- a/app/controllers/dmsf_detail_controller.rb +++ b/app/controllers/dmsf_detail_controller.rb @@ -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 diff --git a/app/models/dmsf_file.rb b/app/models/dmsf_file.rb index 45cfb298..2611b5ef 100644 --- a/app/models/dmsf_file.rb +++ b/app/models/dmsf_file.rb @@ -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 diff --git a/app/models/dmsf_folder.rb b/app/models/dmsf_folder.rb index 18b4eb1f..f8d2b913 100644 --- a/app/models/dmsf_folder.rb +++ b/app/models/dmsf_folder.rb @@ -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 = [] diff --git a/app/views/dmsf/index.html.erb b/app/views/dmsf/index.html.erb index ea69e961..8ae28bd0 100644 --- a/app/views/dmsf/index.html.erb +++ b/app/views/dmsf/index.html.erb @@ -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") %> @@ -169,8 +169,8 @@ form_tag({:action => "entries_operation", :id => @project, :folder_id => @folder
<%= submit_tag(l(:submit_download), :title => l(:title_download_checked), :name => "download_entries") %> - <%= submit_tag(l(:submit_email), :title => l(:title_send_checked_by_email), :name => "email_entries") %> +

<% 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")) {