Move folder #804
This commit is contained in:
parent
e0f07b25f0
commit
ca822c2cab
@ -21,15 +21,13 @@ def init
|
||||
pmap.permission :view_dmsf_file_revisions,
|
||||
:read => true
|
||||
pmap.permission :view_dmsf_folders,
|
||||
{:dmsf => [:show],
|
||||
:dmsf_folders_copy => [:new, :copy_to, :move_to]},
|
||||
{:dmsf => [:show]},
|
||||
:read => true
|
||||
pmap.permission :user_preferences,
|
||||
{:dmsf_state => [:user_pref_save]}
|
||||
pmap.permission :view_dmsf_files,
|
||||
{:dmsf => [:entries_operation, :entries_email, :download_email_entries, :tag_changed],
|
||||
:dmsf_files => [:show, :view, :thumbnail],
|
||||
:dmsf_files_copy => [:new, :create, :move],
|
||||
:dmsf_workflows => [:log]},
|
||||
:read => true
|
||||
pmap.permission :email_documents,
|
||||
@ -37,14 +35,16 @@ def init
|
||||
pmap.permission :folder_manipulation,
|
||||
{:dmsf => [:new, :create, :delete, :edit, :save, :edit_root, :save_root, :lock, :unlock,
|
||||
:notify_activate, :notify_deactivate, :restore],
|
||||
:dmsf_folder_permissions => [:new, :append, :autocomplete_for_user]}
|
||||
:dmsf_folder_permissions => [:new, :append, :autocomplete_for_user],
|
||||
:dmsf_folders_copy => [:new, :copy, :move]}
|
||||
pmap.permission :file_manipulation,
|
||||
{:dmsf_files => [:create_revision, :lock, :unlock, :delete_revision, :notify_activate,
|
||||
:notify_deactivate, :restore],
|
||||
:dmsf_upload => [:upload_files, :upload_file, :upload, :commit_files, :commit,
|
||||
:delete_dmsf_attachment, :delete_dmsf_link_attachment],
|
||||
:dmsf_links => [:new, :create, :destroy, :restore, :autocomplete_for_project,
|
||||
:autocomplete_for_folder]
|
||||
:autocomplete_for_folder],
|
||||
:dmsf_files_copy => [:new, :copy, :move],
|
||||
}
|
||||
pmap.permission :file_delete,
|
||||
{ :dmsf => [:trash, :delete_entries],
|
||||
|
||||
@ -549,8 +549,6 @@ class DmsfController < ApplicationController
|
||||
|
||||
def find_parent
|
||||
@parent = DmsfFolder.visible.find params[:parent_id] if params[:parent_id].present?
|
||||
rescue DmsfAccessError
|
||||
render_403
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
render_404
|
||||
end
|
||||
|
||||
@ -24,89 +24,83 @@ class DmsfFilesCopyController < ApplicationController
|
||||
|
||||
before_action :find_file
|
||||
before_action :authorize
|
||||
before_action :permissions
|
||||
|
||||
helper :all
|
||||
|
||||
def permissions
|
||||
if @file
|
||||
render_403 unless DmsfFolder.permissions?(@file.dmsf_folder)
|
||||
end
|
||||
true
|
||||
end
|
||||
before_action :find_target_folder
|
||||
before_action :check_target_folder, :only => [:copy, :move]
|
||||
|
||||
def new
|
||||
@target_project = DmsfFile.allowed_target_projects_on_copy.detect {|p| p.id.to_s == params[:target_project_id]} if params[:target_project_id]
|
||||
@target_project ||= @project if User.current.allowed_to?(:file_manipulation, @project)
|
||||
if DmsfFile.allowed_target_projects_on_copy.blank?
|
||||
flash.now[:warning] = l(:warning_no_project_to_copy_file_to)
|
||||
else
|
||||
@target_project ||= DmsfFile.allowed_target_projects_on_copy[0]
|
||||
end
|
||||
|
||||
@projects = DmsfFile.allowed_target_projects_on_copy
|
||||
@folders = DmsfFolder.directory_tree(@target_project, @folder)
|
||||
@target_folder = DmsfFolder.visible.find(params[:target_folder_id]) unless params[:target_folder_id].blank?
|
||||
@target_folder ||= @file.dmsf_folder if @target_project == @project
|
||||
|
||||
render :layout => !request.xhr?
|
||||
end
|
||||
|
||||
def create
|
||||
@target_project = DmsfFile.allowed_target_projects_on_copy.detect {|p| p.id.to_s == params[:target_project_id]} if params[:target_project_id]
|
||||
unless @target_project
|
||||
render_403
|
||||
return
|
||||
end
|
||||
@target_folder = DmsfFolder.visible.find_by_id(params[:target_folder_id]) unless params[:target_folder_id].blank?
|
||||
if @target_folder && (@target_folder.project != @target_project)
|
||||
raise DmsfAccessError, l(:error_entry_project_does_not_match_current_project)
|
||||
end
|
||||
if (@target_folder && @target_folder == @file.dmsf_folder) ||
|
||||
(@target_folder.nil? && @file.dmsf_folder.nil? && @target_project == @file.project)
|
||||
flash[:error] = l(:error_target_folder_same)
|
||||
redirect_to :action => 'new', :id => @file, :target_project_id => @target_project, :target_folder_id => @target_folder
|
||||
return
|
||||
end
|
||||
def copy
|
||||
new_file = @file.copy_to(@target_project, @target_folder)
|
||||
unless new_file.errors.empty?
|
||||
flash[:error] = "#{l(:error_file_cannot_be_copied)}: #{new_file.errors.full_messages.join(', ')}"
|
||||
redirect_to :action => 'new', :id => @file, :target_project_id => @target_project, :target_folder_id => @target_folder
|
||||
flash[:error] = new_file.errors.full_messages.join(', ')
|
||||
redirect_to :action => 'new', :id => @file, :target_project_id => @target_project,
|
||||
:target_folder_id => @target_folder
|
||||
return
|
||||
end
|
||||
flash[:notice] = l(:notice_file_copied)
|
||||
flash[:notice] = l(:notice_successful_update)
|
||||
redirect_to dmsf_file_path(new_file)
|
||||
end
|
||||
|
||||
def move
|
||||
@target_project = DmsfFile.allowed_target_projects_on_copy.detect {|p| p.id.to_s == params[:target_project_id]} if params[:target_project_id]
|
||||
unless @target_project && User.current.allowed_to?(:file_manipulation, @target_project) && User.current.allowed_to?(:file_manipulation, @project)
|
||||
render_403
|
||||
return
|
||||
end
|
||||
@target_folder = DmsfFolder.visible.find(params[:target_folder_id]) unless params[:target_folder_id].blank?
|
||||
if @target_folder && @target_folder.project != @target_project
|
||||
raise DmsfAccessError, l(:error_entry_project_does_not_match_current_project)
|
||||
end
|
||||
if (@target_folder && @target_folder == @file.dmsf_folder) ||
|
||||
(@target_folder.nil? && @file.dmsf_folder.nil? && @target_project == @file.project)
|
||||
flash[:error] = l(:error_target_folder_same)
|
||||
redirect_to :action => 'new', :id => @file, :target_project_id => @target_project, :target_folder_id => @target_folder
|
||||
return
|
||||
end
|
||||
unless @file.move_to(@target_project, @target_folder)
|
||||
flash[:error] = "#{l(:error_file_cannot_be_moved)}: #{@file.errors.full_messages.join(', ')}"
|
||||
redirect_to :action => 'new', :id => @file, :target_project_id => @target_project, :target_folder_id => @target_folder
|
||||
flash[:error] = @file.errors.full_messages.join(', ')
|
||||
redirect_to :action => 'new', :id => @file, :target_project_id => @target_project,
|
||||
:target_folder_id => @target_folder
|
||||
return
|
||||
end
|
||||
@file.reload
|
||||
flash[:notice] = l(:notice_file_moved)
|
||||
flash[:notice] = l(:notice_successful_update)
|
||||
redirect_to dmsf_file_path(@file)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def find_file
|
||||
@file = DmsfFile.visible.find_by_id params[:id]
|
||||
@project = @file.project if @file
|
||||
unless DmsfFile.where(:id => params[:id]).exists?
|
||||
render_404
|
||||
return
|
||||
end
|
||||
@file = DmsfFile.visible.find params[:id]
|
||||
@project = @file.project
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
render_403
|
||||
end
|
||||
|
||||
def find_target_folder
|
||||
if params[:target_project_id].present?
|
||||
@target_project = Project.find params[:target_project_id]
|
||||
else
|
||||
@target_project = @project
|
||||
end
|
||||
if params[:target_folder_id].present?
|
||||
@target_folder = DmsfFolder.visible.find(params[:target_folder_id])
|
||||
unless DmsfFolder.visible.where(params[:target_folder_id]).exists?
|
||||
render_403
|
||||
return
|
||||
end
|
||||
end
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
render_404
|
||||
end
|
||||
|
||||
def check_target_folder
|
||||
if (@target_folder && @target_folder == @file.dmsf_folder) ||
|
||||
(@target_folder.nil? && @file.dmsf_folder.nil? && @target_project == @file.project)
|
||||
flash[:error] = l(:error_target_folder_same)
|
||||
redirect_to :action => :new, :id => @file, :target_project_id => @target_project.id,
|
||||
:target_folder_id => @target_folder
|
||||
return
|
||||
end
|
||||
if (@target_folder && (@target_folder.locked_for_user? || !DmsfFolder.permissions?(@target_folder, false))) ||
|
||||
!@target_project.allows_to?(:file_manipulation)
|
||||
raise DmsfAccessError
|
||||
end
|
||||
rescue DmsfAccessError
|
||||
render_403
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
# Redmine plugin for Document Management System "Features"
|
||||
#
|
||||
# Copyright (C) 2011 Vít Jonáš <vit.jonas@gmail.com>
|
||||
# Copyright (C) 2011 Vít Jonáš <vit.jonas@gmail.com>
|
||||
# Copyright (C) 2011-17 Karel Pičman <karel.picman@kontron.com>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
@ -23,60 +24,85 @@ class DmsfFoldersCopyController < ApplicationController
|
||||
|
||||
before_action :find_folder
|
||||
before_action :authorize
|
||||
before_action :permissions
|
||||
|
||||
def permissions
|
||||
render_403 unless DmsfFolder.permissions?(@folder)
|
||||
true
|
||||
end
|
||||
before_action :find_target_folder
|
||||
before_action :check_target_folder, :only => [:copy, :move]
|
||||
|
||||
def new
|
||||
@target_project = DmsfFolder.allowed_target_projects_on_copy.detect {|p| p.id.to_s == params[:target_project_id]} if params[:target_project_id]
|
||||
@target_project ||= @project if User.current.allowed_to?(:folder_manipulation, @project)
|
||||
if DmsfFile.allowed_target_projects_on_copy.blank?
|
||||
flash.now[:warning] = l(:warning_no_project_to_copy_folder_to)
|
||||
else
|
||||
@target_project ||= DmsfFolder.allowed_target_projects_on_copy[0]
|
||||
end
|
||||
|
||||
@projects = DmsfFolder.allowed_target_projects_on_copy
|
||||
@folders = DmsfFolder.directory_tree(@target_project, @folder)
|
||||
@target_folder = DmsfFolder.visible.find(params[:target_folder_id]) unless params[:target_folder_id].blank?
|
||||
@target_folder ||= @folder.dmsf_folder if @target_project == @project
|
||||
|
||||
render :layout => !request.xhr?
|
||||
end
|
||||
|
||||
def copy_to
|
||||
@target_project = DmsfFile.allowed_target_projects_on_copy.detect {|p| p.id.to_s == params[:target_project_id]} if params[:target_project_id]
|
||||
unless @target_project
|
||||
render_403
|
||||
return
|
||||
end
|
||||
@target_folder = DmsfFolder.visible.find(params[:target_folder_id]) unless params[:target_folder_id].blank?
|
||||
if !@target_folder.nil? && @target_folder.project != @target_project
|
||||
raise DmsfAccessError, l(:error_entry_project_does_not_match_current_project)
|
||||
end
|
||||
if (@target_folder && @target_folder == @folder.dmsf_folder) ||
|
||||
(@target_folder.nil? && @folder.dmsf_folder.nil? && @target_project == @folder.project)
|
||||
flash[:error] = l(:error_target_folder_same)
|
||||
redirect_to :action => 'new', :id => @folder, :target_project_id => @target_project, :target_folder_id => @target_folder
|
||||
return
|
||||
end
|
||||
def copy
|
||||
new_folder = @folder.copy_to(@target_project, @target_folder)
|
||||
unless new_folder.errors.empty?
|
||||
flash[:error] = "#{l(:error_folder_cannot_be_copied)}: #{new_folder.errors.full_messages.join(', ')}"
|
||||
redirect_to :action => 'new', :id => @folder, :target_project_id => @target_project, :target_folder_id => @target_folder
|
||||
flash[:error] = new_folder.errors.full_messages.join(', ')
|
||||
redirect_to :action => 'new', :id => @folder, :target_project_id => @target_project,
|
||||
:target_folder_id => @target_folder
|
||||
return
|
||||
end
|
||||
new_folder.reload
|
||||
flash[:notice] = l(:notice_folder_copied)
|
||||
flash[:notice] = l(:notice_successful_update)
|
||||
redirect_to dmsf_folder_path(:id => @target_project, :folder_id => new_folder)
|
||||
end
|
||||
|
||||
def move
|
||||
@folder.project = @target_project
|
||||
@folder.dmsf_folder = @target_folder
|
||||
unless @folder.save
|
||||
flash[:error] = @folder.errors.full_messages.join(', ')
|
||||
redirect_to :action => 'new', :id => @folder, :target_project_id => @target_project,
|
||||
:target_folder_id => @target_folder
|
||||
else
|
||||
flash[:notice] = l(:notice_successful_update)
|
||||
redirect_to dmsf_folder_path(:id => @target_project, :folder_id => @folder)
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def find_folder
|
||||
@folder = DmsfFolder.visible.find_by_id(params[:id])
|
||||
@project = @folder.project if @folder
|
||||
unless DmsfFolder.where(:id => params[:id]).exists?
|
||||
render_404
|
||||
return
|
||||
end
|
||||
@folder = DmsfFolder.visible.find params[:id]
|
||||
@project = @folder.project
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
render_403
|
||||
end
|
||||
|
||||
def find_target_folder
|
||||
if params[:target_project_id].present?
|
||||
@target_project = Project.find params[:target_project_id]
|
||||
else
|
||||
@target_project = @project
|
||||
end
|
||||
if params[:target_folder_id].present?
|
||||
@target_folder = DmsfFolder.find(params[:target_folder_id])
|
||||
unless DmsfFolder.visible.where(:id => params[:target_folder_id]).exists?
|
||||
render_403
|
||||
return
|
||||
end
|
||||
end
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
render_404
|
||||
end
|
||||
|
||||
def check_target_folder
|
||||
if (@target_folder && @target_folder == @folder.dmsf_folder) ||
|
||||
(@target_folder.nil? && @folder.dmsf_folder.nil? && @target_project == @folder.project)
|
||||
flash[:error] = l(:error_target_folder_same)
|
||||
redirect_to :action => :new, :id => @folder, :target_project_id => @target_project.id,
|
||||
:target_folder_id => @target_folder
|
||||
return
|
||||
end
|
||||
if (@target_folder && (@target_folder.locked_for_user? || !DmsfFolder.permissions?(@target_folder, false))) ||
|
||||
!@target_project.allows_to?(:folder_manipulation)
|
||||
raise DmsfAccessError
|
||||
end
|
||||
rescue DmsfAccessError
|
||||
render_403
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@ -242,11 +242,12 @@ class DmsfFile < ActiveRecord::Base
|
||||
end
|
||||
# Must invalidate source parent folder cache before moving
|
||||
RedmineDmsf::Webdav::Cache.invalidate_item(propfind_cache_key)
|
||||
source = "#{self.project.identifier}:#{self.dmsf_path_str}"
|
||||
self.project_id = project.id
|
||||
self.dmsf_folder = folder
|
||||
new_revision = self.last_revision.clone
|
||||
new_revision.dmsf_file = self
|
||||
new_revision.comment = l(:comment_moved_from, :source => "#{self.project.identifier}:#{self.dmsf_path_str}")
|
||||
new_revision.comment = l(:comment_moved_from, :source => source)
|
||||
new_revision.custom_values = []
|
||||
self.last_revision.custom_values.each do |cv|
|
||||
new_revision.custom_values << CustomValue.new({:custom_field => cv.custom_field, :value => cv.value})
|
||||
@ -260,6 +261,7 @@ class DmsfFile < ActiveRecord::Base
|
||||
end
|
||||
|
||||
def copy_to_filename(project, folder, filename)
|
||||
source = "#{project.identifier}: #{self.dmsf_path_str}"
|
||||
file = DmsfFile.new
|
||||
file.dmsf_folder = folder
|
||||
file.project_id = project.id
|
||||
@ -272,7 +274,7 @@ class DmsfFile < ActiveRecord::Base
|
||||
if File.exist? self.last_revision.disk_file
|
||||
FileUtils.cp self.last_revision.disk_file, new_revision.disk_file(false)
|
||||
end
|
||||
new_revision.comment = l(:comment_copied_from, :source => "#{project.identifier}: #{self.dmsf_path_str}")
|
||||
new_revision.comment = l(:comment_copied_from, :source => source)
|
||||
new_revision.custom_values = []
|
||||
self.last_revision.custom_values.each do |cv|
|
||||
new_revision.custom_values << CustomValue.new({:custom_field => cv.custom_field, :value => cv.value})
|
||||
|
||||
@ -225,11 +225,12 @@ class DmsfFolder < ActiveRecord::Base
|
||||
project = Project.find_by_id project
|
||||
end
|
||||
tree = [[l(:link_documents), nil]]
|
||||
DmsfFolder.where(:project_id => project.id).notsystem.visible(false).each do |folder|
|
||||
unless folder == current_folder
|
||||
tree.push(["...#{folder.title}", folder.id])
|
||||
DmsfFolder.directory_subtree(tree, folder, 2, current_folder)
|
||||
end
|
||||
folders = DmsfFolder.where(:project_id => project.id).notsystem.visible(false).to_a
|
||||
folders.delete(current_folder)
|
||||
folders = folders.delete_if{ |f| f.locked_for_user? }
|
||||
folders.each do |folder|
|
||||
tree.push(["...#{folder.title}", folder.id])
|
||||
DmsfFolder.directory_subtree(tree, folder, 2, current_folder)
|
||||
end
|
||||
return tree
|
||||
end
|
||||
@ -580,7 +581,10 @@ class DmsfFolder < ActiveRecord::Base
|
||||
private
|
||||
|
||||
def self.directory_subtree(tree, folder, level, current_folder)
|
||||
DmsfFolder.where(:project_id => folder.project_id, :dmsf_folder_id => folder.id).notsystem.visible(false).each do |subfolder|
|
||||
folders = DmsfFolder.where(:project_id => folder.project_id, :dmsf_folder_id => folder.id).notsystem.visible(false).to_a
|
||||
folders.delete(current_folder)
|
||||
folders.delete_if { |f| f.locked_for_user? }
|
||||
folders.each do |subfolder|
|
||||
unless subfolder == current_folder
|
||||
tree.push(["#{'...' * level}#{subfolder.title}", subfolder.id])
|
||||
DmsfFolder.directory_subtree(tree, subfolder, level + 1, current_folder)
|
||||
|
||||
@ -50,7 +50,7 @@
|
||||
<%= link_to(l(:label_link_to),
|
||||
new_dmsf_link_path(:project_id => @project.id, :dmsf_folder_id => @folder.id, :type => 'link_to'),
|
||||
:title => l(:title_create_link), :class => 'icon icon-link') %>
|
||||
<%= link_to(l(:button_copy), copy_folder_path(:id => @folder),
|
||||
<%= link_to("#{l(:button_copy)}/#{l(:button_move)}", copy_folder_path(:id => @folder),
|
||||
:title => l(:title_copy), :class => 'icon icon-copy') %>
|
||||
<% unless @folder.locked? %>
|
||||
<%= link_to(l(:button_delete), delete_dmsf_path(:id => @project, :folder_id => @folder),
|
||||
|
||||
@ -22,47 +22,15 @@
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
%>
|
||||
|
||||
<% html_title(l(:dmsf)) %>
|
||||
<%= render(:partial => '/dmsf/path', :locals => { :folder => @file.dmsf_folder, :filename => @file.title,
|
||||
:title => nil }) %>
|
||||
|
||||
<%= render(:partial => '/dmsf/path',
|
||||
:locals => {:folder => @file.dmsf_folder, :filename => @file.title,
|
||||
:title => "#{l(:button_copy)}/#{l(:button_move)}"}) %>
|
||||
|
||||
<% if DmsfFile.allowed_target_projects_on_copy.present? %>
|
||||
<%= form_tag({:action => 'create', :id => @file}, :id => 'copyForm') do |f| %>
|
||||
<div class="box tabular">
|
||||
<p>
|
||||
<%= label_tag('target_project_id', l(:field_target_project)) %>
|
||||
<%= select_tag('target_project_id',
|
||||
project_tree_options_for_select(DmsfFile.allowed_target_projects_on_copy,
|
||||
:selected => @target_project)) %>
|
||||
</p>
|
||||
<p>
|
||||
<%= label_tag('target_folder_id', l(:field_target_folder)) %>
|
||||
<%= select_tag('target_folder_id',
|
||||
options_for_select(DmsfFolder.directory_tree(@target_project),
|
||||
:selected => (@target_folder.id if @target_folder))) %>
|
||||
</p>
|
||||
</div>
|
||||
<p>
|
||||
<%= submit_tag(l(:button_copy)) %>
|
||||
<% if !@file.locked? && User.current.allowed_to?(:file_manipulation, @project) %>
|
||||
<%= submit_tag(l(:button_move), :id => 'move_button') %>
|
||||
<% end %>
|
||||
</p>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
<script type="text/javascript">
|
||||
$('#move_button').click(function(event) {
|
||||
$('#copyForm').attr('action', "<%= url_for(:action => 'move', :id => @file) %>");
|
||||
$('#copyForm').submit();
|
||||
});
|
||||
|
||||
$('#target_project_id').change(function () {
|
||||
$('#content').load("<%= url_for(:action => 'new') %>", $('#copyForm').serialize());
|
||||
});
|
||||
|
||||
$('#target_project_id').select2();
|
||||
$('#target_folder_id').select2();
|
||||
</script>
|
||||
<%= render(:partial => '/dmsf_folders_copy/form', :locals => {
|
||||
:projects => @projects,
|
||||
:project => @project,
|
||||
:target_project => @target_project,
|
||||
:folders => @folders,
|
||||
:file_or_folder => @file,
|
||||
:target_folder => @target_folder,
|
||||
:permission => :file_manipulation
|
||||
}) %>
|
||||
|
||||
58
app/views/dmsf_folders_copy/_form.html.erb
Normal file
58
app/views/dmsf_folders_copy/_form.html.erb
Normal file
@ -0,0 +1,58 @@
|
||||
<%
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine plugin for Document Management System "Features"
|
||||
#
|
||||
# Copyright (C) 2011-17 Karel Pičman <karel.picman@kontron.com>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
%>
|
||||
|
||||
<% if projects.present? %>
|
||||
<%= form_tag({:action => 'copy', :id => file_or_folder}, :id => 'copyForm') do |f| %>
|
||||
<div class="box tabular">
|
||||
<p>
|
||||
<%= label_tag('target_project_id', l(:field_target_project)) %>
|
||||
<%= select_tag('target_project_id',
|
||||
project_tree_options_for_select(projects, :selected => target_project)) %>
|
||||
</p>
|
||||
<p>
|
||||
<%= label_tag('target_folder_id', l(:field_target_folder)) %>
|
||||
<%= select_tag('target_folder_id', options_for_select(folders,
|
||||
:selected => (target_folder.id if target_folder))) %>
|
||||
</p>
|
||||
</div>
|
||||
<p>
|
||||
<%= submit_tag(l(:button_copy), :id => 'copy_button') %>
|
||||
<% if !file_or_folder.locked? && User.current.allowed_to?(permission, project) %>
|
||||
<%= submit_tag(l(:button_move), :id => 'move_button') %>
|
||||
<% end %>
|
||||
</p>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
<script type="text/javascript">
|
||||
$('#move_button').click(function(event) {
|
||||
$('#copyForm').attr('action', "<%= url_for(:action => 'move', :id => file_or_folder) %>");
|
||||
$('#copyForm').submit();
|
||||
});
|
||||
|
||||
$('#target_project_id').change(function () {
|
||||
$('#content').load("<%= url_for(:action => 'new') %>", $('#copyForm').serialize());
|
||||
});
|
||||
|
||||
$('#target_project_id').select2();
|
||||
$('#target_folder_id').select2();
|
||||
</script>
|
||||
@ -22,35 +22,14 @@
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
%>
|
||||
|
||||
<% html_title(l(:dmsf)) %>
|
||||
<%= render(:partial => '/dmsf/path', :locals => { :folder => @folder, :filename => nil, :title => nil }) %>
|
||||
|
||||
<%= render(:partial => '/dmsf/path',
|
||||
:locals => {:folder => @folder, :filename => nil, :title => l(:button_copy)}) %>
|
||||
|
||||
<% unless DmsfFolder.allowed_target_projects_on_copy.blank? %>
|
||||
<%= form_tag({:action => 'copy_to', :id => @folder}, :id => 'copyForm') do |f| %>
|
||||
<div class="box tabular">
|
||||
<p>
|
||||
<label for="target_project_id"><%= l(:field_target_project) %>:</label>
|
||||
<%= select_tag('target_project_id',
|
||||
project_tree_options_for_select(DmsfFolder.allowed_target_projects_on_copy, :selected => @target_project)) %>
|
||||
</p>
|
||||
<p>
|
||||
<%= label_tag('target_folder_id', l(:field_target_folder)) %>
|
||||
<%= select_tag('target_folder_id',
|
||||
options_for_select(DmsfFolder.directory_tree(@target_project, @folder),
|
||||
:selected => (@target_folder.id if @target_folder))) %>
|
||||
</p>
|
||||
</div>
|
||||
<%= submit_tag(l(:button_copy)) %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
<script type="text/javascript">
|
||||
$('#target_project_id').change(function () {
|
||||
$('#content').load("<%= url_for(:action => 'new') %>", $('#copyForm').serialize());
|
||||
});
|
||||
|
||||
$('#target_project_id').select2();
|
||||
$('#target_folder_id').select2();
|
||||
</script>
|
||||
<%= render(:partial => '/dmsf_folders_copy/form', :locals => {
|
||||
:projects => @projects,
|
||||
:project => @project,
|
||||
:target_project => @target_project,
|
||||
:folders => @folders,
|
||||
:file_or_folder => @folder,
|
||||
:target_folder => @target_folder,
|
||||
:permission => :folder_manipulation
|
||||
}) %>
|
||||
|
||||
@ -185,20 +185,13 @@ cs:
|
||||
project_module_dmsf: DMS # Project module name
|
||||
warning_no_project_to_copy_file_to: Neexistuje projekt, do kterého můžete kopírovat
|
||||
comment_copied_from: "Zkopírováno z %{source}"
|
||||
notice_file_copied: Soubor zkopírován
|
||||
notice_file_moved: Soubor přesunut
|
||||
field_target_project: Cílový projekt
|
||||
field_target_folder: Cílová složka
|
||||
title_copy_or_move: Kopírovat/Přesunout
|
||||
label_dmsf_folder_plural: DMS Složky # Search options
|
||||
comment_moved_from: "Přesunuto z %{source}"
|
||||
error_target_folder_same: Cílový složka a projekt jsou stejné jako aktuální
|
||||
error_file_cannot_be_moved: Soubor nemůže být přesunut
|
||||
error_file_cannot_be_copied: Soubor nemůže být zkopírován
|
||||
warning_no_project_to_copy_folder_to: Neexistuje projekt, do kterého můžete kopírovat
|
||||
title_copy: Kopírovat
|
||||
error_folder_cannot_be_copied: Složka nemůže být zkopírována
|
||||
notice_folder_copied: Složka zkopírována
|
||||
|
||||
error_max_email_filesize_exceeded: "Přesáhli jste maximální velikost souboru, který lze poslat emailem. (%{number} MB)"
|
||||
note_maximum_email_filesize: Omezí se maximální velikost souboru, který může být poslán emailem. 0 znamená neomezený. Číslo je v MB.
|
||||
|
||||
@ -185,20 +185,13 @@ de:
|
||||
project_module_dmsf: DMS # Project module name
|
||||
warning_no_project_to_copy_file_to: Kein Projekt, in das die Datei kopiert werden kann.
|
||||
comment_copied_from: "Kopiert aus %{source}"
|
||||
notice_file_copied: Datei kopiert
|
||||
notice_file_moved: Datei verschoben
|
||||
field_target_project: Zielprojekt
|
||||
field_target_folder: Zielordner
|
||||
title_copy_or_move: Kopieren/Verschieben
|
||||
label_dmsf_folder_plural: DMS Ordner # Search options
|
||||
comment_moved_from: "Verschoben aus %{source}"
|
||||
error_target_folder_same: Zielordner und Projekt sind dieselbe wie die aktuellen.
|
||||
error_file_cannot_be_moved: Die Datei kann nicht verschoben werden.
|
||||
error_file_cannot_be_copied: Die Datei kann nicht kopiert werden.
|
||||
warning_no_project_to_copy_folder_to: Kein Projekt, in das der Ordner kopiert werden kann.
|
||||
title_copy: Kopieren
|
||||
error_folder_cannot_be_copied: Der Ordner kann nicht kopiert werden.
|
||||
notice_folder_copied: Ordner kopiert
|
||||
|
||||
error_max_email_filesize_exceeded: "Maximale Dateigröße der Anlage wurde überschritten. (%{number} MB)"
|
||||
note_maximum_email_filesize: Maximale Dateigröße der Anhänge, die per E-mail verschickt werden können. 0 bedeutet keinen Limit. Angabe in MB.
|
||||
|
||||
@ -185,20 +185,13 @@ en:
|
||||
project_module_dmsf: DMS # Project module name
|
||||
warning_no_project_to_copy_file_to: No project to copy file to
|
||||
comment_copied_from: "Copied from %{source}"
|
||||
notice_file_copied: File copied
|
||||
notice_file_moved: File moved
|
||||
field_target_project: Target project
|
||||
field_target_folder: Target folder
|
||||
title_copy_or_move: Copy/Move
|
||||
label_dmsf_folder_plural: DMS Folders # Search options
|
||||
comment_moved_from: "Moved from %{source}"
|
||||
error_target_folder_same: Target folder and project are the same as current
|
||||
error_file_cannot_be_moved: "File can't be moved"
|
||||
error_file_cannot_be_copied: "File can't be copied"
|
||||
warning_no_project_to_copy_folder_to: No project to copy folder to
|
||||
error_target_folder_same: Target folder and project are the same as the current one.
|
||||
title_copy: Copy
|
||||
error_folder_cannot_be_copied: "Folder can't be copied"
|
||||
notice_folder_copied: Folder copied
|
||||
|
||||
error_max_email_filesize_exceeded: "You've exceeded the maximum filesize for sending via email. (%{number} MB)"
|
||||
note_maximum_email_filesize: Limits maximum filesize that can be sent via email. 0 means unlimited. Number is in MB.
|
||||
|
||||
@ -185,20 +185,13 @@ es:
|
||||
project_module_dmsf: DMS # Project module name
|
||||
warning_no_project_to_copy_file_to: No hay proyecto para copiar el archivo
|
||||
comment_copied_from: "Copiado desde %{source}"
|
||||
notice_file_copied: Archivo copiado
|
||||
notice_file_moved: Archivo movido
|
||||
field_target_project: Proyecto destino
|
||||
field_target_folder: Directorio destino
|
||||
title_copy_or_move: Copiar/Mover
|
||||
label_dmsf_folder_plural: DMS Directorio # Search options
|
||||
comment_moved_from: "Mover desde %{source}"
|
||||
error_target_folder_same: El directorio y proyecto destino son el actual
|
||||
error_file_cannot_be_moved: "Los archivos no puesen ser movidos"
|
||||
error_file_cannot_be_copied: "Los arvhicos no pueden ser copiados"
|
||||
warning_no_project_to_copy_folder_to: No hay proyecto para copiar el directorio
|
||||
title_copy: Copiar
|
||||
error_folder_cannot_be_copied: "El directorio no puede ser copiado"
|
||||
notice_folder_copied: Directorio copiado
|
||||
|
||||
error_max_email_filesize_exceeded: "Tamaño máximo de archivo excedido para ser enviado por email. (%{number} MB)"
|
||||
note_maximum_email_filesize: Límite máximo de archivo para ser enviado por email. 0 equivale a ilimitado. Unidad en MB.
|
||||
|
||||
@ -185,20 +185,13 @@ fr:
|
||||
project_module_dmsf: DMS # Project module name
|
||||
warning_no_project_to_copy_file_to: "Le projet de destination n'est pas défini"
|
||||
comment_copied_from: "Copie effectuée depuis %{source}"
|
||||
notice_file_copied: Fichier copié
|
||||
notice_file_moved: Fichier déplacé
|
||||
field_target_project: Projet cible
|
||||
field_target_folder: Dossier cible
|
||||
title_copy_or_move: Copie/Déplacement
|
||||
label_dmsf_folder_plural: DMS Les dossiers # Search options
|
||||
comment_moved_from: "Déplacé depuis %{source}"
|
||||
error_target_folder_same: Le projet et le dossier cible sont identiques au projet et dossier source
|
||||
error_file_cannot_be_moved: Le fichier ne peut pas être déplacé
|
||||
error_file_cannot_be_copied: Le fichier ne peut pas être copié
|
||||
warning_no_project_to_copy_folder_to: "Le projet de destination n'est pas défini"
|
||||
title_copy: Copie
|
||||
error_folder_cannot_be_copied: Le dossier ne peut pas être copié
|
||||
notice_folder_copied: Dossier copié
|
||||
|
||||
error_max_email_filesize_exceeded: "Vous avez dépassé la taille maximale des fichiers pouvant être transmis par mail (%{number} MB)"
|
||||
note_maximum_email_filesize: Taille maximale, en méga octets, des fichiers pouvant être transmis par mail. 0 indique aucune restriction
|
||||
@ -347,7 +340,7 @@ fr:
|
||||
|
||||
label_document_url: Url
|
||||
label_last_revision_id: Révision
|
||||
|
||||
|
||||
label_webdav_disable_versioning: Modèles de fichiers sans gestion de version
|
||||
note_webdav_disable_versioning: "Expression régulière qui désactive la gestion de version pour les fichiers correspondants. L'expression par défaut correspond aux fichiers temporaires créés par MsOffice."
|
||||
|
||||
@ -355,7 +348,7 @@ fr:
|
||||
note_dmsf_keep_documents_locked: Les documents seront maintenus verrouillés après approbation.
|
||||
note_global: (global)
|
||||
field_dmsf_not_inheritable: Ne peut être hérité
|
||||
|
||||
|
||||
label_webdav_use_project_names: Utiliser le nom de projet pour le dossier du projet
|
||||
note_webdav_use_project_names: "Utilise le nom du projet au lieu de l'identifiant projet pour le dossier du projet."
|
||||
|
||||
|
||||
@ -185,20 +185,13 @@ hu:
|
||||
project_module_dmsf: DMS # Project module name
|
||||
warning_no_project_to_copy_file_to: Nincs projekt ahová másolható a fájl
|
||||
comment_copied_from: "Másolva %{source}"
|
||||
notice_file_copied: Fájl másolva
|
||||
notice_file_moved: Fájl áthelyezve
|
||||
field_target_project: Célprojekt
|
||||
field_target_folder: Cél mappa
|
||||
title_copy_or_move: Másolás/Elmozgatás
|
||||
label_dmsf_folder_plural: DMS Mappák # Search options
|
||||
comment_moved_from: "Elmozgatva %{source}"
|
||||
error_target_folder_same: A cél mappa és a projekt ugyanaz, mint a jelenlegi
|
||||
error_file_cannot_be_moved: Fájl nem áthelyezhető
|
||||
error_file_cannot_be_copied: Fájlt nem lehet másolni
|
||||
warning_no_project_to_copy_folder_to: "Nincs projekt ahova a mappa másolható hibák miatt: %{files}"
|
||||
title_copy: Másolás
|
||||
error_folder_cannot_be_copied: Mappa nem másolható
|
||||
notice_folder_copied: Mappa másolásra került
|
||||
|
||||
error_max_email_filesize_exceeded: "Túllépte a maximum fájlméretet ami emailen küldhető. (%{number} MB)"
|
||||
note_maximum_email_filesize: Korlátozza a maximális fájlméretet, amely küldhető email-ben. A 0 korlátlan méretet jelent, az érték MB-ban kerül megadásra.
|
||||
|
||||
@ -185,20 +185,13 @@ it: # Italian strings thx 2 Matteo Arceci!
|
||||
project_module_dmsf: DMS # Project module name
|
||||
warning_no_project_to_copy_file_to: Nessun progetto nel quale copiare il documento
|
||||
comment_copied_from: "Copiato da %{source}"
|
||||
notice_file_copied: Documento copiato
|
||||
notice_file_moved: Documento spostato
|
||||
field_target_project: Progetto di destinazione
|
||||
field_target_folder: Cartella di destinazione
|
||||
title_copy_or_move: Copia/Sposta
|
||||
label_dmsf_folder_plural: DMS Cartelle # Search options
|
||||
comment_moved_from: "Spostato da %{source}"
|
||||
error_target_folder_same: La cartella di destinazione ed il progetto sono gli stessi di adesso
|
||||
error_file_cannot_be_moved: "Il documento non può essere spostato"
|
||||
error_file_cannot_be_copied: "Il documento non può essere copiato"
|
||||
warning_no_project_to_copy_folder_to: Nessun progetto dove copiare la cartella
|
||||
title_copy: Copia
|
||||
error_folder_cannot_be_copied: "La cartella non può essere copiata"
|
||||
notice_folder_copied: Cartella copiata
|
||||
|
||||
error_max_email_filesize_exceeded: "Hai superato la dimensione massima del file per l'invio tramite e-mail. (%{number} MB)"
|
||||
note_maximum_email_filesize: Limiti di dimensione massima dei file che possono essere inviati via e-mail. 0 significa illimitato. Il numero è in MB.
|
||||
|
||||
@ -185,20 +185,13 @@ ja:
|
||||
project_module_dmsf: 文書管理 # Project module name
|
||||
warning_no_project_to_copy_file_to: ファイルをコピーするプロジェクトがありません
|
||||
comment_copied_from: "%{source} からコピーしました"
|
||||
notice_file_copied: ファイルをコピーしました
|
||||
notice_file_moved: ファイルを移動しました
|
||||
field_target_project: ターゲットプロジェクト
|
||||
field_target_folder: ターゲットフォルダ
|
||||
title_copy_or_move: コピー/移動
|
||||
label_dmsf_folder_plural: DMS フォルダ # Search options
|
||||
comment_moved_from: "%{source} から移動しました"
|
||||
error_target_folder_same: コピー/移動先のフォルダとプロジェクトが現在と同じです
|
||||
error_file_cannot_be_moved: ファイルを移動できません
|
||||
error_file_cannot_be_copied: ファイルをコピーできません
|
||||
warning_no_project_to_copy_folder_to: フォルダをコピーするプロジェクトがありません
|
||||
title_copy: コピー
|
||||
error_folder_cannot_be_copied: フォルダをコピーできません
|
||||
notice_folder_copied: フォルダをコピーしました
|
||||
|
||||
error_max_email_filesize_exceeded: "電子メールで送信可能なファイルサイズの上限を越えています (%{number} MB)"
|
||||
note_maximum_email_filesize: "電子メールで送信可能なファイルサイズの上限。0は無制限。単位はMB。"
|
||||
|
||||
@ -185,20 +185,13 @@ pl:
|
||||
project_module_dmsf: DMS # Project module name
|
||||
warning_no_project_to_copy_file_to: Brak projektu do skopiowania pliku
|
||||
comment_copied_from: "Skopiowano z %{source}"
|
||||
notice_file_copied: Plik został skopiowany
|
||||
notice_file_moved: Plik został przeniesiony
|
||||
field_target_project: Projekt docelowy
|
||||
field_target_folder: Folder docelowy
|
||||
title_copy_or_move: Kopiuj/Przenieś
|
||||
label_dmsf_folder_plural: DMS Foldery # Search options
|
||||
comment_moved_from: "Przeniesiono z %{source}"
|
||||
error_target_folder_same: Docelowy projekt i folder są identyczne z obecnym
|
||||
error_file_cannot_be_moved: "Plik nie może zostać przeniesiony"
|
||||
error_file_cannot_be_copied: "Plik nie może zostać skopiowany"
|
||||
warning_no_project_to_copy_folder_to: No project to copy folder to
|
||||
title_copy: Kopiuj
|
||||
error_folder_cannot_be_copied: "Folder nie może zostać skopiowany"
|
||||
notice_folder_copied: Folder został skopiowany
|
||||
|
||||
error_max_email_filesize_exceeded: "Maksymalny rozmiar pliku załącznika email został przekroczony. (%{number} MB)"
|
||||
note_maximum_email_filesize: Maksymalny rozmiar pliku, który może zostać wysłany przez email. 0 oznacza brak ograniczeń. Rozmiar w MB.
|
||||
|
||||
@ -185,20 +185,13 @@ pt-BR:
|
||||
project_module_dmsf: DMS
|
||||
warning_no_project_to_copy_file_to: Nenhum projeto para cópia do arquivo
|
||||
comment_copied_from: "Copiado de %{source}"
|
||||
notice_file_copied: Arquivo copiado
|
||||
notice_file_moved: Arquivo movido
|
||||
field_target_project: Projeto de destino
|
||||
field_target_folder: Pasta de destino
|
||||
title_copy_or_move: Copiar / Mover
|
||||
label_dmsf_folder_plural: DMS Pastas # Search options
|
||||
comment_moved_from: "Mover de %{source}"
|
||||
error_target_folder_same: A pasta e o projeto alvo são os mesmos que os atuais
|
||||
error_file_cannot_be_moved: "Arquivo não pode ser movido"
|
||||
error_file_cannot_be_copied: "Arquivo não pode ser copiado"
|
||||
warning_no_project_to_copy_folder_to: Nenhum projeto para cópia da pasta
|
||||
title_copy: Copiar
|
||||
error_folder_cannot_be_copied: "Pasta não pode ser copiada"
|
||||
notice_folder_copied: Pasta copiada
|
||||
|
||||
error_max_email_filesize_exceeded: "Você excedeu o tamanho máximo do arquivo para enviar via e-mail. (%{number} MB)"
|
||||
note_maximum_email_filesize: Limita o tamanho máximo de arquivos que pode ser enviado por e-mail. 0 significa ilimitado. O número está em MB.
|
||||
|
||||
@ -185,20 +185,13 @@ ru:
|
||||
project_module_dmsf: DMS # Project module name
|
||||
warning_no_project_to_copy_file_to: Не выбран проект, в который нужно скопировать файл
|
||||
comment_copied_from: "Скопировано из %{source}"
|
||||
notice_file_copied: Файл скопирован
|
||||
notice_file_moved: Файл перемещен
|
||||
field_target_project: Целевой проект
|
||||
field_target_folder: Целевая папка
|
||||
title_copy_or_move: Копировать/Переместить
|
||||
label_dmsf_folder_plural: DMS Папки # Search options
|
||||
comment_moved_from: "Перемещен из %{source}"
|
||||
error_target_folder_same: Целевая папка и проект совпадают с текущими
|
||||
error_file_cannot_be_moved: Файл не может быть перемещен
|
||||
error_file_cannot_be_copied: Файл не может быть скопирован
|
||||
warning_no_project_to_copy_folder_to: Не выбран проект, в который нужно скопировать папку
|
||||
title_copy: Копировать
|
||||
error_folder_cannot_be_copied: Папка не может быть скопирована
|
||||
notice_folder_copied: Папка скопирована
|
||||
|
||||
error_max_email_filesize_exceeded: "Вы превысили максимальный размер для отправки по электронной почте. (%{number} Мб)"
|
||||
note_maximum_email_filesize: "Ограничение максимального размера файла, который можно отправить по электронной почте. 0 означает отсутствие ограничений. Значение в мегабайтах."
|
||||
|
||||
@ -185,20 +185,13 @@ sl:
|
||||
project_module_dmsf: Arhiv # Project module name
|
||||
warning_no_project_to_copy_file_to: Ni projekta kamor bi kopiral datoteko
|
||||
comment_copied_from: "Skopirano iz %{source}"
|
||||
notice_file_copied: Datoteka skopirana
|
||||
notice_file_moved: Datoteka premaknjena
|
||||
field_target_project: Ciljni projekt
|
||||
field_target_folder: Ciljna mapa
|
||||
title_copy_or_move: Kopiraj/Premakni
|
||||
label_dmsf_folder_plural: DMS Arhivske mape # Search options
|
||||
comment_moved_from: "Premaknjeno iz %{source}"
|
||||
error_target_folder_same: Ciljna mapa in projekt sta ista kot izvorna (trenutna)
|
||||
error_file_cannot_be_moved: Datoteka ne more biti premaknjena
|
||||
error_file_cannot_be_copied: Datoteko ni možno skopirati
|
||||
warning_no_project_to_copy_folder_to: Ni projekta v katerega bi skopiral mapo
|
||||
title_copy: Kopiraj
|
||||
error_folder_cannot_be_copied: Mapo se ne da skopirati
|
||||
notice_folder_copied: Mapa skopirana
|
||||
|
||||
error_max_email_filesize_exceeded: "Presegli ste največjo velikost datoteke za pošiljanje po email-u. (%{number} MB)"
|
||||
note_maximum_email_filesize: Omejitev največje velikosti datoteke, ki se lahko pošlje po email-u. 0 pomeni neomejeno. Količina je v MB.
|
||||
|
||||
@ -185,20 +185,13 @@ zh-TW:
|
||||
project_module_dmsf: 文件總管 # Project module name
|
||||
warning_no_project_to_copy_file_to: No project to copy file to
|
||||
comment_copied_from: "Copied from %{source}"
|
||||
notice_file_copied: File copied
|
||||
notice_file_moved: File moved
|
||||
field_target_project: Target project
|
||||
field_target_folder: Target folder
|
||||
title_copy_or_move: Copy/Move
|
||||
label_dmsf_folder_plural: DMS Folders # Search options
|
||||
comment_moved_from: "Moved from %{source}"
|
||||
error_target_folder_same: Target folder and project are the same as current
|
||||
error_file_cannot_be_moved: "File can't be moved"
|
||||
error_file_cannot_be_copied: "File can't be copied"
|
||||
warning_no_project_to_copy_folder_to: No project to copy folder to
|
||||
error_target_folder_same: Target folder and project are the same as the current one.
|
||||
title_copy: Copy
|
||||
error_folder_cannot_be_copied: "Folder can't be copied"
|
||||
notice_folder_copied: Folder copied
|
||||
|
||||
error_max_email_filesize_exceeded: "己經超出Email所能允許的最大檔案大小。 (%{number} MB)"
|
||||
note_maximum_email_filesize: 限制Email所允許的最大檔案大小。 0 表示沒有限制。
|
||||
|
||||
@ -185,20 +185,13 @@ zh:
|
||||
project_module_dmsf: 文档管家 # Project module name
|
||||
warning_no_project_to_copy_file_to: No project to copy file to
|
||||
comment_copied_from: "Copied from %{source}"
|
||||
notice_file_copied: File copied
|
||||
notice_file_moved: File moved
|
||||
field_target_project: Target project
|
||||
field_target_folder: Target folder
|
||||
title_copy_or_move: Copy/Move
|
||||
label_dmsf_folder_plural: DMS Folders # Search options
|
||||
comment_moved_from: "Moved from %{source}"
|
||||
error_target_folder_same: Target folder and project are the same as current
|
||||
error_file_cannot_be_moved: "File can't be moved"
|
||||
error_file_cannot_be_copied: "File can't be copied"
|
||||
warning_no_project_to_copy_folder_to: No project to copy folder to
|
||||
error_target_folder_same: Target folder and project are the same as the current one.
|
||||
title_copy: Copy
|
||||
error_folder_cannot_be_copied: "Folder can't be copied"
|
||||
notice_folder_copied: Folder copied
|
||||
|
||||
error_max_email_filesize_exceeded: "You've exceeded the maximum filesize for sending via email. (%{number} MB)"
|
||||
note_maximum_email_filesize: Limits maximum filesize that can be sent via email. 0 means unlimited. Number is in MB.
|
||||
|
||||
@ -103,7 +103,7 @@ if Redmine::Plugin.installed? :redmine_dmsf
|
||||
# files_copy controller
|
||||
# /dmsf/files/<file id>/copy
|
||||
##
|
||||
post '/dmsf/files/:id/copy/create', :controller => 'dmsf_files_copy', :action => 'create'
|
||||
post '/dmsf/files/:id/copy/copy', :controller => 'dmsf_files_copy', :action => 'copy'
|
||||
post '/dmsf/files/:id/copy/move', :controller => 'dmsf_files_copy', :action => 'move'
|
||||
get '/dmsf/files/:id/copy', :controller => 'dmsf_files_copy', :action => 'new', :as => 'copy_file'
|
||||
|
||||
@ -111,8 +111,8 @@ if Redmine::Plugin.installed? :redmine_dmsf
|
||||
# folders_copy controller
|
||||
# /dmsf/folders/<folder id>/copy
|
||||
##
|
||||
#verify :method => :post, :only => [:copy_to], :render => { :nothing => true, :status => :method_not_allowed }
|
||||
post '/dmsf/folders/:id/copy/to', :controller => 'dmsf_folders_copy', :action => 'copy_to'
|
||||
post '/dmsf/folders/:id/copy/copy', :controller => 'dmsf_folders_copy', :action => 'copy'
|
||||
post '/dmsf/folders/:id/copy/move', :controller => 'dmsf_folders_copy', :action => 'move'
|
||||
get '/dmsf/folders/:id/copy', :controller => 'dmsf_folders_copy', :action => 'new', :as => 'copy_folder'
|
||||
|
||||
#
|
||||
|
||||
@ -38,6 +38,7 @@ class DmsfFilesControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_truth
|
||||
assert_kind_of Project, @project
|
||||
assert_kind_of DmsfFile, @file
|
||||
assert_kind_of Role, @role
|
||||
end
|
||||
|
||||
188
test/functional/dmsf_files_copy_controller_test.rb
Normal file
188
test/functional/dmsf_files_copy_controller_test.rb
Normal file
@ -0,0 +1,188 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine plugin for Document Management System "Features"
|
||||
#
|
||||
# Copyright (C) 2011-17 Karel Pičman <karel.picman@kontron.com>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
require File.expand_path('../../test_helper', __FILE__)
|
||||
|
||||
class DmsfFilesCopyControllerTest < RedmineDmsf::Test::TestCase
|
||||
include Redmine::I18n
|
||||
|
||||
fixtures :users, :dmsf_files, :dmsf_file_revisions,
|
||||
:custom_fields, :custom_values, :projects, :roles, :members, :member_roles,
|
||||
:enabled_modules, :dmsf_file_revisions, :dmsf_folders
|
||||
|
||||
def setup
|
||||
@project1 = Project.find_by_id 1
|
||||
@project2 = Project.find_by_id 2
|
||||
@project5 = Project.find_by_id 5
|
||||
assert_not_nil @project1
|
||||
@project1.enable_module! :dmsf
|
||||
@file1 = DmsfFile.find_by_id 1
|
||||
@folder1 = DmsfFolder.find_by_id 1
|
||||
@user_admin = User.find_by_id 1
|
||||
@user_member = User.find_by_id 2
|
||||
@user_non_member = User.find_by_id 3
|
||||
@role_manager = Role.where(:name => 'Manager').first
|
||||
User.current = nil
|
||||
@request.session[:user_id] = 2 # John Smith - manager
|
||||
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = File.expand_path '../../fixtures/files', __FILE__
|
||||
@project1.enable_module!(:dmsf)
|
||||
@role_manager.add_permission! :file_manipulation
|
||||
@role_manager.add_permission! :view_dmsf_folders
|
||||
end
|
||||
|
||||
def test_truth
|
||||
assert_kind_of Project, @project1
|
||||
assert_kind_of Project, @project2
|
||||
assert_kind_of Project, @project5
|
||||
assert_kind_of DmsfFile, @file1
|
||||
assert_kind_of DmsfFolder, @folder1
|
||||
assert_kind_of User, @user_admin
|
||||
assert_kind_of User, @user_member
|
||||
assert_kind_of User, @user_non_member
|
||||
assert_kind_of Role, @role_manager
|
||||
end
|
||||
|
||||
def test_authorize_admin
|
||||
@request.session[:user_id] = @user_admin.id
|
||||
get :new, :id => @file1.id
|
||||
assert_response :success
|
||||
assert_template 'new'
|
||||
end
|
||||
|
||||
def test_authorize_non_member
|
||||
@request.session[:user_id] = @user_non_member.id
|
||||
get :new, :id => @file1.id
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_authorize_member_no_module
|
||||
@project1.disable_module!(:dmsf)
|
||||
get :new, :id => @file1.id
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_authorize_forbidden
|
||||
@role_manager.remove_permission! :file_manipulation
|
||||
get :new, :id => @file1.id
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_target_folder
|
||||
get :new, :id => @file1.id, :target_folder_id => @folder1.id
|
||||
assert_response :success
|
||||
assert_template 'new'
|
||||
end
|
||||
|
||||
def test_target_folder_forbidden
|
||||
@role_manager.remove_permission! :view_dmsf_folders
|
||||
get :new, :id => @file1.id, :target_folder_id => @folder1.id
|
||||
assert_response :not_found
|
||||
end
|
||||
|
||||
def test_target_project
|
||||
get :new, :id => @file1.id, :target_project_id => @project1.id
|
||||
assert_response :success
|
||||
assert_template 'new'
|
||||
end
|
||||
|
||||
def test_new
|
||||
get :new, :id => @file1.id
|
||||
assert_response :success
|
||||
assert_template 'new'
|
||||
end
|
||||
|
||||
def test_copy
|
||||
post :copy, :id => @file1.id, :target_project_id => @project1.id, :target_folder_id => @folder1.id
|
||||
assert_response :redirect
|
||||
assert_nil flash[:error]
|
||||
end
|
||||
|
||||
def test_copy_the_same_target
|
||||
post :copy, :id => @file1.id, :target_project_id => @file1.project.id, :target_folder_id => @file1.dmsf_folder
|
||||
assert_equal flash[:error], l(:error_target_folder_same)
|
||||
assert_redirected_to :action => 'new', :target_project_id => @file1.project.id, :target_folder_id => @file1.dmsf_folder
|
||||
end
|
||||
|
||||
def test_copy_to_locked_folder
|
||||
@folder1.lock!
|
||||
post :copy, :id => @file1.id, :target_project_id => @file1.project.id, :target_folder_id => @folder1.id
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_copy_to_dmsf_not_enabled
|
||||
post :copy, :id => @file1.id, :target_project_id => @project5.id, :target_folder_id => nil
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_copy_to_dmsf_enabled
|
||||
@project5.enable_module!(:dmsf)
|
||||
post :copy, :id => @file1.id, :target_project_id => @project5.id, :target_folder_id => nil
|
||||
assert_response :redirect
|
||||
assert_nil flash[:error]
|
||||
end
|
||||
|
||||
def test_copy_to_as_non_member
|
||||
post :copy, :id => @file1.id, :target_project_id => @project2.id, :target_folder_id => nil
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_move
|
||||
post :move, :id => @file1.id, :target_project_id => @project1.id, :target_folder_id => @folder1.id
|
||||
assert_response :redirect
|
||||
assert_nil flash[:error]
|
||||
end
|
||||
|
||||
def test_move_the_same_target
|
||||
post :move, :id => @file1.id, :target_project_id => @file1.project.id, :target_folder_id => @file1.dmsf_folder
|
||||
assert_equal flash[:error], l(:error_target_folder_same)
|
||||
assert_redirected_to :action => 'new', :target_project_id => @file1.project.id, :target_folder_id => @file1.dmsf_folder
|
||||
end
|
||||
|
||||
def test_move_to_locked
|
||||
@file1.lock!
|
||||
post :move, :id => @file1.id, :target_project_id => @file1.project.id, :target_folder_id => @folder1.id
|
||||
assert_response :redirect
|
||||
assert_equal l(:error_file_is_locked), flash[:error]
|
||||
end
|
||||
|
||||
def test_move_to_locked_folder
|
||||
@folder1.lock!
|
||||
post :move, :id => @file1.id, :target_project_id => @file1.project.id, :target_folder_id => @folder1.id
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_move_to_dmsf_not_enabled
|
||||
post :move, :id => @file1.id, :target_project_id => @project5.id, :target_folder_id => nil
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_move_to_dmsf_enabled
|
||||
@project5.enable_module!(:dmsf)
|
||||
post :move, :id => @file1.id, :target_project_id => @project5.id, :target_folder_id => nil
|
||||
assert_response :redirect
|
||||
assert_nil flash[:error]
|
||||
end
|
||||
|
||||
def test_move_to_as_non_member
|
||||
post :move, :id => @file1.id, :target_project_id => @project2.id, :target_folder_id => nil
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
end
|
||||
186
test/functional/dmsf_folders_copy_controller_test.rb
Normal file
186
test/functional/dmsf_folders_copy_controller_test.rb
Normal file
@ -0,0 +1,186 @@
|
||||
# encoding: utf-8
|
||||
#
|
||||
# Redmine plugin for Document Management System "Features"
|
||||
#
|
||||
# Copyright (C) 2011-17 Karel Pičman <karel.picman@kontron.com>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
require File.expand_path('../../test_helper', __FILE__)
|
||||
|
||||
class DmsfFoldersCopyControllerTest < RedmineDmsf::Test::TestCase
|
||||
include Redmine::I18n
|
||||
|
||||
fixtures :users, :projects, :roles, :members, :member_roles,:enabled_modules, :dmsf_folders
|
||||
|
||||
def setup
|
||||
@project1 = Project.find_by_id 1
|
||||
@project2 = Project.find_by_id 2
|
||||
@project5 = Project.find_by_id 5
|
||||
assert_not_nil @project1
|
||||
@project1.enable_module! :dmsf
|
||||
@folder1 = DmsfFolder.find_by_id 1
|
||||
@folder2 = DmsfFolder.find_by_id 2
|
||||
@folder6 = DmsfFolder.find_by_id 6
|
||||
@user_admin = User.find_by_id 1
|
||||
@user_member = User.find_by_id 2
|
||||
@user_non_member = User.find_by_id 3
|
||||
@role_manager = Role.where(:name => 'Manager').first
|
||||
User.current = nil
|
||||
@request.session[:user_id] = 2 # John Smith - manager
|
||||
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = File.expand_path '../../fixtures/files', __FILE__
|
||||
@project1.enable_module!(:dmsf)
|
||||
@role_manager.add_permission! :folder_manipulation
|
||||
@role_manager.add_permission! :view_dmsf_folders
|
||||
end
|
||||
|
||||
def test_truth
|
||||
assert_kind_of Project, @project1
|
||||
assert_kind_of Project, @project2
|
||||
assert_kind_of Project, @project5
|
||||
assert_kind_of DmsfFolder, @folder1
|
||||
assert_kind_of DmsfFolder, @folder2
|
||||
assert_kind_of DmsfFolder, @folder6
|
||||
assert_kind_of User, @user_admin
|
||||
assert_kind_of User, @user_member
|
||||
assert_kind_of User, @user_non_member
|
||||
assert_kind_of Role, @role_manager
|
||||
end
|
||||
|
||||
def test_authorize_admin
|
||||
@request.session[:user_id] = @user_admin.id
|
||||
get :new, :id => @folder1.id
|
||||
assert_response :success
|
||||
assert_template 'new'
|
||||
end
|
||||
|
||||
def test_authorize_non_member
|
||||
@request.session[:user_id] = @user_non_member.id
|
||||
get :new, :id => @folder1.id
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_authorize_member_no_module
|
||||
@project1.disable_module!(:dmsf)
|
||||
get :new, :id => @folder1.id
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_authorize_forbidden
|
||||
@role_manager.remove_permission! :folder_manipulation
|
||||
get :new, :id => @folder1.id
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_target_folder
|
||||
get :new, :id => @folder1.id, :target_folder_id => @folder2.id
|
||||
assert_response :success
|
||||
assert_template 'new'
|
||||
end
|
||||
|
||||
def test_target_folder_forbidden
|
||||
@role_manager.remove_permission! :view_dmsf_folders
|
||||
get :new, :id => @folder1.id, :target_folder_id => @folder2.id
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_target_project
|
||||
get :new, :id => @folder1.id, :target_project_id => @project1.id
|
||||
assert_response :success
|
||||
assert_template 'new'
|
||||
end
|
||||
|
||||
def test_new
|
||||
get :new, :id => @folder1.id
|
||||
assert_response :success
|
||||
assert_template 'new'
|
||||
end
|
||||
|
||||
def test_copy
|
||||
post :copy, :id => @folder1.id, :target_project_id => @project1.id, :target_folder_id => @folder6.id
|
||||
assert_response :redirect
|
||||
assert_nil flash[:error]
|
||||
end
|
||||
|
||||
def test_copy_the_same_target
|
||||
post :copy, :id => @folder1.id, :target_project_id => @folder1.project.id, :target_folder_id => @folder1.dmsf_folder
|
||||
assert_equal flash[:error], l(:error_target_folder_same)
|
||||
assert_redirected_to :action => 'new', :target_project_id => @folder1.project.id,
|
||||
:target_folder_id => @folder1.dmsf_folder
|
||||
end
|
||||
|
||||
def test_copy_to_locked_folder
|
||||
post :copy, :id => @folder1.id, :target_project_id => @folder1.project.id, :target_folder_id => @folder2.id
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_copy_to_dmsf_not_enabled
|
||||
post :copy, :id => @folder1.id, :target_project_id => @project5.id, :target_folder_id => nil
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_copy_to_dmsf_enabled
|
||||
@project5.enable_module!(:dmsf)
|
||||
post :copy, :id => @folder1.id, :target_project_id => @project5.id, :target_folder_id => nil
|
||||
assert_response :redirect
|
||||
assert_nil flash[:error]
|
||||
end
|
||||
|
||||
def test_copy_to_as_non_member
|
||||
post :copy, :id => @folder1.id, :target_project_id => @project2.id, :target_folder_id => nil
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_move
|
||||
post :move, :id => @folder1.id, :target_project_id => @project1.id, :target_folder_id => @folder6.id
|
||||
assert_response :redirect
|
||||
assert_nil flash[:error]
|
||||
end
|
||||
|
||||
def test_move_the_same_target
|
||||
post :move, :id => @folder1.id, :target_project_id => @folder1.project.id, :target_folder_id => @folder1.dmsf_folder
|
||||
assert_equal flash[:error], l(:error_target_folder_same)
|
||||
assert_redirected_to :action => 'new', :target_project_id => @folder1.project.id, :target_folder_id => @folder1.dmsf_folder
|
||||
end
|
||||
|
||||
def test_move_to_locked
|
||||
@folder1.lock!
|
||||
post :move, :id => @folder1.id, :target_project_id => @folder1.project.id, :target_folder_id => @folder2.id
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_move_to_locked_folder
|
||||
post :move, :id => @folder1.id, :target_project_id => @folder2.project.id, :target_folder_id => @folder2.id
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_move_to_dmsf_not_enabled
|
||||
post :move, :id => @folder1.id, :target_project_id => @project5.id, :target_folder_id => nil
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_move_to_dmsf_enabled
|
||||
@project5.enable_module!(:dmsf)
|
||||
post :move, :id => @folder1.id, :target_project_id => @project5.id, :target_folder_id => nil
|
||||
assert_response :redirect
|
||||
assert_nil flash[:error]
|
||||
end
|
||||
|
||||
def test_move_to_as_non_member
|
||||
post :move, :id => @folder1.id, :target_project_id => @project2.id, :target_folder_id => nil
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
end
|
||||
Loading…
x
Reference in New Issue
Block a user