diff --git a/after_init.rb b/after_init.rb index 2a191f38..fb1e85a5 100644 --- a/after_init.rb +++ b/after_init.rb @@ -62,8 +62,8 @@ def dmsf_init pmap.permission :email_documents, {:dmsf_public_urls => [:create]} pmap.permission :folder_manipulation, - {:dmsf => [:new, :create, :delete, :edit, :save, :edit_root, :save_root, :lock, :unlock, - :notify_activate, :notify_deactivate, :restore], + { dmsf: [:new, :create, :delete, :edit, :save, :edit_root, :save_root, :lock, :unlock, + :notify_activate, :notify_deactivate, :restore, :drop], :dmsf_folder_permissions => [:new, :append, :autocomplete_for_user], :dmsf_folders_copy => [:new, :copy, :move], :dmsf_context_menus => [:dmsf]} diff --git a/app/controllers/dmsf_controller.rb b/app/controllers/dmsf_controller.rb index 92231d52..36d9eeba 100644 --- a/app/controllers/dmsf_controller.rb +++ b/app/controllers/dmsf_controller.rb @@ -431,6 +431,46 @@ class DmsfController < ApplicationController end end + # Move the dragged object to the given destination + def drop + result = false + if params[:dmsf_folder].present? && params[:dmsf_folder][:drag_id].present? && params[:dmsf_folder][:drop_id].present? + if params[:dmsf_folder][:drag_id] =~ /(.+)-(\d+)/ + type = $1 + id = $2 + if params[:dmsf_folder][:drop_id] =~ /^folder.*-(\d+)/ + case type + when 'file' + dmsf_file = DmsfFile.find_by(id: id) + dmsf_folder = DmsfFolder.find_by(id: $1) + if dmsf_file && dmsf_folder + result = dmsf_file.move_to(dmsf_file.project, dmsf_folder) + end + when 'folder' + dmsf_folder = DmsfFolder.find_by(id: id) + if dmsf_folder + dmsf_folder.dmsf_folder_id = $1; + result = dmsf_folder.save + end + when 'file-link', 'folder-link', 'url-link' + dmsf_link = DmsfLink.find_by(id: id) + if dmsf_link + dmsf_link.dmsf_folder_id = $1; + result = dmsf_link.save + end + end + end + end + end + respond_to do |format| + if result + format.js { head 200 } + else + format.js { head 422 } + end + end + end + private def users_for_new_users @@ -659,7 +699,7 @@ class DmsfController < ApplicationController @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? + @workflows_available = DmsfWorkflow.where(project_id: @project.id).or(DmsfWorkflow.where(project_id: nil)).exists? @file_approval_allowed = User.current.allowed_to?(:file_approval, @project) tag = params[:custom_field_id].present? && params[:custom_value].present? @extra_columns = [l(:label_last_approver), l(:field_project), l(:label_document_url), l(:label_last_revision_id)] diff --git a/app/models/dmsf_folder.rb b/app/models/dmsf_folder.rb index f028757f..5445b4e0 100644 --- a/app/models/dmsf_folder.rb +++ b/app/models/dmsf_folder.rb @@ -577,15 +577,23 @@ class DmsfFolder < ActiveRecord::Base end def css_classes - classes = ['dir'] - if title =~ /^\./ + classes = [] + + if type =~ /^\./ classes << 'dmsf_system' else classes << 'hascontextmenu' - if ['folder-link', 'file-link'].include?(type) + if type =~ /^folder/ + classes << 'dmsf-droppable' + classes << 'dmsf-draggable' + else + classes << 'dmsf-draggable' + end + if type =~ /link$/ classes << 'dmsf_gray' end end + classes.join(' ') end diff --git a/app/models/dmsf_query.rb b/app/models/dmsf_query.rb index 8739b062..7d7df15d 100644 --- a/app/models/dmsf_query.rb +++ b/app/models/dmsf_query.rb @@ -292,9 +292,9 @@ class DmsfQuery < Query 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)') if deleted - scope.where(dmsf_files: { project_id: project.id, deleted: deleted }) + scope.where(project_id: project.id, deleted: deleted) else - scope.where(dmsf_files: { project_id: project.id, dmsf_folder_id: dmsf_folder_id, deleted: deleted }) + scope.where(project_id: project.id, dmsf_folder_id: dmsf_folder_id, deleted: deleted) end end diff --git a/app/views/dmsf/_query_list.html.erb b/app/views/dmsf/_query_list.html.erb index 3c856a09..7469b53f 100644 --- a/app/views/dmsf/_query_list.html.erb +++ b/app/views/dmsf/_query_list.html.erb @@ -49,10 +49,15 @@ <%= check_box_tag('ids[]', "#{node.type}-#{node.id}", false, id: nil) unless system %> <% query.inline_columns.each do |column| %> - <%= content_tag('td', column_content(column, node), class: column.css_classes) %> + <%= content_tag 'td', column_content(column, node), class: column.css_classes %> <% end %>