diff --git a/after_init.rb b/after_init.rb index 0dde0f55..2a191f38 100644 --- a/after_init.rb +++ b/after_init.rb @@ -71,7 +71,7 @@ def dmsf_init {:dmsf_files => [:create_revision, :lock, :unlock, :delete_revision, :obsolete_revision, :notify_activate, :notify_deactivate, :restore], :dmsf_upload => [:upload_files, :upload_file, :upload, :commit_files, :commit, - :delete_dmsf_attachment, :delete_dmsf_link_attachment], + :delete_dmsf_attachment, :delete_dmsf_link_attachment, :multi_upload], :dmsf_links => [:new, :create, :destroy, :restore, :autocomplete_for_project, :autocomplete_for_folder], :dmsf_files_copy => [:new, :copy, :move], diff --git a/app/controllers/dmsf_context_menus_controller.rb b/app/controllers/dmsf_context_menus_controller.rb index e7cca722..90897756 100644 --- a/app/controllers/dmsf_context_menus_controller.rb +++ b/app/controllers/dmsf_context_menus_controller.rb @@ -82,7 +82,7 @@ class DmsfContextMenusController < ApplicationController end def find_dmsf_file - if (params[:ids].size == 1) && (!@dmsf_folder) + if (params[:ids].present? && (params[:ids].size == 1)) && (!@dmsf_folder) if params[:ids][0] =~ /file-(\d+)/ @dmsf_file = DmsfFile.find_by(id: $1) elsif params[:ids][0] =~ /(file|url)-link-(\d+)/ @@ -93,7 +93,7 @@ class DmsfContextMenusController < ApplicationController end def find_dmsf_folder - if (params[:ids].size == 1) && (!@dmsf_file) + if (params[:ids].present? && (params[:ids].size == 1)) && (!@dmsf_file) if params[:ids][0] =~ /folder-(\d+)/ @dmsf_folder = DmsfFolder.find_by(id: $1) elsif params[:ids][0] =~ /folder-link-(\d+)/ diff --git a/app/controllers/dmsf_controller.rb b/app/controllers/dmsf_controller.rb index 4cf21d6a..df67ed79 100644 --- a/app/controllers/dmsf_controller.rb +++ b/app/controllers/dmsf_controller.rb @@ -67,8 +67,6 @@ class DmsfController < ApplicationController httponly: true } cookies[:dmsf_switch_rlf] = cookie_options - - Rails.logger.info ">>> RLF set: #{cookies[:dmsf_switch_rlf]}" redirect_to dmsf_folder_path(id: @project, folder_id: @folder) end @@ -77,13 +75,14 @@ class DmsfController < ApplicationController if @rlf @system_folder = @folder && @folder.system @locked_for_user = @folder && @folder.locked_for_user? - #@folder_manipulation_allowed = User.current.allowed_to?(:folder_manipulation, @project) + @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) #@file_view_allowed = User.current.allowed_to?(:view_dmsf_files, @project) #@force_file_unlock_allowed = User.current.allowed_to?(:force_file_unlock, @project) #@workflows_available = DmsfWorkflow.where(['project_id = ? OR project_id IS NULL', @project.id]).exists? #@file_approval_allowed = User.current.allowed_to?(:file_approval, @project) + @trash_enabled = @folder_manipulation_allowed && @file_manipulation_allowed use_session = !request.format.csv? @query = retrieve_query(DmsfQuery, use_session) @query.dmsf_folder_id = @folder ? @folder.id : nil @@ -131,6 +130,23 @@ class DmsfController < ApplicationController end def trash + @rlf = cookies[:dmsf_switch_rlf] == 'true' + if @rlf + @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 + @query = retrieve_query(DmsfQuery, true) + @query.deleted = true + respond_to do |format| + format.html { + @dmsf_count = @query.dmsf_count + @dmsf_pages = Paginator.new @dmsf_count, per_page_option, params['page'] + @dmsf_nodes = @query.dmsf_nodes(offset: @dmsf_pages.offset, limit: @dmsf_pages.per_page) + render layout: !request.xhr? + } + end + return + end @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 diff --git a/app/controllers/dmsf_upload_controller.rb b/app/controllers/dmsf_upload_controller.rb index 335ac516..92783b46 100644 --- a/app/controllers/dmsf_upload_controller.rb +++ b/app/controllers/dmsf_upload_controller.rb @@ -40,6 +40,10 @@ class DmsfUploadController < ApplicationController true end + def multi_upload + @rlf = cookies[:dmsf_switch_rlf] == 'true' + end + def upload_files uploaded_files = params[:dmsf_attachments] @uploads = [] diff --git a/app/models/dmsf_folder.rb b/app/models/dmsf_folder.rb index e82a9ed8..f028757f 100644 --- a/app/models/dmsf_folder.rb +++ b/app/models/dmsf_folder.rb @@ -580,8 +580,11 @@ class DmsfFolder < ActiveRecord::Base classes = ['dir'] if title =~ /^\./ classes << 'dmsf_system' - elsif ['DmsfFolderLink', 'DmsfFileLink'].include?(type) - classes << 'dmsf_gray' + else + classes << 'hascontextmenu' + if ['folder-link', 'file-link'].include?(type) + classes << 'dmsf_gray' + end end classes.join(' ') end diff --git a/app/models/dmsf_query.rb b/app/models/dmsf_query.rb index 904e327e..8739b062 100644 --- a/app/models/dmsf_query.rb +++ b/app/models/dmsf_query.rb @@ -168,7 +168,7 @@ class DmsfQuery < Query DmsfFileRevisionCustomField.visible.order(:position).pluck(:id, :name).each do |id, name| cf_columns << ",(SELECT value from custom_values WHERE custom_field_id = #{id} AND customized_type = 'DmsfFolder' AND customized_id = dmsf_folders.id) AS `#{name}`" end - DmsfFolder. + scope = DmsfFolder. select(%{ dmsf_folders.id AS id, dmsf_folders.project_id AS project_id, @@ -185,10 +185,14 @@ class DmsfQuery < Query users.firstname AS firstname, users.lastname AS lastname, users.id AS author, - 'DmsfFolder' AS type, + 'folder' AS type, 0 AS sort #{cf_columns}}). - joins('LEFT JOIN users ON dmsf_folders.user_id = users.id'). - where(dmsf_folders: { project_id: project.id, dmsf_folder_id: dmsf_folder_id, deleted: deleted }) + joins('LEFT JOIN users ON dmsf_folders.user_id = users.id') + if deleted + scope.where(dmsf_folders: { project_id: project.id, deleted: deleted }) + else + scope.where(dmsf_folders: { project_id: project.id, dmsf_folder_id: dmsf_folder_id, deleted: deleted }) + end end def dmsf_folder_links_scope @@ -196,7 +200,7 @@ class DmsfQuery < Query DmsfFileRevisionCustomField.visible.order(:position).pluck(:id, :name).each do |id, name| cf_columns << ",(SELECT value from custom_values WHERE custom_field_id = #{id} AND customized_type = 'DmsfFolder' AND customized_id = dmsf_folders.id) AS `#{name}`" end - DmsfLink. + scope = DmsfLink. select(%{ dmsf_folders.id AS id, COALESCE(dmsf_folders.project_id, dmsf_links.project_id) AS project_id, @@ -213,12 +217,16 @@ class DmsfQuery < Query users.firstname AS firstname, users.lastname AS lastname, users.id AS author, - 'DmsfFolderLink' AS type, + 'folder-link' AS type, 0 AS sort #{cf_columns}}). joins('LEFT JOIN dmsf_folders ON dmsf_links.target_id = dmsf_folders.id'). - joins('LEFT JOIN users ON users.id = COALESCE(dmsf_folders.user_id, dmsf_links.user_id)'). - where(dmsf_links: { target_type: 'DmsfFolder', project_id: project.id, dmsf_folder_id: dmsf_folder_id, - deleted: deleted }) + joins('LEFT JOIN users ON users.id = COALESCE(dmsf_folders.user_id, dmsf_links.user_id)') + if deleted + scope.where(dmsf_links: { target_type: 'DmsfFolder', project_id: project.id, deleted: deleted }) + else + scope.where(dmsf_links: { target_type: 'DmsfFolder', project_id: project.id, dmsf_folder_id: dmsf_folder_id, + deleted: deleted }) + end end def dmsf_files_scope @@ -226,7 +234,7 @@ class DmsfQuery < Query DmsfFileRevisionCustomField.visible.order(:position).pluck(:id, :name).each do |id, name| cf_columns << ",(SELECT value from custom_values WHERE custom_field_id = #{id} AND customized_type = 'DmsfFolder' AND customized_id = dmsf_files.id) AS `#{name}`" end - DmsfFile. + scope = DmsfFile. select(%{ dmsf_files.id AS id, dmsf_files.project_id AS project_id, @@ -243,12 +251,16 @@ class DmsfQuery < Query users.firstname AS firstname, users.lastname AS lastname, users.id AS author, - 'DmsfFile' AS type, + 'file' AS type, 1 AS sort #{cf_columns}}). joins(:dmsf_file_revisions). joins('LEFT JOIN users ON dmsf_file_revisions.user_id = users.id '). - where('dmsf_file_revisions.created_at = (SELECT MAX(r.created_at) FROM dmsf_file_revisions r WHERE r.dmsf_file_id = dmsf_file_revisions.dmsf_file_id)'). - where(dmsf_files: { project_id: project.id, dmsf_folder_id: dmsf_folder_id, deleted: deleted }) + where('dmsf_file_revisions.created_at = (SELECT MAX(r.created_at) FROM dmsf_file_revisions r WHERE r.dmsf_file_id = dmsf_file_revisions.dmsf_file_id)') + if deleted + scope.where(dmsf_files: { project_id: project.id, deleted: deleted }) + else + scope.where(dmsf_files: { project_id: project.id, dmsf_folder_id: dmsf_folder_id, deleted: deleted }) + end end def dmsf_file_links_scope @@ -256,7 +268,7 @@ class DmsfQuery < Query DmsfFileRevisionCustomField.visible.order(:position).pluck(:id, :name).each do |id, name| cf_columns << ",(SELECT value from custom_values WHERE custom_field_id = #{id} AND customized_type = 'DmsfFolder' AND customized_id = dmsf_files.id) AS `#{name}`" end - DmsfLink. + scope = DmsfLink. select(%{ dmsf_files.id AS id, dmsf_files.project_id AS project_id, @@ -273,13 +285,17 @@ class DmsfQuery < Query users.firstname AS firstname, users.lastname AS lastname, users.id AS author, - 'DmsfFileLink' AS type, + 'file-link' AS type, 1 AS sort #{cf_columns}}). joins('JOIN dmsf_files ON dmsf_files.id = dmsf_links.target_id'). joins('JOIN dmsf_file_revisions ON dmsf_file_revisions.dmsf_file_id = dmsf_files.id'). joins('LEFT JOIN users ON dmsf_file_revisions.user_id = users.id '). - where('dmsf_file_revisions.created_at = (SELECT MAX(r.created_at) FROM dmsf_file_revisions r WHERE r.dmsf_file_id = dmsf_file_revisions.dmsf_file_id)'). - where(dmsf_files: { project_id: project.id, dmsf_folder_id: dmsf_folder_id, deleted: deleted }) + where('dmsf_file_revisions.created_at = (SELECT MAX(r.created_at) FROM dmsf_file_revisions r WHERE r.dmsf_file_id = dmsf_file_revisions.dmsf_file_id)') + if deleted + scope.where(dmsf_files: { project_id: project.id, deleted: deleted }) + else + scope.where(dmsf_files: { project_id: project.id, dmsf_folder_id: dmsf_folder_id, deleted: deleted }) + end end def dmsf_url_links_scope @@ -287,7 +303,7 @@ class DmsfQuery < Query DmsfFileRevisionCustomField.visible.order(:position).pluck(:name).each do |name| cf_columns << ",NULL AS `#{name}`" end - DmsfLink. + scope = DmsfLink. select(%{ dmsf_links.id AS id, dmsf_links.project_id AS project_id, @@ -304,10 +320,14 @@ class DmsfQuery < Query users.firstname AS firstname, users.lastname AS lastname, users.id AS author, - 'DmsfUrlLink' AS type, + 'url-link' AS type, 1 AS sort #{cf_columns}}). - joins('LEFT JOIN users ON dmsf_links.user_id = users.id '). - where(target_type: 'DmsfUrl', project_id: project.id, dmsf_folder_id: dmsf_folder_id, deleted: deleted) + joins('LEFT JOIN users ON dmsf_links.user_id = users.id ') + if deleted + scope.where(target_type: 'DmsfUrl', project_id: project.id, deleted: deleted) + else + scope.where(target_type: 'DmsfUrl', project_id: project.id, dmsf_folder_id: dmsf_folder_id, deleted: deleted) + end end end diff --git a/app/views/dmsf/_query_list.html.erb b/app/views/dmsf/_query_list.html.erb index 4a4cef55..3c856a09 100644 --- a/app/views/dmsf/_query_list.html.erb +++ b/app/views/dmsf/_query_list.html.erb @@ -23,8 +23,8 @@ <% query_options = nil unless defined?(query_options) %> <% query_options ||= {} %> -<%= form_tag({}, data: { cm_url: dmsf_context_menu_path }) do %> - <%= hidden_field_tag 'back_url', url_for( params: request.query_parameters), id: nil %> +<%= form_tag({}, data: { cm_url: query.deleted ? dmsf_trash_context_menu_path : dmsf_context_menu_path }) do %> + <%= hidden_field_tag 'back_url', url_for(params: request.query_parameters), id: nil %> <%= query_columns_hidden_tags(query) %>
| <%= link_to_context_menu %> | ++ <%= link_to_context_menu unless system %> + |