diff --git a/app/controllers/dmsf_context_menus_controller.rb b/app/controllers/dmsf_context_menus_controller.rb index f2852819..cfa9c146 100644 --- a/app/controllers/dmsf_context_menus_controller.rb +++ b/app/controllers/dmsf_context_menus_controller.rb @@ -23,15 +23,13 @@ class DmsfContextMenusController < ApplicationController helper :context_menus def dmsf - selected_files = params[:files] || [] - selected_file_links = params[:file_links] || [] - if selected_file_links.present? - selected_file_links.each do |id| - link = DmsfLink.find_by_id id - selected_files << link.target_id if link && !selected_files.include?(link.target_id.to_s) - end + selected_files = params[:ids].select{ |x| x =~ /file-\d+/ }.map{ |x| $1.to_i if x =~ /file-(\d+)/ } + selected_file_links = params[:ids].select{ |x| x =~ /file-link-\d+/ }.map{ |x| $1.to_i if x =~ /file-link-(\d+)/ } + selected_file_links.each do |id| + link = DmsfLink.find_by_id id + selected_files << link.target_id if link && !selected_files.include?(link.target_id.to_s) end - if selected_files.size == 1 + if (selected_files.size == 1) && (params[:ids].size == 1) @file = DmsfFile.find selected_files[0] end render :layout => false diff --git a/app/controllers/dmsf_controller.rb b/app/controllers/dmsf_controller.rb index fb4cad3a..8a94b339 100644 --- a/app/controllers/dmsf_controller.rb +++ b/app/controllers/dmsf_controller.rb @@ -100,11 +100,11 @@ class DmsfController < ApplicationController def entries_operation # Download/Email - selected_folders = params[:subfolders] || [] - selected_files = params[:files] || [] - selected_dir_links = params[:dir_links] || [] - selected_file_links = params[:file_links] || [] - selected_url_links = params[:url_links] || [] + selected_folders = params[:ids].select{ |x| x =~ /folder-\d+/ }.map{ |x| $1.to_i if x =~ /folder-(\d+)/ } + selected_files = params[:ids].select{ |x| x =~ /file-\d+/ }.map{ |x| $1.to_i if x =~ /file-(\d+)/ } + selected_dir_links = params[:ids].select{ |x| x =~ /folder-link-\d+/ }.map{ |x| $1.to_i if x =~ /folder-link-(\d+)/ } + selected_file_links = params[:ids].select{ |x| x =~ /file-link-\d+/ }.map{ |x| $1.to_i if x =~ /file-link-(\d+)/ } + selected_url_links = params[:ids].select{ |x| x =~ /url-link-\d+/ }.map{ |x| $1.to_i if x =~ /url-link-(\d+)/ } if selected_folders.blank? && selected_files.blank? && selected_dir_links.blank? && selected_file_links.blank? && @@ -118,7 +118,7 @@ class DmsfController < ApplicationController (params[:email_entries].present? || params[:download_entries].present?) selected_dir_links.each do |id| link = DmsfLink.find_by_id id - selected_folders << link.target_id if link && !selected_folders.include?(link.target_id.to_s) + selected_folders << link.target_id if link && !selected_folders.include?(link.target_id) end end @@ -126,7 +126,7 @@ class DmsfController < ApplicationController (params[:email_entries].present? || params[:download_entries].present?) selected_file_links.each do |id| link = DmsfLink.find_by_id id - selected_files << link.target_id if link && !selected_files.include?(link.target_id.to_s) + selected_files << link.target_id if link && !selected_files.include?(link.target_id) end end @@ -403,50 +403,44 @@ class DmsfController < ApplicationController end def download_entries(selected_folders, selected_files) - begin - zip = DmsfZip.new - zip_entries(zip, selected_folders, selected_files) - zip.files.each do |f| - audit = DmsfFileRevisionAccess.new - audit.user = User.current - audit.dmsf_file_revision = f.last_revision - audit.action = DmsfFileRevisionAccess::DownloadAction - audit.save! - end - send_file(zip.finish, - :filename => filename_for_content_disposition("#{@project.name}-#{DateTime.now.strftime('%y%m%d%H%M%S')}.zip"), - :type => 'application/zip', - :disposition => 'attachment') - rescue Exception - raise - ensure - zip.close if zip + zip = DmsfZip.new + zip_entries(zip, selected_folders, selected_files) + zip.files.each do |f| + audit = DmsfFileRevisionAccess.new + audit.user = User.current + audit.dmsf_file_revision = f.last_revision + audit.action = DmsfFileRevisionAccess::DownloadAction + audit.save! end + send_file(zip.finish, + :filename => filename_for_content_disposition("#{@project.name}-#{DateTime.now.strftime('%y%m%d%H%M%S')}.zip"), + :type => 'application/zip', + :disposition => 'attachment') + rescue Exception + raise + ensure + zip.close if zip end def zip_entries(zip, selected_folders, selected_files) member = Member.where(:user_id => User.current.id, :project_id => @project.id).first - if selected_folders && selected_folders.is_a?(Array) - selected_folders.each do |selected_folder_id| - folder = DmsfFolder.visible.find_by_id selected_folder_id - if folder - zip.add_folder(folder, member, (folder.dmsf_folder.dmsf_path_str if folder.dmsf_folder)) - else - raise FileNotFound - end + selected_folders.each do |selected_folder_id| + folder = DmsfFolder.visible.find_by_id selected_folder_id + if folder + zip.add_folder(folder, member, (folder.dmsf_folder.dmsf_path_str if folder.dmsf_folder)) + else + raise FileNotFound end end - if selected_files && selected_files.is_a?(Array) - selected_files.each do |selected_file_id| - file = DmsfFile.visible.find_by_id selected_file_id - unless file && file.last_revision && File.exist?(file.last_revision.disk_file) - raise FileNotFound - end - unless (file.project == @project) || User.current.allowed_to?(:view_dmsf_files, file.project) - raise DmsfAccessError - end - zip.add_file(file, member, (file.dmsf_folder.dmsf_path_str if file.dmsf_folder)) if file + selected_files.each do |selected_file_id| + file = DmsfFile.visible.find_by_id selected_file_id + unless file && file.last_revision && File.exist?(file.last_revision.disk_file) + raise FileNotFound end + unless (file.project == @project) || User.current.allowed_to?(:view_dmsf_files, file.project) + raise DmsfAccessError + end + zip.add_file(file, member, (file.dmsf_folder.dmsf_path_str if file.dmsf_folder)) if file end max_files = Setting.plugin_redmine_dmsf['dmsf_max_file_download'].to_i if max_files > 0 && zip.files.length > max_files diff --git a/app/views/dmsf/_dir.html.erb b/app/views/dmsf/_dir.html.erb index 04139c67..4bd84d31 100644 --- a/app/views/dmsf/_dir.html.erb +++ b/app/views/dmsf/_dir.html.erb @@ -22,7 +22,7 @@ <% unless (subfolder && subfolder.system) %> - <%= check_box_tag(name, id, false, :title => l(:title_check_for_zip_download_or_email), :id => "subfolder_#{id}") %> + <%= check_box_tag('ids[]', "#{name}-#{id}", false, :id => "subfolder_#{id}") %> <% end %> <% if DmsfFolder.is_column_on?('id') %> diff --git a/app/views/dmsf/_dir_trash.html.erb b/app/views/dmsf/_dir_trash.html.erb index 0d5425a9..de2ebb58 100644 --- a/app/views/dmsf/_dir_trash.html.erb +++ b/app/views/dmsf/_dir_trash.html.erb @@ -20,8 +20,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. %> -<%= check_box_tag(name, id, false, - :title => l(:title_check_for_restore_or_delete), :id => "subfolder_#{id}") %> +<%= check_box_tag('ids[]', "#{name}-#{id}", false, :id => "subfolder_#{id}") %> <% if DmsfFolder.is_column_on?('id') %> <%= link_to(subfolder.id, edit_dmsf_path(:id => project, :folder_id => subfolder)) %> <% end %> diff --git a/app/views/dmsf/_dmsf_rows.erb b/app/views/dmsf/_dmsf_rows.erb index 578ea2bc..a6d750b4 100644 --- a/app/views/dmsf/_dmsf_rows.erb +++ b/app/views/dmsf/_dmsf_rows.erb @@ -47,7 +47,7 @@ :subfolder => obj, :link => nil, :id => obj.id, - :name => 'subfolders[]', + :name => 'folder', :title => obj.title, :onclick => onclick, :position => position}) %> @@ -64,7 +64,7 @@ :subfolder => obj.target_folder, :link => obj, :id => obj.id, - :name => 'dir_links[]', + :name => 'folder-link', :title => obj.name, :onclick => onclick, :position => position}) %> @@ -80,7 +80,7 @@ :file => obj, :link => nil, :id => obj.id, - :name => 'files[]', + :name => 'file', :title => obj.title, :onclick => onclick, :position => position}) %> @@ -96,7 +96,7 @@ :file => obj.target_file, :link => obj, :id => obj.id, - :name => 'file_links[]', + :name => 'file-link', :title => obj.name, :onclick => onclick, :position => position}) %> @@ -108,7 +108,7 @@ :file => obj.target_file, :link => obj, :id => obj.id, - :name => 'file_links[]', + :name => 'file-link', :title => obj.name, :onclick => onclick, :position => position}) %> diff --git a/app/views/dmsf/_file.html.erb b/app/views/dmsf/_file.html.erb index fb62f3c0..42515bef 100644 --- a/app/views/dmsf/_file.html.erb +++ b/app/views/dmsf/_file.html.erb @@ -22,8 +22,7 @@ <% wf = DmsfWorkflow.find_by_id(file.last_revision.dmsf_workflow_id) if file.last_revision.dmsf_workflow_id %> -<%= check_box_tag(name, id, false, - :title => l(:title_check_for_zip_download_or_email), :id => "file_#{id}") %> +<%= check_box_tag('ids[]', "#{name}-#{id}", false, :id => "file_#{id}") %> <% if DmsfFolder.is_column_on?('id') %> <%= link_to(file.id, dmsf_file_path(:id => file)) %> <% end %> diff --git a/app/views/dmsf/_file_trash.html.erb b/app/views/dmsf/_file_trash.html.erb index 51eeee00..0a5b3ada 100644 --- a/app/views/dmsf/_file_trash.html.erb +++ b/app/views/dmsf/_file_trash.html.erb @@ -20,8 +20,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. %> -<%= check_box_tag(name, id, false, - :title => l(:title_check_for_restore_or_delete), :id => "file_#{id}") %> +<%= check_box_tag('ids[]', "#{name}-#{id}", false, :id => "file_#{id}") %> <% if DmsfFolder.is_column_on?('id') %> <%= file.id %> <% end %> diff --git a/app/views/dmsf/_list_view.erb b/app/views/dmsf/_list_view.erb index a2a9b5b9..2914684e 100644 --- a/app/views/dmsf/_list_view.erb +++ b/app/views/dmsf/_list_view.erb @@ -73,7 +73,7 @@ :subfolder => subfolder, :link => nil, :id => subfolder.id, - :name => 'subfolders[]', + :name => 'folder', :title => subfolder.title, :position => 0 }) %> @@ -91,7 +91,7 @@ :subfolder => link.target_folder, :link => link, :id => link.id, - :name => 'dir_links[]', + :name => 'folder-link', :title => link.name, :position => 0}) %> @@ -108,7 +108,7 @@ :file => file, :link => nil, :id => file.id, - :name => 'files[]', + :name => 'file', :title => file.title, :position => 1 }) %> @@ -125,7 +125,7 @@ :file => link.target_file, :link => link, :id => link.id, - :name => 'file_links[]', + :name => 'file-link', :title => link.name, :position => 1}) %> @@ -137,7 +137,7 @@ :file => link.target_file, :link => link, :id => link.id, - :name => 'file_links[]', + :name => 'url-link', :title => link.name, :position => 1}) %> diff --git a/app/views/dmsf/_tree_view.erb b/app/views/dmsf/_tree_view.erb index c78f5988..5114301d 100644 --- a/app/views/dmsf/_tree_view.erb +++ b/app/views/dmsf/_tree_view.erb @@ -24,7 +24,8 @@ - + <%= check_box_tag 'check_all', '', false, :class => 'toggle-selection', + :title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}" %> <% if DmsfFolder.is_column_on?('id') %> # diff --git a/app/views/dmsf/_url_trash.html.erb b/app/views/dmsf/_url_trash.html.erb index 9ffb09ba..2e2e0716 100644 --- a/app/views/dmsf/_url_trash.html.erb +++ b/app/views/dmsf/_url_trash.html.erb @@ -20,8 +20,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. %> -<%= check_box_tag(name, id, false, - :title => l(:title_check_for_restore_or_delete)) %> +<%= check_box_tag('ids[]', "#{name}-#{id}", false) %> <% if DmsfFolder.is_column_on?('id') %> <% end %> diff --git a/app/views/dmsf/dmsf_rows.js.erb b/app/views/dmsf/dmsf_rows.js.erb index 08b00b2b..a39ce030 100644 --- a/app/views/dmsf/dmsf_rows.js.erb +++ b/app/views/dmsf/dmsf_rows.js.erb @@ -28,6 +28,7 @@ hideOnLoad(); <% modified = DmsfFolder.get_column_position('modified') %> $('#browser').dataTable({ + orderClasses: false, responsive: { details: false }, diff --git a/app/views/dmsf/show.html.erb b/app/views/dmsf/show.html.erb index 8b17436b..d17e7be8 100644 --- a/app/views/dmsf/show.html.erb +++ b/app/views/dmsf/show.html.erb @@ -87,10 +87,13 @@ :class => 'dmsf_entries', :id => 'entries_form', :data => {:cm_url => dmsf_context_menu_path}) do %> <%= hidden_field_tag('action') %>
- <%= submit_tag(l(:button_download), :title => l(:title_download_checked), :name => 'download_entries') if @file_view_allowed %> - <%= submit_tag(l(:field_mail), :title => l(:title_send_checked_by_email), :name => 'email_entries') if (@file_view_allowed && User.current.allowed_to?(:email_documents, @project)) %> - <% if @file_delete_allowed%> - <%= submit_tag(l(:button_delete), :title => l(:title_delete_checked), :name => 'delete_entries') if @file_delete_allowed %> + <%= submit_tag(l(:button_download), :title => l(:title_download_checked), :name => 'download_entries', + :class => 'toggle-selection') if @file_view_allowed %> + <%= submit_tag(l(:field_mail), :title => l(:title_send_checked_by_email), :name => 'email_entries', + :class => 'toggle-selection') if (@file_view_allowed && User.current.allowed_to?(:email_documents, @project)) %> + <% if @file_delete_allowed %> + <%= submit_tag(l(:button_delete), :title => l(:title_delete_checked), :name => 'delete_entries', + :class => 'toggle-selection') if @file_delete_allowed %> <% end %>
<% unless @system_folder %> @@ -132,9 +135,6 @@ $('#entries_form').attr('action', "<%= tag_changed_path(:id => @project, :folder_id => @folder) %>"); $('#entries_form').submit(); }); - $('#check_all_entries').click(function() { - $('input[type=checkbox]', $('#browser > tbody')).prop('checked', this.checked); - }); <% end %> <% content_for :header_tags do %> @@ -155,6 +155,7 @@ <%= late_javascript_tag do %> EASY.schedule.main(function() { $("#browser").dataTable({ + orderClasses: false, responsive: { details: false }, diff --git a/app/views/dmsf/trash.html.erb b/app/views/dmsf/trash.html.erb index 28991560..e27d9f18 100644 --- a/app/views/dmsf/trash.html.erb +++ b/app/views/dmsf/trash.html.erb @@ -37,9 +37,11 @@ <%= hidden_field_tag('action') %>
<% if @file_manipulation_allowed && @folder_manipulation_allowed %> - <%= submit_tag(l(:title_restore), :title => l(:title_restore_checked), :name => 'restore_entries') %> + <%= submit_tag(l(:title_restore), :title => l(:title_restore_checked), :name => 'restore_entries', + :class => 'toggle-selection') %> <% if @file_delete_allowed%> - <%= submit_tag(l(:button_delete), :title => l(:title_delete_checked), :name => 'destroy_entries') %> + <%= submit_tag(l(:button_delete), :title => l(:title_delete_checked), :name => 'destroy_entries', + :class => 'toggle-selection') %> <% end %> <% end %>
@@ -157,7 +159,7 @@ :file => link.target_file, :link => link, :id => link.id, - :name => 'url_links[]', + :name => 'url-link', :title => link.name }) %> <% end %> @@ -179,9 +181,6 @@ $('#entries_form').attr('action', "<%= tag_changed_path(:id => @project, :folder_id => @folder) %>"); $('#entries_form').submit(); }); - $('#check_all_entries').click(function() { - $('input[type=checkbox]', $('#browser > tbody')).prop('checked', this.checked); - }); <% end %> <% content_for :header_tags do %> @@ -202,6 +201,7 @@ <%= late_javascript_tag do %> EASY.schedule.main(function() { $('#browser').dataTable({ + orderClasses: false, responsive: { details: false },