Entries operations for symbolic links

This commit is contained in:
Karel Picman 2014-03-21 08:14:58 +01:00
parent b92a36429e
commit 58eda96713
5 changed files with 36 additions and 53 deletions

View File

@ -1,8 +1,8 @@
# Redmine plugin for Document Management System "Features"
#
# Copyright (C) 2011 Vít Jonáš <vit.jonas@gmail.com>
# Copyright (C) 2012 Daniel Munn <dan.munn@munnster.co.uk>
# Copyright (C) 2013 Karel Pičman <karel.picman@kontron.com>
# Copyright (C) 2011 Vít Jonáš <vit.jonas@gmail.com>
# Copyright (C) 2012 Daniel Munn <dan.munn@munnster.co.uk>
# Copyright (C) 2011-14 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
@ -26,7 +26,7 @@ class DmsfController < ApplicationController
class FileNotFound < StandardError; end
before_filter :find_project
before_filter :authorize, :except => [:delete_entries]
before_filter :authorize
before_filter :find_folder, :except => [:new, :create, :edit_root, :save_root]
before_filter :find_parent, :only => [:new, :create]
@ -119,15 +119,7 @@ class DmsfController < ApplicationController
flash[:error] = e.message
end
def entries_operation
# Tag filter
if params[:dmsf_folder] && params[:dmsf_folder][:custom_field_values].present?
redirect_to dmsf_folder_path(
:id => @project,
:custom_field_id => params[:dmsf_folder][:custom_field_values].first[0],
:custom_value => params[:dmsf_folder][:custom_field_values].first[1])
return
end
def entries_operation
# Download/Email
selected_folders = params[:subfolders].present? ? params[:subfolders] : []
selected_files = params[:files].present? ? params[:files] : []
@ -171,6 +163,18 @@ class DmsfController < ApplicationController
rescue DmsfAccessError
render_403
end
def tag_changed
# Tag filter
if params[:dmsf_folder] && params[:dmsf_folder][:custom_field_values].present?
redirect_to dmsf_folder_path(
:id => @project,
:custom_field_id => params[:dmsf_folder][:custom_field_values].first[0],
:custom_value => params[:dmsf_folder][:custom_field_values].first[1])
else
redirect_to :back
end
end
def entries_email
@email_params = params[:email]
@ -313,8 +317,8 @@ class DmsfController < ApplicationController
end
end
def delete
check_project(@delete_folder = DmsfFolder.visible.find(params[:delete_folder_id]))
def delete
@delete_folder = DmsfFolder.visible.find(params[:delete_folder_id])
if @delete_folder
if @delete_folder.delete
flash[:notice] = l(:notice_folder_deleted)
@ -465,14 +469,14 @@ class DmsfController < ApplicationController
def zip_entries(zip, selected_folders, selected_files)
if selected_folders && selected_folders.is_a?(Array)
selected_folders.each do |selected_folder_id|
check_project(folder = DmsfFolder.visible.find(selected_folder_id))
selected_folders.each do |selected_folder_id|
folder = DmsfFolder.visible.find(selected_folder_id)
zip.add_folder(folder, (@folder.dmsf_path_str if @folder)) if folder
end
end
if selected_files && selected_files.is_a?(Array)
selected_files.each do |selected_file_id|
check_project(file = DmsfFile.visible.find(selected_file_id))
selected_files.each do |selected_file_id|
file = DmsfFile.visible.find(selected_file_id)
if file && file.last_revision && File.exists?(file.last_revision.disk_file)
zip.add_file(file, (@folder.dmsf_path_str if @folder)) if file
else
@ -487,34 +491,22 @@ class DmsfController < ApplicationController
zip
end
def find_project
@project = Project.find(params[:id])
end
def find_folder
@folder = DmsfFolder.visible.find(params[:folder_id]) if params.keys.include?('folder_id')
check_project(@folder)
@folder = DmsfFolder.visible.find(params[:folder_id]) if params.keys.include?('folder_id')
rescue DmsfAccessError
render_403
end
def find_parent
@parent = DmsfFolder.visible.find(params[:parent_id]) if params.keys.include?('parent_id')
check_project(@parent)
@parent = DmsfFolder.visible.find(params[:parent_id]) if params.keys.include?('parent_id')
rescue DmsfAccessError
render_403
end
def check_project(entry)
if entry && entry.project != @project
raise DmsfAccessError, l(:error_entry_project_does_not_match_current_project)
end
end
def copy_folder(folder)
copy = folder.clone
copy.id = folder.id
copy
end
end
end

View File

@ -201,22 +201,11 @@ class DmsfUploadController < ApplicationController
def log_activity(file, action)
Rails.logger.info "#{Time.now.strftime('%Y-%m-%d %H:%M:%S')} #{User.current.login}@#{request.remote_ip}/#{request.env['HTTP_X_FORWARDED_FOR']}: #{action} dmsf://#{file.project.identifier}/#{file.id}/#{file.last_revision.id}"
end
def find_project
@project = Project.find(params[:id])
end
def find_folder
@folder = DmsfFolder.visible.find(params[:folder_id]) if params.keys.include?('folder_id')
check_project(@folder)
@folder = DmsfFolder.visible.find(params[:folder_id]) if params.keys.include?('folder_id')
rescue DmsfAccessError
render_403
end
def check_project(entry)
if entry && entry.project != @project
raise DmsfAccessError, l(:error_entry_project_does_not_match_current_project)
end
end
end
end

View File

@ -198,12 +198,13 @@
<script type="text/javascript">
$('#entries_delete_button').click(function() {
if(window.confirm("<%= l(:text_are_you_sure) %>")) {
$('#entries_form').attr('action', "<%= url_for(:action => :delete_entries, :id => @project, :folder_id => @folder) %>");
$('#entries_form').attr('action', "<%= delete_entries_path(:id => @project, :folder_id => @folder) %>");
$('#entries_form').submit();
}
});
$('.list_cf').change(function() {
$('#entries_form').attr('action', "<%= tag_changed_path(:id => @project, :folder_id => @folder) %>");
$('#entries_form').submit();
});

View File

@ -32,7 +32,8 @@ RedmineApp::Application.routes.draw do
post '/projects/:id/dmsf/save', :controller => 'dmsf', :action => 'save'
post '/projects/:id/dmsf/save/root', :controller => 'dmsf', :action => 'save_root'
post '/projects/:id/dmsf/entries', :controller => 'dmsf', :action => 'entries_operation'
post '/projects/:id/dmsf/entries/delete', :controller => 'dmsf', :action => 'delete_entries'
post '/projects/:id/dmsf/tag_changed', :controller => 'dmsf', :action => 'tag_changed', :as => 'tag_changed'
post '/projects/:id/dmsf/entries/delete', :controller => 'dmsf', :action => 'delete_entries', :as => 'delete_entries'
post '/projects/:id/dmsf/entries/email', :controller => 'dmsf', :action => 'entries_email'
get '/projects/:id/dmsf/entries/download_email_entries', :controller => 'dmsf', :action => 'download_email_entries', :as => 'download_email_entries'
get '/projects/:id/dmsf/lock', :controller => 'dmsf', :action => 'lock', :as => 'lock_dmsf'

View File

@ -58,13 +58,13 @@ Redmine::Plugin.register :redmine_dmsf do
permission :user_preferences,
{:dmsf_state => [:user_pref_save]}
permission :view_dmsf_files,
{:dmsf => [:entries_operation, :entries_email, :download_email_entries],
{:dmsf => [:entries_operation, :entries_email, :download_email_entries, :tag_changed],
:dmsf_files => [:show],
:dmsf_files_copy => [:new, :create, :move],
:dmsf_workflows => [:log]},
:read => true
permission :folder_manipulation,
{:dmsf => [:new, :create, :delete, :edit, :save, :edit_root, :save_root, :lock, :unlock, :notify_activate, :notify_deactivate]}
{:dmsf => [:new, :create, :delete, :edit, :save, :edit_root, :save_root, :lock, :unlock, :notify_activate, :notify_deactivate, :delete_entries]}
permission :file_manipulation,
{:dmsf_files => [:create_revision, :delete, :lock, :unlock, :delete_revision, :notify_activate, :notify_deactivate],
:dmsf_upload => [:upload_files, :upload_file, :commit_files],