#1080 Drag & Drop
This commit is contained in:
parent
3f6a722bcb
commit
ce8b049ece
@ -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]}
|
||||
|
||||
@ -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)]
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -49,10 +49,15 @@
|
||||
<%= check_box_tag('ids[]', "#{node.type}-#{node.id}", false, id: nil) unless system %>
|
||||
</td>
|
||||
<% 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 %>
|
||||
<td class="buttons">
|
||||
<%= link_to_context_menu unless system %>
|
||||
<% unless system %>
|
||||
<% unless query.deleted %>
|
||||
<%= content_tag 'span', '', class: 'icon-only icon-sort-handle sort-handle', title: l(:button_move) %>
|
||||
<% end %>
|
||||
<%= link_to_context_menu %>
|
||||
<% end %>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
@ -60,3 +65,38 @@
|
||||
</table>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<% unless query.deleted %>
|
||||
<%= late_javascript_tag do %>
|
||||
$(function() {
|
||||
$(".dmsf-draggable").draggable({
|
||||
axis: "y",
|
||||
revert: "invalid"
|
||||
});
|
||||
$(".dmsf-droppable" ).droppable({
|
||||
drop: function(event, ui) {
|
||||
var handle = $(this);
|
||||
var dragObjectId = ui.draggable.find("td").find("input").val()
|
||||
var dropObjectId = handle.find("td").find("input").val();
|
||||
var data = {};
|
||||
handle.addClass("ui-state-highlight ajax-loading")
|
||||
data['dmsf_folder'] = { drag_id: dragObjectId, drop_id: dropObjectId};
|
||||
$.ajax({
|
||||
url: '<%= dmsf_folder_url(query.project) %>',
|
||||
type: 'put',
|
||||
dataType: 'script',
|
||||
data: data,
|
||||
error: function(jqXHR, textStatus, errorThrown){
|
||||
alert(textStatus + " " + jqXHR.status);
|
||||
ui.draggable.animate(ui.draggable.data("ui-draggable").originalPosition, "slow");
|
||||
},
|
||||
complete: function(jqXHR, textStatus, errorThrown){
|
||||
handle.removeClass("ui-state-highlight ajax-loading")
|
||||
ui.draggable.remove();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
@ -54,6 +54,7 @@ if Redmine::Plugin.installed? :redmine_dmsf
|
||||
get '/projects/:id/dmsf/add_email', :controller => 'dmsf', :action => 'add_email', :as => 'add_email_dmsf'
|
||||
post '/projects/:id/dmsf/append_email', :controller => 'dmsf', :action => 'append_email', :as => 'append_email_dmsf'
|
||||
get '/projects/:id/dmsf/autocomplete_for_user', :controller => 'dmsf', :action => 'autocomplete_for_user'
|
||||
put '/projects/:id/dmsf', controller: 'dmsf', action: 'drop'
|
||||
|
||||
# dmsf_context_menu_controller
|
||||
match '/projects/:id/dmsf/context_menu', :to => 'dmsf_context_menus#dmsf', :as => 'dmsf_context_menu', :via => [:get, :post]
|
||||
|
||||
@ -76,7 +76,7 @@ module RedmineDmsf
|
||||
when :size
|
||||
number_to_human_size(value)
|
||||
when :workflow
|
||||
if value
|
||||
if value && item.workflow_id
|
||||
link_to h(DmsfWorkflowStepAction.workflow_str(value)),
|
||||
log_dmsf_workflow_path(project_id: item.project_id, id: item.workflow_id,
|
||||
dmsf_file_revision_id: item.revision_id),
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user