From 3c1dfe62e40579c2487dca346c621b2fedd9120e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Pi=C4=8Dman?= Date: Mon, 18 Feb 2019 16:52:38 +0100 Subject: [PATCH] Rails 5 modules --- app/controllers/dmsf_controller.rb | 5 +- lib/dmsf_zip.rb | 81 ---------------------------- lib/redmine_dmsf/dmsf_zip.rb | 87 ++++++++++++++++++++++++++++++ 3 files changed, 90 insertions(+), 83 deletions(-) delete mode 100644 lib/dmsf_zip.rb create mode 100644 lib/redmine_dmsf/dmsf_zip.rb diff --git a/app/controllers/dmsf_controller.rb b/app/controllers/dmsf_controller.rb index 73b0f269..fa182284 100644 --- a/app/controllers/dmsf_controller.rb +++ b/app/controllers/dmsf_controller.rb @@ -21,6 +21,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. class DmsfController < ApplicationController + include RedmineDmsf::DmsfZip before_action :find_project before_action :authorize, :except => [:expand_folder] @@ -365,7 +366,7 @@ class DmsfController < ApplicationController end def email_entries(selected_folders, selected_files) - zip = DmsfZip.new + zip = Zip.new zip_entries(zip, selected_folders, selected_files) zipped_content = DmsfHelper.temp_dir.join(DmsfHelper.temp_filename('dmsf_email_sent_documents.zip')) @@ -408,7 +409,7 @@ class DmsfController < ApplicationController end def download_entries(selected_folders, selected_files) - zip = DmsfZip.new + zip = Zip.new zip_entries(zip, selected_folders, selected_files) zip.files.each do |f| audit = DmsfFileRevisionAccess.new diff --git a/lib/dmsf_zip.rb b/lib/dmsf_zip.rb deleted file mode 100644 index 2befcf62..00000000 --- a/lib/dmsf_zip.rb +++ /dev/null @@ -1,81 +0,0 @@ -# encoding: utf-8 -# -# Redmine plugin for Document Management System "Features" -# -# Copyright © 2011 Vít Jonáš -# Copyright © 2011-19 Karel Pičman -# -# 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 'zip' - -class DmsfZip - - attr_reader :files - - def initialize - @zip_path = DmsfHelper.temp_dir.join(DmsfHelper.temp_filename('dmsf_zip.zip')) - @zip_file = Zip::OutputStream.new(@zip_path) - @files = [] - @folders = [] - end - - def finish - @zip_file.close - @zip_path - end - - def close - @zip_file.close - end - - def add_file(file, member, root_path = nil) - unless @files.include?(file) - unless file && file.last_revision && File.exist?(file.last_revision.disk_file) - raise FileNotFound - end - string_path = file.dmsf_folder.nil? ? '' : (file.dmsf_folder.dmsf_path_str + File::SEPARATOR) - string_path = string_path[(root_path.length + 1) .. string_path.length] if root_path - if member && !member.dmsf_title_format.nil? && !member.dmsf_title_format.empty? - string_path += file.formatted_name(member.dmsf_title_format) - else - string_path += file.formatted_name(Setting.plugin_redmine_dmsf['dmsf_global_title_format']) - end - zip_entry = ::Zip::Entry.new(@zip_file, string_path, nil, nil, nil, nil, nil, nil, - ::Zip::DOSTime.at(file.last_revision.updated_at)) - @zip_file.put_next_entry(zip_entry) - File.open(file.last_revision.disk_file, 'rb') do |f| - while (buffer = f.read(8192)) - @zip_file.write(buffer) - end - end - @files << file - end - end - - def add_folder(folder, member, root_path = nil) - unless @folders.include?(folder) - string_path = folder.dmsf_path_str + File::SEPARATOR - string_path = string_path[(root_path.length + 1) .. string_path.length] if root_path - zip_entry = ::Zip::Entry.new(@zip_file, string_path, nil, nil, nil, nil, nil, nil, - ::Zip::DOSTime.at(folder.modified)) - @zip_file.put_next_entry(zip_entry) - @folders << folder - folder.dmsf_folders.visible.each { |subfolder| add_folder(subfolder, member, root_path) } - folder.dmsf_files.visible.each { |file| add_file(file, member, root_path) } - end - end - -end \ No newline at end of file diff --git a/lib/redmine_dmsf/dmsf_zip.rb b/lib/redmine_dmsf/dmsf_zip.rb new file mode 100644 index 00000000..19812f1f --- /dev/null +++ b/lib/redmine_dmsf/dmsf_zip.rb @@ -0,0 +1,87 @@ +# encoding: utf-8 +# +# Redmine plugin for Document Management System "Features" +# +# Copyright © 2011 Vít Jonáš +# Copyright © 2011-19 Karel Pičman +# +# 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 'zip' + +module RedmineDmsf + module DmsfZip + + class Zip + + attr_reader :files + + def initialize + @zip_path = DmsfHelper.temp_dir.join(DmsfHelper.temp_filename('dmsf_zip.zip')) + @zip_file = ::Zip::OutputStream.new(@zip_path) + @files = [] + @folders = [] + end + + def finish + @zip_file.close + @zip_path + end + + def close + @zip_file.close + end + + def add_file(file, member, root_path = nil) + unless @files.include?(file) + unless file && file.last_revision && File.exist?(file.last_revision.disk_file) + raise FileNotFound + end + string_path = file.dmsf_folder.nil? ? '' : (file.dmsf_folder.dmsf_path_str + File::SEPARATOR) + string_path = string_path[(root_path.length + 1) .. string_path.length] if root_path + if member && !member.dmsf_title_format.nil? && !member.dmsf_title_format.empty? + string_path += file.formatted_name(member.dmsf_title_format) + else + string_path += file.formatted_name(Setting.plugin_redmine_dmsf['dmsf_global_title_format']) + end + zip_entry = ::Zip::Entry.new(@zip_file, string_path, nil, nil, nil, nil, nil, nil, + ::Zip::DOSTime.at(file.last_revision.updated_at)) + @zip_file.put_next_entry(zip_entry) + File.open(file.last_revision.disk_file, 'rb') do |f| + while (buffer = f.read(8192)) + @zip_file.write(buffer) + end + end + @files << file + end + end + + def add_folder(folder, member, root_path = nil) + unless @folders.include?(folder) + string_path = folder.dmsf_path_str + File::SEPARATOR + string_path = string_path[(root_path.length + 1) .. string_path.length] if root_path + zip_entry = ::Zip::Entry.new(@zip_file, string_path, nil, nil, nil, nil, nil, nil, + ::Zip::DOSTime.at(folder.modified)) + @zip_file.put_next_entry(zip_entry) + @folders << folder + folder.dmsf_folders.visible.each { |subfolder| add_folder(subfolder, member, root_path) } + folder.dmsf_files.visible.each { |file| add_file(file, member, root_path) } + end + end + + end + + end +end \ No newline at end of file