#183 Upload a new version via a link
This commit is contained in:
parent
d8390053f3
commit
cff23b0153
@ -202,7 +202,7 @@ class DmsfController < ApplicationController
|
||||
end
|
||||
begin
|
||||
DmsfMailer.get_notify_users(User.current, deleted_files).each do |u|
|
||||
DmsfMailer.files_deleted(u, deleted_files).deliver
|
||||
DmsfMailer.files_deleted(u, @project, deleted_files).deliver
|
||||
end
|
||||
rescue Exception => e
|
||||
Rails.logger.error "Could not send email notifications: #{e.message}"
|
||||
|
||||
@ -82,7 +82,7 @@ class DmsfFilesController < ApplicationController
|
||||
@revision.minor_version = last_revision.minor_version
|
||||
version = params[:version].to_i
|
||||
file_upload = params[:file_upload]
|
||||
if file_upload.nil?
|
||||
unless file_upload
|
||||
@revision.disk_filename = last_revision.disk_filename
|
||||
@revision.increase_version(version, false)
|
||||
@revision.mime_type = last_revision.mime_type
|
||||
@ -119,7 +119,7 @@ class DmsfFilesController < ApplicationController
|
||||
log_activity('new revision')
|
||||
begin
|
||||
DmsfMailer.get_notify_users(User.current, [@file]).each do |u|
|
||||
DmsfMailer.files_updated(u, [@file]).deliver
|
||||
DmsfMailer.files_updated(u, @project, [@file]).deliver
|
||||
end
|
||||
rescue Exception => e
|
||||
logger.error "Could not send email notifications: #{e.message}"
|
||||
@ -137,7 +137,7 @@ class DmsfFilesController < ApplicationController
|
||||
log_activity('deleted')
|
||||
begin
|
||||
DmsfMailer.get_notify_users(User.current, [@file]).each do |u|
|
||||
DmsfMailer.files_deleted(u, [@file]).deliver
|
||||
DmsfMailer.files_deleted(u, @project, [@file]).deliver
|
||||
end
|
||||
rescue Exception => e
|
||||
Rails.logger.error "Could not send email notifications: #{e.message}"
|
||||
|
||||
@ -85,16 +85,21 @@ class DmsfUploadController < ApplicationController
|
||||
files = []
|
||||
failed_uploads = []
|
||||
commited_files.each_value do |commited_file|
|
||||
name = commited_file['name'];
|
||||
name = commited_file[:name]
|
||||
|
||||
new_revision = DmsfFileRevision.new
|
||||
file = DmsfFile.visible.find_file_by_name(@project, @folder, name)
|
||||
if file.nil?
|
||||
unless file
|
||||
link = DmsfLink.find_link_by_file_name(@project, @folder, name)
|
||||
file = link.target_file if link
|
||||
end
|
||||
|
||||
unless file
|
||||
file = DmsfFile.new
|
||||
file.project = @project
|
||||
file.name = name
|
||||
file.folder = @folder
|
||||
file.notification = Setting.plugin_redmine_dmsf['dmsf_default_notifications'].present?
|
||||
file.notification = Setting.plugin_redmine_dmsf[:dmsf_default_notifications].present?
|
||||
|
||||
new_revision.minor_version = 0
|
||||
new_revision.major_version = 0
|
||||
@ -109,17 +114,17 @@ class DmsfUploadController < ApplicationController
|
||||
new_revision.minor_version = last_revision.minor_version
|
||||
end
|
||||
|
||||
commited_disk_filepath = "#{DmsfHelper.temp_dir}/#{commited_file['disk_filename'].gsub(/[\/\\]/,'')}"
|
||||
commited_disk_filepath = "#{DmsfHelper.temp_dir}/#{commited_file[:disk_filename].gsub(/[\/\\]/,'')}"
|
||||
|
||||
new_revision.project = @project
|
||||
new_revision.folder = @folder
|
||||
new_revision.project = link ? link.target_project : @project
|
||||
new_revision.folder = link ? link.target_folder : @folder
|
||||
new_revision.file = file
|
||||
new_revision.user = User.current
|
||||
new_revision.name = name
|
||||
new_revision.title = commited_file['title']
|
||||
new_revision.description = commited_file['description']
|
||||
new_revision.comment = commited_file['comment']
|
||||
new_revision.increase_version(commited_file['version'].to_i, true)
|
||||
new_revision.title = commited_file[:title]
|
||||
new_revision.description = commited_file[:description]
|
||||
new_revision.comment = commited_file[:comment]
|
||||
new_revision.increase_version(commited_file[:version].to_i, true)
|
||||
new_revision.mime_type = Redmine::MimeType.of(new_revision.name)
|
||||
new_revision.size = File.size(commited_disk_filepath)
|
||||
|
||||
@ -142,8 +147,8 @@ class DmsfUploadController < ApplicationController
|
||||
|
||||
# Need to save file first to generate id for it in case of creation.
|
||||
# File id is needed to properly generate revision disk filename
|
||||
if commited_file['dmsf_file_revision'].present?
|
||||
commited_file['dmsf_file_revision']['custom_field_values'].each_with_index do |v, i|
|
||||
if commited_file[:dmsf_file_revision].present?
|
||||
commited_file[:dmsf_file_revision][:custom_field_values].each_with_index do |v, i|
|
||||
new_revision.custom_field_values[i].value = v[1]
|
||||
end
|
||||
end
|
||||
@ -170,7 +175,7 @@ class DmsfUploadController < ApplicationController
|
||||
files.each { |file| log_activity(file, 'uploaded') if file }
|
||||
begin
|
||||
DmsfMailer.get_notify_users(User.current, files).each do |u|
|
||||
DmsfMailer.files_updated(u, files).deliver
|
||||
DmsfMailer.files_updated(u, @project, files).deliver
|
||||
end
|
||||
rescue Exception => e
|
||||
Rails.logger.error "Could not send email notifications: #{e.message}"
|
||||
|
||||
@ -85,12 +85,11 @@ class DmsfFile < ActiveRecord::Base
|
||||
visible.where(:project_id => project.id, :dmsf_folder_id => nil).order('name ASC')
|
||||
end
|
||||
|
||||
def self.find_file_by_name(project, folder, name)
|
||||
if folder
|
||||
visible.where(:project_id => project, :dmsf_folder_id => folder.id, :name => name).first
|
||||
else
|
||||
visible.where(:project_id => project, :dmsf_folder_id => nil, :name => name).first
|
||||
end
|
||||
def self.find_file_by_name(project, folder, name)
|
||||
where(
|
||||
:project_id => project,
|
||||
:dmsf_folder_id => folder ? folder.id : nil,
|
||||
:name => name).visible.first
|
||||
end
|
||||
|
||||
def last_revision
|
||||
|
||||
@ -58,5 +58,16 @@ class DmsfLink < ActiveRecord::Base
|
||||
def title
|
||||
self.name
|
||||
end
|
||||
|
||||
def self.find_link_by_file_name(project, folder, filename)
|
||||
links = DmsfLink.where(
|
||||
:project_id => project.id,
|
||||
:dmsf_folder_id => folder ? folder.id : nil,
|
||||
:target_type => DmsfFile.model_name).visible.all
|
||||
links.each do |link|
|
||||
return link if link.target_file.name == filename
|
||||
end
|
||||
nil
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@ -22,9 +22,8 @@ require 'mailer'
|
||||
class DmsfMailer < Mailer
|
||||
layout 'mailer'
|
||||
|
||||
def files_updated(user, files)
|
||||
if user && files.count > 0
|
||||
project = files[0].project
|
||||
def files_updated(user, project, files)
|
||||
if user && project && files.count > 0
|
||||
files = files.select { |file| file.notify? }
|
||||
|
||||
redmine_headers 'Project' => project.identifier if project
|
||||
@ -38,9 +37,8 @@ class DmsfMailer < Mailer
|
||||
end
|
||||
end
|
||||
|
||||
def files_deleted(user, files)
|
||||
if user && files.count > 0
|
||||
project = files[0].project
|
||||
def files_deleted(user, project, files)
|
||||
if user && files.count > 0
|
||||
files = files.select { |file| file.notify? }
|
||||
|
||||
redmine_headers 'Project' => project.identifier if project
|
||||
@ -85,8 +83,9 @@ class DmsfMailer < Mailer
|
||||
end
|
||||
|
||||
def self.get_notify_users(user, files)
|
||||
return [] if files.empty?
|
||||
project = files[0].project
|
||||
notify_files = files.select { |file| file.notify? }
|
||||
return [] if notify_files.empty?
|
||||
project = notify_files[0].project
|
||||
notify_members = project.members
|
||||
notify_members = notify_members.select do |notify_member|
|
||||
notify_user = notify_member.user
|
||||
|
||||
@ -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
|
||||
@ -38,12 +38,12 @@ class DmsfUpload
|
||||
|
||||
def self.create_from_uploaded_file(project, folder, uploaded_file)
|
||||
uploaded = {
|
||||
'disk_filename' => DmsfHelper.temp_filename(uploaded_file.original_filename),
|
||||
'content_type' => uploaded_file.content_type.to_s,
|
||||
'original_filename' => uploaded_file.original_filename,
|
||||
:disk_filename => DmsfHelper.temp_filename(uploaded_file.original_filename),
|
||||
:content_type => uploaded_file.content_type.to_s,
|
||||
:original_filename => uploaded_file.original_filename,
|
||||
}
|
||||
|
||||
File.open("#{DmsfHelper.temp_dir}/#{uploaded["disk_filename"]}", "wb") do |f|
|
||||
File.open("#{DmsfHelper.temp_dir}/#{uploaded[:disk_filename]}", 'wb') do |f|
|
||||
while (buffer = uploaded_file.read(8192))
|
||||
f.write(buffer)
|
||||
end
|
||||
@ -52,15 +52,19 @@ class DmsfUpload
|
||||
end
|
||||
|
||||
def initialize(project, folder, uploaded)
|
||||
@name = uploaded['original_filename']
|
||||
@name = uploaded[:original_filename]
|
||||
|
||||
dmsf_file = DmsfFile.visible.find_file_by_name(project, folder, @name)
|
||||
file = DmsfFile.find_file_by_name(project, folder, @name)
|
||||
unless file
|
||||
link = DmsfLink.find_link_by_file_name(project, folder, @name)
|
||||
file = link.target_file if link
|
||||
end
|
||||
|
||||
@disk_filename = uploaded['disk_filename']
|
||||
@mime_type = uploaded['content_type']
|
||||
@disk_filename = uploaded[:disk_filename]
|
||||
@mime_type = uploaded[:content_type]
|
||||
@size = File.size(disk_file)
|
||||
|
||||
if dmsf_file.nil? || dmsf_file.last_revision.nil?
|
||||
if file.nil? || file.last_revision.nil?
|
||||
@title = DmsfFileRevision.filename_to_title(@name)
|
||||
@description = nil
|
||||
@major_version = 0
|
||||
@ -68,24 +72,24 @@ class DmsfUpload
|
||||
@workflow = nil
|
||||
@custom_values = DmsfFileRevision.new(:file => DmsfFile.new(:project => @project)).custom_field_values
|
||||
else
|
||||
last_revision = dmsf_file.last_revision
|
||||
last_revision = file.last_revision
|
||||
@title = last_revision.title
|
||||
@description = last_revision.description
|
||||
@major_version = last_revision.major_version
|
||||
@minor_version = last_revision.minor_version
|
||||
@workflow = last_revision.workflow
|
||||
@custom_values = Array.new(dmsf_file.last_revision.custom_values)
|
||||
@custom_values = Array.new(file.last_revision.custom_values)
|
||||
|
||||
# Add default value for CFs not existing
|
||||
present_custom_fields = dmsf_file.last_revision.custom_values.collect(&:custom_field).uniq
|
||||
dmsf_file.last_revision.available_custom_fields.each do |cf|
|
||||
present_custom_fields = file.last_revision.custom_values.collect(&:custom_field).uniq
|
||||
file.last_revision.available_custom_fields.each do |cf|
|
||||
unless present_custom_fields.include?(cf)
|
||||
@custom_values << CustomValue.new({:custom_field => cf, :value => cf.default_value}) if cf.default_value
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@locked = dmsf_file && dmsf_file.locked_for_user?
|
||||
@locked = file && file.locked_for_user?
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
@ -26,8 +26,8 @@
|
||||
<% if @file.locked_for_user? %>
|
||||
<p class="warning"><%= l(:info_file_locked) %></p>
|
||||
<% else %>
|
||||
<%= form_for(@revision, :url => {:action => 'create_revision', :id => @file},
|
||||
:html => {:method=>:post, :multipart => true, :id => 'new_revision_form'}) do |f| %>
|
||||
<%= form_for(@revision, :url => { :action => 'create_revision', :id => @file },
|
||||
:html => { :method => :post, :multipart => true, :id => 'new_revision_form' }) do |f| %>
|
||||
<div class="clear">
|
||||
<div class="splitcontentleft">
|
||||
<p>
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
<%#=
|
||||
# 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
|
||||
@ -25,7 +25,7 @@
|
||||
<div class="splitcontentleft">
|
||||
<p>
|
||||
<%= label_tag("commited_files[#{i}][title]", "#{l(:label_title)}:") %>
|
||||
<%= text_field_tag("commited_files[#{i}][title]", upload.title, :size => '32') %>
|
||||
<%= text_field_tag("commited_files[#{i}][title]", upload.title, :size => 32) %>
|
||||
</p>
|
||||
</div>
|
||||
<div class="splitcontentright">
|
||||
@ -40,7 +40,7 @@
|
||||
<%= label_tag("commited_files[#{i}][description]", "#{l(:label_description)}:") %>
|
||||
</p>
|
||||
<div class="wiki data clear">
|
||||
<%= text_area_tag("commited_files[#{i}][description]", upload.description, :rows=> '6', :class => 'wiki-edit') %>
|
||||
<%= text_area_tag("commited_files[#{i}][description]", upload.description, :rows=> 6, :class => 'wiki-edit') %>
|
||||
</div>
|
||||
<div class="splitcontentleft">
|
||||
<p>
|
||||
@ -69,10 +69,10 @@
|
||||
<% end %>
|
||||
<p>
|
||||
<%= label_tag("commited_files[#{i}][comment]", "#{l(:label_comment)}:") %>
|
||||
<div class="data">
|
||||
<%= text_area_tag("commited_files[#{i}][comment]", upload.comment, :rows=> '2', :style => 'width: 99%;') %>
|
||||
</div>
|
||||
</p>
|
||||
<div class="data">
|
||||
<%= text_area_tag("commited_files[#{i}][comment]", upload.comment, :rows => 2, :style => 'width: 99%;') %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<%= wikitoolbar_for "commited_files_#{i}_description" %>
|
||||
|
||||
@ -102,38 +102,44 @@ class DmsfLinksTest < RedmineDmsf::Test::UnitTest
|
||||
assert_equal 1, @folder_link.target_folder_id
|
||||
end
|
||||
|
||||
def target_folder
|
||||
def test_target_folder
|
||||
assert_equal @folder2, @file_link.target_folder
|
||||
assert_equal @folder1, @folder_link.target_folder
|
||||
end
|
||||
|
||||
def target_file_id
|
||||
def test_target_file_id
|
||||
assert_equal 4, @file_link.target_file_id
|
||||
assert_nil @folder_link.target_file
|
||||
end
|
||||
|
||||
def target_file
|
||||
def test_target_file
|
||||
assert_equal @file4, @file_link.target_file
|
||||
assert_nil @folder_link.target_file
|
||||
end
|
||||
|
||||
def target_project
|
||||
assert_equal @project, @file_link.target_project
|
||||
assert_equal @project, @folder_link.target_project
|
||||
def test_target_project
|
||||
assert_equal @project1, @file_link.target_project
|
||||
assert_equal @project1, @folder_link.target_project
|
||||
end
|
||||
|
||||
def folder
|
||||
def test_folder
|
||||
assert_equal @folder1, @file_link.folder
|
||||
assert_nil @folder_link.folder
|
||||
end
|
||||
|
||||
def title
|
||||
def test_title
|
||||
assert_equal @file_link.name, @file_link.title
|
||||
assert_equal @folder_link.name, @folder_link.title
|
||||
end
|
||||
|
||||
def test_find_link_by_file_name
|
||||
assert_equal @file_link,
|
||||
DmsfLink.find_link_by_file_name(@file_link.project, @file_link.folder, @file_link.target_file.name)
|
||||
end
|
||||
|
||||
def test_destroy
|
||||
@folder_link.destroy
|
||||
assert_nil DmsfLink.find_by_id 1
|
||||
end
|
||||
|
||||
end
|
||||
Loading…
x
Reference in New Issue
Block a user